elementPlus + table 树形懒加载 新增,删除,修改 局部刷新

news/2024/11/16 19:35:12/

#直接上代码#

 1.表格数据

 2.数据源

<m-table 
ref="cTable" 
v-if="Object.keys(props.tableData).length" 
:options="props.tableOptions"
:data="props.tableData.data" 
:isLoading="props.tableData.loading" 
elementLoadingText="加载中..."elementLoadingBackground="rgba(0,0,0,.8)" 
isEditRow 
lazy 
row-key="id" 
:load="loadTree"
:tree-props="{ children: 'lstChildrenModule', hasChildren: 'hasChildren' }"
:header-cell-style="props.tableClass.headerCellStyle" 
border><!--操作栏--><template #subAction="scope"><el-tooltip effect="dark" content="添加子菜单" placement="top-start"><el-button circle :icon="Plus" size="small" type="primary"@click="toMenuEditAdd(scope.scope.row, 'subAdd')"></el-button></el-tooltip><el-tooltip effect="dark" content="修改平台" placement="top-start"><el-button circle :icon="Edit" size="small" type="primary"@click="toMenuEditAdd(scope.scope.row, 'edit')"></el-button></el-tooltip><el-tooltip effect="dark" content="删除平台" placement="top-start"><el-button circle :icon="Delete" size="small" type="danger"@click="onRowDel(scope.scope.row, 'del')"></el-button></el-tooltip></template><!--操作栏--></m-table>

3 运行结果

4.初始化懒加载数据

let cTable = ref();
const loadMap = new Map();
/*** 懒加载菜单* @times 2023-09-04 16:46* @link https://blog.csdn.net/a4561614* @param {row,treeNode,resolve}* @returns []* @method loadTree 懒加载菜单*/
const loadTree = async (row, treeNode, resolve) => {let obj = {"moduleNo": "",      //模块编号"moduleName": "",    //模块名称"parentNo": row.moduleNo,      //父编号"appNo": row.appNo,         //平台编号"isDelete": false}let res = await useMenuApi().getModulesAll(obj)setTimeout(() => {//将获取到的节点数据添加到loadMap缓存中,用于每次操作节点时进行过滤判断loadMap.set(row.moduleNo, { row, treeNode, resolve });resolve(res.results)}, 1000)
};

5,全局添加/子菜单添加/编辑

//引入每次点击保存再数据管理层用于判断更新节点import { paremData } from '/@/stores/paremData';/**
* @author ken
* @version 1.0
* @method addMenuEditModal  弹窗
* @description 新增菜单
*/
let addMenuEditModal = (row,type) => {state.menuData.type = type;// menuRef.value?.restForm();//如果是菜单添加时,当前行的模块名称为父节点parentNo数据//如果是编辑时,当前行的模块名称为模块名称,当前行的父节点parentNo为parentNo数据state.menDefaultsData=type=='edit'?row:{}state.menDefaultsData.parentNo= type=='add'?'': (type=='edit'?row.parentNo:row.moduleNo);//如果是点击编辑和新增子菜单时存入当前行的row数据paremData().setTreeRow((type=='edit' || type=='subAdd' )?row: {});state.menuData.title =type=='edit'?"编辑菜单": "添加菜单";state.menuData.okTxt = type=='edit'?"确定编辑": "确定";menuDialogVisibles.value = true;
}/*** @author ken* @version 1.0* @param   {form}* @method confirmMenuData  * @description  新增菜单提交数据*/
const confirmMenuData = (form)=>{let validate = form.validate()let model = form.getFormData()validate(async (valid) => {if (valid) {if(model.parentNo instanceof Array){model.parentNo=model.parentNo.toString();}if(!model.appNo){model.appNo=paremData().getAppNo?paremData().getAppNo:row.appNo;}let res = await useMenuApi().moduleSaveOrUpdate(model)if (!res.hasErr) {menuDialogVisibles.value = false;ElMessage.success(res.msg);//如果是子菜单添加,通过当前点击的行内数据hasChildren判判断是否存在二级或者多级数据,当为true时 取parentNo作为父节点,为false 吧moduleNo为父节点//通过parentNo,moduleNo 到 loadMap 去缓存中查找数据,然后通过查找出来的数据中取 (id ,因为table中定义了 row-key="id")进行过滤重置或者清除Tree缓存数据,//如果不存在就直接刷新当前页面if(option.menuData.type=='subAdd' || option.menuData.type=='edit'){let row=paremData().getTreeRow;containerSideRef.value.reloadTree(row.hasChildren==false?row.parentNo:row.moduleNo);}if(option.menuData.type=='add'){getModulesPageData();}menuRef.value?.restForm()} else {ElMessage.error(res.msg);}}})
}/*** @author ken* @version 1.0* @param   {row,type}//当前行的数据,类型为删除* @method removeMenuData  * @description  删除子节点后,去刷新页面*/
const removeMenuData = (row,type)=>{ElMessageBox.confirm(`此操作将永久删除:${row.moduleName}, 是否继续?`, '提示', {confirmButtonText: '删除',cancelButtonText: '取消',type: 'warning',}).then(async() => {let res=await useMenuApi().removeModules({moduleNo:row.moduleNo,isDelete:true});if(!res.hasErr){containerSideRef.value.reloadTree(row.parentNo);ElMessage.success('删除成功');}else{ElMessage.error(res.msg)}}).catch(() => {});
}/*** @times 2023-09-04 16:46* @link https://blog.csdn.net/a4561614* @param {parentNo}* @returns []* @method reloadTree 重新懒加载菜单栏*/
const reloadTree = (parentNo) => {parentNo = parentNo ? parentNo : '';//从const loadMap = new Map();判断是否存在let objs = loadMap.get(parentNo);if (objs == undefined || objs == '') {//刷新页面emits('refresh-menu-data')} else {//执行通过id清除缓存中的数据const { row, treeNode, resolve } = objs;cTable.value.removeCacheTree(row.id);//重新懒加载一次loadTree(row, treeNode, resolve);}
};/*** @author ken* @version 1.0* @param  row   刷新子节点数据* @method removeCacheTree  清除事件* @description  //刷新子节点数据*/
const removeCacheTree=(id)=>{//通过ref获取table的子节点数if (table_ref.value.store.states.lazyTreeNodeMap.value[id].length > 1) {//说明该节点下有多个子节点table_ref.value.store.states.lazyTreeNodeMap[id] = [];} else {//说明该节点只有一个节点table_ref.value.store.states.lazyTreeNodeMap.value[id] = [];}
}

6.paremData.js

import { defineStore } from 'pinia';/*** 参数数据管理* @methods setParemData 设置参数数据管理*/
export const paremData = defineStore('paremStoreData', {state: () => ({treeRow:{}//树形菜单当前行缓存}),getters:{getTreeRow(state){return state.treeRow}},actions: {setTreeRow(row){//存储树形行菜单数据this.treeRow=row;}},
});

 !完结


http://www.ppmy.cn/news/1094376.html

相关文章

OJ练习第165题——修车的最少时间

修车的最少时间 力扣链接&#xff1a;2594. 修车的最少时间 题目描述 给你一个整数数组 ranks &#xff0c;表示一些机械工的 能力值 。ranksi 是第 i 位机械工的能力值。能力值为 r 的机械工可以在 r * n2 分钟内修好 n 辆车。 同时给你一个整数 cars &#xff0c;表示总…

K8S:kubeadm搭建K8S+Harbor 私有仓库

文章目录 一.部署规划1.主机规划2.部署流程 二.kubeadm搭建K8S1.环境准备2.安装docker3. 安装kubeadm&#xff0c;kubelet和kubectl4.部署K8S集群&#xff08;1&#xff09;初始化&#xff08;2&#xff09;部署网络插件flannel&#xff08;3&#xff09;创建 pod 资源 5.部署 …

初入行的IC工程师,如何快速提高自己的竞争力?

要想成为越来越吃香的IC工程师&#xff0c;就会先经历初期的成长阶段。今天就来聊聊初入行的ICer如何快速提升自己的竞争力&#xff08;验证篇&#xff09;。 首先希望大家在选择IC行业的时候就有清晰的认知&#xff0c;这是一个不得不深耕技术的行业。我们今天所谈论的快速提…

报错:crbug/1173575 non-js module files deprecated

环境&#xff1a; vue3 &#xff0c; visual studio code, bulma 背景&#xff1a; 在代码中&#xff0c;使用标签来进行导航栏跳转。 如&#xff1a; <div class"navbar-start"><a href"/groups">产品</router-link> </div>执…

SpringMVC: Java Web应用开发的框架之选

引言 在当今的软件开发领域中&#xff0c;Web应用的需求不断增长。为了满足这种需求&#xff0c;各种Web框架应运而生。其中&#xff0c;SpringMVC作为一种优秀的Java Web框架&#xff0c;受到广泛关注和使用。本文将以文章的形式给您讲解SpringMVC的重要概念、工作原理和核心…

算法笔记:堆

【如无特别说明&#xff0c;皆为最小二叉堆】 1 介绍 2 特性 结构性&#xff1a;符合完全二叉树的结构有序性&#xff1a;满足父节点小于子节点&#xff08;最小化堆&#xff09;或父节点大于子节点&#xff08;最大化堆&#xff09; 3 二叉堆的存储 顺序存储 二叉堆的有序…

达之云BI平台助力中国融通集团陕西军民服务社有限公司实现数字化运营

中国融通集团陕西军民服务社是一家大型综合类零售购物中心&#xff0c;公司目前管理系统运行了10年左右&#xff0c;面临系统新零售支持发展严重滞后&#xff0c;行业主流应用落地困难&#xff0c;如线上业务、到家业务、全渠道营销、电子发票、自助收银、扫码购、无感停车、未…

横版武侠手游推荐,有什么武侠游戏好玩的手游?

武侠游戏是游戏市场上不可或缺的游戏类型&#xff0c;许多武侠手游沿用了经典武侠小说中的各种设置&#xff0c;为玩家创造了一个身临其境的世界。有什么武侠游戏好玩的手游&#xff1f;今天小编就为大家带来了横版武侠手游推荐&#xff0c;这些游戏的游戏性和操作感是同类游戏…