avue-crud组件 表格回显实现

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值