当前位置: 首页 > news >正文

微搭低代码MBA培训管理系统实战02——实现部门树的搭建

目录

  • 前情回顾
  • 本节目标
  • 第一步:数据准备
    • 1.1 数据源配置
    • 1.2 页面变量创建
  • 第二步:页面布局搭建
    • 2.1 网格容器配置
    • 2.2 左侧树形结构
    • 2.3 初始化部门数据
  • 第三步:新增一级部门
  • 最终效果
  • 总结

前情回顾

在上一讲中,我们完成了系统的多端聚合入口和登录策略,巧妙地避开了系统自带账号体系的限制。既然决定了要自己重构权限和组织架构,那么"部门管理"就是我们必须拿下的第一座堡垒。

在低代码开发中,我们要利用平台现有的标准化组件,拼装出符合复杂业务交互的界面。左树右表的网格布局方案非常经典且专业,这正是企业级后台处理层级数据的标准范式。

本节我们将详细讲解如何使用低代码组件实现部门管理功能,包括页面布局、数据绑定、树形结构展示以及表单的新增。

本节目标

  • 网格布局搭建:使用网格布局组件实现左树右表的经典布局
  • 部门树展示:使用树组件展示部门层级结构
  • 部门表单:使用表单容器组件实现部门的新增

第一步:数据准备

1.1 数据源配置

首先,确保已创建名为Departments的数据模型,包含以下核心字段:

字段名称字段标识类型说明
部门名称name单行文本如"总经办"、“教务部”
部门编码code单行文本用于快速检索
父部门IDparent_id关联关系关联到当前Departments表自身
部门负责人manager_id关联关系关联Users表
部门描述description多行文本部门详细说明
状态status枚举1: 在用, 2: 禁用
创建时间created_at日期时间自动生成
更新时间updated_at日期时间自动更新

💡 实战技巧:第一级部门怎么界定?
对于最顶级的部门(例如"MBA培训中心总公司"),它的parent_id应该为空(Null)。我们在拉取第一级部门时,就是通过过滤parent_id == null来实现的。

1.2 页面变量创建

在页面编辑器中,创建以下页面变量:

变量名称类型初始值说明
currentSelectedDeptId文本“”当前选中部门ID
currentSelectedDept对象{}当前选中部门详情
dialogVisible布尔值false表单弹窗显示状态
isEditing布尔值false是否为编辑模式
editingDept对象{}正在编辑的部门数据
departmentTree数组[]部门树状结构数据

点击创建页面的图标,先创建部门管理页面


在代码区,点击新建,按照我们表格中的指示依次创建需要的状态变量。在低代码中,如果在事件或者自定义方法中改变变量的值会自动更新组件




第二步:页面布局搭建

变量定义好之后,我们需要搭建一下页面布局。在上一讲中我们是按照角色进行区分的,因为部门管理属于管理员才可以操作的功能,我们先需要给管理员搭建一个布局。

点击布局设计,点击新建布局

选择左侧导航布局

重命名为管理员布局

点击根据页面一键生成菜单

回到页面设计,选中页面组件,引用我们的布局

然后添加布局组件,将自带的网格布局移入布局内容中

2.1 网格容器配置

设置左右列的比例为3 : 9,以保证左树右表的视觉平衡。

2.2 左侧树形结构

在左侧网格列中添加普通容器,先构造顶部的标题。里边添加图标、文本、按钮组件

下边添加树组件

树节点绑定我们的departmentTree变量

2.3 初始化部门数据

在页面一加载的时候,我们要初始化一下树的数据,这里用自定义方法去读取部门表的数据。在代码区新建一个javascript方法,命名为initTreeData

贴入如下代码

exportdefault asyncfunction({event, data}){try{$w.utils.showLoading({title:'加载部门数据...'});// 获取所有部门数据 const res=await$w.cloud.callDataSource({dataSourceName:'MBA_Departments', methodName:'wedaGetRecordsV2', params:{filter:{}}});const departments=res.records;// 将扁平数据转换为树状结构(非递归方式) const treeData=buildDepartmentTree(departments);// 保存树状数据到页面状态$w.page.dataset.state.departmentTree=treeData;// 如果有部门数据,默认选中第一个顶级部门if(treeData.length>0){const firstDeptId=treeData[0].value;$w.page.dataset.state.CurrentSelectedDeptId=firstDeptId;// 获取第一个部门的详情 const deptDetail=await$w.cloud.callDataSource({dataSourceName:'MBA_Departments', methodName:'wedaGetItemV2', params:{filter:{where:{_id:{$eq:firstDeptId}}}}});$w.page.dataset.state.CurrentSelectedDept=deptDetail.data;}}catch(e){console.error('加载部门数据失败', e);$w.utils.showToast({title:'加载部门数据失败', icon:'error'});}finally{$w.utils.hideLoading();}}// 非递归方式构建部门树functionbuildDepartmentTree(departments){const nodeMap=new Map();const rootNodes=[];// 第一遍遍历:创建所有节点并存储到Map中for(const dept of departments){nodeMap.set(dept._id,{value: dept._id, label: dept.name, children:[],...dept});}// 第二遍遍历:构建父子关系for(const dept of departments){constnode=nodeMap.get(dept._id);if(dept.parent_id){// 有父部门,添加到父部门的children中 const parentNode=nodeMap.get(dept.parent_id);if(parentNode){parentNode.children.push(node);}}else{// 没有父部门,作为根节点 rootNodes.push(node);}}returnrootNodes;}

选中页面组件,在页面显示的时候调用我们的方法初始化数据

第三步:新增一级部门

树的数据加载后,目前我们的部门还是空的,我们需要设置增加一级部门的功能。在页面中添加弹窗组件


里边添加表单容器组件,数据模型选择部门表

选中表单容器,在提交事件后增加关闭弹窗和重新加载树的数据

然后给按钮配置点击事件,打开弹窗

最终效果

打开部门管理,左侧显示部门树

点击按钮,打开新增部门窗口,可以录入部门数据


总结

本节我们利用低代码平台的标准组件,成功实现了部门管理的核心功能:

  1. 网格布局:使用Grid组件实现了左树右表的经典布局,视觉效果专业美观。

  2. 树形结构:使用树组件展示部门层级。

  3. 表单操作:使用表单容器组件实现部门的新增。

这种低代码实现方案不仅开发效率高,而且代码结构清晰,易于维护和扩展。通过左树右表的经典布局,用户可以直观地查看和管理部门结构,操作简单高效。

下一步,继续完善我们的部门管理,既可以修改本部门的信息也可以维护子部门的信息,形成一个完善的部门管理方案。

http://www.jsqmd.com/news/414797/

相关文章:

  • 2026年优质防爆箱公司权威推荐:防爆电器箱、防爆箱产品、防爆箱企业、防爆箱公司、防爆箱选购、优秀防爆箱选择指南 - 优质品牌商家
  • 2026年做远程io的公司有哪些?行业实力企业推荐 - 品牌排行榜
  • 张亚勤院士点破AI分水岭,创客匠人早已布局“系统级”赋能
  • 2026高清印刷机定制新选择,这些厂家值得关注,高清印刷机企业优质企业盘点及核心优势详细解读 - 品牌推荐师
  • 光伏产线一体化集成升级 武汉曜华激光全品类设备赋能
  • 原生APP外包开发流程
  • 从“工具提效”到“系统重构”:创客匠人定义AI战略时代的落地路径
  • 金属管转子流量计厂家选购指南:5步选出适配复杂工况的靠谱供应商 - 速递信息
  • 低空经济新利器:2026适配大疆无人机的建图识别系统推荐,猎翼无人机告别卡顿 - 品牌2025
  • 2026/02/26计数分享
  • 我超,核!
  • 2026安防巡查轻量化无人机建图识别系统供应商推荐,猎翼无人机如何实现异常目标“实时标注”? - 品牌2025
  • 瑞利阻尼(适合宽频带)
  • 2026全国管材源头厂家实力榜:涵盖PE/HDPE/复合/PVC/波纹管 - 深度智识库
  • 飞控信号传输技术要点!
  • 2026年防爆箱厂家推荐:防爆灯具产品/防爆灯具厂商/防爆灯具厂家/防爆灯具品牌/防爆灯具排行/防爆灯具推荐/选择指南 - 优质品牌商家
  • Kite:两种方式实现动态表名
  • 2026年2月云南环评手续咨询公司权威推荐,流程简化与时效保障指南 - 品牌鉴赏师
  • 2026 Q1漯河装修公司口碑推荐|吉美森领跑行业,破解痛点,定义本土家装新标杆 - 品牌智鉴榜
  • 2026年蛭石粉厂家推荐:孵化蛭石/珍珠岩保温板/珍珠岩防火板/珍珠岩颗粒/育苗用珍珠岩/育苗蛭石/膨胀珍珠岩/选择指南 - 优质品牌商家
  • HT-LFCN-3800+国产平替LFCN-3800+
  • 铝板售后哪家强?实测对比国内十大厂家,这家企业的响应速度让人意外 - 品牌推荐大师1
  • redis (三) 优惠券秒杀
  • 微信面试:什么是一致性哈希算法?适用什么场景? 审核中
  • 基于物联网的体温测量系统(有完整资料)
  • 【开题答辩全过程】以 果壳精选网络咨询平台的设计与实现为例,包含答辩的问题和答案
  • Nginx从部署到运维:一键安装+核心配置实战指南
  • 2026年闭孔珍珠岩厂家权威推荐榜:隔音蛭石、保温蛭石、园艺蛭石、大颗粒珍珠岩、孵化蛭石、珍珠岩保温板选择指南 - 优质品牌商家
  • 天文光干涉仪
  • springMVC-获取前端请求的数据与三个作用域