В процессе внешней разработки мы часто сталкиваемся с различными сценариями разработки таблиц. Иногда некоторые таблицы относительно просты, а некоторые более сложны (как показано в простом примере ниже, в Elementui присутствуют объединенные элементы и многоуровневые заголовки). управление таблицами. Он также может поддерживать создание сложных таблиц. Эта статья расскажет вам, как быстро разрабатывать сложные таблицы~~~.
Если структура данных сложная, можно использовать многоуровневые заголовки, чтобы показать иерархическую связь данных.
Вам нужно всего лишь вложить el-table-column внутрь el-table-column, чтобы получить многоуровневые заголовки.
<template>
<div class="tableWrap">
<el-table
id="resultTableProject"
:data="tableData"
border
v-loading="loading"
element-loading-text="Выполняется запрос данных"
:span-method="spanMethod"
height="620"
size='small'
>
<el-table-column
label="номер проекта"
prop="id"
wdth="160"
align="center"
/>
<el-table-column
label="название проекта"
prop="casename"
align="center"
/>
<el-table-column
метка="отдел"
prop="bm"
align="center"
/>
<el-table-column
label="Персонал отдела (производственная ценность)"
align="center"
>
<el-table-column
v-for="(item, index) in userData"
:key="index"
:label="item.name"
:prop="item.name + 'cz'"
width="200"
align="center"
/>
</el-table-column>
</el-table>
</div>
</template>
<script setup>
import { ref, onMounted,onBeforeMount, watch, reactive ,toRefs,toRaw,shallowRef} from "vue";
let tableData=ref([
{ id: 202112312, Casename: «Проект по производству малой бытовой техники», bm: «Производственная группа», «Чжан Санц»: 100,},
{ id:202112342,casename:'Проект небольшой бытовой техники',bm:"Производственная группа 2",'Li Sicz':200,},
{ id: 202112343, имя дела: «TV», bm: «Производственная группа №3», «Ван Вуч»: 300},
{ id:202112344,casename:'TV',bm:"Производственная группа три",'Ван Вуч':300,},
{ id:202112345,casename:'Проект кондиционирования воздуха',bm:"Производственная группа 4",'Sun Qicz':300},
{ id:202112346,casename:'проект холодильника',bm:"Четвертая производственная группа",'Sun Qiccz':300},
])
let userData=ref([
{
имя: «Чжан Сан»,
},
{
имя:'Ли Си',
},
{
имя:'Ван Ву',
},
{
имя: «Сунь Ци»,
}
])
</script>
даваяtable
входящийspan-method
Метод можно использовать для объединения строк или столбцов.,Параметр метода — объект,Он содержит текущую строкуrow
、текущий столбецcolumn
、Текущий номер строкиrowIndex
、Текущий номер столбцаcolumnIndex
Четыре атрибута。Эта функция может возвращать массив, содержащий два элемента.,Первый элемент представляетrowspan
,Второй элемент представляетcolspan
。 Вы также можете вернуть имя ключаrowspan
иcolspan
объект。
Редактировать
<template>
<div class="tableWrap">
<el-table
id="resultTableProject"
:data="tableData"
border
v-loading="loading"
element-loading-text="Выполняется запрос данных"
:span-method="spanMethod"
height="620"
size='small'
>
<el-table-column
label="номер проекта"
prop="id"
wdth="160"
align="center"
/>
<el-table-column
label="название проекта"
prop="casename"
align="center"
/>
<el-table-column
метка="отдел"
prop="bm"
align="center"
/>
<el-table-column
label="Персонал отдела (производственная ценность)"
align="center"
>
<el-table-column
v-for="(item, index) in userData"
:key="index"
:label="item.name"
:prop="item.name + 'cz'"
width="200"
align="center"
/>
</el-table-column>
</el-table>
</div>
</template>
<script setup>
import { ref, onMounted,onBeforeMount, watch, reactive ,toRefs,toRaw,shallowRef} from "vue";
let tableData=ref([
{ id: 202112312, Casename: «Проект по производству малой бытовой техники», bm: «Производственная группа», «Чжан Санц»: 100,},
{ id:202112342,casename:'Проект небольшой бытовой техники',bm:"Производственная группа 2",'Li Sicz':200,},
{ id: 202112343, имя дела: «TV», bm: «Производственная группа №3», «Ван Вуч»: 300},
{ id:202112344,casename:'TV',bm:"Производственная группа три",'Ван Вуч':300,},
{ id:202112345,casename:'Проект кондиционирования воздуха',bm:"Производственная группа 4",'Sun Qicz':300},
{ id:202112346,casename:'проект холодильника',bm:"Четвертая производственная группа",'Sun Qiccz':300},
])
let userData=ref([
{
имя: «Чжан Сан»,
},
{
имя:'Ли Си',
},
{
имя:'Ван Ву',
},
{
имя: «Сунь Ци»,
}
])
const spanMethod = ({ row, column, rowIndex, columnIndex }) => {
// Если текущий столбец не является организационным столбцом, верните { rowspan: 1, colspan: 1 }, что указывает на то, что ячейку не нужно объединять
// if (columnIndex !== 0 && columnIndex !== 1&& columnIndex !== 2 &&columnIndex!==9&&columnIndex!==10) {
// return { rowspan: 1, colspan: 1 };
// }
if (columnIndex !== 0 && columnIndex !== 1) {
return { rowspan: 1, colspan: 1 };
}
// Если текущая строка является первой строкой организации, подсчитайте количество строк организации и верните { rowspan, colspan: 1 }, что указывает на то, что количество строк, которые необходимо объединить, равно rowspan
if (
rowIndex === 0 ||
row.casename !== tableData.value[rowIndex - 1].casename
) {
const rowCount = tableData.value.filter(
(i) => i.casename === row.casename
).length;
return { rowspan: rowCount, colspan: 1 };
}
// В противном случае верните { rowspan: 0, colspan: 0 }, что указывает на то, что ячейка была объединена с ячейкой выше
return { rowspan: 0, colspan: 0 };
};
</script>
<style lang="less" scoped>
.tableQualityProject {
height: 100vh;
width: 100%;
overflow: auto;
background-image: #f2f2f2;
h1 {}
}
.tableWrap {
padding: 0 20px;
// width: 100%;
// margin: 0 auto;
/deep/ .el-table__header th {
background-color: #409eff!important ; /* Установить цвет заголовка */
color: #fff; /* Установить цвет текста заголовка */
// background-color:#FAFAFA;
// color:#252525;
border:1px solid f5f5f5;
}
/deep/ .el-table .cell {
// font-weight: 700;
font-size: 16px;
padding: 0;
}
.gzlWrap {
// border-bottom:1px solid #dfdfdf;
&:last-child {
border-bottom: none;
}
span {
display: inline-block;
padding: 5px 0;
}
.key {
width: 60%;
}
.value {
width: 40%;
}
}
.selfTableHead {
display: flex;
span {
display: inline-block;
width: 60px;
}
}
}
</style>
Самый простой: просто измените стиль заголовка.
.tableWrap {
padding: 0 20px;
// width: 100%;
// margin: 0 auto;
/deep/ .el-table__header th {
background-color: #409eff!important ; /* Установить цвет заголовка */
color: #fff; /* Установить цвет текста заголовка */
// background-color:#FAFAFA;
// color:#252525;
border:1px solid f5f5f5;
}
/deep/ .el-table .cell {
// font-weight: 700;
font-size: 16px;
padding: 0;
}
.gzlWrap {
// border-bottom:1px solid #dfdfdf;
&:last-child {
border-bottom: none;
}
span {
display: inline-block;
padding: 5px 0;
}
.key {
width: 60%;
}
.value {
width: 40%;
}
}
.selfTableHead {
display: flex;
span {
display: inline-block;
width: 60px;
}
}
}