动态渲染表头,表数据

17 篇文章 0 订阅
3 篇文章 0 订阅
<el-table :data="tableList" style="width: 100%" table-layout='auto' class="tableAuto" height="400">
						<el-table-column align="center" :prop="item.prop" v-for="(item, index) in cloumList"
							:key="index" :width="cloumnWidth(item)">
							<template slot="header" slot-scope="scope">
								<span v-if="item.prop == 'executeUser'">{{item.title}}</span>
								<ellipsisText v-else :content="item.title" :type="true" />
							</template>
							<template slot-scope="scope">
								<div class="img" v-if="item.name == 'image'">
									<el-image v-for="(obj,idx) in scope.row[scope.column.property]"
										style="width: 60px; height: 60px" :src="obj" :preview-src-list="[obj]">
									</el-image>
									<i class="el-icon-download downStyle"
										@click="downloadAll(scope.row[scope.column.property])"></i>
								</div>
								<div class="video" v-else-if="item.name == 'video'">
									<video controls style="display: block" width="100" height="100"
										:src="scope.row[scope.column.property]" />
									<i class="el-icon-download downStyle"
										@click="downloadAll(scope.row[scope.column.property],true)"></i>
								</div>
								<div v-else-if="item.name == 'file'" class="file">
									<div class="fileBox" v-for="(obj,idx) in scope.row[scope.column.property]">
										<img :src="require('../../../../assets/images/' + getMatchType(obj) + '.png')"
											alt="" width="60" height="60" />
										<p>{{splitStr(obj)}}</p>
									</div>
									<i class="el-icon-download downStyle"
										@click="downloadAll(scope.row[scope.column.property])"></i>
								</div>
								<div v-else-if="item.name == 'text'" class="text-left">
									<ellipsisText :content="scope.row[scope.column.property]" :type="false" />
									<!-- {{scope.row[scope.column.property]}} -->
								</div>
								<div v-else>
									<p>{{scope.row[scope.column.property]}}</p>
									<p>{{scope.row.departmentName ? scope.row.departmentName : ''}}-{{scope.row.roleName ? scope.row.roleName : ''}}
									</p>
								</div>

							</template>
						</el-table-column>
					</el-table>
					<div style="text-align: right;margin:20px 0 50px;">
						<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
							:current-page="recordList.page" :page-sizes="[10, 20, 50, 100]" :page-size="recordList.size"
							layout="total, sizes, prev, pager, next, jumper" :total="recordList.total">
						</el-pagination>
					</div>
res.data.records.forEach((item, i) => {
								// let feedbackContent = item.feedbackContent ? item.feedbackContent : [] //测试
								let feedbackContent = item.feedbackContent ? JSON.parse(item
									.feedbackContent) : []
								this.tableList.push({
									executeUser: item.executeUser,
									departmentName: item.departmentName,
									roleName: item.roleName
								})
								feedbackContent.forEach(val => {
									if (val.name == 'image' || val.name == 'file') {

										let fieldContent = val.fieldContent.split(',')
										if (val.name == 'image') {
											imgNum = imgNum < fieldContent.length ? fieldContent
												.length : imgNum
										}
										if (val.name == 'file') {
											fileNum = fileNum < fieldContent.length ? fieldContent
												.length : fileNum
										}
										this.tableList[i][val.remark] = fieldContent
									} else {
										this.tableList[i][val.remark] = val.fieldContent
									}

								})
							})
							let minFeedbackContent = res.data.records[0].feedbackContent ? JSON.parse(res.data
								.records[0].feedbackContent) : []
							// let minFeedbackContent = this.recordList[0].feedbackContent ? this.recordList[0]
							// 	.feedbackContent : []
							minFeedbackContent.forEach(item => {
								this.cloumList.push({
									title: item.remark,
									prop: item.remark,
									name: item.name,
									imgNum,
									fileNum
								})
							})
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过动态生成表头的方式来实现根据后端返回数据动态渲染多级表头,具体的实现步骤如下: 1. 获取后端返回的表头数据,可以通过 API 接口获取。 2. 遍历表头数据,生成对应的列对象。可以使用 Element UI 格组件中的 column 属性来实现。 3. 如果当前列对象有子列,那么递归生成子列对象。 4. 将生成的列对象数组作为格组件的 columns 属性进行渲染。 以下是一个示例代码: ```vue <template> <el-table :data="tableData" :columns="tableColumns" border ></el-table> </template> <script> export default { data() { return { tableData: [], tableColumns: [], }; }, methods: { // 获取后端返回的表头数据 async fetchTableHeader() { const res = await fetch('/api/table/header'); const headerData = await res.json(); this.tableColumns = this.generateColumns(headerData); }, // 递归生成列对象 generateColumns(headerData) { return headerData.map((item) => { const column = { label: item.label, prop: item.prop, }; if (item.children && item.children.length) { column.children = this.generateColumns(item.children); } return column; }); }, // 获取后端返回的数据 async fetchTableData() { const res = await fetch('/api/table/data'); this.tableData = await res.json(); }, }, mounted() { this.fetchTableHeader(); this.fetchTableData(); }, }; </script> ``` 在这个示例代码中,通过 fetchTableHeader 方法获取后端返回的表头数据,并使用 generateColumns 方法生成对应的列对象,如果当前列对象有子列,那么会递归生成子列对象。最后将生成的列对象数组作为格组件的 columns 属性进行渲染。 需要注意的是,由于数据是异步获取的,因此需要在获取表头数据数据之后再进行渲染。在这个示例代码中,通过 mounted 钩子函数来依次调用 fetchTableHeader 和 fetchTableData 方法获取数据,并在获取数据完成后渲染格组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值