avue框架
最近用到了avue框架,在实现表格项目回显的时候,遇到了一些问题,特再次做了记录,也希望对遇到相同问题的码友,有所帮助
crud组件
avue中crud组件可以实现很多功能,可以通过不同的配置项,来实现表格的展示、搜索、分页等功能,本文主要讲述在表格多选中,对需要回显的项进行勾选,以及提交数据时,发送修改后的数据传给服务端
实现回显的核心代码
let selectedItems = []
selectedItems = this.data.filter(item => this.currSelection.includes(item.id.toString()))
const selectedItemIds = selectedItems.map(ele => ele.id);
this.$refs.crud.toggleSelection(selectedItems);
if(selectedItems.length){
this.currSelection = this.currSelection.filter(item => !selectedItemIds.includes(+item))
}
项目的完整代码
<template>
<avue-crud :option="option"
:table-loading="loading"
:data="data"
:page="page"
:search.sync="search"
:before-open="beforeOpen"
v-model="form"
ref="crud"
@search-change="searchChange"
@search-reset="searchReset"
@selection-change="selectionChange"
@current-change="currentChange"
@size-change="sizeChange"
@on-load="onLoad">
</avue-crud>
</template>
<script>
import { submitSubmit,getStudentList } from "@/api/library/contentLibrary";
export default {
data() {
return {
//currSelection存储了需要回显的项id
currSelection:this.$props.member.memberIds && this.$props.member.memberIds.split(",") || [],
data:[],
selectionList: [],
search:{},
form: {},
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0
},
option: {
height: 400,
calcHeight: 300,
searchShow: true,
searchMenuSpan: 6,
tip: false,
border: true,
index: false,
viewBtn: false,
addBtn: false,
delBtn:false,
editBtn:false,
selection: true,
refreshBtn:false,
menu:false,
align:"center",
reserveSelection:true,
column: [
{
label: "ID",
prop: "id",
addDisplay: false,
editDisplay: false,
search:true
},
{
label: "手机",
prop: "mobile",
search:true,
maxlength:11,
rules: [{
required: false,
trigger: "blur"
}]
},
{
label: "姓名",
prop: "realName",
search:true,
}
]
},
};
},
methods: {
sizeChange(pageSize){
this.page.pageSize = pageSize;
},
currentChange(currentPage){
this.page.currentPage = currentPage;
},
selectionChange(list) {
this.selectionList = list;
},
searchReset() {
this.page.currentPage = 1;
this.onLoad(this.page);
},
searchChange(params,done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad(this.page, params);
done()
},
onLoad(page, params = {}) {
this.loading = true;
getStudentList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
const data = res.data.data;
this.page.total = String(data.total);
this.data = data.records;
this.loading = false;
let selectedItems = []
selectedItems = this.data.filter(item => this.currSelection.includes(item.id.toString()))
const selectedItemIds = selectedItems.map(ele => ele.id);
this.$refs.crud.toggleSelection(selectedItems);
if(selectedItems.length){
this.currSelection = this.currSelection.filter(item => !selectedItemIds.includes(+item))
}
});
},
// 修改的方法,放在父组件中调用
setSubmit(){
let data = {
id:'',
memberIds:'',
memberType:0,
roleId:'',
storageId:''
}
this.selectionList.forEach(data =>{
this.currSelection.push(data.id.toString())
})
data.memberIds = this.currSelection.join(',')
data.storageId = this.$props.member.storageId || ''
data.roleId = this.$props.member.id || ''
data.id = this.$props.member.memId || ''
submitSubmit(data).then(res=>{
this.selectionList = [];
this.$message({
type: "success",
message: "操作成功!"
});
})
},
},
props:{
member:Object
},
};
</script>