0


vue+elementui实现下拉表格多选+搜索+分页+回显+全选2.0

一、vue+elementui实现下拉表格多选+搜索1.0

二、vue+elementui实现下拉表格多选+搜索+分页+回显+全选2.0

在1.0的基础上,终于可以实现在下拉框表格分页的前提下不同页码的回显辣,分页是前端来分页的(代码略乱且没有封装还很长,随便看看吧)

在这里插入图片描述
在这里插入图片描述

1、在使用之前首先要安装Element-ui

1-1、template

<template><div class="goodsindex"><div class="allBox" v-loading="isloading"><el-select
        id="equBox"
        ref="select"
        clearable
        multiple
        v-model="group.equIdList"
        placeholder="请选择设备"
        @change="handleEquId"
        @click.native="deptogglePanel($event)"><el-option
          v-for="(item, i) in group.pageAllList":key="i":label="item.equNumber":value="item.equId"></el-option></el-select><div
        v-if="group.showTree"class="treeDiv"
        id="treeDiv"
        ref="tableList":style="{ top: group.equBoxTop + 'px' }"><div class="equSElect"><el-input
            v-model="group.name"
            clearable
            size="mini"
            style="margin-right: 15px; width: 50%"
            placeholder="设备编码/名称"
            @keyup.enter.native="select"></el-input><el-button type="primary" size="mini" @click="select">搜索</el-button></div><!-- 检索结果 --><el-table
          :data="group.pageList"
          border
          size="mini"
          style="margin: 10px 0"
          ref="multipleTable"
          id="multipleTable"
          row-key="equId"
          @row-click="handleRegionNodeClick"
          @select="handleCheckBox"
          @select-all="handleSelectAll"
          @selection-change="selectionChangeHandle"><el-table-column
            type="selection"
            header-align="center"
            align="center"
            width="50"></el-table-column><el-table-column
            prop="equNumber"
            header-align="center"
            align="center"
            label="设备编码"
            min-width="180"></el-table-column><el-table-column
            prop="equName"
            header-align="center"
            align="center"
            label="设备名称"
            min-width="180"></el-table-column></el-table><!-- 分页 --><el-pagination
          background
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange":current-page="group.currentPage":page-size="group.pageSize"
          layout="total, prev, pager, next":total="group.totalPage"></el-pagination></div></div></div></template>

1-2、script

exportdefault{data(){return{isShowSelect:true,//隐藏select本来的下拉框group:{name:"",// 搜索pageAllList:[],// 下拉框数据pageList:[],// 表格数据showTree:false,// 表格显示隐藏isbg:false,//整体背景equIdList:[],// 下拉框选中数据multipleSelection:[],// 表格选中数据equBoxTop:46,// 表格原始定位topcurrentPage:1,pageSize:8,totalPage:0,},};},computed:{},watch:{isShowSelect(val){// 隐藏select自带的下拉框this.$refs.select.blur();},},asynccreated(){awaitthis.getSelectList();awaitthis.getDataList();awaitthis.getPage(this.equIdList);},methods:{//下面的方法是进行设置行标识key的方法getRowKeys(row){return row.equId;},//设备handleEquId(val){this.group.multipleSelection = val;this.getDataList();},// 分页handleSizeChange(val){this.group.pageSize = val;this.getDataList();},// 分页handleCurrentChange(val){this.group.currentPage = val;this.getDataList();},//搜素select(){this.group.currentPage =1;this.getDataList();},// 设备下拉选获取选中页数 回显的时候计算出第一条数据在那一页asyncgetPage(equInfoIds){let equId = equInfoIds;let pageIndex =0;let pageIndexArr =[];for(let i inthis.group.pageAllList){for(let j in equId){if(equId[j]==this.group.pageAllList[i].equId){
            pageIndex = Math.floor(i /this.group.pageSize)+1;if(i ==0){
              pageIndex =1;// 如果是第一条数据,它在第一页}
            pageIndexArr.push(pageIndex);}}}const uniqueArr = Array.from(newSet(pageIndexArr));this.group.currentPage = uniqueArr[0];// console.log("那一页", uniqueArr);awaitthis.getDataList();},//获取表格列表asyncgetDataList(){this.isloading =true;awaitthis.Sevice({url:"/select",method:"post",params:{name:this.group.name,},}).then((res)=>{if(res && res.code ==200){// res.select的数据类型 [{equId:1,equNumber:2,equName:3}]this.group.pageList = res.select;this.group.pageList =this.group.pageList.slice((this.group.currentPage -1)*this.group.pageSize,this.group.currentPage *this.group.pageSize
            );this.group.totalPage = res.select.length;this.$nextTick(()=>{if(this.$refs.multipleTable){this.group.pageList.forEach((item, index)=>{if(this.group.multipleSelection.findIndex((v)=> v == item.equId
                    )>=0){this.$refs.multipleTable.toggleRowSelection(this.$refs.multipleTable.data[index],true);}});}});// console.log("multipleSelection", this.multipleSelection);}else{this.group.pageList =[];this.group.totalPage =0;}}).catch((err)=>{
          console.log(err);});this.isloading =false;},// 下拉框列表(因为有接口有搜索,所以下拉框和表格分两个接口获取)asyncgetSelectList(){this.isloading =true;awaitthis.Sevice({url:"/select",method:"post",}).then((res)=>{if(res && res.code ==200){// res.select的数据类型 [{equId:1,equNumber:2,equName:3}]this.group.pageAllList = res.select;}}).catch((err)=>{
          console.log(err);});this.isloading =false;},// 多选selectionChangeHandle(val){this.showTree =true;},//该方法是单选时的方法handleCheckBox(rows, row){this.showTree =true;if(this.group.multipleSelection.find((item)=> item == row.equId)){//下面这个filter方法就是删除的方法this.group.multipleSelection =this.group.multipleSelection.filter((item)=> item != row.equId
        );}else{this.group.multipleSelection.push(row.equId);}// console.log("选中id2:", this.group.multipleSelection);this.group.equIdList =this.group.multipleSelection;},//该方法是当页全选的方法handleSelectAll(rows){this.showTree =true;if(rows.length){
        rows.forEach((row)=>{if(!this.group.multipleSelection.find((item)=> item == row.equId)){this.group.multipleSelection.push(row.equId);}});}else{this.group.pageList.forEach((row)=>{this.group.multipleSelection =this.group.multipleSelection.filter((item)=> item != row.equId
          );});}// console.log("选中id1:", this.group.multipleSelection);this.group.equIdList =this.group.multipleSelection;},// 点击input 阻止冒泡 控制table显示隐藏asyncdeptogglePanel(event){// console.log(event);this.group.isbg =true;this.isShowSelect =!this.isShowSelect;//隐藏select本来的下拉框
      event ||(event = window.event);
      event.stopPropagation
        ?await event.stopPropagation():(event.cancelBubble =true);this.group.showTree ?awaitthis.tableHide():awaitthis.tableShow();awaitthis.getDataList();},//隐藏表格asynctableHide(){this.group.showTree =false;await document.addEventListener("click",this.tableHideList,false);},//显示表格asynctableShow(){this.group.showTree =true;await document.addEventListener("click",this.tableHideList,false);this.$nextTick(()=>{let equBox = document.getElementById("equBox").offsetHeight;this.group.equBoxTop = equBox +10;// 表格的高度定位,应该按照所选择的});},asynctableHideList(e){let that =this;
      that.$nextTick(async()=>{let multipleTable = document.getElementById("treeDiv");if(multipleTable &&!multipleTable.contains(e.target)){await that.tableHide();}});},// 点击table节点asynchandleRegionNodeClick(){this.showTree =true;},},};</script>

1-3、style

<style scoped>.allBox {position: relative;width:100%;}.equSElect {display: flex;}.treeDiv {position: absolute;top: 46px;
  z-index:9999999!important;width:calc(100%- 20px);overflow: auto;
  max-height: 390px;
  border-radius: 6px;background: #ffffff;padding: 8px 10px;
  box-shadow:0 5px 5px #cccbcb;border: 1px solid #e6e5e5;margin:0 10px;}.treeDiv::-webkit-scrollbar {/*滚动条整体样式*/width: 4px;/*高宽分别对应横竖滚动条的尺寸*/height: 4px;}.treeDiv::-webkit-scrollbar-thumb {/*滚动条里面小方块*/
  border-radius: 5px;-webkit-box-shadow: inset 00 5px rgba(0,0,0,0.2);background:rgba(0,0,0,0.2);}.treeDiv::-webkit-scrollbar-track {/*滚动条里面轨道*/-webkit-box-shadow: inset 00 5px rgba(0,0,0,0.2);
  border-radius:0;background:rgba(0,0,0,0.1);}.treeDiv .el-table {
  font-size: 14px;}.treeDiv .el-table /deep/ td {padding: 4px 0;}</style>

2、完结撒花(后期我一定会封装的 立个flag)

请添加图片描述

标签: vue.js elementui 前端

本文转载自: https://blog.csdn.net/weixin_43787161/article/details/140845915
版权归原作者 子曰 . 所有, 如有侵权,请联系我们删除。

“vue+elementui实现下拉表格多选+搜索+分页+回显+全选2.0”的评论:

还没有评论