效果
html
<table>
<!-- 标题 -->
<tr>
<th colspan="100"><el-input style="width: 300px;" v-model="paymentForm.name"></el-input></th>
</tr>
<!-- 栏目 -->
<tr>
<th colspan="2"></th>
<th :colspan="item.child.length" v-for="item, i in paymentForm.titleX" :key="i">{{ item.name }}</th>
</tr>
<tr>
<th colspan="2">摘要</th>
<template v-for="item, i in paymentForm.titleX" :key="i">
<th v-for="item, k in item.child" :key="k">{{ item }}</th>
</template>
</tr>
<!-- 数据内容 -->
<template v-for="item, i in paymentForm.titleY" :key="i">
<!-- 单行展示 -->
<tr v-show="!item.child" class="red">
<td colspan="2">{{ item.name }}</td>
<td v-for="arr, index in item.arr" :key="index">
<el-input v-model="item.arr[index]"></el-input>
</td>
</tr>
<!-- 多行展示 -->
<tr v-for="item2, k in item.child" :key="k" v-show="item.child.length">
<td v-if="k == 0" :rowspan="item.child.length">{{ item.name }}</td>
<td v-if="item.child.length">{{ item2.name }}</td>
<td v-for="arr, index in item2.arr" :key="index">
<el-input v-model="item2.arr[index]"></el-input>
</td>
</tr>
</template>
</table>
js
let paymentForm = ref({
name: "账户变动情况",
titleX: [
{ name: '账号1', child: ['基本户建行', '一般户工行1', '一般户工行2', '一般户民生', '农商', '民生', '支付宝'] },
{ name: '账号2', child: ['基本户', '支付宝'] },
{ name: '账号3', child: ['基本户', '支付宝'] },
],
titleY: [
{ name: '昨日结余', arr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] },
{
name: '收入',
child: [
{ name: "订单回款", arr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] },
{ name: "利息", arr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] },
{ name: "其他", arr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] }
]
},
{ name: '收入合计', arr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] },
{
name: '支出',
child: [
{ name: "工资", arr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] },
{ name: "社保", arr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] },
{ name: "还款", arr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] },
{ name: "其他", arr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] }
]
},
{ name: '支出合计', arr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] },
{ name: '本日余额', arr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] },
{ name: '合计', arr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] }
]
})
css
table {
width: 100%;
border: 1px solid #ccc;
text-align: center;
border-collapse: collapse;
:deep(.el-input, .el-select, .el-range-editor .el-input__wrapper) {
width: 100%;
border: none !important;
}
:deep(.el-input__wrapper) {
box-shadow: none !important;
}
tr {
th {
padding: 5px 0;
border: 1px solid #ccc;
text-align: center;
min-width: 70px;
}
td {
padding: 5px 0;
border: 1px solid #ccc;
text-align: center;
min-width: 90px;
}
}
.red {
color: red;
font-weight: 700;
}
}