• vue页面翻页勾选的记忆功能


    实现思路:

    <template>
      <div>
        <div class="customer-container">
          <el-row>
            <el-form :inline="true" :model="tableList" class="demo-form-inline">
              <el-form-item label="">
                <el-input size="mini" style="140px;" v-model="tableList.pageName" placeholder="请输入页面名称"></el-input>
                <el-input size="mini" style="140px;" v-model="tableList.shopName" placeholder="请输入店铺名称"></el-input>
                <el-button size="small" type="primary" style="margin-left: 10px;"
                           @click="getSearchPage(tableList.shopName,tableList.pageName)">查询
                </el-button>
              </el-form-item>
              <!--<el-button style="float:left;" type="primary" size="small" @click="handleChooseData">获取选中的内容</el-button>-->
            </el-form>
          </el-row>
        </div>
        <el-table ref="multipleTable" :data="gridDatas" border tooltip-effect="dark"  style=" 100%;" @selection-change="handleSelectionChange">
          <el-table-column type="selection" width="55"></el-table-column>
          <el-table-column prop="pho" label="图片">
            <!– 图片的显示 –>
            <template   slot-scope="scope">
              <img :src="scope.row.pho"  min-width="70" height="70" />
            </template>
          </el-table-column>
          <el-table-column prop="goodsName" label="商品名称">
          </el-table-column>
        </el-table>
        <el-pagination class="pagination" @size-change="SizeChangeDanpin" @current-change="handleCurrentChange" background layout="total, prev, pager, next , jumper" :current-page.sync="tableList.pageIndex" :total="totalCount">
        </el-pagination>
      </div>
    </template>
    

    定义data值:

    data() {
      return {
        selectedData:[],
        tableList: {
          goodsName: '',
          companyId: '00000001',
          pageIndex: 1,
          goodsId: ''
        },
        gridDatas: [],
        totalCount:1,
        idKey: 'goodsId', // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
        multipleSelection: [],
        multipleSelectionAll:[],//所有选中的数据包含跨页数据
      }
    },
    

    方法中定义:

    methods: {
        setSelectRow() {
          if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
            return;
          }
          // 标识当前行的唯一键的名称
          let idKey = this.idKey;
          let selectAllIds = [];
          let that = this;
          this.multipleSelectionAll.forEach(row=>{
            selectAllIds.push(row[idKey]);
          })
          this.$refs.multipleTable.clearSelection();
          for(var i = 0; i < this.gridDatas.length; i++) {
            if (selectAllIds.indexOf(this.gridDatas[i][idKey]) >= 0) {
              // 设置选中,记住table组件需要使用ref="table"
              this.$refs.multipleTable.toggleRowSelection(this.gridDatas[i], true);
            }
          }
        } ,
        // 记忆选择核心方法
        changePageCoreRecordData () {
          // 标识当前行的唯一键的名称
          let idKey = this.idKey;
          let that = this;
          // 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
          if (this.multipleSelectionAll.length <= 0) {
            this.multipleSelectionAll = this.multipleSelection;
            return;
          }
          // 总选择里面的key集合
          let selectAllIds = [];
          this.multipleSelectionAll.forEach(row=>{
            selectAllIds.push(row[idKey]);
          })
          console.log(this.multipleSelectionAll)
          console.log(selectAllIds)
          let selectIds = []
          // 获取当前页选中的id
          this.multipleSelection.forEach(row=>{
            selectIds.push(row[idKey]);
            // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
            if (selectAllIds.indexOf(row[idKey]) < 0) {
              that.multipleSelectionAll.push(row);
            }
          })
          let noSelectIds = [];
          // 得到当前页没有选中的id
          this.gridDatas.forEach(row=>{
            if (selectIds.indexOf(row[idKey]) < 0) {
              noSelectIds.push(row[idKey]);
            }
          })
          noSelectIds.forEach(id=>{
            if (selectAllIds.indexOf(id) >= 0) {
              for(let i = 0; i< that.multipleSelectionAll.length; i ++) {
                if (that.multipleSelectionAll[i][idKey] == id) {
                  // 如果总选择中有未被选中的,那么就删除这条
                  that.multipleSelectionAll.splice(i, 1);
                  break;
                }
              }
            }
          })
        },
        //点击商品名称页
        handleCurrentChange(val) {
          this.changePageCoreRecordData();
          this.tableList.pageIndex=val;
          this.getDatas();
        },
        // 改变单品表格每页数目
        SizeChangeDanpin(val) {
          this.changePageCoreRecordData();
          console.log(`每页 ${val} 条`);
        },
        getDatas(){
          WxHomeGoodOn(this.tableList).then((data) => {
            this.loading = false;
            if(data.code === 1){
                if(data !==''){
                this.loading = false;
                this.gridDatas = data.data;
                this.totalCount = data.pageInfo.totalCount;
                  setTimeout(()=>{
                    this.setSelectRow();
                  }, 200)
              }
            }
          }).catch(message => {
            console.log('"请求失败"')
            this.loading = false;
          })
        },
        handleSelectionChange(val) {
          this.multipleSelection = val;
        },
        // 得到选中的所有数据
        getAllSelectionData() {
          // 再执行一次记忆勾选数据匹配,目的是为了在当前页操作勾选后直接获取选中数据
          this.changePageCoreRecordData();
          console.log(this.multipleSelectionAll)
        }
      },
      mounted(){
        this.$nextTick(function () {
          // 初始化渲染
          this.tableList.pageIndex = 1
          this.getDatas()
        })
      }
  • 相关阅读:
    SQL注入过滤
    ASP.NET长文章分页
    简单的权限管理类
    不错的面试题
    【转载】【重要】Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用小结
    回到xwindows
    suse11 linux不自动启动xwindows
    flash的几种工具
    mencoder和ffmpeg参数详解
    ffmpeg和Mencoder使用实例小全
  • 原文地址:https://www.cnblogs.com/anjing940/p/10207283.html
Copyright © 2020-2023  润新知