优化芋道后台菜单管理卡顿问题element-plus版本

2024-09-01 13:20

本文主要是介绍优化芋道后台菜单管理卡顿问题element-plus版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.原因分析

芋道后台菜单管理使用element-plus的table组件进行页面显示。因一次加载数据太多导致页面需全部进行渲染非常卡顿。

处理方案:1、修改页面数据只渲染父级。

2.dome源代码

    <el-tablev-if="refreshTable"v-loading="loading":data="list":default-expand-all="isExpandAll"row-key="id"lazy:load="load":tree-props="{ children: 'children', hasChildren: 'hasChildren' }"><el-table-column :show-overflow-tooltip="true" label="菜单名称" prop="name" width="250" /><el-table-column align="center" label="图标" prop="icon" width="100"><template #default="scope"><Icon :icon="scope.row.icon" /></template></el-table-column><el-table-column label="排序" prop="sort" width="60" /><el-table-column :show-overflow-tooltip="true" label="权限标识" prop="permission" /><el-table-column :show-overflow-tooltip="true" label="组件路径" prop="component" /><el-table-column :show-overflow-tooltip="true" label="组件名称" prop="componentName" /><el-table-column label="状态" prop="status" width="80"><template #default="scope"><dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" /></template></el-table-column><el-table-column align="center" label="操作"><template #default="scope"><el-buttonv-hasPermi="['system:menu:update']"linktype="primary"@click="openForm('update', scope.row.id)">修改</el-button><el-buttonv-hasPermi="['system:menu:create']"linktype="primary"@click="openForm('create', undefined, scope.row.id)">新增</el-button><el-buttonv-hasPermi="['system:menu:delete']"linktype="danger"@click="handleDelete(scope.row.id)">删除</el-button></template></el-table-column></el-table>

3.JS代码源代码

 

<script lang="ts" setup>
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { handleTree} from '@/utils/tree'
import * as MenuApi from '@/api/system/menu'
import MenuForm from './MenuForm.vue'
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'defineOptions({ name: 'SystemMenu' })const { wsCache } = useCache()
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗const loading = ref(true) // 列表的加载中
const list = ref<any>([]) // 列表的数据-只有父节点数据
const listTree = ref<any>([]) // 列表的数据-只有父节点数据
const listChildren=ref<any>([]) //处理children原数据
const queryParams = reactive({name: undefined,status: undefined
})
const queryFormRef = ref() // 搜索的表单
const isExpandAll = ref(false) // 是否展开,默认全部折叠
const refreshTable = ref(true) // 重新渲染表格状态
import { cloneDeep } from 'lodash-es'
/** 查询列表 */
const getList = async () => {loading.value = truetry {const data = await MenuApi.getMenuList(queryParams)listTree.value= handleTree(data)const tree=cloneDeep(listTree.value)tree.forEach((itme)=>{if(itme.children){itme.hasChildren=truedelete itme.children}})list.value=tree} finally {loading.value = false}}//加载子节点
const load = (row: any,_treeNode: any,resolve: (date: any[]) => void
) => {listChildren.value=[]getChildren(cloneDeep(listTree.value),row)let children = listChildren.valuesetTimeout(()=>{if(children){resolve(children)} },100)}//获取子节点数据
const getChildren=(arr,row)=>{arr.forEach(element => {if(row.id===element.parentId){listChildren.value.push(element)if(element.children?.length){element.hasChildren=truedelete element.children}}if(element.children?.length){getChildren(element.children,row)}});
}/** 搜索按钮操作 */
const handleQuery = () => {getList()
}/** 重置按钮操作 */
const resetQuery = () => {queryFormRef.value.resetFields()handleQuery()
}/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number, parentId?: number) => {formRef.value.open(type, id, parentId)
}/** 展开/折叠操作 */
const toggleExpandAll = () => {refreshTable.value = falseisExpandAll.value = !isExpandAll.valuenextTick(() => {refreshTable.value = true})
}/** 刷新菜单缓存按钮操作 */
const refreshMenu = async () => {try {await message.confirm('即将更新缓存刷新浏览器!', '刷新菜单缓存')// 清空,从而触发刷新wsCache.delete(CACHE_KEY.USER)wsCache.delete(CACHE_KEY.ROLE_ROUTERS)// 刷新浏览器location.reload()} catch {}
}/** 删除按钮操作 */
const handleDelete = async (id: number) => {try {// 删除的二次确认await message.delConfirm()// 发起删除await MenuApi.deleteMenu(id)message.success(t('common.delSuccess'))// 刷新列表await getList()} catch {}
}/** 初始化 **/
onMounted(() => {getList()
})
</script>

4、主要修改源代码

1、:load="load" 和对数据:tree-props进行赖加载处理

 

这篇关于优化芋道后台菜单管理卡顿问题element-plus版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127050

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份