<el-table ref="multipleTable" :data="tableData" border fit :header-cell-style="{color:'#303133',fontSize:'14px',fontWeight:'normal'}" :cell-style="{color:'#303133',fontSize:'14px',fontWeight:'normal'}" :span-method="arraySpanMethod" style="width:680;" > <el-table-column label="保养种类" prop="maintenanceType" align="center" width="100" /> <el-table-column label="保养项目" prop="maintenanceProgram" align="center" width="100" /> <el-table-column label="保养机构/部位" align="center" prop="parts" width="160" /> <el-table-column label="合格基准" align="center" prop="qualified" width="160" /> <el-table-column label="保养结果" align="center" prop="results" width="158" /> </el-table>
<script> import { deviceMaintenanceCardPrint } from '@/api/vue-deviceMaintenanceCard.js' export default { name: 'MaintenanceCardPrint', data() { return { cardName: '', // 计划名称 tableData: [], needMergeArr: ['maintenanceType', 'maintenanceProgram', 'qualified'], // 有合并项的列 rowMergeArrs: {} // 包含需要一个或多个合并项信息的对象 } }, created() { this.deviceMaintenanceCardPrint(this.$route.query.id) }, methods: { // 设置表头 getRowClass() { return 'background:#F1F6FF;color: rgba(0,0,0,.85);font-weight:400' }, /** * 设置样式 */ tabRowClassName({ row, rowIndex }) { const index = rowIndex + 1 if (index % 2 === 0) { return 'warning-row' } }, /** * 打印详情页面 */ deviceMaintenanceCardPrint(id) { deviceMaintenanceCardPrint({ id: id }).then((res) => { if (res.code === '0') { // 处理数据 res.data.cardDetail.forEach((item, index) => { this.$set(item, 'results', '') }) this.cardName = res.data.cardName // 保养计划名称 this.tableData = res.data.cardDetail this.rowMergeArrs = this.rowMergeHandle(this.needMergeArr, this.tableData) // 处理数据 } else { this.$message({ type: 'error', message: res.message }) } }) }, /** * @description 实现合并行或列 * @param row:Object 需要合并的列name 如:'name' 'id' * @param column:Object 当前行的行数,由合并函数传入 * @param rowIndex:Number 当前列的数据,由合并函数传入 * @param columnIndex:Number 当前列的数据,由合并函数传入 * * @return 函数可以返回一个包含两个元素的数组,第一个元素代表rowspan,第二个元素代表colspan。 也可以返回一个键名为rowspan和colspan的对象 * 参考地址:https://element.eleme.cn/#/zh-CN/component/table#table-biao-ge */ arraySpanMethod({ row, column, rowIndex, columnIndex }) { if (this.needMergeArr.includes(column.property)) return this.mergeAction(column.property, rowIndex, column) }, /** * @description 根据数组来确定单元格是否需要合并 * @param val:String 需要合并的列name 如:'name' 'id' * @param rowIndex:Number 当前行的行数,由合并函数传入 * @param colData:Object 当前列的数据,由合并函数传入 * * @return 返回值为一个数组表示该单元格是否需要合并; 说明: [0,0]表示改行被合并了 [n+,1]n为1时表示该单元格不动,n大于1时表示合并了N-1个单元格 */ mergeAction(val, rowIndex, colData) { const _row = this.rowMergeArrs[val].rowArr[rowIndex] const _col = _row > 0 ? 1 : 0 return [_row, _col] }, /** * @description 根据数组将指定对象转化为相应的数组 * @param arr:Array[String] 必填 必须是字符串形式的数组 * @param data:Array 必填 需要转化的对象 * * @return 返回一个对象 * 例:rowMerge(['name','value'], [{value:'1', name:'小明'}, {value:'2', name:'小明'}, {value:'3', name:'小明'}, {value:'1', name:'小明'}, {value:'1', name:'小明'}]) * 返回值: { * name:{ * rowArr: [5, 0, 0, 0, 0] * rowMergeNum: 0, * }, * value: { * rowArr: [1, 1, 1, 2, 0], * rowMergeNum: 3 * } * } */ rowMergeHandle(arr, data) { if (!Array.isArray(arr) && !arr.length) return false if (!Array.isArray(data) && !data.length) return false const needMerge = {} arr.forEach(i => { needMerge[i] = { rowArr: [], rowMergeNum: 0 } data.forEach((item, index) => { if (index === 0) { needMerge[i].rowArr.push(1) needMerge[i].rowMergeNum = 0 } else { if (item[i] === data[index - 1][i]) { needMerge[i].rowArr[needMerge[i].rowMergeNum] += 1 needMerge[i].rowArr.push(0) } else { needMerge[i].rowArr.push(1) needMerge[i].rowMergeNum = index } } }) }) return needMerge }, /** * 打印功能展示 */ PrintRow() { this.$print(this.$refs.print) } } } </script>