feat(cost+wms): 新增生产指标标签功能并优化钢卷成本展示
1. 为生产指标实体、BO、VO新增tags标签字段并完善MyBatis映射 2. 在生产指标查询中添加标签模糊筛选条件 3. 新增生产指标计算结果API接口 4. 优化成本综合页面:支持标签字段的增改查,新增指标结果批量保存逻辑 5. 移除废弃的costDataService文件,重构钢卷详情页成本展示模块,新增加工路径可视化和吨钢成本计算展示 6. 注释并禁用了原有的检验任务相关代码逻辑
This commit is contained in:
@@ -180,6 +180,7 @@
|
||||
<el-table :data="mgrList" border stripe size="mini">
|
||||
<el-table-column label="名称" prop="metricName" width="150" />
|
||||
<el-table-column label="公式" prop="metricFormula" min-width="200" />
|
||||
<el-table-column label="标签" prop="tags" width="100" />
|
||||
<el-table-column label="单位" prop="remark" width="70" />
|
||||
<el-table-column label="操作" width="100">
|
||||
<template slot-scope="s">
|
||||
@@ -206,6 +207,7 @@
|
||||
</template>
|
||||
</div>
|
||||
<el-form-item label="单位"><el-input v-model="defForm.unit" placeholder="如 %" /></el-form-item>
|
||||
<el-form-item label="标签"><el-input v-model="defForm.tags" placeholder="请输入标签" /></el-form-item>
|
||||
<el-form-item label="使用单价"><el-switch v-model="defForm.usePrice" :active-value="1" :inactive-value="0" /></el-form-item>
|
||||
<el-form-item label="单价"><el-input v-model="defForm.metricValue" type="number" placeholder="请输入单价" /></el-form-item>
|
||||
</el-form>
|
||||
@@ -324,6 +326,7 @@
|
||||
import { listProdReport, getProdReport, addProdReport, updateProdReport, delProdReport, copyProdReport } from "@/api/cost/prodReport"
|
||||
import { listProdDetail, batchSaveProdDetail } from "@/api/cost/prodDetail"
|
||||
import { listProdMetric, addProdMetric, updateProdMetric, delProdMetric, getProdMetric } from "@/api/cost/prodMetric"
|
||||
import { listProdMetricResult, batchSaveProdMetricResult } from "@/api/cost/prodMetricResult"
|
||||
import { listItem } from "@/api/cost/item"
|
||||
import { listLightPendingAction } from "@/api/wms/pendingAction"
|
||||
import { getCoilStatisticsList } from "@/api/wms/coil"
|
||||
@@ -608,7 +611,7 @@ export default {
|
||||
},
|
||||
doPickMetric() {
|
||||
this.selMp.forEach(m => {
|
||||
this.allCols.push({ $type: 'metric', metricId: m.metricId, metricName: m.metricName, metricFormula: m.metricFormula, unit: m.remark||'', isShift: false, color: null, metricValue: m.metricValue, usePrice: m.usePrice })
|
||||
this.allCols.push({ $type: 'metric', metricId: m.metricId, metricName: m.metricName, metricFormula: m.metricFormula, unit: m.remark||'', tags: m.tags || '', isShift: false, color: null, metricValue: m.metricValue, usePrice: m.usePrice })
|
||||
})
|
||||
this.metricPickOpen = false
|
||||
},
|
||||
@@ -618,15 +621,15 @@ export default {
|
||||
this.mgrList = this._allMetricDefs || []
|
||||
this.mgrOpen = true
|
||||
},
|
||||
addMetricDef() { this.defForm = { metricId: null, metricName: '', metricFormula: '', unit: '', usePrice: 0, metricValue: '' }; this.defTitle = '新增指标'; this.defOpen = true },
|
||||
editMetricDef(row) { this.defForm = { metricId: row.metricId, metricName: row.metricName, metricFormula: row.metricFormula, unit: row.remark||'', usePrice: row.usePrice || 0, metricValue: row.metricValue || '' }; this.defTitle = '编辑指标'; this.defOpen = true },
|
||||
addMetricDef() { this.defForm = { metricId: null, metricName: '', metricFormula: '', unit: '', tags: '', usePrice: 0, metricValue: '' }; this.defTitle = '新增指标'; this.defOpen = true },
|
||||
editMetricDef(row) { this.defForm = { metricId: row.metricId, metricName: row.metricName, metricFormula: row.metricFormula, unit: row.remark||'', tags: row.tags || '', usePrice: row.usePrice || 0, metricValue: row.metricValue || '' }; this.defTitle = '编辑指标'; this.defOpen = true },
|
||||
async submitMetricDef() {
|
||||
const f = this.defForm
|
||||
if (!f.metricName) { this.$modal.msgWarning('请输入指标名称'); return }
|
||||
if (f.metricId) {
|
||||
await updateProdMetric({ metricId: f.metricId, metricName: f.metricName, metricFormula: f.metricFormula, remark: f.unit, usePrice: f.usePrice, metricValue: f.metricValue || 0 })
|
||||
await updateProdMetric({ metricId: f.metricId, metricName: f.metricName, metricFormula: f.metricFormula, remark: f.unit, tags: f.tags || '', usePrice: f.usePrice, metricValue: f.metricValue || 0 })
|
||||
} else {
|
||||
await addProdMetric({ reportId: this.activeReport.reportId, metricCode: f.metricName, metricName: f.metricName, metricFormula: f.metricFormula, metricValue: f.metricValue || 0, remark: f.unit || '', usePrice: f.usePrice })
|
||||
await addProdMetric({ reportId: this.activeReport.reportId, metricCode: f.metricName, metricName: f.metricName, metricFormula: f.metricFormula, metricValue: f.metricValue || 0, remark: f.unit || '', tags: f.tags || '', usePrice: f.usePrice })
|
||||
}
|
||||
this.defOpen = false; this.$modal.msgSuccess('保存成功')
|
||||
await this.openMetricMgr()
|
||||
@@ -676,7 +679,7 @@ export default {
|
||||
// ensure metric definitions exist in DB for all metric columns before saving config
|
||||
for (const mc of metricCols) {
|
||||
if (!mc.metricId) {
|
||||
const r = await addProdMetric({ reportId: rid, metricCode: mc.metricName, metricName: mc.metricName, metricFormula: mc.metricFormula || '', metricValue: 0, remark: mc.unit || '' })
|
||||
const r = await addProdMetric({ reportId: rid, metricCode: mc.metricName, metricName: mc.metricName, metricFormula: mc.metricFormula || '', metricValue: 0, remark: mc.unit || '', tags: mc.tags || '' })
|
||||
mc.metricId = r.data && r.data.metricId || r.metricId
|
||||
}
|
||||
}
|
||||
@@ -721,7 +724,7 @@ export default {
|
||||
if (!def && c.id) {
|
||||
try { const r = await getProdMetric(c.id); if (r.data) { def = r.data; this._allMetricDefs.push(def) } } catch(e) {}
|
||||
}
|
||||
if (def) cols.push({ $type: 'metric', metricId: def.metricId, metricName: def.metricName, metricFormula: def.metricFormula, unit: def.remark||'', isShift: !!c.s, color: c.c || null, metricValue: def.metricValue, usePrice: def.usePrice })
|
||||
if (def) cols.push({ $type: 'metric', metricId: def.metricId, metricName: def.metricName, metricFormula: def.metricFormula, unit: def.remark||'', tags: def.tags || '', isShift: !!c.s, color: c.c || null, metricValue: def.metricValue, usePrice: def.usePrice })
|
||||
}
|
||||
}
|
||||
this.allCols = cols
|
||||
@@ -782,6 +785,7 @@ export default {
|
||||
async saveGrid() {
|
||||
const rid = this.activeReport.reportId; if (!rid) return; this.saving = true
|
||||
try {
|
||||
this.recalcAll()
|
||||
const exist = await listProdDetail({ reportId: rid, pageNum: 1, pageSize: 9999 })
|
||||
const ids = (exist.rows||[]).map(d => d.detailId)
|
||||
const detailCols = this.allCols.filter(c => c.$type === 'detail'); const detailList = []
|
||||
@@ -793,6 +797,31 @@ export default {
|
||||
})
|
||||
})
|
||||
await batchSaveProdDetail({ detailIds: ids, prodDetailList: detailList })
|
||||
|
||||
const metricCols = this.allCols.filter(c => c.$type === 'metric' && c.metricId)
|
||||
if (metricCols.length) {
|
||||
const existMR = await listProdMetricResult({ reportId: rid, pageNum: 1, pageSize: 99999 })
|
||||
const resultIds = (existMR.rows || []).map(r => r.resultId)
|
||||
const metricResultList = []
|
||||
this.gridRows.forEach(row => {
|
||||
if (!row.detailDate) return
|
||||
metricCols.forEach(m => {
|
||||
const push = (teamGroup, value) => {
|
||||
if (value != null && value !== '') {
|
||||
metricResultList.push({ reportId: rid, metricId: m.metricId, metricDate: row.detailDate, teamGroup, calcValue: value, tags: m.tags || '' })
|
||||
}
|
||||
}
|
||||
if (m.isShift) {
|
||||
push('1', row['mv' + m.mIdx + '_1'])
|
||||
push('2', row['mv' + m.mIdx + '_2'])
|
||||
} else {
|
||||
push('0', row['mv' + m.mIdx])
|
||||
}
|
||||
})
|
||||
})
|
||||
await batchSaveProdMetricResult({ resultIds, prodMetricResultList: metricResultList })
|
||||
}
|
||||
|
||||
this.$modal.msgSuccess("保存成功"); await this.loadGrid()
|
||||
} catch(e) { this.$modal.msgError("保存失败") } finally { this.saving = false }
|
||||
},
|
||||
@@ -815,7 +844,7 @@ export default {
|
||||
else if (sc.t === 'm') {
|
||||
const sid = String(sc.id)
|
||||
let def = this._allMetricDefs.find(m=>String(m.metricId)===sid)
|
||||
if (def && !usedMids.has(sid)) { usedMids.add(sid); this.allCols.push({ $type:'metric', metricId:String(def.metricId), metricName:def.metricName, metricFormula:def.metricFormula, unit:def.remark||'', isShift:!!sc.s, color:sc.c||null, metricValue: def.metricValue, usePrice: def.usePrice }) }
|
||||
if (def && !usedMids.has(sid)) { usedMids.add(sid); this.allCols.push({ $type:'metric', metricId:String(def.metricId), metricName:def.metricName, metricFormula:def.metricFormula, unit:def.remark||'', tags: def.tags || '', isShift:!!sc.s, color:sc.c||null, metricValue: def.metricValue, usePrice: def.usePrice }) }
|
||||
}
|
||||
})
|
||||
this.copyCfgOpen = false; let mi = 0; this.allCols.forEach(c => { if (c.$type === 'metric') c.mIdx = mi++ })
|
||||
|
||||
Reference in New Issue
Block a user