|
@@ -134,6 +134,8 @@
|
|
|
:placeholder="item.label"
|
|
:placeholder="item.label"
|
|
|
:disabled="item.disabled"
|
|
:disabled="item.disabled"
|
|
|
style="width: 100%"
|
|
style="width: 100%"
|
|
|
|
|
+ @input="handleCellInput(scope.row)"
|
|
|
|
|
+ @change="handleCellInput(scope.row)"
|
|
|
></el-input>
|
|
></el-input>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
@@ -251,6 +253,8 @@
|
|
|
// 成本审核数据
|
|
// 成本审核数据
|
|
|
costAuditData: [],
|
|
costAuditData: [],
|
|
|
project: {},
|
|
project: {},
|
|
|
|
|
+ // 年份到各列prop的映射:{ '2025': { book: '...', audit: '...', approved: '...' } }
|
|
|
|
|
+ yearPropMap: {},
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
watch: {
|
|
watch: {
|
|
@@ -508,14 +512,79 @@
|
|
|
})
|
|
})
|
|
|
// 强制刷新
|
|
// 强制刷新
|
|
|
this.costAuditData = [...this.costAuditData]
|
|
this.costAuditData = [...this.costAuditData]
|
|
|
|
|
+ this.computeApprovedForAllRows()
|
|
|
}
|
|
}
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
console.warn('回显上传数据失败:', e)
|
|
console.warn('回显上传数据失败:', e)
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
|
|
+ // 单元格输入联动:当账面值或审核调整值变化时,自动计算核定值
|
|
|
|
|
+ handleCellInput(row, item) {
|
|
|
|
|
+ console.log(111)
|
|
|
|
|
+ if (!row) return
|
|
|
|
|
+ // 若未传入列信息,则对该行全部年份重算
|
|
|
|
|
+ if (!item || !item.prop) {
|
|
|
|
|
+ this.computeApprovedForRow(row)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ const m = String(item.prop).match(
|
|
|
|
|
+ /^year(\d{4})(BookValue|Audit|ApprovedValue)$/
|
|
|
|
|
+ )
|
|
|
|
|
+ if (!m) {
|
|
|
|
|
+ this.computeApprovedForRow(row)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ const year = m[1]
|
|
|
|
|
+ const bookProp = `year${year}BookValue`
|
|
|
|
|
+ const auditProp = `year${year}Audit`
|
|
|
|
|
+ const approvedProp = `year${year}ApprovedValue`
|
|
|
|
|
+ const a = parseFloat(row[bookProp])
|
|
|
|
|
+ const b = parseFloat(row[auditProp])
|
|
|
|
|
+ const aNum = isNaN(a) ? 0 : a
|
|
|
|
|
+ const bNum = isNaN(b) ? 0 : b
|
|
|
|
|
+ // 若两者皆为空字符串则清空核定值;否则计算和
|
|
|
|
|
+ if (
|
|
|
|
|
+ (row[bookProp] === '' || row[bookProp] === undefined) &&
|
|
|
|
|
+ (row[auditProp] === '' || row[auditProp] === undefined)
|
|
|
|
|
+ ) {
|
|
|
|
|
+ this.$set(row, approvedProp, '')
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.$set(row, approvedProp, String(aNum + bNum))
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ // 针对单行,遍历存在的年份字段进行重新计算
|
|
|
|
|
+ computeApprovedForRow(row) {
|
|
|
|
|
+ if (!row) return
|
|
|
|
|
+ const map = this.yearPropMap || {}
|
|
|
|
|
+ Object.keys(map).forEach((year) => {
|
|
|
|
|
+ const bookProp = map[year].book
|
|
|
|
|
+ const auditProp = map[year].audit
|
|
|
|
|
+ const approvedProp = map[year].approved
|
|
|
|
|
+ if (!bookProp || !auditProp || !approvedProp) return
|
|
|
|
|
+ const a = parseFloat(row[bookProp])
|
|
|
|
|
+ const b = parseFloat(row[auditProp])
|
|
|
|
|
+ const aNum = isNaN(a) ? 0 : a
|
|
|
|
|
+ const bNum = isNaN(b) ? 0 : b
|
|
|
|
|
+ if (
|
|
|
|
|
+ (row[bookProp] === '' || row[bookProp] === undefined) &&
|
|
|
|
|
+ (row[auditProp] === '' || row[auditProp] === undefined)
|
|
|
|
|
+ ) {
|
|
|
|
|
+ this.$set(row, approvedProp, '')
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.$set(row, approvedProp, String(aNum + bNum))
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ // 针对全表,批量重新计算核定值
|
|
|
|
|
+ computeApprovedForAllRows() {
|
|
|
|
|
+ if (!Array.isArray(this.costAuditData)) return
|
|
|
|
|
+ this.costAuditData.forEach((row) => this.computeApprovedForRow(row))
|
|
|
|
|
+ },
|
|
|
parseAndDisplayTableHeaders(res) {
|
|
parseAndDisplayTableHeaders(res) {
|
|
|
this.tableHeadersRes = Array.isArray(res.value) ? res.value : []
|
|
this.tableHeadersRes = Array.isArray(res.value) ? res.value : []
|
|
|
if (this.tableHeadersRes.length > 0) {
|
|
if (this.tableHeadersRes.length > 0) {
|
|
|
|
|
+ // 重置年份映射
|
|
|
|
|
+ this.yearPropMap = {}
|
|
|
this.auditForm.surveyTemplateId = res.value[0].surveyTemplateId
|
|
this.auditForm.surveyTemplateId = res.value[0].surveyTemplateId
|
|
|
// 表头按照orderNum重新排序
|
|
// 表头按照orderNum重新排序
|
|
|
this.tableHeadersRes.sort((a, b) => a.orderNum - b.orderNum)
|
|
this.tableHeadersRes.sort((a, b) => a.orderNum - b.orderNum)
|
|
@@ -532,6 +601,22 @@
|
|
|
showOverflowTooltip: item.fieldName == '序号' ? false : true,
|
|
showOverflowTooltip: item.fieldName == '序号' ? false : true,
|
|
|
}
|
|
}
|
|
|
this.costAuditcolumn.push(column)
|
|
this.costAuditcolumn.push(column)
|
|
|
|
|
+
|
|
|
|
|
+ // 基于表头中文名构建年份映射
|
|
|
|
|
+ const name = item.fieldName || item.label || ''
|
|
|
|
|
+ const prop = item.fieldEname || item.prop || ''
|
|
|
|
|
+ const m = String(name).match(
|
|
|
|
|
+ /^(\d{4})年(账面值|审核调整值|核定值)$/
|
|
|
|
|
+ )
|
|
|
|
|
+ if (m && prop) {
|
|
|
|
|
+ const year = m[1]
|
|
|
|
|
+ const kind = m[2]
|
|
|
|
|
+ if (!this.yearPropMap[year]) this.yearPropMap[year] = {}
|
|
|
|
|
+ if (kind === '账面值') this.yearPropMap[year].book = prop
|
|
|
|
|
+ else if (kind === '审核调整值')
|
|
|
|
|
+ this.yearPropMap[year].audit = prop
|
|
|
|
|
+ else if (kind === '核定值') this.yearPropMap[year].approved = prop
|
|
|
|
|
+ }
|
|
|
})
|
|
})
|
|
|
// 若表头未包含“单位”列,则追加;已包含则不重复添加
|
|
// 若表头未包含“单位”列,则追加;已包含则不重复添加
|
|
|
const hasUnitCol = this.costAuditcolumn.some(
|
|
const hasUnitCol = this.costAuditcolumn.some(
|
|
@@ -583,6 +668,9 @@
|
|
|
}
|
|
}
|
|
|
this.costAuditcolumn.push(bookValueColumn)
|
|
this.costAuditcolumn.push(bookValueColumn)
|
|
|
this.tableHeadersRes.push(bookValueColumn)
|
|
this.tableHeadersRes.push(bookValueColumn)
|
|
|
|
|
+ // 映射
|
|
|
|
|
+ if (!this.yearPropMap[item]) this.yearPropMap[item] = {}
|
|
|
|
|
+ this.yearPropMap[item].book = bookValueColumn.prop
|
|
|
// 审核字段
|
|
// 审核字段
|
|
|
let auditColumn = {
|
|
let auditColumn = {
|
|
|
fieldEname: 'year' + item + 'Audit',
|
|
fieldEname: 'year' + item + 'Audit',
|
|
@@ -608,6 +696,7 @@
|
|
|
}
|
|
}
|
|
|
this.costAuditcolumn.push(auditColumn)
|
|
this.costAuditcolumn.push(auditColumn)
|
|
|
this.tableHeadersRes.push(auditColumn)
|
|
this.tableHeadersRes.push(auditColumn)
|
|
|
|
|
+ this.yearPropMap[item].audit = auditColumn.prop
|
|
|
// 核定值字段
|
|
// 核定值字段
|
|
|
let approvedValueColumn = {
|
|
let approvedValueColumn = {
|
|
|
fieldEname: 'year' + item + 'ApprovedValue',
|
|
fieldEname: 'year' + item + 'ApprovedValue',
|
|
@@ -633,6 +722,7 @@
|
|
|
}
|
|
}
|
|
|
this.costAuditcolumn.push(approvedValueColumn)
|
|
this.costAuditcolumn.push(approvedValueColumn)
|
|
|
this.tableHeadersRes.push(approvedValueColumn)
|
|
this.tableHeadersRes.push(approvedValueColumn)
|
|
|
|
|
+ this.yearPropMap[item].approved = approvedValueColumn.prop
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -763,6 +853,8 @@
|
|
|
if (!seen.has(row)) flat.push(row)
|
|
if (!seen.has(row)) flat.push(row)
|
|
|
})
|
|
})
|
|
|
this.costAuditData = flat
|
|
this.costAuditData = flat
|
|
|
|
|
+ // 平铺完成后统一计算核定值
|
|
|
|
|
+ this.computeApprovedForAllRows()
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
handleSaveTemplate(type) {
|
|
handleSaveTemplate(type) {
|