Ben Lin
2024-09-11 08f1b081e006f0f3b83bcbdf47f4ef494e18450b
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
<!--
 * @Description: 组合页面左侧树形
 * @Author: Ben Lin
 * @version: 
 * @Date: 2024-06-26 15:31:43
 * @LastEditors: Ben Lin
 * @LastEditTime: 2024-07-23 23:40:41
-->
<template>
  <GeneralTree
    @select="handleSelect"
    @UnSelect="UnSelect"
    :title="title"
    :treeData="treeData"
    :create-icon="createIcon"
    :fieldNames="fieldNames"
    :beforeRightClick="getRightMenu"
  /><!--
      add
      @handle-add="handleAdd" -->
</template>
<script lang="ts" setup>
  import { Ref, inject, onMounted, ref } from 'vue';
  import { isNullOrUnDef } from '/@/utils/is';
  import GeneralTree from '/@/views/components/GeneralTree.vue';
  import { TreeItem } from '/@/components/TigerTree';
  import { EntityCustFunctionType } from '/@/api/tigerapi/model/basModel';
  import { EventDataNode } from 'ant-design-vue/es/tree';
 
  const emit = defineEmits(['select', 'deletenode']);
  const objParams = inject('objParams') as Ref<any>;
  const selectedNodes = inject('selectedNodes') as Ref<any>;
  const custImport = ref<any[]>([]);
  const EntityCustFunction = ref([
    {
      CreateIcon(params: Recordable<any>) {},
      SelectNode(selectedNodes: Ref<any[]>) {},
      GetRightMenuList(node: EventDataNode) {},
    } as EntityCustFunctionType,
  ]);
  /* 动态import实体名.ts的自定义方法 */
  try {
    custImport.value = await import(`../entityts/${objParams.value['Name']}.ts`);
  } catch (e) {}
  const [{ CreateIcon, SelectNode, fetchTreeData, GetRightMenuList }] = isNullOrUnDef(
    custImport.value['default'],
  )
    ? EntityCustFunction.value
    : custImport.value['default']();
  const treeData = ref<TreeItem[]>([]);
  const title = ref('');
  const fieldNames = ref({});
 
  onMounted(async () => {
    await fetch(objParams.value['Name']);
  });
 
  /**
   * @description: 树形节点图标
   * @param {*} params
   * @param {*} type
   * @return {*}
   */
  function createIcon(params: Recordable<any>) {
    return CreateIcon(params);
  }
 
  /**
   * @description: 获取树形数据
   * @param {*} type
   * @return {*}
   */
  async function fetch(type: string) {
    if (!isNullOrUnDef(custImport.value)) {
      // const [{ fetchTreeData }] = custImport.value['default']();
      //根据type获取树形数据
      const data = await fetchTreeData(type, objParams.value['CODE']);
      title.value = data.title;
      treeData.value = data.treeData;
      fieldNames.value = data.fieldNames;
    }
  }
 
  function handleSelect(Id = '', info) {
    selectedNodes.value = info.selectedNodes;
    emit('select', SelectNode(selectedNodes));
  }
 
  /**
   * @description: 取消选择时事件返回方法
   * @param {*} node
   * @return {*}
   */
  function UnSelect(node) {
    emit('select', SelectNode(undefined));
    // reload();
  }
 
  /**
   * @description: 获取右键菜单列表,带入emit事件
   * @param {*} node
   * @return {*}
   */  
  function getRightMenu(node: EventDataNode) {
    return GetRightMenuList(node, emit, objParams.value['CODE']);
  }
</script>