若依ruoyi框架部门管理添加懒加载功能

最新在做一个系统,由于公司部门数量太多(1w+),ruoyi的部门管理默认加载全部数据,导致页面假死,故需要配置懒加载功能。

一、为el-table开启懒加载功能

默认配置(未开启)

1
2
3
4
5
6
7
8
9
 <el-table
      v-if="refreshTable"
      v-loading="loading"
      :data="deptList"
      row-key="deptId"
      :default-expand-all="isExpandAll"
      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
    >
    

开启后的配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
    <el-table
      v-if="refreshTable"
      v-loading="loading"
      :data="deptList"
      row-key="deptId"
      lazy
      :load="load"
      :default-expand-all="isExpandAll"
      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
    >

显然,lazy是开启懒加载功能 ,load是加载数据的方法

二、添加load方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    async load(node, treeNode, resolve) {
      let params = {parentId: node.deptId,status:this.queryParams.status}
      await listDept(params).then(response => {
        let tData = this.handleTree(response.data, "deptId");
        tData.forEach(t=>{
          t.hasChildren = true; 
        })
        node.children=tData
        resolve(tData)
      });
    },

三、添加initList方法来代替getList

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
  created() {
    
    this.initList();
  },
  methods: {
    .....
    initList(){
      this.loading = true;
      listDept(this.queryParams).then(response => {
        this.deptList = this.handleTree(response.data, "deptId");
        this.deptList.forEach(d=>{
          d.children=null
          d.hasChildren = true;
        })
        this.loading = false;
      });
    },
    .....
  }

之所以会卡死就是因为初始化时渲染的节点太多,这里获取到节点并处理为树节点后将第一层的节点的children设置为null并设置配置每一个节点都有孩子节点

四、修改handleQuery方法

旧的

1
2
3
  handleQuery() {
      this.getList();
    },

新的

1
2
3
  handleQuery() {
      this.queryParams.deptName===undefined || this.queryParams.deptName===null ? this.initList() : this.getList()
    },

五、后续问题

这样处理后就会出现一些问题,但是不影响使用

1.展开/折叠 功能失效,需要删除相关功能
2.每一个节点都是默认有孩子节点,但实际有没有需要点开才知道

六、用户列表优化

在若依的用户管理页面左侧是有部门树的,部门数量多的时候,这里也会出现假死的情况,可以添加配置解决问题。这里不需要配置懒加载。 优化前:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<el-tree
            :data="deptOptions"
            :props="defaultProps"
            :expand-on-click-node="false"
            :filter-node-method="filterNode"
            ref="tree"
            node-key="id"
            default-expand-all
            highlight-current
            @node-click="handleNodeClick"
          />

优化后:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<el-tree
            :data="deptOptions"
            :props="defaultProps"
            render-after-expand
            :expand-on-click-node="true"
            :filter-node-method="filterNode"
            ref="tree"
            node-key="id"
            :default-expand-all="false"
            highlight-current
            @node-click="handleNodeClick"
          />

1.开启点击节点展开列表 :expand-on-click-node="true" 官网说明:是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点。
2.开启第一次展开某个树节点后才渲染其子节点 render-after-expand
3.关闭默认展开所有节点 :default-expand-all="false"