diff --git a/klp-ui/src/views/cost/components/AnomalyAnalysis.vue b/klp-ui/src/views/cost/components/AnomalyAnalysis.vue new file mode 100644 index 000000000..705c7a8cc --- /dev/null +++ b/klp-ui/src/views/cost/components/AnomalyAnalysis.vue @@ -0,0 +1,640 @@ + + + + + diff --git a/klp-ui/src/views/cost/comprehensive.vue b/klp-ui/src/views/cost/comprehensive.vue index 1719a2926..4afc366f3 100644 --- a/klp-ui/src/views/cost/comprehensive.vue +++ b/klp-ui/src/views/cost/comprehensive.vue @@ -22,6 +22,7 @@ 保存 列配置 价格管理 + 异常分析 {{ inputMode ? '录入' : '查看' }} @@ -39,7 +40,7 @@
{{ col.itemName }}{{ col.unit ? '('+col.unit+')' : '' }}
@@ -334,6 +338,7 @@ import { listAuxiliaryConsume, addAuxiliaryConsume, updateAuxiliaryConsume } fro import { listProductionLine } from "@/api/wms/productionLine" import { listRollGrindAll } from "@/api/mes/roll/rollGrind" import { listEnergyRecord, addEnergyRecord, updateEnergyRecord } from "@/api/ems/energyRecord" +import AnomalyAnalysis from "./components/AnomalyAnalysis" function parseDateRange(detailDate) { const d = (detailDate || '').slice(0, 10) @@ -444,6 +449,7 @@ registerBackfillHandler('能耗', async (queryCondition, row, col, report, shift export default { name: "CostComprehensive", + components: { AnomalyAnalysis }, data() { return { loading: false, list: [], tabs: [], total: 0, sel: 0, selIds: [], showSearch: true, @@ -465,7 +471,8 @@ export default { inputMode: false, priceOpen: false, priceList: [], priceSaving: false, backfilling: false, - progressOpen: false, progressTitle: '', progressTasks: [] + progressOpen: false, progressTitle: '', progressTasks: [], + anomalyOpen: false, anomalyMap: {} } }, computed: { @@ -1060,6 +1067,27 @@ export default { else return row.lineType || '-' } }, + onAnomalyFound(list) { + const map = {} + list.forEach(a => { + // Normalize date to yyyy-MM-dd string + const dt = (a.detailDate || '').slice(0, 10) + if (!dt) return + if (!map[dt]) map[dt] = new Set() + map[dt].add(String(a.itemId)) + }) + this.anomalyMap = map + this.anomalyOpen = false + this.$forceUpdate() + this.$modal.msgSuccess(`已将 ${list.length} 条异常数据标记到表格`) + }, + isAnomalyCell(detailDate, itemId) { + if (!detailDate) return false + const dt = (detailDate || '').slice ? detailDate.slice(0, 10) : String(detailDate).slice(0, 10) + const set = this.anomalyMap[dt] + if (!set) return false + return set.has(String(itemId)) + }, async loadItems() { if (!this.allItems.length) { const r = await listItem({ pageNum:1, pageSize:999 }); this.allItems = r.rows || [] } }, async loadAllMetrics(rid) { const q = { pageNum:1, pageSize:99999 }; if (rid) q.reportId = rid @@ -1113,4 +1141,5 @@ export default { .ica-fetch { color: #409eff; } .ica-backfill { color: #67c23a; margin-right: 1px; } .ica:hover { opacity: 0.7; } +/deep/ .anomaly-input .el-input__inner { background: #fef0f0 !important; border-color: #f56c6c !important; }