From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目

---
 src/views/system/user/DeptTree.vue |   79 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 79 insertions(+), 0 deletions(-)

diff --git a/src/views/system/user/DeptTree.vue b/src/views/system/user/DeptTree.vue
new file mode 100644
index 0000000..71ed6cd
--- /dev/null
+++ b/src/views/system/user/DeptTree.vue
@@ -0,0 +1,79 @@
+<template>
+  <div class="head-container">
+    <el-input v-model="deptName" class="mb-20px" clearable placeholder="璇疯緭鍏ラ儴闂ㄥ悕绉�">
+      <template #prefix>
+        <Icon icon="ep:search" />
+      </template>
+    </el-input>
+  </div>
+  <div class="head-container">
+    <el-tree
+      ref="treeRef"
+      :data="deptList"
+      :expand-on-click-node="false"
+      :filter-node-method="filterNode"
+      :props="defaultProps"
+      default-expand-all
+      highlight-current
+      node-key="id"
+      @node-click="handleNodeClick"
+    />
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ElTree } from 'element-plus'
+import * as DeptApi from '@/api/system/dept'
+import { defaultProps, handleTree } from '@/utils/tree'
+
+defineOptions({ name: 'SystemUserDeptTree' })
+
+const deptName = ref('')
+const deptList = ref<Tree[]>([]) // 鏍戝舰缁撴瀯
+const treeRef = ref<InstanceType<typeof ElTree>>()
+
+/** 鑾峰緱閮ㄩ棬鏍� */
+const getTree = async () => {
+  const res = await DeptApi.getSimpleDeptList()
+  deptList.value = []
+  deptList.value.push(...handleTree(res))
+}
+
+/** 鍩轰簬鍚嶅瓧杩囨护 */
+const filterNode = (name: string, data: Tree) => {
+  if (!name) return true
+  return data.name.includes(name)
+}
+
+/** 澶勭悊閮ㄩ棬琚偣鍑� */
+let currentNode: any = {}
+const handleNodeClick = async (row: { [key: string]: any }, treeNode: any) => {
+  // 鍒ゆ柇閫変腑鐘舵��
+  if (currentNode && currentNode.name === row.name) {
+    treeNode.checked = !treeNode.checked
+  } else {
+    treeNode.checked = true
+  }
+  if (treeNode.checked) {
+    // 閫変腑
+    currentNode = row
+    emits('node-click', row)
+  } else {
+    // 鍙栨秷閫変腑
+    treeRef.value!.setCurrentKey(undefined)
+    emits('node-click', undefined)
+    currentNode = null
+  }
+}
+const emits = defineEmits(['node-click'])
+
+/** 鐩戝惉deptName */
+watch(deptName, (val) => {
+  treeRef.value!.filter(val)
+})
+
+/** 鍒濆鍖� */
+onMounted(async () => {
+  await getTree()
+})
+</script>

--
Gitblit v1.8.0