news 2026/9/6 4:19:38

二十一节:进阶:用户列表批量删除功能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二十一节:进阶:用户列表批量删除功能

二十一节:进阶:用户列表批量删除功能

🎯本节目标

给用户管理表格增加多选框,勾选多条记录,实现批量删除;mock 补充批量删除接口;增加二次确认弹窗;和原有单条删除逻辑复用。

你截图里表格左侧就是多选框所在列,目前还没有实现。

步骤 1:修改用户列表页面src/views/system/user/index.vue

template 部分改动关键点

  1. el‑table 增加@selection‑change多选事件
  2. 表格第一列增加el‑table‑column type="selection"选择框
  3. 页面上方增加【批量删除】按钮,带上v‑perm权限指令
<template> <div class="user-container"> <div class="search-form"> <el-input v-model="queryParams.username" placeholder="请输入用户名" style="width:220px"></el-input> <el-button type="primary" @click="getUserList">查询</el-button> <el-button @click="resetQuery">重置</el-button> </div> <div class="btn-group"> <el-button type="primary" v-perm="'system:user:add'" @click="openAddDialog">新增用户</el-button> <!-- ✅批量删除按钮,需要system:user:remove权限 --> <el-button type="danger" v-perm="'system:user:remove'" @click="handleBatchDelete">批量删除</el-button> </div> <!-- ✅表格增加selection多选 --> <el-table :data="tableData" border @selection-change="handleSelectionChange" > <!-- 多选框列,放在表格最左侧,对应截图红框位置 --> <el-table-column type="selection" width="55" /> <el-table-column prop="id" label="ID" width="80"/> <el-table-column prop="username" label="用户名"/> <el-table-column prop="nickName" label="昵称"/> <el-table-column prop="phone" label="手机号"/> <el-table-column label="操作" width="180"> <template #default="scope"> <el-button link type="primary" v-perm="'system:user:edit'" @click="openEditDialog(scope.row)">编辑</el-button> <el-button link type="danger" v-perm="'system:user:remove'" @click="handleSingleDelete(scope.row)">删除</el-button> </template> </el-table-column> </el-table> <!-- 分页组件 --> <el-pagination v-model:current-page="queryParams.pageNum" v-model:page-size="queryParams.pageSize" :total="total" @change="getUserList" /> </div> </template>

script setup 新增逻辑

<script setup> import { ref,reactive } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import { getUserListApi,deleteUserApi } from '@/api/system/user' const tableData = ref([]) const total = ref(0) // ✅保存勾选的多行选中数据 const multipleSelection = ref([]) const queryParams = reactive({ pageNum:1, pageSize:10, username:'' }) // 多选触发,拿到选中行 const handleSelectionChange = (val) => { multipleSelection.value = val } // 获取列表 const getUserList = async () => { const res = await getUserListApi(queryParams) tableData.value = res.data.records total.value = res.data.total } // 单条删除(原有逻辑) const handleSingleDelete = (row) => { ElMessageBox.confirm('确定删除该用户?','提示',{type:'warning'}).then(async ()=>{ await deleteUserApi(row.id) ElMessage.success('删除成功') getUserList() }) } // ✅批量删除 const handleBatchDelete = () => { // 判断有没有勾选数据 if(!multipleSelection.value || multipleSelection.value.length === 0){ ElMessage.warning('请先勾选要删除的数据!') return } // 提取所有选中行id数组 const idList = multipleSelection.value.map(item => item.id) ElMessageBox.confirm(`确定删除选中 ${idList.length} 条记录?该操作不可恢复`,'警告',{ type:'danger' }).then(async ()=>{ // 调用批量删除接口 await batchDeleteUserApi({ids:idList}) ElMessage.success('批量删除成功') // 删除后清空表格勾选状态 multipleSelection.value = [] getUserList() }) } // 查询重置 const resetQuery = ()=>{ queryParams.username='' getUserList() } getUserList() </script>

步骤 2:api 文件新增批量删除接口

src/api/system/user.js

import request from '@/utils/request' // 获取用户列表 export function getUserListApi(params){ return request({url:'/api/user/list',method:'get',params}) } // 单条删除 export function deleteUserApi(id){ return request({url:`/api/user/${id}`,method:'delete'}) } // ✅批量删除接口 export function batchDeleteUserApi(data){ return request({ url:'/api/user/batchRemove', method:'delete', data })

步骤 3:mock/index.js 补充批量删除模拟接口

你现有的 mock 是对象格式,追加一条/api/user/batchRemove

'/api/user/batchRemove': ({ body }) => { // body拿到ids数组 [1,2,3] console.log('批量删除id集合',body.ids) return { code:200, msg:'批量删除成功', data:null } }

✅测试流程

  1. 保存全部文件,重启pnpm dev,登录 admin 账号
  2. 用户列表表格最左侧出现多选复选框(就是截图红框位置)
  3. 勾选多条用户,点击【批量删除】
  4. 没有勾选直接点按钮,弹出提示:请先勾选要删除的数据
  5. 弹出确认弹窗,确认后提示批量删除成功,刷新列表
  6. mock 修改perms:[],批量删除按钮会被 v‑perm 指令自动隐藏

❗常见踩坑

  1. el‑table必须绑定@selection‑change,否则拿不到选中行
  2. 批量删除传参是data:{ids:[...]}delete 请求用 body 传数组,不要用 params
  3. 删除完成,一定要清空multipleSelection.value,否则复选框状态残留

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 4:18:36

大模型推理优化:GPU、ASIC与存算一体的协同之道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/6 4:16:31

CBCT 牙颌拍片,医院如何索取?宝鸡口腔医院经历!165元一次

前言 最近因为牙齿问题&#xff0c;在宝鸡口腔医院做了一次 CBCT 牙颌拍片&#xff0c;整个过程从挂号、开单、缴费到拿到片子&#xff0c;踩了一些坑&#xff0c;也总结了一些经验。这里把完整流程和费用分享出来&#xff0c;希望能帮到准备做 CBCT 的朋友。 1. 什么是 CBCT 牙…

作者头像 李华
网站建设 2026/9/6 4:14:11

运维排查实战:从BWd3标识符分析到系统化问题定位方法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/6 4:13:34

AI开发中的小马形态:轻量级模型与架构优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/6 4:13:22

政务数据共享条例图解全复盘:从法条到PPT的拆解思路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/6 4:11:25

3个免费降AI率工具,让你的论文AIGC检测全绿通过[必看]

最近不少同学私信我&#xff0c;说论文明明是自己一个字一个字敲的&#xff0c;用AI辅助整理了一下思路&#xff0c;结果在学校的AIGC检测系统里&#xff0c;相似度直接飙到30%以上&#xff0c;人都傻了。这还真不是个例&#xff0c;随着各大查重平台上线AI检测&#xff0c;&qu…

作者头像 李华