展示形式:
詳細(xì)代碼:
(js)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-682633.html
<template>
<div>
<el-table :data="tableData" style="width: 100%">
<el-table-column label="題目信息" align="center">
<el-table-column prop="questionName" label="題目名稱"></el-table-column>
<el-table-column prop="fullScore" label="滿分"></el-table-column>
<el-table-column prop="gradeAvg" label="年級(jí)均分"></el-table-column>
<el-table-column prop="gradeScoreRate" label="年級(jí)分?jǐn)?shù)線"></el-table-column>
</el-table-column>
<el-table-column v-for="classInfo in classHeaders" :key="classInfo.classScoreId">
<template #header>
{{ classInfo.className }}
</template>
<el-table-column label="班級(jí)均分" align="center">
<template #default="{ row }">{{ getCellValue(row, classInfo, 'classAvg') }}</template>
</el-table-column>
<el-table-column label="班級(jí)分?jǐn)?shù)線" align="center">
<template #default="{ row }">{{ getCellValue(row, classInfo, 'classScoreRate') }}</template>
</el-table-column>
</el-table-column>
</el-table>
</div>
</template>
<script>
import { reactive } from 'vue';
export default {
data() {
return {
tableData: reactive([
{
id: 1,
questionId: 1,
questionName: '填空題',
fullScore: 10,
gradeAvg: 8,
gradeScoreRate: 0.8,
questionClassVOList: [{
classScoreId: 1,
className: '一班',
classAvg: 7,
classScoreRate: 0.7
}, {
classScoreId: 2,
className: '二班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 3,
className: '三班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 4,
className: '四班',
classAvg: 8,
classScoreRate: 0.8
}]
}, {
id: 2,
questionId: 2,
questionName: '選擇題',
fullScore: 10,
gradeAvg: 8,
gradeScoreRate: 0.8,
questionClassVOList: [{
classScoreId: 1,
className: '一班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 2,
className: '二班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 3,
className: '三班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 4,
className: '四班',
classAvg: 8,
classScoreRate: 0.8
}]
}, {
id: 3,
questionId: 3,
questionName: '判斷題',
fullScore: 10,
gradeAvg: 8,
gradeScoreRate: 0.8,
questionClassVOList: [{
classScoreId: 1,
className: '一班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 2,
className: '二班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 3,
className: '三班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 4,
className: '四班',
classAvg: 8,
classScoreRate: 0.8
}]
}, {
id: 4,
questionId: 4,
questionName: '填空題',
fullScore: 10,
gradeAvg: 8,
gradeScoreRate: 0.8,
questionClassVOList: [{
classScoreId: 1,
className: '一班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 2,
className: '二班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 3,
className: '三班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 4,
className: '四班',
classAvg: 8,
classScoreRate: 0.8
}]
}, {
id: 5,
questionId: 5,
questionName: '簡(jiǎn)答題',
fullScore: 10,
gradeAvg: 8,
gradeScoreRate: 0.8,
questionClassVOList: [{
classScoreId: 1,
className: '一班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 2,
className: '二班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 3,
className: '三班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 4,
className: '四班',
classAvg: 8,
classScoreRate: 0.8
}]
}
]) // 你的數(shù)據(jù)結(jié)構(gòu)
};
},
computed: {
classHeaders() {
// 假設(shè)每個(gè)問(wèn)題類型下的班級(jí)信息結(jié)構(gòu)是一樣的,取第一個(gè)問(wèn)題類型下的班級(jí)信息來(lái)生成表頭
const firstQuestion = this.tableData[0];
if (firstQuestion) {
return firstQuestion.questionClassVOList;
}
return [];
}
},
methods: {
getCellValue(row, classInfo, prop) {
const classData = row.questionClassVOList.find(item => item.classScoreId === classInfo.classScoreId);
return classData ? classData[prop] : '';
}
}
};
</script>
<style>
/* 樣式可以根據(jù)你的需求進(jìn)行調(diào)整 */
</style>
(ts)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-682633.html
<template>
<div>
<el-table :data="tableData" style="width: 100%">
<el-table-column label="題目信息" align="center">
<el-table-column prop="questionName" label="題目名稱"></el-table-column>
<el-table-column prop="fullScore" label="滿分"></el-table-column>
<el-table-column prop="gradeAvg" label="年級(jí)均分"></el-table-column>
<el-table-column prop="gradeScoreRate" label="年級(jí)分?jǐn)?shù)線"></el-table-column>
</el-table-column>
<el-table-column v-for="classInfo in classHeaders" :key="classInfo.classScoreId">
<template #header>
{{ classInfo.className }}
</template>
<el-table-column label="班級(jí)均分" align="center">
<template #default="{ row }">{{ getCellValue(row, classInfo, 'classAvg') }}</template>
</el-table-column>
<el-table-column label="班級(jí)分?jǐn)?shù)線" align="center">
<template #default="{ row }">{{ getCellValue(row, classInfo, 'classScoreRate') }}</template>
</el-table-column>
</el-table-column>
</el-table>
</div>
</template>
<script setup lang="ts">
import { ref, reactive, computed } from 'vue';
interface ClassInfo {
classScoreId: number;
className: string;
classAvg: number;
classScoreRate: number;
}
interface QuestionClass {
questionClassVOList: ClassInfo[];
}
interface TableRow extends QuestionClass {
questionId: number;
questionName: string;
fullScore: number;
gradeAvg: number;
gradeScoreRate: number;
}
const tableData = reactive<TableRow[]>([
{
questionId: 1,
questionName: '填空題',
fullScore: 10,
gradeAvg: 8,
gradeScoreRate: 0.8,
questionClassVOList: [{
classScoreId: 1,
className: '一班',
classAvg: 7,
classScoreRate: 0.7
}, {
classScoreId: 2,
className: '二班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 3,
className: '三班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 4,
className: '四班',
classAvg: 8,
classScoreRate: 0.8
}]
}, {
questionId: 2,
questionName: '選擇題',
fullScore: 10,
gradeAvg: 8,
gradeScoreRate: 0.8,
questionClassVOList: [{
classScoreId: 1,
className: '一班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 2,
className: '二班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 3,
className: '三班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 4,
className: '四班',
classAvg: 8,
classScoreRate: 0.8
}]
}, {
questionId: 3,
questionName: '判斷題',
fullScore: 10,
gradeAvg: 8,
gradeScoreRate: 0.8,
questionClassVOList: [{
classScoreId: 1,
className: '一班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 2,
className: '二班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 3,
className: '三班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 4,
className: '四班',
classAvg: 8,
classScoreRate: 0.8
}]
}, {
questionId: 4,
questionName: '填空題',
fullScore: 10,
gradeAvg: 8,
gradeScoreRate: 0.8,
questionClassVOList: [{
classScoreId: 1,
className: '一班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 2,
className: '二班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 3,
className: '三班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 4,
className: '四班',
classAvg: 8,
classScoreRate: 0.8
}]
}, {
questionId: 5,
questionName: '簡(jiǎn)答題',
fullScore: 10,
gradeAvg: 8,
gradeScoreRate: 0.8,
questionClassVOList: [{
classScoreId: 1,
className: '一班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 2,
className: '二班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 3,
className: '三班',
classAvg: 8,
classScoreRate: 0.8
}, {
classScoreId: 4,
className: '四班',
classAvg: 8,
classScoreRate: 0.8
}]
}
])
const classHeaders = computed<ClassInfo[]>(() => {
const firstQuestion = tableData[0];
if (firstQuestion) {
return firstQuestion.questionClassVOList;
}
return [];
});
const getCellValue = (row: TableRow, classInfo: ClassInfo, prop: keyof ClassInfo) => {
const classData = row.questionClassVOList.find(item => item.classScoreId === classInfo.classScoreId);
return classData ? classData[prop] : '';
};
</script>
<style lang="scss" scoped>
</style>
到了這里,關(guān)于el-table動(dòng)態(tài)生成多級(jí)表頭的表格(js + ts)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!