Ben Lin
2024-06-26 29568a6b76b70b358877dfd3ffe68ccbd42e8844
src/views/tigerprojects/system/lowcode/entityts/ProdRouteBinding.ts
@@ -4,38 +4,564 @@
 * @version:
 * @Date: 2024-06-19 20:34:27
 * @LastEditors: Ben Lin
 * @LastEditTime: 2024-06-22 00:04:06
 * @LastEditTime: 2024-06-26 21:49:44
 */
import { Ref, ref, unref } from 'vue';
import { GetRoutePTree } from '/@/api/tigerapi/mes/router';
import { GetEnum, convertToTree, getEntity } from '/@/api/tigerapi/system';
import { useLocale } from '/@/locales/useLocale';
import { isNullOrEmpty, isNullOrUnDef } from '/@/utils/is';
import { useI18n } from '/@/hooks/web/useI18n';
import { NavItem } from '/@/api/tigerapi/model/basModel';
const { t } = useI18n();
const { getLocale } = useLocale();
function _default() {
  /**
 * @description: 获取树形图标
 * @param {Recordable} params
 * @return {*}
 */
function CreateIcon(params: Recordable<any>) {
  let icon = '';
  switch (params['type']) {
    case 'Product':
      icon = 'similar-product|svg';
      break;
    case 'Route':
      icon = 'route|svg';
      break;
    case 'Node':
      icon = 'node|svg';
      break;
    case 'Action':
      icon = 'rot_action|svg';
      break;
    case 'Customer':
      icon = 'customer|svg';
      break;
  }
  return icon;
}
  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 methods = {
    /**
     * @description: 获取树形图标
     * @param {Recordable} params
     * @return {*}
     */
    CreateIcon: (params: Recordable<any>) => {
      let icon = '';
      switch (params['type']) {
        case 'Product':
          icon = 'similar-product|svg';
          break;
        case 'Route':
          icon = 'route|svg';
          break;
        case 'Node':
          icon = 'node|svg';
          break;
        case 'Action':
          icon = 'rot_action|svg';
          break;
        case 'Customer':
          icon = 'customer|svg';
          break;
      }
      return icon;
    },
    /**
     * @description: 高级表单和详情页面返回主页面的url
     * @return {*}
     */
    GetHomeUrl: () => {
      return `/V_BAS_PROD/LC/${encodeURI(JSON.stringify({ ID: 'V_BAS_PROD', colSlots: [], crudColSlots: [] }))}`;
    },
    /**
     * @description: 获取树形数据
     * @param {string} type
     * @return {*}
     */
    fetchTreeData: async (type: string, itemCode: string) => {
      let data = { title: '', treeData: [] as any[], fieldNames: {} };
      let prodTreeData = await GetRoutePTree(itemCode);
      data.treeData = convertToTree(prodTreeData, 'pid', 'id', 'root');
      data.title = '工艺路线';
      data.fieldNames = { key: 'id', title: 'name' };
      return data;
    },
    GetCrudForm: () => {
      return [
        {
          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 },
        },
      ];
    },
    /**
     * @description: 获取表单中的字段插槽列表
     * @return {*}
     */
    GetCrudColSlots: () => {
      return ['scanadd', 'assyadd', 'testadd', 'auditadd', 'printadd', 'pkgadd'];
    },
    nodeChange: (params: {
      resetFields: any;
      setFieldsValue: any;
      objParams: Ref<any>;
      selectedNodes: Ref<any[]>;
    }) => {
      params['resetFields']();
      let sqlcmd = ' 1=1 ';
      if (!isNullOrEmpty(params['objParams'].value['CODE'])) {
        sqlcmd += `And PROD_CODE = '${params['objParams'].value['CODE']}'`;
      }
      // if (!isNullOrEmpty(Cust_Code.value)) {
      //   sqlcmd += `And CUST_CODE = '${Cust_Code.value}'`;
      // }
      if (!isNullOrEmpty(params['selectedNodes'].value[0].code)) {
        sqlcmd += `And ACT_ID = '${params['selectedNodes'].value[0].code}'`;
      }
      getEntity({
        sqlcmd: sqlcmd,
        entityName: 'MES_PROD_ACTION',
      }).then((res) => {
        params['setFieldsValue']({
          PROD_CODE: params['objParams'].value['CODE'],
          ACT_TYPE: res.Data.Items[0].ACT_TYPE,
        });
      });
    },
    /**
     * @description: 弹出选择框打开方法
     * @param {Fn} openItemModal
     * @return {*}
     */
    OpenSelectItem: (openItemModal: Fn, ...args) => {
      let config = {};
      switch (args[0]) {
        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);
    },
    /**
     * @description: 弹出选择框选择成功返回
     * @param {*} d
     * @param {*} u
     * @return {*}
     */
    GetSelectSuccess: (d, u, ...args) => {
      let value = {};
      switch (args[0]) {
        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;
      }
      return value;
    },
    /**
     * @description: 获取标题信息
     * @param {string} type
     * @return {*}
     */
    GetTitle: () => {
      return {
        configTitle: '行为配置',
        navTitle: '添加工艺路线',
      };
    },
    /**
     * @description: 根据选中的树节点判断要切换哪个组件
     * @param {Ref} selectedNodes
     * @return {*}
     */
    SelectNode: (selectedNodes: Ref<any[]>) => {
      let result = { showConfig: false, showNav: false };
      if (isNullOrUnDef(selectedNodes)) {
        return result;
      }
      if (selectedNodes.value[0].type == 'Product') {
        result.showNav = true;
        result.showConfig = false;
      }
      if (selectedNodes.value[0].type == 'Action') {
        result.showNav = false;
        result.showConfig = true;
      }
      return result;
    },
    /**
     * @description: 获取导航项
     * @return {*}
     */
    GetNavItems: () => {
      return [
        {
          title: '添加产品工艺路线',
          icon: 'add_green|svg',
          color: '#1fdaca',
          url: '/addRoute',
          action: 'addRoute',
        },
        {
          title: '添加客户工艺路线',
          icon: 'add_customer|svg',
          color: '#bf0c2c',
          url: '/addCustomer',
          action: 'addCustomer',
        },
      ] as NavItem[];
    },
    /**
     * @description: 导航页面切换按钮时调用方法
     * @param {any} action
     * @return {*}
     */
    naveChangeItem: (action: any, ...args) => {
      args[0](true, {
        title: '工艺路线列表',
        schemas: [
          {
            field: 'ROT_CODE',
            component: 'Input',
            label: '工艺路线编码',
            colProps: {
              span: 12,
            },
          },
        ],
        ItemColumns: [
          {
            title: t('工艺路线编码'),
            dataIndex: 'ROT_CODE',
            resizable: true,
            sorter: true,
            width: 200,
          },
          {
            title: t('工艺路线名称'),
            dataIndex: 'ROT_NAME',
            resizable: true,
            sorter: true,
            width: 180,
          },
        ],
        tableName: 'MES_ROUTE',
        rowKey: 'ROT_CODE',
        returnFieldName: 'ROUTE_CODE', //返回值要赋值的字段名称
        searchInfo: { TABLE_NAME: 'MES_ROUTE' },
        which: action,
      });
    },
  };
return [CreateIcon]
  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' },
  };
  return [methods];
}
export default _default;