Ben Lin
2024-07-24 50111114eb8254fe4d6fc15e9781f2c47e3db74a
src/views/tigerprojects/system/lowcode/composition/Config.vue
@@ -4,12 +4,12 @@
 * @version: 
 * @Date: 2024-06-24 23:44:31
 * @LastEditors: Ben Lin
 * @LastEditTime: 2024-06-25 21:34:33
 * @LastEditTime: 2024-07-23 20:48:29
-->
<template>
  <Card title="行为配置">
  <Card :title="GetTitle(props.configType)['configTitle']">
    <BasicForm @register="registerForm">
      <template #[item]="{ field }" v-for="item in crudColSlots" :key="item">
      <template #[item]="{ field }" v-for="item in GetCrudColSlots()" :key="item">
        <a-button
          v-if="field"
          class="mt-1 ml-1"
@@ -31,203 +31,54 @@
  import { Card } from 'ant-design-vue';
  import { useModal } from '/@/components/Modal';
  import GeneralModal from '/@/views/components/GeneralModal.vue';
  import { useUserStore } from '/@/store/modules/user';
  import { useI18n } from '/@/hooks/web/useI18n';
  import { GetEnum, getEntity } from '/@/api/tigerapi/system';
  import { useLocale } from '/@/locales/useLocale';
  import { isNullOrEmpty } from '/@/utils/is';
  import { isNullOrUnDef } from '/@/utils/is';
  import { EntityCustFunctionType } from '/@/api/tigerapi/model/basModel';
  const { t } = useI18n();
  const { getLocale } = useLocale();
  const emit = defineEmits(['success', 'register']);
  const props = defineProps({
    configType: { type: String },
  });
  const [registerItemAdd, { openModal: openItemModal }] = useModal();
  const Prod_Code = inject('prodCode') as Ref<string>;
  const ACT_ID = inject('actionCode') as Ref<string>;
  const Cust_Code = inject('custCode') as Ref<string>;
  const crudColSlots = ref<any>([
    'scanadd',
    'assyadd',
    'testadd',
    'auditadd',
    'printadd',
    'pkgadd',
  const objParams = inject('objParams') as Ref<any>;
  const custImport = ref<any[]>([]);
  const EntityCustFunction = ref([
    {
      GetCrudForm(type: string | undefined) {},
      GetCrudColSlots(val, id) {},
      OpenSelectItem(openItemModal: Fn, ...args) {},
      GetSelectSuccess(d, u, ...args) {},
      GetTitle(type: string | undefined) {},
      nodeChange(params: {
        resetFields: any;
        setFieldsValue: any;
        objParams: Ref<any>;
        selectedNodes: Ref<any[]>;
      }) {},
      SubmitFunc(values: Recordable<any>, type: string, emit) {},
    } as EntityCustFunctionType,
  ]);
  /* 动态import实体名.ts的自定义方法 */
  try {
    custImport.value = await import(`../entityts/${objParams.value['Name']}.ts`);
  } catch (e) {}
  const [
    {
      GetCrudForm,
      GetCrudColSlots,
      nodeChange,
      OpenSelectItem,
      GetSelectSuccess,
      GetTitle,
      SubmitFunc,
    },
  ] = isNullOrUnDef(custImport.value['default'])
    ? EntityCustFunction.value
    : custImport.value['default']();
  const isNormal = (type: number) => type === 0;
  const isScan = (type: number) => type === 1;
  const isAssy = (type: number) => type === 2;
  const isTest = (type: number) => type === 3;
  const isAudit = (type: number) => type === 4;
  const isPrint = (type: number) => type === 5;
  const isPackage = (type: number) => type === 6;
  const formSchema: FormSchema[] = [
    {
      field: 'PROD_CODE',
      label: '产品编码',
      component: 'Input',
      dynamicDisabled: ({ values }) => {
        return true;
      },
      colProps: { span: 12 },
    },
    {
      field: 'ID',
      label: 'ID',
      component: 'Input',
      show: false,
    },
    {
      field: 'CUST_CODE',
      label: '客户编码',
      component: 'Input',
      dynamicDisabled: ({ values }) => {
        return true;
      },
      colProps: { span: 12 },
    },
    {
      field: 'ACT_TYPE',
      label: '行为类型',
      component: 'ApiSelect',
      colProps: { span: 12 },
      defaultValue: 0,
      componentProps: {
        api: GetEnum,
        params: { name: 'MES_PROD_ACTION+ACT_TYPEs' },
        resultField: 'Data',
        labelField: unref(getLocale) == 'zh_CN' ? 'Desc' : 'Name',
        valueField: 'Value',
        // onChange: (e, v) => {
        //   alert(e)
        //   console.log('ApiSelect====>:', e, v);
        // },
      },
    },
    {
      field: 'IS_ACTIVE',
      label: '是否启用',
      required: true,
      component: 'Select',
      colProps: { span: 12 },
      componentProps: {
        options: [
          {
            label: '是',
            value: 'Y',
            key: 'Y',
          },
          {
            label: '否',
            value: 'N',
            key: 'N',
          },
        ],
      },
    },
    {
      field: 'RULE_CODE',
      label: '扫码验证',
      component: 'Input',
      colProps: { span: 10 },
      ifShow: ({ values }) => isScan(values.ACT_TYPE),
    },
    {
      field: '0',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 2, pull: 1 },
      ifShow: ({ values }) => isScan(values.ACT_TYPE),
      colSlot: 'scanadd',
    },
    {
      field: 'ITEM_CODE',
      label: '组装上料',
      colProps: { span: 10 },
      component: 'Input',
      ifShow: ({ values }) => isAssy(values.ACT_TYPE),
    },
    {
      field: '00',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 2, pull: 1 },
      ifShow: ({ values }) => isAssy(values.ACT_TYPE),
      colSlot: 'assyadd',
    },
    {
      field: 'TEST_CODE',
      label: '产品测试',
      colProps: { span: 10 },
      component: 'Input',
      ifShow: ({ values }) => isTest(values.ACT_TYPE),
    },
    {
      field: 'test0',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 2, pull: 1 },
      ifShow: ({ values }) => isTest(values.ACT_TYPE),
      colSlot: 'testadd',
    },
    {
      field: 'SAPL_CODE',
      label: '产品抽检',
      colProps: { span: 10 },
      component: 'Input',
      ifShow: ({ values }) => isAudit(values.ACT_TYPE),
    },
    {
      field: 'audit0',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 2, pull: 1 },
      ifShow: ({ values }) => isAudit(values.ACT_TYPE),
      colSlot: 'auditadd',
    },
    {
      field: 'LABEL_CODE',
      label: '标签打印',
      colProps: { span: 10 },
      component: 'Input',
      ifShow: ({ values }) => isPrint(values.ACT_TYPE),
    },
    {
      field: 'print0',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 2, pull: 1 },
      ifShow: ({ values }) => isPrint(values.ACT_TYPE),
      colSlot: 'printadd',
    },
    {
      field: 'pkgRULE_CODE',
      label: '包装规则',
      colProps: { span: 10 },
      component: 'Input',
      ifShow: ({ values }) => isPackage(values.ACT_TYPE),
    },
    {
      field: 'pkg0',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 2, pull: 1 },
      ifShow: ({ values }) => isPackage(values.ACT_TYPE),
      colSlot: 'pkgadd',
    },
    {
      field: 'REMARK',
      label: '备注',
      component: 'Input',
      colProps: { span: 12 },
    },
  ];
  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
  let formSchema: FormSchema[] = GetCrudForm(props.configType);
  const [registerForm, { resetFields, setFieldsValue, validate, setProps }] = useForm({
    labelWidth: 120,
    schemas: formSchema,
    actionColOptions: {
@@ -239,201 +90,50 @@
    },
    showActionButtonGroup: true,
    submitButtonOptions: {
      text: '提交',
      text: '保存',
    },
    submitFunc: customSubmitFunc,
  });
  /* 注入选中节点数据 */
  const selectedNodes = inject('selectedNodes') as Ref<any>;
  watch(
  () => ACT_ID.value,
  (newVal, oldVal) => {
    () => selectedNodes.value,
    (newVal, oldVal) => {
      nextTick(() => {
        getActType();
        /* 节点切换事件 */
        nodeChange({ resetFields, setFieldsValue, objParams, selectedNodes });
        formSchema = GetCrudForm(selectedNodes.value[0].type);
        setProps({
          schemas: []
        });
        setProps({
          schemas: formSchema
        });
      });
  },
  { deep: true, immediate: true },
);
    },
    { deep: true, immediate: true },
  );
  onMounted(() => {
    getActType();
    /* 节点切换事件 */
    nodeChange({ resetFields, setFieldsValue, objParams, selectedNodes });
  });
  function getActType() {
    resetFields();
    let sqlcmd = ' 1=1 ';
    if (!isNullOrEmpty(Prod_Code.value)) {
      sqlcmd += `And PROD_CODE = '${Prod_Code.value}'`;
    }
    if (!isNullOrEmpty(Cust_Code.value)) {
      sqlcmd += `And CUST_CODE = '${Cust_Code.value}'`;
    }
    if (!isNullOrEmpty(ACT_ID.value)) {
      sqlcmd += `And ACT_ID = '${ACT_ID.value}'`;
    }
    getEntity({
      sqlcmd: sqlcmd,
      entityName: 'MES_PROD_ACTION',
    }).then((res) => {
      setFieldsValue({
        PROD_CODE: Prod_Code.value,
        ACT_TYPE: res.Data.Items[0].ACT_TYPE
      });
    });
  async function customSubmitFunc() {
    try {
      const values = await validate();
      SubmitFunc(values,props.configType, emit);
      // values.AUTH_PROD = useUserStore().getUserInfo.prodCode;
      // values.FACTORY = useUserStore().getUserInfo.prodCode;
      // const apiAction = SaveEntity(values, true, 'MES_PROD_ACTION');
      // apiAction.then((action) => {
      //   if (action.IsSuccessed) {
      //     emit('success');
      //   }
      // });
    } catch (e) {}
  }
  async function handleSubmit() {
    // try {
    //   const values = await validate();
    //   setDrawerProps({ confirmLoading: true });
    //   // TODO custom api
    //   //保存工单
    //   if (!unref(isUpdate)) {
    //     values.STATUS = 0;
    //   }
    //   values.AUTH_PROD = useUserStore().getUserInfo.prodCode;
    //   values.FACTORY = useUserStore().getUserInfo.prodCode;
    //   const apiAction = SaveEntity(values, unref(isUpdate), 'BIZ_MES_WO');
    //   apiAction.then((action) => {
    //     if (action.IsSuccessed) {
    //       closeDrawer();
    //       emit('success');
    //     }
    //   });
    // } finally {
    //   setDrawerProps({ confirmLoading: false });
    // }
  }
  const itemCodeModalCfg = {
    title: '物料列表',
    schemas: [
      {
        field: 'ITEM_CODE',
        component: 'Input',
        label: '物料编码',
        colProps: {
          span: 12,
        },
      },
    ],
    ItemColumns: [
      {
        title: t('物料编码'),
        dataIndex: 'ITEM_CODE',
        resizable: true,
        sorter: true,
        width: 200,
      },
      {
        title: t('物料名称'),
        dataIndex: 'ITEM_NAME',
        resizable: true,
        sorter: true,
        width: 180,
      },
    ],
    tableName: 'BAS_ITEM',
    rowKey: 'ITEM_CODE',
    searchInfo: { TABLE_NAME: 'BAS_ITEM' },
  };
  const ruleModalCfg = {
    title: '规则列表',
    schemas: [
      {
        field: 'RULE_CODE',
        component: 'Input',
        label: '规则编码',
        colProps: {
          span: 12,
        },
      },
    ],
    ItemColumns: [
      {
        title: t('规则编码'),
        dataIndex: 'RULE_CODE',
        resizable: true,
        sorter: true,
        width: 200,
      },
      {
        title: t('规则名称'),
        dataIndex: 'RULE_NAME',
        resizable: true,
        sorter: true,
        width: 180,
      },
    ],
    tableName: 'BAS_CODE_RULE',
    rowKey: 'RULE_CODE',
    searchInfo: { TABLE_NAME: 'BAS_CODE_RULE' },
  };
  const printModalCfg = {
    title: '打印模板列表',
    schemas: [
      {
        field: 'LABEL_CODE',
        component: 'Input',
        label: '模板编码',
        colProps: {
          span: 12,
        },
      },
    ],
    ItemColumns: [
      {
        title: t('模板编码'),
        dataIndex: 'LABEL_CODE',
        resizable: true,
        sorter: true,
        width: 200,
      },
      {
        title: t('模板名称'),
        dataIndex: 'LABEL_NAME',
        resizable: true,
        sorter: true,
        width: 180,
      },
    ],
    tableName: 'BAS_LABEL_TEMP',
    rowKey: 'LABEL_CODE',
    searchInfo: { TABLE_NAME: 'BAS_LABEL_TEMP' },
  };
  const pkgModalCfg = {
    title: '包装规则列表',
    schemas: [
      {
        field: 'RULE_CODE',
        component: 'Input',
        label: '包装规则编码',
        colProps: {
          span: 12,
        },
      },
    ],
    ItemColumns: [
      {
        title: t('包装规则编码'),
        dataIndex: 'RULE_CODE',
        resizable: true,
        sorter: true,
        width: 200,
      },
      {
        title: t('包装规则名称'),
        dataIndex: 'RULE_NAME',
        resizable: true,
        sorter: true,
        width: 180,
      },
    ],
    tableName: 'BAS_PKG_RULE',
    rowKey: 'RULE_CODE',
    searchInfo: { TABLE_NAME: 'BAS_PKG_RULE' },
  };
  /**
   * @description: 点击打开弹出选择列表框
@@ -441,25 +141,7 @@
   * @return {*}
   */
  function handleSelectItem(item) {
    let config = {};
    switch (item) {
      case 'scanadd':
        config = ruleModalCfg;
        break;
      case 'assyadd':
        config = itemCodeModalCfg;
        break;
      case 'testadd':
        config = itemCodeModalCfg;
        break;
      case 'printadd':
        config = printModalCfg;
        break;
      case 'pkgadd':
        config = pkgModalCfg;
        break;
    }
    openItemModal(true, config);
    OpenSelectItem(openItemModal, item);
  }
  /**
@@ -470,29 +152,6 @@
   * @return {*}
   */
  function handleItemSuccess(d, u, item) {
    let value = {};
    switch (item) {
      case 'scanadd':
        value = {
          RULE_CODE: d.values['val'],
        };
        break;
      case 'assyadd':
        value = {
          ITEM_CODE: d.values['val'],
        };
        break;
      case 'printadd':
        value = {
          LABEL_CODE: d.values['val'],
        };
        break;
      case 'pkgadd':
        value = {
          pkgRULE_CODE: d.values['val'],
        };
        break;
    }
    setFieldsValue(value);
    setFieldsValue(GetSelectSuccess(d, u, item));
  }
</script>