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

【Vue】若依框架树形选择器和显示

在使用若依框架过程中经常会用到类似部门这样的树形结构,而若依自带的用户表格在前端显示部门名字是通过后端的返回相应字段来实现,这样需要我们去修改后端,比较麻烦,下面我会介绍一种前端的回显方法

首先,部门树形选择器在若依的用户管理模块中已有现成实现,可直接参考使用。具体代码如下:

<el-col :span="12"><el-form-item label="归属部门" prop="department"><treeselect v-model="form.department" :options="enabledDeptOptions" :show-count="true" placeholder="请选择归属部门" /></el-form-item>
</el-col><script>
import { deptTreeSelect } from "@/api/system/user"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"export default {components: { Treeselect },data() {return {// 所有部门树选项deptOptions: undefined,// 过滤掉已禁用部门树选项enabledDeptOptions: undefined,},watch: {// 根据名称筛选部门树deptName(val) {this.$refs.tree.filter(val)}},created() {this.getDeptTree()},methods: {/** 查询部门下拉树结构 */getDeptTree() {deptTreeSelect().then(response => {this.deptOptions = response.datathis.enabledDeptOptions = this.filterDisabledDept(JSON.parse(JSON.stringify(response.data)))})},// 过滤禁用的部门filterDisabledDept(deptList) {return deptList.filter(dept => {if (dept.disabled) {return false}if (dept.children && dept.children.length) {dept.children = this.filterDisabledDept(dept.children)}return true})},}
}
</script>

以上我只总结了需要添加的代码。由于若依已内置部门树查询接口,只需在相应位置复制上述代码即可实现部门树选择功能。

这里就可以实现树形选择部门,现在前端显示的是数据库中的部门ID,我的思路是用递归在我们已经有的部门树数据中查找相同id的值,并返回名称;具体代码如下:

<el-table-column label="部门" align="center" prop="deptName" />
<script>
export default {data() {return {// 部门名称deptName: undefined,},methods: {/** 查询人事档案列表 */getList() {this.loading = truelistArchive(this.queryParams).then(response => {// 处理部门名称显示this.archiveList = response.rows.map(item => {// 根据 department(部门ID)查找部门名称const deptName = this.getDeptNameById(item.department)return {...item,deptName: deptName // 添加部门名称字段}})this.total = response.totalthis.loading = false})},// 根据部门ID获取部门名称getDeptNameById(deptId) {deptId = Number(deptId)if (!deptId || !this.enabledDeptOptions || this.enabledDeptOptions.length === 0) {return '-'}// 递归查找部门名称const findDeptName = (depts, id) => {for (const dept of depts) {// 如果找到匹配的部门,返回名称if (dept.id === id) {return dept.label}// 递归查找子部门if (dept.children && dept.children.length > 0) {const result = findDeptName(dept.children, id)if (result) {return result // 如果子部门找到了,直接返回结果}}}    return null // 没找到返回null}const result = findDeptName(this.enabledDeptOptions, deptId)return result || '-' // 返回结果或默认值},}
</script>

通过上述方法,即可在表格中正确显示部门名称。

若需进一步展示部门层级路径,可对递归方法进行调整,实现如下:

// 根据部门ID获取部门名称getDeptNameById(deptId) {deptId = Number(deptId)if (!deptId || !this.enabledDeptOptions || this.enabledDeptOptions.length === 0) {return '-'}// 递归查找部门路径const findDeptPath = (depts, id, path = []) => {for (const dept of depts) {const currentPath = [...path, dept]if (dept.id === id) {return currentPath}if (dept.children && dept.children.length > 0) {const result = findDeptPath(dept.children, id, currentPath)if (result) return result}}return null}const deptPath = findDeptPath(this.enabledDeptOptions, deptId)return deptPath ? deptPath.map(dept => dept.label).join(' > ') : '-'},

http://www.dtcms.com/a/546154.html

相关文章:

  • 力扣hot100之最长连续序列(java版)
  • 买了两台服务器可以做网站吗seoapp推广
  • GXDE For deepin 25:deepin25 能用上 GXDE 了!
  • 搜房网站要怎么 做网站做成app
  • 网站建设教学视频百度云盘无锡电商网站设计
  • 【MIT 6.5840/6.824】Lab3 Raft
  • 在哪网站开发软件制作企业网站得多长时间
  • 异构系统集成提速:重构企业数据流转架构
  • 在OpenHarmony上适配图形显示【5】——DRM 设备信息查询工具drm_info
  • 校园网站制度建设淘宝网页版怎么退出登录
  • Rust 中的零拷贝技术:从原理到实践的深度探索 [特殊字符]
  • 泰州网站建设多少钱什么是4c品牌建设模型
  • 公司网站模板源代码亳州网站建设推广
  • Linux驱动的加载与卸载
  • 二学一做专题网站无锡网页制作报价
  • 装修公司做自己网站珠海网站制作费用
  • 手机网站建站公司wordpress关于本站
  • 网站数字签名做网站能挣钱么
  • 温州做网站的wordpress the7.6
  • 中华古文明的视觉史诗:郭泰来以当代彩墨重构“上古三经”——迟来的祝贺:图书《山海经》荣获“出版奖”
  • Rust BTreeMap 红黑树
  • 为代理网站做网站wordpress站群作用
  • 网站上社保做增员怎么做wordpress html 代码
  • Lua--协程
  • 建立网站目录结构的原则优化二十条
  • 远近互联网站建设成品网站源码1688danji6
  • 枣庄三合一网站开发公司软件开发模型的v模型图
  • 生成式人工智能在教育领域的技术适配性研究:挑战、风险与应对方案
  • 技术解析:AI出海两极分化下的破局指南
  • CAN总线网关到底是什么:双5g车载网关案例