Ben Lin
2024-07-22 323e576c64129723df20fd18effb20d96d8d18b3
src/views/tigerprojects/system/lowcode/composition/CarGridNav.vue
@@ -1,91 +1,147 @@
<!--
 * @Description: 工艺路线添加页面
 * @Description: 导航页面
 * @Author: Ben Lin
 * @version: 
 * @Date: 2024-06-20 12:13:27
 * @LastEditors: Ben Lin
 * @LastEditTime: 2024-06-26 21:46:41
 * @LastEditTime: 2024-07-22 03:45:38
-->
<template>
  <Card :title="GetTitle()['navTitle']">
    <CardGrid v-for="item in GetNavItems()" :key="item.title" @click="naveChangeItem(item.action, openModal)">
  <Card :title="GetTitle(props.configType)['navTitle']">
    <CardGrid
      v-for="item in GetNavItems(props.configType)"
      :key="item.title"
      @click="
        navChangeItem(item.action, useModalData[item.action][1].openModal, openRvModal, selectedNodes)
      "
    >
      <span class="flex flex-col items-center">
        <Icon :icon="item.icon" :color="item.color" size="20" />
        <span class="text-md mt-2 truncate">{{ item.title }}</span>
      </span>
      <GeneralModal
        v-if="!item.isStep"
        @register="useModalData[item.action][0]"
        @success="(d, u) => handleSuccess(d, u, item.action, objParams, refreshPage)"
      ></GeneralModal>
      <StepModal
        v-if="item.isStep"
        @register="useModalData[item.action][0]"
        @success="(d, u) => handleSuccess(d, u, item.action, objParams, refreshPage)"
      />
    </CardGrid>
  </Card>
  <GeneralModal @register="register" @success="handleSuccess"></GeneralModal>
  <!-- 其他自定义卡片内容 -->
  <a-card
    :title="item.title"
    :bordered="false"
    class="!mt-2"
    v-for="(item, index) in otherSlots"
    :key="item.name"
  >
    <slot :name="item.name" :index="index"></slot>
  </a-card>
  <RouteViewModal @register="registerRv" @success="RvItemSuccess" />
</template>
<script lang="ts" setup>
  import { Card, CardGrid } from 'ant-design-vue';
  import Icon from '@/components/Icon/Icon.vue';
  import { RouteToCust, RouteToProd } from '/@/api/tigerapi/mes/router';
  import GeneralModal from '/@/views/components/GeneralModal.vue';
  import { useModal } from '/@/components/Modal';
  import { useI18n } from '/@/hooks/web/useI18n';
  import { Ref, inject, ref, watch } from 'vue';
  import { isNullOrEmpty, isNullOrUnDef } from '/@/utils/is';
  import RouteViewModal from '/@/views/components/RouteViewModal.vue';
  import StepModal from '/@/views/components/StepModal.vue';
  import { Ref, inject, nextTick, onMounted, ref, watch } from 'vue';
  import { isNullOrUnDef } from '/@/utils/is';
  import { useTabs } from '/@/hooks/web/useTabs';
  import { useMessage } from '/@/hooks/web/useMessage';
  import { EntityCustFunctionType } from '/@/api/tigerapi/model/basModel';
  import { useModal } from '/@/components/Modal';
import { CustModalParams } from '/@/api/tigerapi/model/systemModel';
  const ACard = Card;
  const objParams = inject('objParams') as Ref<any>;
  const selectedNodes = inject('selectedNodes') as Ref<any>;
  const props = defineProps({
    configType: { type: String },
    nodes: { type: Array as PropType<any[]> },
  });
  const custImport = ref<any[]>([]);
  const EntityCustFunction = ref([
    {
      GetTitle() {},
      GetNavItems() {},
      naveChangeItem(action: any, ...args) {},
      GetTitle(type: string | undefined) {},
      GetNavItems(type: string) {},
      navChangeItem(action: any, ...args) {},
      GetUseModals() {},
      GetBaseCards(type: string | undefined) {},
      GetSelectSuccess(d, u, ...args) {},
      GenerateHtml(ype: string | null) {},
      CustFunc(param: CustModalParams) {},
    } as EntityCustFunctionType,
  ]);
  /* 动态import实体名.ts的自定义方法 */
  try {
    custImport.value = await import(`../entityts/${objParams.value['Name']}.ts`);
  } catch (e) {}
  const [{ GetTitle, GetNavItems, naveChangeItem }] =
    isNullOrUnDef(custImport.value['default'])
      ? EntityCustFunction.value
      : custImport.value['default']();
  const { refreshPage } = useTabs();
  const { createErrorModal } = useMessage();
  const { t } = useI18n();
  const [register, { openModal }] = useModal();
  const [
    {
      GetTitle,
      GetNavItems,
      navChangeItem,
      GetUseModals,
      GetSelectSuccess,
      GetBaseCards,
      GenerateHtml,
      CustFunc,
    },
  ] = isNullOrUnDef(custImport.value['default'])
    ? EntityCustFunction.value
    : custImport.value['default']();
  // watch(
  //   () => Prod_Code,
  //   (v) => {
  //     if (v !== Prod_Code.value) {
  //       Prod_Code.value = isNullOrEmpty(v) ? Prod_Code.value : v;
  //     }
  //   },
  //   { deep: true },
  // );
  const useModalData = ref(GetUseModals());
  const otherSlots = ref<any[]>(GetBaseCards(props.configType));
  const { refreshPage } = useTabs();
  const [registerRv, { openModal: openRvModal }] = useModal();
  watch(
    [() => props.configType, () => props.nodes],
    (v) => {
      otherSlots.value = GetBaseCards(v[0]);
      nextTick(() => {
        // var div = document.getElementById('container') as HTMLElement;
        // div.innerHTML = '';
        // div.appendChild(GenerateHtml(v[0]));
        // setTimeout(() => {
        //   if (!isNullOrUnDef(v[1])) {
        //     CustFunc(v[0], v[1][0]['id'], '#lfContainer');
        //   }
        // }, 100);
      });
    },
    { deep: true },
  );
  onMounted(() => {
    nextTick(() => {
      //   var div = document.getElementById('container') as HTMLElement;
      //   if (!isNullOrUnDef(div)) {
      //     div.innerHTML = '';
      //     div.appendChild(GenerateHtml(props.configType));
      //     setTimeout(() => {
      //       if (!isNullOrUnDef(props.nodes) && props.nodes.length > 0) {
      //         CustFunc(props.configType, props.nodes[0]['id'], '#lfContainer');
      //       }
      //     }, 100);
      //   }
    });
  });
  /**
   * @description: 选择工艺路线成功返回方法
   * @description: 弹出选择框成功返回方法
   * @param {*} d
   * @param {*} u
   * @return {*}
   */
  async function handleSuccess(d, u) {
    if (isNullOrEmpty(objParams.value['CODE'])) {
      createErrorModal({
        title: t('sys.api.errorTip'),
        content: '产品为空,不能添加工艺路线,请点击左侧选择产品',
      });
      return;
    }
    let codes = d.values.id.split(',');
    var i;
    for (i = 0; i < codes.length; i++) {
      if (d.which == 'addRoute') {
        await RouteToProd({ rotId: codes[i], prodCode: objParams.value['CODE'] });
      } else {
        await RouteToCust({ rotId: codes[i], prodCode: objParams.value['CODE'], custCode: '' });
      }
    }
    await refreshPage();
  async function handleSuccess(d, u, item, objParams, refreshPage) {
    GetSelectSuccess(d, u, item, objParams, refreshPage);
  }
  function RvItemSuccess(d, u) {}
</script>