YangYuGang
2025-03-08 8cae1dcd8d2bde01880ac4b70bdda4e61df3c7ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<!--
 * @Description: 通用Tree组件
 * @Author: Ben Lin
 * @version: 
 * @Date: 2024-06-19 11:07:21
 * @LastEditors: Ben Lin
 * @LastEditTime: 2024-10-22 10:34:03
-->
<template>
  <div class="m-4 mr-0 overflow-hidden bg-white">
    <TigerTree
      :title="title"
      toolbar
      search
      :add="add"
      treeWrapperClassName="h-[calc(100%-35px)] overflow-auto"
      :clickRowToExpand="false"
      :treeData="treeData"
      :renderIcon="createIcon"
      :fieldNames="fieldNames"
      :selectedKeys="selectedKeys"
      @select="handleSelect"
      @handleAdd="handleAdd"
      @unselect="UnSelect"
      :beforeRightClick="props.beforeRightClick"
      :defaultExpandAll="true"
      ref="tigerTree"
    />
  </div>
</template>
<script lang="ts" setup>
  import { onMounted, ref, watch } from 'vue';
  import {
    ContextMenuItem,
    ContextMenuOptions,
    FieldNames,
    TigerTree,
    TreeItem,
  } from '/@/components/TigerTree';
  import { EventDataNode } from 'ant-design-vue/lib/tree';
 
  defineOptions({ name: 'CustTree' });
 
  const emit = defineEmits(['select', 'handleAdd', 'UnSelect']);
  const props = defineProps({
    title: {
      // type: [Function, String] as PropType<string | ((data) => string)>,
      type: String,
    },
    treeData: {
      type: Array as PropType<TreeItem[]>,
    },
    createIcon: {
      type: Function as PropType<(params: Recordable<any>) => string>,
    },
    add: { type: Boolean },
    fieldNames: { type: Object as PropType<FieldNames> },
    beforeRightClick: {
      type: Function as PropType<(...arg: any) => ContextMenuItem[] | ContextMenuOptions>,
      default: undefined,
    },
  });
  const tigerTree = ref(null);
  const selectedKeys = ref<KeyType[]>([])
 
  function handleSelect(keys, e) {
    emit('select', keys[0], e);
  }
 
  function handleAdd() {
    emit('handleAdd');
  }
 
  function UnSelect(node) {
    emit('UnSelect', node);
  }
 
  function expandAll(expandAll: boolean) {
    if (tigerTree.value) {
      tigerTree.value.expandAll(expandAll);
    }
  }
 
  function getExpandedKeys() {
    if (tigerTree.value) {
      return tigerTree.value.getExpandedKeys();
    }
    return [];
  }
 
  function setSelectedKeys(keys: KeyType[]) {
    selectedKeys.value = keys;
    if (tigerTree.value) {
      tigerTree.value.setSelectedKeys(keys);
    }
  }
 
  function getSelectedKeys() {
    if (tigerTree.value) {
      return tigerTree.value.getSelectedKeys();
    }
    return [];
  }
 
  function getNodeById(Id: string) {
    if (tigerTree.value) {
      return tigerTree.value.getNodeById(Id);
    }
    return {};
  }
 
  defineExpose({
    getExpandedKeys,
    expandAll,
    setSelectedKeys,
    getSelectedKeys,
    getNodeById
  });
 
  onMounted(() => {});
</script>