主页面
<template> <div class="result-wrapper"> <dynamic-table :table-data="tableData" :table-header="tableConfig" :tableTitle="tableTitle" :flowParams="flowParams"></dynamic-table> </div> </template> <script> import DynamicTable from './components/DynamicTable' import dataInfo from "./data.json"; export default { props: {}, components: { DynamicTable }, data() { return { tableTitle: '邮政企业三级领导人员2024年7月绩效考核指标得分数据库', tableData: [], tableConfig: [] } }, computed: { }, async created() { }, methods: { openFlowPage() { let respData = dataInfo.data; if (respData.evalPerformanceRecordDetailList && respData.evalPerformanceRecordDetailList.length) { let list = JSON.parse(JSON.stringify(respData.evalPerformanceRecordDetailList)) // 表格业务数据 let tableData = JSON.parse(JSON.stringify(respData.evalPerformanceRecordDetailList)) // 表格业务数据 this.tableData = list this.tableConfigDeal(list[0].evalFormIndicatorBlocks) this.gettableData(tableData); console.log(this.tableConfig, 'tableConfig') console.log(this.tableData, 'tableData') } }, tableDataFormat () { const data = JSON.parse(JSON.stringify([...this.tableData])); data.forEach((item) => { const newArray = []; for (const key in item.value) { // console.log(item.value, 'item.value'); // console.log(key, 'key'); if (item.value[key]) { delete item.value[key].children newArray.push(item.value[key]) } } item.newArray = newArray delete item.value }) return data }, getForData(array, count) { if (count) { count++ } else { count = 1 } array.forEach((item) => { item.floor = count; if (item.children && item.children.length) { this.getForData(item.children, count) } else { item.children = [ { label: '标杆值', prop: 'benchmarkVal', valueData: item.id, formIndicatorBlockId: item.formIndicatorBlockId }, { label: '完成值', prop: 'completionVal', valueData: item.id, formIndicatorBlockId: item.formIndicatorBlockId }, { label: '建议得分', prop: 'scoreVal', valueData: item.id, formIndicatorBlockId: item.formIndicatorBlockId, } ] } if (item.floor === 2 && item && !this.hasLabelData(item.children, '建议得分合计')) { item.children.push({ label: '建议得分合计', prop: 'suggestScoreTotal', valueData: item.id, type: true, formIndicatorBlockId: item.formIndicatorBlockId }) if (item.isShowLeaderMarkScore) { item.children.push( { label: '领导评分', prop: 'leaderScore', valueData: item.id, type: false, formIndicatorBlockId: item.formIndicatorBlockId }) } } }) }, getTablejson(array, json, personObj, count) { if (count) { count++ } else { count = 1 } array.forEach((obj) => { if (obj.hasOwnProperty('suggestScoreTotal')) { json[obj.id] = { ...obj, }; } obj.floor = count; if (obj.children && obj.children.length) { this.getTablejson(obj.children, json, obj, count) } else { json[obj.id] = { ...obj, originDataNoChild: true }; } }); }, gettableData(array) { const tableData = []; array.forEach((item) => { const json = { value: {} }; json.id = item.empNumber; json.company = item.company; if (item.evalFormIndicatorBlocks && item.evalFormIndicatorBlocks.length) { item.evalFormIndicatorBlocks.forEach((list) => { this.getTablejson(list.children, json.value, list, 0); }) } tableData.push(json); }); this.tableData = tableData; }, tableConfigDeal(array) { // console.log(array, 'array'); this.getForData(array, 0); let tableConfig = [ { id: 10, label: '单位', prop: 'company' } ] this.tableConfig = tableConfig.concat(array); }, hasLabelData (children, key) { let flag = false for(let i = 0; i < children.length; i++) { if (children[i].label === key) { flag = true break } } return flag } } } </script> <style scoped lang="scss"> ::v-deep .el-table--border th, ::v-deep .el-table__fixed-right-patch { border-bottom: 1px solid #666666; } ::v-deep .el-table--border td, .el-table--border th, ::v-deep .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed { border-right: 1px solid #666666; } ::v-deep .el-table--border, ::v-deep .el-table--group { border: 1px solid #666666; } ::v-deep .el-table--border td, ::v-deep .el-table--border th, ::v-deep .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed { border-right: 1px solid #666666; } ::v-deep .el-table td, ::v-deep .el-table th.is-leaf { border-bottom: 1px solid #666666; } </style>
页面表格表头和表内容数据
{ "code": "0", "msg": "成功", "data": [ { "id": "8837445335765553152", "empNumber": "LXZT00002", "company": "石家庄", "evalFormIndicatorBlocks": [ { "id": "8837445339947274240", "performanceRecordId": "8837445334637285376", "sectionType": "quality", "children": [ { "id": "8837445434885345280", "parentId": null, "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445339947274240", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "80", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00008", "itemLevel": "/战略绩效得分", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": true, "label": "战略绩效得分" } ], "score": "80", "label": "战略绩效指标" }, { "id": "8837445391839203328", "performanceRecordId": "8837445334637285376", "sectionType": "quantity", "children": [ { "id": "8837445436214939648", "parentId": null, "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "6", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00006", "itemLevel": "/“两集中”改革", "children": [ { "id": "8837445437431287808", "parentId": "8837445436214939648", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "3", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00006", "itemLevel": "/“两集中”改革/组织管理架构和质量指标体系建设情况", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "组织管理架构和质量指标体系建设情况" }, { "id": "8837445440002396160", "parentId": "8837445436214939648", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "3", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00006", "itemLevel": "/“两集中”改革/处理中心人均处理效率", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "处理中心人均处理效率" } ], "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": false, "label": "“两集中”改革" }, { "id": "8837445442326040576", "parentId": null, "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "7", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00007", "itemLevel": "/协同与服务乡村振兴", "children": [ { "id": "8837445443424948224", "parentId": "8837445442326040576", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "3", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00006", "itemLevel": "/协同与服务乡村振兴/服务乡村振兴重点指标完成情况", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "服务乡村振兴重点指标完成情况" }, { "id": "8837445445991862272", "parentId": "8837445442326040576", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "2", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00007", "itemLevel": "/协同与服务乡村振兴/协同项目重点目标完成情况", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "协同项目重点目标完成情况" }, { "id": "8837445448374226944", "parentId": "8837445442326040576", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "2", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00007", "itemLevel": "/协同与服务乡村振兴/营销体系建设落实情况", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "营销体系建设落实情况" } ], "leaderMarkScoreList": null, "isShowLeaderMarkScore": true, "isCanLeaderMarkScore": true, "isCanScore": false, "label": "协同与服务乡村振兴" }, { "id": "8837445451129884672", "parentId": null, "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "7", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT000016", "itemLevel": "/三级物流体系、“网点+站点”", "children": [ { "id": "8837445452400758784", "parentId": "8837445451129884672", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "5", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT000015", "itemLevel": "/三级物流体系、“网点+站点”/三级物流体系", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "三级物流体系" }, { "id": "8837445454976061440", "parentId": "8837445451129884672", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "2", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT000016", "itemLevel": "/三级物流体系、“网点+站点”/“网点+站点”", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "“网点+站点”" } ], "leaderMarkScoreList": null, "isShowLeaderMarkScore": true, "isCanLeaderMarkScore": null, "isCanScore": false, "label": "三级物流体系、“网点+站点”" } ], "score": "20", "label": "重点任务指标" } ] }, { "id": "8837445336914792448", "empNumber": "LXZT00001", "company": "唐山", "evalFormIndicatorBlocks": [ { "id": "8837445339947274240", "performanceRecordId": "8837445334637285376", "sectionType": "quality", "children": [ { "id": "8837445434885345280", "parentId": null, "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445339947274240", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "80", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00008", "itemLevel": "/战略绩效得分", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "战略绩效得分" } ], "score": "80", "label": "战略绩效指标" }, { "id": "8837445391839203328", "performanceRecordId": "8837445334637285376", "sectionType": "quantity", "children": [ { "id": "8837445436214939648", "parentId": null, "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "6", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00006", "itemLevel": "/“两集中”改革", "children": [ { "id": "8837445437431287808", "parentId": "8837445436214939648", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "3", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00006", "itemLevel": "/“两集中”改革/组织管理架构和质量指标体系建设情况", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "组织管理架构和质量指标体系建设情况" }, { "id": "8837445440002396160", "parentId": "8837445436214939648", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "3", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00006", "itemLevel": "/“两集中”改革/处理中心人均处理效率", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "处理中心人均处理效率" } ], "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": false, "label": "“两集中”改革" }, { "id": "8837445442326040576", "parentId": null, "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "7", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00007", "itemLevel": "/协同与服务乡村振兴", "children": [ { "id": "8837445443424948224", "parentId": "8837445442326040576", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "3", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00006", "itemLevel": "/协同与服务乡村振兴/服务乡村振兴重点指标完成情况", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "服务乡村振兴重点指标完成情况" }, { "id": "8837445445991862272", "parentId": "8837445442326040576", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "2", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00007", "itemLevel": "/协同与服务乡村振兴/协同项目重点目标完成情况", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "协同项目重点目标完成情况" }, { "id": "8837445448374226944", "parentId": "8837445442326040576", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "2", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT00007", "itemLevel": "/协同与服务乡村振兴/营销体系建设落实情况", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "营销体系建设落实情况" } ], "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": false, "label": "协同与服务乡村振兴" }, { "id": "8837445451129884672", "parentId": null, "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "7", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT000016", "itemLevel": "/三级物流体系、“网点+站点”", "children": [ { "id": "8837445452400758784", "parentId": "8837445451129884672", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "5", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT000015", "itemLevel": "/三级物流体系、“网点+站点”/三级物流体系", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "三级物流体系" }, { "id": "8837445454976061440", "parentId": "8837445451129884672", "performanceRecordId": "8837445334637285376", "formIndicatorBlockId": "8837445391839203328", "scoreVal": null, "empNumber": "LXZT00001", "company": "唐山", "benchmarkVal": null, "completionVal": null, "score": "2", "suggestScoreTotal": null, "leaderScore": null, "informantNumber": "LXZT000016", "itemLevel": "/三级物流体系、“网点+站点”/“网点+站点”", "children": null, "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": null, "label": "“网点+站点”" } ], "leaderMarkScoreList": null, "isShowLeaderMarkScore": null, "isCanLeaderMarkScore": null, "isCanScore": false, "label": "三级物流体系、“网点+站点”" } ], "score": "20", "label": "重点任务指标" } ] } ] }
DynamicTable.vue
n<template>
<div>
<el-table :data="tableData" border :height="height">
<template v-for="(item) in tableHeader">
<table-column v-if="item.children && item.children.length" :key="item.id" :coloumn-header="item" :flowParams="flowParams"></table-column>
<el-table-column v-else :key="item.id" :label="item.label" :prop="item.prop" align="center">
</el-table-column>
</template>
</el-table>
</div>
</template>
<script>
import TableColumn from './TableColumn'
export default {
props: {
tableTitle: {
type: String,
require: true
},
// 表格的数据
tableData: {
type: Array,
required: true
},
// 多级表头的数据
tableHeader: {
type: Array,
required: true
},
// 表格的高度
height: {
type: String,
// default: '300'
},
// 流程数据
flowParams: {
type: Object,
default: ()=>{ return {} }
}
},
data () {
return {
}
},
watch: {
},
components: {
TableColumn
},
methods: {
}
}
</script>
<style scoped>
</style>
TableColumn.vue
<template>
<el-table-column :label="`${coloumnHeader.label}(${coloumnHeader.score}分)`" :prop="coloumnHeader.label" align="center">
<template v-for="item in coloumnHeader.children">
<tableColumn v-if="item.children && item.children.length" :key="item.id" :coloumn-header="item" :flowParams="flowParams"></tableColumn>
<el-table-column v-else :key="item.label" :label="item.label" :prop="item.prop" align="center">
<template slot-scope="{row}">
<template v-if="item.type">
{{getScope1(item, row)}}
</template>
<template v-else>
<!-- isCanLeaderMarkScore为true领导可编辑 isCanScore 固定三项可编辑 已办不可编辑 -->
<el-input v-model="row.value[item.valueData][item.prop]" @input="handleIpt(row.value, item)" :title="row.value[item.valueData][item.prop]" :disabled="(flowParams && flowParams.isView === 'true') || (item.prop === 'leaderScore' ? !row.value[item.valueData].isCanLeaderMarkScore : !row.value[item.valueData].isCanScore)"></el-input>
</template>
</template>
</el-table-column>
</template>
</el-table-column>
</template>
;
<script>
export default {
name: 'tableColumn',
props: {
coloumnHeader: {
type: Object,
required: true
},
// 流程数据
flowParams: {
type: Object,
default: ()=>{ return {} }
}
},
methods: {
handleIpt(value, item) {
console.log('进来了。。。')
if (item.prop === 'scoreVal' && value[item.valueData].score && value[item.valueData][item.prop]) {
value[item.valueData][item.prop] = this.isNumber(value[item.valueData][item.prop])
if (Number(value[item.valueData][item.prop]) > Number(value[item.valueData].score)) {
this.$message({ type: "onfo", message: `建议得分不能超出设定的分值(${Number(value[item.valueData].score)}分) `});
value[item.valueData][item.prop] = ''
}
}
},
isNumber(num, decimalPlace) {
num = num.replace(/[^\d\.]+/g, "");
var len1 = num.substr(0, 1);
var len2 = num.substr(1, 1);
//如果第一位是0,第二位不是点,就用数字把点替换掉
if (num.length > 1 && len1 == 0 && len2 != ".") {
num = num.substr(1, 1);
}
//第一位不能是.
if (len1 == ".") {
num = "";
}
//限制只能输入一个小数点
if (num.indexOf(".") != -1) {
var str_ = num.substr(num.indexOf(".") + 1);
if (str_.indexOf(".") != -1) {
num = num.substr(0, num.indexOf(".") + str_.indexOf(".") + 1);
}
}
//动态位数
num = num.replace(
/\.\d{2,}$/,
num.substr(num.indexOf("."), decimalPlace + 1)
);
return num;
},
getScope1(item, row) {
let total = 0;
if (row.value[item.valueData].children && row.value[item.valueData].children) {
row.value[item.valueData].children.forEach((item) => {
total = total + Number(row.value[item.id].scoreVal || 0)
});
} else {
total = Number(row.value[item.valueData].scoreVal || 0);
}
console.log(total, 0)
row.value[item.valueData][item.prop] = total.toFixed(2);
return total.toFixed(2);
}
}
}
</script>
<style scoped>
</style>
效果图