table表格数据多选回显实现
实现结果

HTML代码——截取
<div>
<el-dialog title="新增" :visible.sync="dialogTableForAddProject" row-key="getRowKeys">
<el-table :data="projectList" ref="projectTableRef" @select="handleSelectionChange">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column label="项目名称/企业名称" align="center" prop="projectName" />
<el-table-column label="申报年份" align="center" prop="baseYear" />
<el-table-column label="区域" align="center" prop="belongToArea" />
</el-table>
<el-pagination background layout="total,sizes,prev, pager, next,jumper" :current-page="queryProjectParams.current"
:page-size="queryProjectParams.size" @size-change="sizeChangeOfProject" @current-change="currentChangeOfProject" :page-sizes="projectSize"
:total="projectTotal">
</el-pagination>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogTableForAddProject = false">取 消</el-button>
<el-button type="primary" @click="dialogTableForAddProject = false">确 定</el-button>
</div>
</el-dialog>
</div>
需要注意的几个点
① row-key=“getRowKeys” 必须要有
②@select=“handleSelectionChange” 处理选中数据的
③这里是在接口查询时进行勾选回显的,也可以在翻页时进行回显勾选处理
JS代码——截取
data() {
return {
groupId:'', //接收路由参数
dialogTableForAddProject:false,
queryProjectParams:{
groupId:'',// 项目组ID
current: 1, // 当前页数
size: 10 // 每页显示多少条
},//查询项目列表参数
projectTotal:0, // 可新增项目数量总数
projectSize: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
projectList:[], //项目数据
allProjectIds:[], // 汇总总选择的项目ID
pageProjectIds:[] //当前页选择的项目ID
};
},
methods: {
// 打开新增项目弹框
openAddProjectDialog(){
this.queryProjectParams.groupId = this.$route.query.groupId;
this.getProjectList()
this.dialogTableForAddProject = true
},
// 查询可新增项目列表参数
getProjectList(){
projectRelationPageList(this.queryProjectParams).then(response => {
if(response.data.code=='0'){
this.projectList = response.data.data.records
this.projectTotal = response.data.data.total
this.setCheckBox();
}
});
},
// 多选框选中数据
handleSelectionChange(selection,row) {
let selected = selection.length && selection.indexOf(row) !== -1
if(!selected){
// 取消勾选,剔除
var i = this.allProjectIds.indexOf(row.instId);
if(i > -1){
this.allProjectIds.splice(i,1)
}
return;
}
this.pageProjectIds = selection.map(item => item.instId);
// 将项目主键放入总数组中
this.pageProjectIds.map(projectId => {
if(this.allProjectIds.indexOf(projectId) == -1){
this.allProjectIds.push(projectId)
}
});
console.log('汇总===')
console.log(this.allProjectIds)
console.log('当前===')
console.log(this.pageProjectIds)
},
//下面的方法是进行设置行标识key的方法
getRowKeys(row) {
return row.instId
},
// 回显选中数据
setCheckBox(){
if(this.projectList != null && this.projectList.length > 0 && this.allProjectIds.length > 0){
this.allProjectIds.forEach((aId) => {
this.$nextTick(() => {
this.projectList.forEach((p) => {
// 这里根据自己的字段进行判断
if(aId === p.instId){
this.$refs.projectTableRef.toggleRowSelection(p);
}
})
})
})
}
},
sizeChangeOfProject(pageSize) {
this.queryProjectParams.size = pageSize;
this.getProjectList();
},
currentChangeOfProject(current) {
this.queryProjectParams.current = current;
this.getProjectList();
},
}
上面是部分代码,这里是整个页面的代码(根据需要看这里的代码)
<template>
<div class="app-container">
<div class="search-box">
<el-form :model="queryParams" ref="queryForm" :inline="true">
<el-form-item label="项目名称/企业名称" :label-width="formLabelWidth" prop="projectName">
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称/单位名称" style="width: 200px"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getList">搜索</el-button>
<el-button icon="el-icon-refresh" @click="restSearch">重置</el-button>
</el-form-item>
</el-form>
<el-button type="primary" icon="el-icon-plus" size="small" plain @click="openAddProjectDialog()">新增</el-button>
</div>
<div class="content-box">
<el-table border v-loading="loading" :data="list">
<el-table-column label="序号" align="center" width="50">
<template slot-scope="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="项目名称/企业名称" align="center" prop="projectName" />
<el-table-column label="申报年份" align="center" prop="baseYear" />
<el-table-column label="区域" align="center" prop="area" />
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button type="text" icon="el-icon-view" @click="del(scope.row.baseId)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination background layout="total,sizes,prev, pager, next,jumper" :current-page="queryParams.current"
:page-size="queryParams.size" @size-change="sizeChange" @current-change="currentChange" :page-sizes="size"
:total="total">
</el-pagination>
</div>
<!--右侧滑框 start-->
<div>
<el-dialog title="新增" :visible.sync="dialogTableForAddProject" row-key="getRowKeys">
<el-table :data="projectList" ref="projectTableRef" @select="handleSelectionChange">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column label="项目名称/企业名称" align="center" prop="projectName" />
<el-table-column label="申报年份" align="center" prop="baseYear" />
<el-table-column label="区域" align="center" prop="belongToArea" />
</el-table>
<el-pagination background layout="total,sizes,prev, pager, next,jumper" :current-page="queryProjectParams.current"
:page-size="queryProjectParams.size" @size-change="sizeChangeOfProject" @current-change="currentChangeOfProject" :page-sizes="projectSize"
:total="projectTotal">
</el-pagination>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogTableForAddProject = false">取 消</el-button>
<el-button type="primary" @click="dialogTableForAddProject = false">确 定</el-button>
</div>
</el-dialog>
</div>
<!--右侧滑框 end-->
</div>
</template>
<script>
import {groupProjectPageList, projectRelationPageList} from '@/api/projectGroup/group'
export default {
//import引入的组件
components: {},
data() {
return {
groupId:'', //接收路由参数
loading: false,
rightEnter: false,
formLabelWidth: '150px',
queryParams:{
groupId:'',// 项目组ID
projectName:'',//项目名称 or 企业名称
current: 1, // 当前页数
size: 10 // 每页显示多少条
},//查询项目组内项目列表参数
dto:{
groupId:'',//项目组ID
instIds:[] //选择的项目数组
},//新增项目组参数
list:[], //项目组数据
total: 0, // 总页数
size: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
dialogTableForAddProject:false,
queryProjectParams:{
groupId:'',// 项目组ID
current: 1, // 当前页数
size: 10 // 每页显示多少条
},//查询项目列表参数
projectTotal:0, // 可新增项目数量总数
projectSize: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
projectList:[], //项目数据
allProjectIds:[], // 汇总总选择的项目ID
pageProjectIds:[] //当前页选择的项目ID
};
},
created() {
this.groupId = this.$route.query.groupId;
this.queryParams.groupId = this.$route.query.groupId;
this.getList()
},
//方法集合
methods: {
getList(){
this.loading = true
groupProjectPageList(this.queryParams).then(response => {
console.log(response)
if(response.data.code=='0'){
this.list = response.data.data.records
this.total = response.data.data.total
this.loading = false
}
});
},
// 打开新增项目弹框
openAddProjectDialog(){
this.queryProjectParams.groupId = this.$route.query.groupId;
this.getProjectList()
this.dialogTableForAddProject = true
},
// 查询可新增项目列表参数
getProjectList(){
projectRelationPageList(this.queryProjectParams).then(response => {
if(response.data.code=='0'){
this.projectList = response.data.data.records
this.projectTotal = response.data.data.total
this.setCheckBox();
}
});
},
// 多选框选中数据
handleSelectionChange(selection,row) {
let selected = selection.length && selection.indexOf(row) !== -1
if(!selected){
// 取消勾选,剔除
var i = this.allProjectIds.indexOf(row.instId);
if(i > -1){
this.allProjectIds.splice(i,1)
}
return;
}
this.pageProjectIds = selection.map(item => item.instId);
// 将项目主键放入总数组中
this.pageProjectIds.map(projectId => {
if(this.allProjectIds.indexOf(projectId) == -1){
this.allProjectIds.push(projectId)
}
});
console.log('汇总===')
console.log(this.allProjectIds)
console.log('当前===')
console.log(this.pageProjectIds)
},
//下面的方法是进行设置行标识key的方法
getRowKeys(row) {
return row.instId
},
// 回显选中数据
setCheckBox(){
if(this.projectList != null && this.projectList.length > 0 && this.allProjectIds.length > 0){
this.allProjectIds.forEach((aId) => {
this.$nextTick(() => {
this.projectList.forEach((p) => {
if(aId === p.instId){
this.$refs.projectTableRef.toggleRowSelection(p);
}
})
})
})
}
},
// 删除项目组
del(baseId){
this.$confirm('确认删除该条数据吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
center: true,
}).then(() => {
del(baseId).then(response => {
if(response.data.code=='0'){
this.$message({
type: 'success',
message: '删除成功!'
});
this.getList()
}
});
}).catch(() => {
this.$message({
type: 'info',
message: '取消删除'
});
});
},
// 清空筛选条件
restSearch(){
this.queryParams.projectName = '';
this.getList()
},
//关闭详情
closePop(event) {
this.rightEnter = false;
//this.getList(this.page);
},
sizeChange(pageSize) {
this.queryParams.size = pageSize;
this.getList();
},
currentChange(current) {
this.queryParams.current = current;
this.getList();
},
sizeChangeOfProject(pageSize) {
this.queryProjectParams.size = pageSize;
this.getProjectList();
},
currentChangeOfProject(current) {
this.queryProjectParams.current = current;
this.getProjectList();
},
},
//生命周期 - 挂载完成(可以访问DOM元素)
mounted() {
},
}
</script>
<style scoped>
.search-box {
padding: 10px 20px;
background: #fff;
border-radius: 5px;
margin-bottom: 10px;
}
.app-container {
background: #f0f0f0;
min-height: 600px;
}
.content-box {
padding: 10px 20px;
background: #fff;
padding-bottom: 30px;
}
.RightSlide {
position: absolute;
width: 80%;
background-color: #fff !important;
top: 0;
right: 0;
bottom: 5px;
z-index: 10;
-webkit-box-shadow: 0px 0px 6px #ddd;
box-shadow: 0px 0px 6px #ddd;
}
.el-tabs {
position: absolute;
width: 100%;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
.RightSlideBody .el-tabs__header {
padding: 0 20px;
}
.RightSlideBody .el-tabs__content {
position: absolute;
left: 0;
right: 0;
top: 41px;
bottom: 0;
}
.scroll-bar::-webkit-scrollbar {
width: 5px;
}
.scroll-bar::-webkit-scrollbar-thumb {
width: 5px;
height: 10px;
border-radius: 20px;
background: #ddd;
}
.content-box .el-pagination {
text-align: right;
padding: 25px 0 20px 20px;
}
</style>
<style>
.app-container .el-table thead tr th {
color: #909399;
font-weight: 500;
background-color: #fafafa !important;
}
</style>
本文介绍了如何在Vue.js中处理Element UI的表格数据,实现在多选和翻页后仍能回显已选择的表格行。关键点包括设置`row-key`属性,监听`@select`事件以及在接口查询或翻页时处理回显操作。
1万+





