首页 > 其他分享 >多选批量删除 + 跨分页保留多选

多选批量删除 + 跨分页保留多选

时间:2023-12-05 23:23:38浏览次数:22  
标签:selection const 多选 删除 批量 value multipleGoodsSelection 分页

批量删除场景

普通的批量删除实现:

  • template 显示结构

    <el-button type="danger" class="ele-btn-icon" :icon="Delete" @click="deleteSomeGoods" :disabled="multipleGoodsSelection.length === 0">批量删除</el-button>
    
    <el-table :data="appGoodsList" @selection-change="handleGoodsSelect">
        <el-table-column type="selection" width="55" align="center" :reserve-selection="true" />
        <el-table-column type="index" label="序号" width="50" align="center"/>
        <el-table-column prop="goodsName" label="商品名称" width="180" align="center" />
    
    • 上述代码的 el-table-column 标签里的 type
      • selection 就是选择框,批量删除选择时所用
      • index 就是一页的序号(与功能无关,只是显示所用)
  • javascript 编写事件功能

    /**
     * 点击删除
     */
    const deleteSomeGoods = () => {
        ElMessageBox.confirm(`确定删除:${multipleGoodsSelection.value.length}个商品?`, "提示", {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning',
    
        }).then(() => {
            // 删除方法 delSomeGoods
            appGoodsApi.delSomeGoods(multipleGoodsSelection.value, function (res) {
                ElMessage({
                    type: 'success',
                    message: '删除商品成功'
                })
                // 重新获取删除后的商品列表
                getGoodsList();
            });
        }).catch(() => {
        })
    };
    
    /**
     * 批量删除
     */
    const multipleGoodsSelection = ref([]);// 记录选中商品的列表
    
    /**
     * 单选框选择删除
     */
    const handleGoodsSelect = (selection) => {
    	multipleGoodsSelection.value = selection;
    };
    
    • 这个 $ 符号在字符串中通常用作插入变量的方式,它是一个模板字符串(template string)的表示方式,由反引号()包围。在 JavaScript 中,模板字符串可以插入变量,通过在变量名前后加上 ${}来标识,这里 ${multipleGoodsSelection.value.length} 就直接替换成了 multipleGoodsSelection.value.length 的具体值
  • 分页显示的话请参考分页组件 Pagination 官方网址:https://element-plus.org/en-US/component/pagination.html#contributors

多页跨页删除

  • 只编写上述的批量删除和分页的话,在第一页选择了想批量删除的商品后,翻到第二页再回到第一页就会发现:第一页选过的商品又变回了未选择的状态

  • 而想要的功能是:在第一页选择了想删除的商品后,翻到其他页后,继续选择,并且回到第一页,选择要删除的那些商品仍处于被选中的状态,而且不管在第几页,被选中过了的商品都可以保留下来并实现批量删除

  • 更改 template 结构内容

    <template>
    
    <el-table :data="appGoodsList" @selection-change="handleGoodsSelect" :row-key="getRowKeys" ref="tableRef">
        <el-table-column type="selection" width="55" align="center" :reserve-selection="true" />
        <el-table-column type="index" label="序号" width="50" align="center"/>
        <el-table-column prop="goodsId" label="商品ID" v-if="false"/>
        
        <!--  ......  -->
    </template>
    
    • :row-key="getRowKeys" 是为了获取 id,用于指定每行数据的唯一标识符,以便 Vue 在重新渲染时能够正确地识别和保持行的状态,通常都是配合 reserve-selection 来使用
    • reserve-selection 就是用于保留之前已选择的数据项的配置,即:表格会在刷新或重新加载时记住之前已选择的项
      • 当用户选择了某些行时,如果切换页面或对表格进行一些操作,有时可能希望保留用户之前已选择的行,而不是在操作后重新选择就需要这个属性
  • 对应的 <script>

    /**
    * 保留key
    */
    const getRowKeys = (row) =>{
        return row.goodsId; // 提供id,用于handleGoodsSelect获取
    }
    
    const multipleGoodsSelection = ref([]); // 选中的商品列表
    const tableRef = ref(null); // return出来,对应着表中的ref
    
    /**
    * 单选框选择删除
    */
    const handleGoodsSelect = (selection) => {
        multipleGoodsSelection.value = selection.map(row => row.goodsId); // 用id来记住选择过的信息
    };
    
    const deleteSomeGoods = () => {
        ElMessageBox.confirm(`确定删除:${multipleGoodsSelection.value.length}个商品?`, "提示", {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning',
        }).then(() => {
            appGoodsApi.delSomeGoods(multipleGoodsSelection.value, function (res) {
                ElMessage({
                    type: 'success',
                    message: '删除商品成功'
                })
                // 这里虽然置空了multipleGoodsSelection,但在handleGoodsSelect方法中还是会一下子获取删除过了的商品的key,也就是id,没有真正做到"置空"
                multipleGoodsSelection.value = [];
                // 所以就要加上以下语句,来清除表格中的选择状态,这样就不会有已经删除了的信息了
                tableRef.value.clearSelection();
                getGoodsList();
            });
        }).catch(() => {
        })
    };
    
  • 就此完成了跨页的批量删除功能

标签:selection,const,多选,删除,批量,value,multipleGoodsSelection,分页
From: https://www.cnblogs.com/zhu-ya-zhu/p/17878559.html

相关文章

  • tableau 工作表分页
    原创优阅达数据科技有限公司 https://mp.weixin.qq.com/s?__biz=MzA5MTU3NDI2NQ==&mid=2649465570&idx=1&sn=8211c332bd60ef66953aeb4d6f21a4d9&chksm=88655874bf12d162d32c2d5b5a2461d909dd6e2be840ecea2359fba7f349f2d1f0ef9c6f156a&scene=178&cur_album_id=156......
  • windows批量修改文件名-ren命令(重命名)
    windows批量修改文件名-ren命令(重命名)重点:文件名一对一对应1.进入要批量修改文件名的目录,在地址栏输入cmd,回车进入命令行模式2.执行dir/b>G:\Desktop\1.txt,将文件名拷贝到1.txt文件中。  3.新建一个excle表格,将文件名一对一对应,可借助分列排序,将文件名一对一对应。......
  • 金蝶云星空单据编辑界面,不允许批量填充操作【分条件】
    一、前提说明上一个文章的设计,不管是填充值,还是清空值都一律不允许,但是有时候业务就允许清空,不允许填充值而已。 二、案例演示售后单,明细信息单据体,物料编码字段为空,允许填充,物料编码不为空,禁止批量填充。 三、开发设计编写表单插件,在BeforeEntryBatchFill事件。publico......
  • 分页符号的作用
    一、需求1、比如在下面的三页文章中,需要对中间的一个页面做横向设置,并且需要添加页框的设置如何进行操作二、分页符的作用打开word,插入--分页---创建三个空白的word纸张开始--分页符,空白页面中会显示----分页符----字样,当需要删除时,鼠标放在分页符前面,点击delete可删除......
  • 金蝶云星空单据编辑界面,不允许批量填充操作
    一、案例演示售后单,明细信息单据体,物料编码字段禁止批量填充。 二、开发设计编写表单插件,在BeforeEntryBatchFill事件。publicoverridevoidBeforeEntryBatchFill(BeforeBatchFillEventArgse){base.BeforeEntryBatchFill(e);//单个字段//if(e.FieldKey.E......
  • ant design使用,批量添加单词,修改单个单词
    backend项目页面路径:/Users/songximing/backend/src/pages/app/listen/Words/index.tsx弹窗修改单个单词,列表的input没变,解决办法参考:https://blog.csdn.net/weixin_42881588/article/details/124406364reactinput的defaultValue不会变化给input加了个key:{ti......
  • MATLAB的SAVE命令动态批量保存TXT文件
    使用save();fori=1:6str=[num2str(i),’.txt’];m=[12;34];save(str,’m’,’-ascii’);%注意m的单引号,一定记得加上,否则出错end 将会得到1.txt,2.txt,3.txt,4.txt,5.txt,6.txt.(注意上段代码只是实例,不可在matlab中直接运行,因为输入可能夹杂中文符号,可能出错,最......
  • easypoi大批量导出excel数据
    easypoi导出excel数据最近,面临了一个新的需求,需要将表中的几百万数据导出到Excel文件中。为了满足这一需求,我决定采用EasyPoi库来实现该功能,并生成压缩包。<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId>......
  • Mybatis pageHelper分页
    转载自:www.javaman.cn目前主流的分页MyBatis-Plus分页和PageHelper分页,两者区别如下:集成方式:MyBatis-Plus:通过内置的拦截器实现分页功能,需要添加分页插件的配置。PageHelper:通过MyBatis的拦截器实现分页,以插件的形式与MyBatis集成。使用方式:MyBatis-Plus:调用内置方法进行分......
  • mysql批量替换字段
    一、需求将数据库内指定的数据进行批量修改,可使用replace函数如IP:端口号,只改端口号的部分,将所有192.168.1.1:8001的数据8001的端口号修改为3001replace函数的用法如下:(可实现将满足条件的A的数组从B替换至C)selectrepalce(A,'B','C')astestfromABCwhereAlike'%xxx%'二、......