Ben Lin
2024-10-22 969725647117eb7ca148b2e8cfa9ec8b5eb432fa
src/views/tigerprojects/system/lowcode/composition/LeftTree.vue
@@ -4,7 +4,7 @@
 * @version: 
 * @Date: 2024-06-26 15:31:43
 * @LastEditors: Ben Lin
 * @LastEditTime: 2024-06-26 18:48:09
 * @LastEditTime: 2024-10-22 10:23:53
-->
<template>
  <GeneralTree
@@ -14,39 +14,64 @@
    :treeData="treeData"
    :create-icon="createIcon"
    :fieldNames="fieldNames"
    :beforeRightClick="getRightMenu"
    ref="generalTree"
  /><!--
      add
      @handle-add="handleAdd" -->
</template>
<script lang="ts" setup>
  import { Ref, inject, onMounted, ref } from 'vue';
  import { Ref, inject, nextTick, 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';
  import { useProdRouteStore } from '/@/store/modules/prodRoute';
  const emit = defineEmits(['select', 'deletenode']);
  const objParams = inject('objParams') as Ref<any>;
  const nodeType = inject('nodeType') as Ref<any>;
  const selectedNodes = inject('selectedNodes') as Ref<any>;
  const useProdRoute = useProdRouteStore();
  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 }] = isNullOrUnDef(custImport.value['default'])
  const [{ CreateIcon, SelectNode, fetchTreeData, GetRightMenuList }] = isNullOrUnDef(
    custImport.value['default'],
  )
    ? EntityCustFunction.value
    : custImport.value['default']();
  const treeData = ref<TreeItem[]>([]);
  const title = ref('');
  const fieldNames = ref({});
  const generalTree = ref(null);
  const ExpandedKeys = ref([]);
  onMounted(async () => {
    await fetch(objParams.value['Name']);
    await nextTick();
    if (generalTree.value) {
      generalTree.value.expandAll(true);
      ExpandedKeys.value = generalTree.value.getExpandedKeys();
      if (useProdRoute.getCurSelectedNodes.some((q) => q.name == objParams.value['CODE'])) {
        selectedNodes.value = useProdRoute.getCurSelectedNodes.filter(
          (q) => q.name == objParams.value['CODE'],
        )[0].SelectedNodes;
        if (selectedNodes.value.length > 0) {
          generalTree.value.setSelectedKeys([selectedNodes.value[0]?.tid]);
          emit('select', SelectNode(selectedNodes, objParams.value['CODE']));
        }
      }
    }
  });
  /**
@@ -66,7 +91,7 @@
   */
  async function fetch(type: string) {
    if (!isNullOrUnDef(custImport.value)) {
      const [{ fetchTreeData }] = custImport.value['default']();
      // const [{ fetchTreeData }] = custImport.value['default']();
      //根据type获取树形数据
      const data = await fetchTreeData(type, objParams.value['CODE']);
      title.value = data.title;
@@ -76,13 +101,12 @@
  }
  function handleSelect(Id = '', info) {
    // searchInfo.Id = Id;
    nodeType.value = info.selectedNodes[0].type;
    selectedNodes.value = info.selectedNodes;
    // prodCode.value =rotType.value=='Product'? info.selectedNodes[0].code: prodCode.value;
    // actionCode.value = rotType.value == 'Action' ? info.selectedNodes[0].code : actionCode.value;
    // custCode.value = rotType.value == 'Customer' ? info.selectedNodes[0].code : custCode.value;
    // reload();
    if (generalTree.value) {
      const keys = generalTree.value.getSelectedKeys();
      console.log(keys);
    }
    emit('select', SelectNode(selectedNodes, objParams.value['CODE']));
  }
  /**
@@ -91,7 +115,16 @@
   * @return {*}
   */
  function UnSelect(node) {
    nodeType.value = '';
    emit('select', SelectNode(undefined, objParams.value['CODE']));
    // reload();
  }
  /**
   * @description: 获取右键菜单列表,带入emit事件
   * @param {*} node
   * @return {*}
   */
  function getRightMenu(node: EventDataNode) {
    return GetRightMenuList(node, emit, objParams.value['CODE']);
  }
</script>