Ben Lin
2024-11-25 6e6fec028ffc9a27b3c8d30eb484cd361a119d76
src/views/tigerprojects/system/lowcode/entityts/ProdRouteBinding.ts
@@ -1,16 +1,58 @@
/* eslint-disable no-var */
/* eslint-disable no-fallthrough */
/*
 * @Description: 产品工艺路线相关
 * @Author: Ben Lin
 * @version:
 * @Date: 2024-06-19 20:34:27
 * @LastEditors: Ben Lin
 * @LastEditTime: 2024-06-25 18:30:51
 * @LastEditTime: 2024-10-24 01:21:57
 */
import { GetRoutePTree } from '/@/api/tigerapi/mes/router';
import { convertToTree } from '/@/api/tigerapi/system';
import { Ref, unref } from 'vue';
import {
  DeleteProdRoute,
  GetRoutePTree,
  RouteToCust,
  RouteToProd,
} from '/@/api/tigerapi/mes/router';
import { GetEnum, SaveEntity, 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';
import { useMessage } from '/@/hooks/web/useMessage';
import { useModal } from '/@/components/Modal';
import { ActionItem, BasicColumn, FormSchema, useTable } from '/@/components/Table';
import { CustModalParams } from '/@/api/tigerapi/model/systemModel';
import { useUserStore } from '/@/store/modules/user';
import { EventDataNode } from 'ant-design-vue/lib/tree';
import { ContextMenuItem } from '/@/components/TigerTree';
import { useForm } from '/@/components/Form';
import { mesApi } from '/@/api/tigerapi/mes/mesApi';
import { BAS_LABEL_VAR_WO, MesRotTree } from '/@/api/tigerapi/model/mesModel';
import { buildUUID } from '/@/utils/uuid';
import { AddOrEditLabelVarByWorkOrder } from '/@/api/tigerapi/mes/wo';
import { useProdRouteStore } from '/@/store/modules/prodRoute';
import { useWebSocketStore } from '/@/store/modules/websocket';
const { t } = useI18n();
const { createErrorModal } = useMessage();
const { getLocale } = useLocale();
const useProdRoute = useProdRouteStore();
function _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;
  /**
   * @description: 产品绑定工艺路线的一些自定义方法
   * @return {*}
   */
  const methods = {
    /**
     * @description: 获取树形图标
@@ -41,9 +83,9 @@
    /**
     * @description: 高级表单和详情页面返回主页面的url
     * @return {*}
     */
    GetHomeUrl: () => {
      return `/V_BAS_PROD/LC/${encodeURI(JSON.stringify({ ID: 'V_BAS_PROD', colSlots: [], crudColSlots: [] }))}`;
     */
    GetHomeUrl: (params) => {
      return `/V_BAS_PROD_R/LC/${encodeURI(JSON.stringify({ ID: 'V_BAS_PROD_R', colSlots: [], crudColSlots: [], sName: params['sName'] }))}`;
    },
    /**
     * @description: 获取树形数据
@@ -51,15 +93,1827 @@
     * @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');
      const data = { title: '', treeData: [] as any[], fieldNames: {} };
      const prodTreeData = (await GetRoutePTree({
        prodCode: itemCode,
        orgCode: useUserStore().getUserInfo.orgCode,
      })) as unknown as MesRotTree[];
      const _treeData = convertToTree(prodTreeData, 'pid', 'tid', 'root');
      data.title = '工艺路线';
      data.fieldNames = { key: 'id', title: 'name' };
      data.fieldNames = { key: 'tid', title: 'name' };
      if (
        !useProdRoute.changeToCPPage ||
        !useProdRoute.curProdRotTree.some((q) => q.name == itemCode)
      ) {
        /* 保存工艺树形数据到状态管理 */
        useProdRoute.setCurProdRotTree({
          name: itemCode,
          treeInfo: _treeData as unknown as MesRotTree[],
        });
      }
      useProdRoute.setItemCode(itemCode);
      useProdRoute.setname(itemCode);
      if (useProdRoute.curProdRotTree.some((q) => q.name == itemCode)) {
        data.treeData = useProdRoute.curProdRotTree.filter((q) => q.name == itemCode)[0].treeInfo;
      }
      return data;
    },
    /**
     * @description: 操作字段自定义按钮,必需要有的方法
     * @return {*}
     */
    ActionItem: (params: Recordable<any>, data, ...args): ActionItem[] => {
      data.push({
        icon: 'template|svg',
        tooltip: '模板维护',
        onClick: handleTemplate.bind(null, args, params),
        name: '模板维护',
      });
      return data;
    },
    /**
     * @description: 获取配置项表单字段,根据树形节点type不同而不同
     * @param {string} type
     * @return {*}
     */
    GetCrudForm: (type: string) => {
      let form: FormSchema[] = [];
      switch (type) {
        case 'Action':
          form = actionFormShema;
          break;
        case 'Node':
          form = nodeFormShema;
          break;
        default:
          form = crudForms[type];
          break;
      }
      return form;
    },
    /**
     * @description: 获取表单中的字段插槽列表
     * @return {*}
     */
    GetCrudColSlots: () => {
      return [
        { name: 'scanadd', icon: 'search|svg' },
        { name: 'assyadd', icon: 'search|svg' },
        { name: 'testadd', icon: 'search|svg' },
        { name: 'auditadd', icon: 'search|svg' },
        { name: 'printadd', icon: 'search|svg' },
        { name: 'pkgadd', icon: 'search|svg' },
        { name: 'labeladd', icon: 'template|svg' },
      ];
    },
    /**
     * @description: 切换节点时事件方法
     * @return {*}
     */
    nodeChange: (params: { useForms: Ref<any>; objParams: Ref<any>; selectedNodes: any[] }) =>
      new Promise<any>(async (resolve, reject) => {
        // params['useForms'].value = methods.GetUseForm();
        const result = { isShow: {} };
        let sqlcmd = ' 1=1 ';
        if (!isNullOrEmpty(params['objParams'].value['CODE'])) {
          sqlcmd += `And PROD_CODE = '${params['objParams'].value['CODE']}'`;
        }
        if (!isNullOrEmpty(params['selectedNodes'][0].cust)) {
          sqlcmd += `And CUST_CODE = '${params['selectedNodes'][0].cust}'`;
        }
        if (!isNullOrEmpty(params['selectedNodes'][0].id)) {
          sqlcmd +=
            params['selectedNodes'][0].type == 'Action'
              ? `And ACT_ID = '${params['selectedNodes'][0].id}'`
              : `And NODE_ID = '${params['selectedNodes'][0].id}'`;
        }
        try {
          const res = await getEntity({
            sqlcmd: sqlcmd,
            entityName:
              params['selectedNodes'][0].type == 'Action' ? 'MES_PROD_ACTION' : 'MES_PROD_OPER',
            order: '',
          });
          const setFieldsValue = params['useForms'].value['Action'][1]['setFieldsValue'];
          const setFieldsValueNode = params['useForms'].value['Node'][1]['setFieldsValue'];
          const resetFields = params['useForms'].value['Action'][1]['resetFields'];
          const resetFieldsNode = params['useForms'].value['Node'][1]['resetFields'];
          if (params['selectedNodes'][0].type == 'Action') {
            resetFields();
            setFieldsValue({
              ID: res.Data.Items[0].ID,
              ACT_ID: res.Data.Items[0].ACT_ID,
              ROT_ID: res.Data.Items[0].ROT_ID,
              NODE_ID: res.Data.Items[0].NODE_ID,
              IS_ACTIVE: res.Data.Items[0].IS_ACTIVE,
              ITEM_CODE: res.Data.Items[0].ITEM_CODE,
              RULE_CODE: res.Data.Items[0].RULE_CODE,
              TEST_CODE: res.Data.Items[0].TEST_CODE,
              SAPL_CODE: res.Data.Items[0].SAPL_CODE,
              LABEL_CODE: res.Data.Items[0].LABEL_CODE,
              PKG_CODE: res.Data.Items[0].PKG_CODE,
              ACT_CODE: res.Data.Items[0].ACT_CODE,
              REMARK: res.Data.Items[0].REMARK,
              PROD_CODE: params['objParams'].value['CODE'],
              ACT_TYPE: res.Data.Items[0].ACT_TYPE,
              CUST_CODE: params['selectedNodes'][0].cust,
              OPTION_1: res.Data.Items[0].OPTION_1,
              OPTION_2: res.Data.Items[0].OPTION_2,
            });
            /* 如果是包装规则 */
            if (res.Data.Items[0].ACT_TYPE == 6) {
              result['name'] = 'BAS_PKG_DTL';
              result['isShow'] = {
                BAS_PKG_DTL: isNullOrEmpty(res.Data.Items[0].PKG_CODE) ? false : true,
                ItemCode: false,
              };
              const ents = await getEntity({
                sqlcmd: `RULE_CODE ='${res.Data.Items[0].PKG_CODE}'`,
                entityName: 'V_BAS_PKG_DTL',
                order: '',
              });
              result['BAS_PKG_DTL'] = isNullOrEmpty(res.Data.Items[0].OPTION_1)
                ? ents.Data.Items
                : JSON.parse(res.Data.Items[0].OPTION_1);
              /* 如果OPTION_1字段为空就把包装信息转JSON存到OPTION_1字段 */
              res.Data.Items[0].OPTION_1 = JSON.stringify(result['BAS_PKG_DTL']);
            } /* 如果是组装上料 */
            if (res.Data.Items[0].ACT_TYPE == 2) {
              result['name'] = 'ItemCode';
              result['ItemCode'] = JSON.parse(res.Data.Items[0].OPTION_1);
              result['isShow'] = {
                BAS_PKG_DTL: false,
                ItemCode: true,
              };
            }
            result['Action'] = res.Data.Items;
          }
          if (params['selectedNodes'][0].type == 'Node') {
            resetFieldsNode();
            const values = {
              ID: res.Data.Items[0].ID,
              OPER_CODE: res.Data.Items[0].OPER_CODE,
              ROT_ID: res.Data.Items[0].ROT_ID,
              NODE_ID: res.Data.Items[0].NODE_ID,
              NODE_NAME: res.Data.Items[0].NODE_NAME,
              IS_ACTIVE: isNullOrEmpty(res.Data.Items[0].IS_ACTIVE)
                ? 'N'
                : res.Data.Items[0].IS_ACTIVE,
              IS_CALC_FPY: isNullOrEmpty(res.Data.Items[0].IS_CALC_FPY)
                ? 'N'
                : res.Data.Items[0].IS_CALC_FPY,
              CAN_SKIP: isNullOrEmpty(res.Data.Items[0].CAN_SKIP)
                ? 'N'
                : res.Data.Items[0].CAN_SKIP,
              IS_INPUT: isNullOrEmpty(res.Data.Items[0].IS_INPUT)
                ? 'N'
                : res.Data.Items[0].IS_INPUT,
              IS_OUTPUT: isNullOrEmpty(res.Data.Items[0].IS_OUTPUT)
                ? 'N'
                : res.Data.Items[0].IS_OUTPUT,
              ALLOW_DFT_IN: isNullOrEmpty(res.Data.Items[0].ALLOW_DFT_IN)
                ? 'N'
                : res.Data.Items[0].ALLOW_DFT_IN,
              IF_DFT_OFFLINE: isNullOrEmpty(res.Data.Items[0].IF_DFT_OFFLINE)
                ? 'N'
                : res.Data.Items[0].IF_DFT_OFFLINE,
              REMARK: res.Data.Items[0].REMARK,
              PROD_CODE: params['objParams'].value['CODE'],
              CUST_CODE: params['selectedNodes'][0].cust,
            };
            setFieldsValueNode(values);
            /* 默认保存 */
            SaveEntity(values, true, 'MES_PROD_OPER');
            // result['Node'] = res.Data.Items;
            result['name'] = 'Node';
            result['isShow'] = {
              BAS_PKG_DTL: false,
              ItemCode: false,
            };
          }
          useProdRoute.setcurDtl(result);
          resolve(result);
        } catch (e) {
          reject(e);
        }
      }),
    /**
     * @description: 自定义提交方法
     * @return {*}
     */
    SubmitFunc: (values: Recordable<any>, type: string, emit) =>
      new Promise<any>((resolve, reject) => {
        let entityName = '';
        switch (type) {
          case 'Action':
            entityName = 'MES_PROD_ACTION';
            break;
          case 'Node':
            entityName = 'MES_PROD_OPER';
            break;
        }
        values.AUTH_ORG = useUserStore().getUserInfo.orgCode;
        values.AUTH_PROD = useUserStore().getUserInfo.prodCode;
        if (type == 'Action') {
          values.OPTION_1 = JSON.stringify(useProdRoute.getcurDtl['BAS_PKG_DTL']);
        }
        SaveEntity(values, true, entityName).then((action) => {
          if (action.IsSuccessed) {
            emit('success');
          }
        });
        resolve(true);
      }),
    /**
     * @description: 弹出选择框打开方法
     * @param {Fn} openItemModal
     * @param {array} args
     * @return {*}
     */
    OpenSelectItem: (openItemModal: Fn, ...args) => {
      let config = {};
      const openCrudModal = args[1];
      const record = args[2];
      const OrderNo = args[3];
      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;
      }
      if (args[0] == 'labeladd') {
        openCrudModal(true, {
          isUpdate: true, //是否更新操作
          entityName: 'ProdRouteBinding', //是哪个页面
          ctype: 'BAS_LABEL_VAR_WO', //实体名称
          title: '模板维护', //标题
          width: '1024px', //弹出框宽度
          ItemColumns: TemplateBasColumn, //弹出框中表格字段结构
          schemas: [], //查询条件字段结构
          others: { WORK_ORDER: OrderNo }, //需要带到弹出窗口中的数据
          searchInfo: {
            TABLE_NAME: 'BAS_LABEL_VAR_WO', //实体名称
            LabelId: record.LABEL_CODE, //模板ID
            WorkOrder: OrderNo, //工单号
            apiUrl: mesApi.GetLabelVarByWorkOrder, //自定义获取数据分页的api,不用默认的基础方法
            // sqlcmd: ` (WORK_ORDER = '${OrderNo}' OR WORK_ORDER = '' OR WORK_ORDER IS NULL)`,
            // option:
            // {
            //   //根据据点查询,必需带这个参数
            //   UserId: useUserStore().getUserInfo.userId,
            //   ByOrg: true,
            //   CurOrg: useUserStore().getUserInfo.orgCode,
            // },
          },
          values: record, //表单记录
        });
      } else {
        openItemModal(true, config);
      }
    },
    /**
     * @description: 弹出选择框选择成功返回
     * @param {*} d
     * @param {*} u
     * @param {array} args
     * @return {*}
     */
    GetSelectSuccess: async (d, u, ...args) => {
      let value = {};
      switch (args[0]) {
        case 'scanadd':
          value = {
            value: {
              RULE_CODE: d.values['val'],
            },
            isShow: { BAS_PKG_DTL: false, ItemCode: false },
          };
          break;
        case 'assyadd':
          const items = d.values['val'].split(',');
          const data: any[] = [];
          if (!isNullOrEmpty(items) && items.length > 0) {
            items.map((x) => {
              data.push({
                ITEM_CODE: x,
                RULE_CODE: '',
                IsBatchItem: 'N',
                QTY: 1,
              });
            });
          }
          value = {
            value: {
              ITEM_CODE: d.values['val'],
            },
            isShow: { BAS_PKG_DTL: false, ItemCode: true },
            data: data,
            name: 'ItemCode',
          };
          break;
        case 'printadd':
          value = {
            value: {
              LABEL_CODE: d.values['val'],
            },
            isShow: { BAS_PKG_DTL: false, ItemCode: false },
          };
          break;
        case 'pkgadd':
          const ents = await getEntity({
            sqlcmd: `RULE_CODE ='${d.values['val']}'`,
            entityName: 'V_BAS_PKG_DTL',
            order: '',
          });
          value = {
            value: {
              PKG_CODE: d.values['val'],
            },
            isShow: { BAS_PKG_DTL: true, ItemCode: false },
            data: ents.Data.Items,
            name: 'BAS_PKG_DTL',
          };
          break;
        case 'addRoute':
          if (isNullOrEmpty(args[1]['CODE'])) {
            createErrorModal({
              title: t('sys.api.errorTip'),
              content: '产品为空,不能添加工艺路线,请点击左侧选择产品',
            });
            return;
          }
          const codes = d.values.id.split(',');
          var i;
          for (i = 0; i < codes.length; i++) {
            if (d.which == 'addRoute') {
              RouteToProd({ rotId: codes[i], prodCode: args[1]['CODE'] });
            }
          }
          args[2]();
          break;
        case 'addCustomer':
          if (isNullOrEmpty(args[1]['CODE'])) {
            createErrorModal({
              title: t('sys.api.errorTip'),
              content: '产品为空,不能添加工艺路线,请点击左侧选择产品',
            });
            return;
          }
          const rotIds = d.ROT_ID.split(',');
          var i;
          for (i = 0; i < rotIds.length; i++) {
            RouteToCust({ rotId: rotIds[i], prodCode: args[1]['CODE'], custCode: d.CUST_CODE });
          }
          args[2]();
          break;
      }
      return value;
    },
    /**
     * @description: 获取模态框应用列表 ['scanadd', 'assyadd', 'testadd', 'auditadd', 'printadd', 'pkgadd']
     * @return {*}
     */
    GetUseModals: () => {
      return {
        addRoute: useModal(),
        addCustomer: useModal(),
        editRoute: useModal(),
        scanadd: useModal(),
        assyadd: useModal(),
        testadd: useModal(),
        auditadd: useModal(),
        printadd: useModal(),
        labeladd: useModal(),
        pkgadd: useModal(),
      };
    },
    /**
     * @description: 获取在增删改表单中的模态框应用列表
     * @return {*}
     */
    GetUseCrudModals: () => {
      return {
        addRoute: useModal(),
        addCustomer: useModal(),
        editRoute: useModal(),
        scanadd: useModal(),
        assyadd: useModal(),
        testadd: useModal(),
        auditadd: useModal(),
        printadd: useModal(),
        labeladd: useModal(),
        pkgadd: useModal(),
      };
    },
    /**
     * @description: 获取表格use列表,这里跟主页面传过来的OtherTableName: ['BAS_PKG_DTL', 'ItemCode']内的名称是一致的。
     * @param {string} type
     * @param {array} args
     * @return {*}
     */
    GetUseTables: (data: Ref<{}>, ...args) => {
      // data.value['Table'] = [];
      return {
        BAS_PKG_DTL: useTable({
          title: '列表信息',
          // api: getListByPage,
          // searchInfo: { TABLE_NAME: 'V_BAS_PKG_DTL' },
          dataSource: data.value['BAS_PKG_DTL'],
          columns: GetBaseColumns('BAS_PKG_DTL', args[0], data),
          // maxHeight: 520,
          // scroll: { y: window.screen.width == 1366? 400: 450 },
          isCanResizeParent: true,
          useSearchForm: false,
          showTableSetting: false,
          bordered: true,
          // canResize: false,
          showIndexColumn: false,
          // rowSelection: {
          //   type: 'radio', //'checkbox'
          // },
          actionColumn: {
            width: 100,
            title: '操作',
            dataIndex: 'action',
            slots: { customRender: 'action' },
            fixed: 'right',
          }, //自定义操作列
        }),
        ItemCode: useTable({
          title: '列表信息',
          // api: getListByPage,
          // searchInfo: { TABLE_NAME: 'V_BAS_PKG_DTL' },
          dataSource: data.value['ItemCode'],
          columns: GetBaseColumns('ItemCode', args[0], data),
          maxHeight: 520,
          useSearchForm: false,
          showTableSetting: false,
          bordered: true,
          canResize: true,
          showIndexColumn: false,
          // rowSelection: {
          //   type: 'radio', //'checkbox'
          // },
          actionColumn: {
            width: 100,
            title: '操作',
            dataIndex: 'action',
            slots: { customRender: 'action' },
            fixed: 'right',
          }, //自定义操作列
        }),
      };
    },
    /**
     * @description: 获取行为或者节点的配置表单结构,使用useForm()
     * @return {*}
     */
    GetUseForm: () => {
      return {
        Action: useForm({
          labelWidth: 145,
          schemas: methods.GetCrudForm('Action'),
          actionColOptions: {
            offset: 8,
            span: 24,
          },
          wrapperCol: {
            span: 15,
          },
          showActionButtonGroup: true,
          submitButtonOptions: {
            text: '保存',
          },
        }),
        Node: useForm({
          labelWidth: 145,
          schemas: methods.GetCrudForm('Node'),
          actionColOptions: {
            offset: 8,
            span: 24,
          },
          wrapperCol: {
            span: 15,
          },
          showActionButtonGroup: true,
          submitButtonOptions: {
            text: '保存',
          },
        }),
      };
    },
    /**
     * @description: 获取标题信息
     * @param {string} type
     * @param {*} item
     * @return {*}
     */
    GetTitle: (type: string, item) => {
      return {
        configTitle: type == 'Action' ? '行为配置' : '工序配置',
        navTitle: type == 'Product' ? '添加工艺路线' : '工艺路线维护',
        tableTitle: type == 'Action' ? (item == 'ItemCode' ? '上料列表' : '包装层级列表') : '',
      };
    },
    /**
     * @description: 根据选中的树节点返回主页面,自定义方法,这里是判断要切换哪个组件
     * @param {Ref} selectedNodes
     * @return {*}
     */
    SelectNode: (selectedNodes: Ref<any[]>, code: string) => {
      const result = {
        showConfig: false,
        showNav: false,
        type: selectedNodes.value[0].type,
        nodes: selectedNodes.value,
        showOtherTable: { BAS_PKG_DTL: false, ItemCode: false },
      };
      if (isNullOrUnDef(selectedNodes.value)) {
        return result;
      }
      if (selectedNodes.value[0].type == 'Product' || selectedNodes.value[0].type == 'Route') {
        result.showNav = true;
        result.showConfig = false;
        result.showOtherTable = { BAS_PKG_DTL: false, ItemCode: false };
      }
      if (selectedNodes.value[0].type == 'Action' || selectedNodes.value[0].type == 'Node') {
        result.showNav = false;
        result.showConfig = true;
        result.showOtherTable = { BAS_PKG_DTL: false, ItemCode: false };
      }
      /* 保存当前选择的节点数据到状态管理 */
      useProdRoute.setCurSelectedNodes({ name: code, SelectedNodes: selectedNodes.value });
      return result;
    },
    /**
     * @description: 获取导航项
     * @param {string} type
     * @return {*}
     */
    GetNavItems: (type: string) => {
      let item: NavItem[] = [];
      switch (type) {
        case 'Product':
          item = [
            {
              title: '添加产品工艺路线',
              icon: 'add_green|svg',
              color: '#1fdaca',
              url: '/addRoute',
              action: 'addRoute',
              isStep: false,
              isCustEl: false,
            },
            {
              title: '添加客户工艺路线',
              icon: 'add_customer|svg',
              color: '#bf0c2c',
              url: '/addCustomer',
              action: 'addCustomer',
              isStep: true,
              isCustEl: false,
            },
          ];
          break;
        case 'Route':
          item = [
            {
              title: '编辑工艺路线', //标题
              icon: 'clarity:note-edit-line', //图标
              color: '#1fdaca', //字体颜色
              url: '/editRoute', //导航地址
              action: 'editRoute', //导航执行的方法,如果按这个action来执行,上面的url就无效
              isStep: false, //是否是步骤
              isCustEl: false, //是否是自定义html内容
            },
            {
              title: '设置默认工艺路线',
              icon: '',
              color: '#1fdaca',
              url: '',
              action: '',
              isStep: false,
              isCustEl: true,
            },
          ];
          break;
      }
      return item;
    },
    /**
     * @description: 导航页面切换按钮时调用方法
     * @param {any} action
     * @param {array} args
     * @return {*}
     */
    navChangeItem: (action: any, ...args) => {
      const openRvModal = args[1];
      const openModal = args[0];
      switch (action) {
        case 'addRoute':
          openModal(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,
          });
          break;
        case 'addCustomer':
          openModal(true, {
            title: '请完成以下步骤',
          });
          break;
        case 'editRoute':
          openRvModal(true, {
            rotId: args[2][0].id,
            slotName: '',
            prodCode: args[3],
            custCode: args[2][0].cust,
          });
          break;
      }
    },
    /**
     * @description: 获取卡片内配置列表,以循环显示多个卡片并配置多个插槽
     * @return {*}
     */
    GetBaseCards: (type: string) => {
      let reusts: any[] = [];
      switch (type) {
        case 'Product':
          reusts = [];
          break;
        case 'Route':
          reusts = [
            {
              name: 'RotInfo',
              slots: [],
              preIcons: {},
              title: '工艺路线图',
              entityName: '',
            },
          ];
          break;
      }
      return reusts;
    },
    /**
     * @description: 获取插槽列表
     * @return {*}
     */
    GetSlots: () => {
      return ['RotInfo'];
    },
    /**
     * @description: 生成html
     * @return {*}
     */
    GenerateHtml: (type: string | null) => {
      const newElement = document.createElement('div');
      // newElement.textContent = 'New Element =>'+type;
      // newElement.style.height = '250px';
      newElement.id = 'lfContainer';
      newElement.className = 'h-full';
      // newElement.style.color = 'blue';
      // newElement.style.fontSize = '16px';
      return newElement;
    },
    /**
     * @description: 自定义方法
     * @param {string} type
     * @param {array} args
     * @return {*}
     */
    CustFunc: async (param: CustModalParams) => {
      return new Promise<any>(async (resolve, reject) => {
        try {
          switch (param['ctype']) {
            case 'BAS_PKG_DTL':
              // const ents = await getEntity({
              //   sqlcmd: `PKG_RULE_ID ='${param.values['PKG_RULE_ID']}'`,
              //   entityName: 'V_BAS_PKG_DTL',
              //   order: '',
              // });
              // param.data.value['Table'] = ents.Data.Items;
              param.data.value['BAS_PKG_DTL'].map((x) => {
                if (x.PKG_CODE == param.values['PKG_CODE']) {
                  x.LABEL_CODE = param.values['LABEL_CODE'];
                  x.LABEL_ID = param.values['LABEL_CODE'];
                }
              });
              param.data.value['Action'][0]['OPTION_1'] = JSON.stringify(
                param.data.value['BAS_PKG_DTL'],
              );
              resolve('OK');
              break;
            case 'ItemCode':
              param.data.value['ItemCode'].map((x) => {
                if (x.ITEM_CODE == param.values['ITEM_CODE']) {
                  x.IsBatchItem = param.values['IsBatchItem'];
                  x.RULE_CODE = param.values['RULE_CODE'];
                }
              });
              param.data.value['Action'][0]['OPTION_1'] = JSON.stringify(
                param.data.value['ItemCode'],
              );
              resolve('OK');
              break;
            case 'BAS_LABEL_VAR_WO':
              param.values['PROD_CODE'] = param.others['PROD_CODE'];
              param.values['ID'] = buildUUID();
              var action = await AddOrEditLabelVarByWorkOrder(
                param.values as unknown as BAS_LABEL_VAR_WO,
              );
              resolve(action);
            case 'isDefault':
              /* 设置默认工艺路线 */
              var action = await useProdRoute.setDefaulRoute(param);
              resolve(action);
            case 'delete':
              const webSocketStore = useWebSocketStore();
              if (webSocketStore.GetSocketState == 1) {
                webSocketStore.sendMessage(
                  `wsGetNew ${param.values['LABEL_ID']}_#_${param.values['PROD_CODE']}`,
                );
              }
              break;
          }
        } catch (e) {
          reject(e);
        }
      });
    },
    /**
     * @description: 获取右键菜单列表
     * @param {EventDataNode} node
     * @return {*}
     */
    GetRightMenuList: (node: EventDataNode, ...args): ContextMenuItem[] => {
      const emit = args[0];
      const menu = [
        // {
        //   label: '新增',
        //   handler: () => {
        //     console.log('点击了新增', node);
        //   },
        //   icon: 'bi:plus',
        // },
        {
          label: '删除',
          handler: () => {
            console.log('点击了删除', node);
            DeleteProdRoute({ rotId: node.id, rotCode: node.code, prodCode: args[1], custCode: node.cust }).then(
              (action) => {
                if (action.IsSuccessed) {
                  emit('deletenode', node);
                } else {
                  createErrorModal({
                    title: t('sys.api.errorTip'),
                    content: t(action.LocaleMsg),
                  });
                }
              },
            );
          },
          icon: 'bx:bxs-folder-open',
        },
      ];
      return node.type == 'Route' ? menu : [];
    },
  };
  /* 以下是内部方法,不export,供上面的方法调用 */
  let columns: BasicColumn[] = [];
  /**
   * @description: 获取表格字段Json
   * @param {string} type
   * @return {*}
   */
  function GetBaseColumns(type: string, emit, data: Ref<{}>) {
    switch (type) {
      case 'BAS_PKG_DTL':
        columns = [
          {
            dataIndex: 'PKG_RULE_ID',
            title: '包装规则ID',
            ifShow: false,
            sorter: true,
            resizable: true,
          },
          {
            dataIndex: 'PKG_CODE',
            title: '包装编码',
            ifShow: false,
            sorter: true,
            resizable: true,
            customRender: () => {},
          },
          {
            dataIndex: 'PKG_NAME',
            title: '包装名称',
            ifShow: true,
            sorter: true,
            resizable: true,
            customRender: () => {},
          },
          {
            dataIndex: 'PKG_QTY',
            title: '包装数量',
            ifShow: true,
            sorter: true,
            resizable: true,
            customRender: () => {},
          },
          {
            dataIndex: 'PKG_LEVEL',
            title: '包装层级',
            ifShow: true,
            sorter: true,
            resizable: true,
            customRender: () => {},
          },
          {
            dataIndex: 'LABEL_CODE',
            title: '标签模板编码',
            // edit: true,
            // editRule: true,
            ifShow: true,
            sorter: true,
            resizable: true,
            // editComponent: 'Input',
            // editComponentProps: (column) => {
            //   return {
            //         onClick: (event) => {
            //         console.log(column);
            //       },
            //   };
            // },
            // customCell: (record, rowIndex) => {
            //   return {
            //     onClick: (event) => {
            //         console.log(record);
            //       },
            //   };
            // },
          },
          {
            dataIndex: 'LABEL_ID',
            title: '标签模板ID',
            ifShow: false,
            customRender: () => {},
          },
        ] as BasicColumn[];
        break;
      case 'ItemCode':
        /*
        public string ITEM_CODE { get; set; }
        public string RULE_CODE { get; set; }
        /// <summary>
        /// 是否批次物料
        /// </summary>
        public bool IsBatchItem { get; set; }
        /// <summary>
        /// 上料数量
        /// </summary>
        public int QTY { get; set; }
         */
        columns = [
          {
            dataIndex: 'ITEM_CODE',
            title: '物料编码',
            ifShow: true,
            sorter: true,
            resizable: true,
          },
          {
            dataIndex: 'RULE_CODE',
            title: '规则编码',
            ifShow: true,
            sorter: true,
            resizable: true,
            customRender: () => {},
          },
          {
            dataIndex: 'IsBatchItem',
            title: '是否批次物料',
            ifShow: true,
            sorter: true,
            resizable: true,
            customRender: () => {},
          },
          {
            dataIndex: 'QTY',
            title: '上料数量',
            ifShow: true,
            sorter: true,
            resizable: true,
            customRender: () => {},
          },
          // {
          //   dataIndex: 'LABEL_CODE',
          //   title: '标签模板编码',
          //   // edit: true,
          //   // editRule: true,
          //   ifShow: true,
          //   sorter: true,
          //   resizable: true,
          //   // editComponent: 'Input',
          //   // editComponentProps: (column) => {
          //   //   return {
          //   //         onClick: (event) => {
          //   //         console.log(column);
          //   //       },
          //   //   };
          //   // },
          //   // customCell: (record, rowIndex) => {
          //   //   return {
          //   //     onClick: (event) => {
          //   //         console.log(record);
          //   //       },
          //   //   };
          //   // },
          // },
        ] as BasicColumn[];
        break;
    }
    return columns;
  }
  /**
   * @description: 弹出选择框-物料选择框配置
   * @return {*}
   */
  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' },
  };
  /**
   * @description: 弹出选择框-规则选择框配置
   * @return {*}
   */
  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' },
  };
  /**
   * @description: 弹出选择框-打印模板选择框配置
   * @return {*}
   */
  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: 行为配置表单字段
   * @return {*}
   */
  const actionFormShema: FormSchema[] = [
    {
      field: 'PROD_CODE',
      label: '产品编码',
      component: 'Input',
      dynamicDisabled: ({ values }) => {
        return true;
      },
      colProps: { span: 12 },
    },
    {
      field: 'ID',
      label: 'ID',
      component: 'Input',
      show: false,
    },
    {
      field: 'ACT_ID',
      label: 'ACT_ID',
      component: 'Input',
      show: false,
    },
    {
      field: 'ROT_ID',
      label: 'ROT_ID',
      component: 'Input',
      show: false,
    },
    {
      field: 'ACT_CODE',
      label: 'ACT_CODE',
      component: 'Input',
      show: false,
    },
    {
      field: 'NODE_ID',
      label: 'NODE_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: 11 },
      ifShow: ({ values }) => isScan(values.ACT_TYPE),
    },
    {
      field: '0',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 1, pull: 1 },
      ifShow: ({ values }) => isScan(values.ACT_TYPE),
      colSlot: 'scanadd',
    },
    {
      field: 'ITEM_CODE',
      label: '组装上料',
      colProps: { span: 11 },
      component: 'Input',
      ifShow: ({ values }) => isAssy(values.ACT_TYPE),
    },
    {
      field: '00',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 1, pull: 1 },
      ifShow: ({ values }) => isAssy(values.ACT_TYPE),
      colSlot: 'assyadd',
    },
    {
      field: 'TEST_CODE',
      label: '产品测试',
      colProps: { span: 11 },
      component: 'Input',
      ifShow: ({ values }) => isTest(values.ACT_TYPE),
    },
    {
      field: 'test0',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 1, pull: 1 },
      ifShow: ({ values }) => isTest(values.ACT_TYPE),
      colSlot: 'testadd',
    },
    {
      field: 'SAPL_CODE',
      label: '产品抽检',
      colProps: { span: 11 },
      component: 'Input',
      ifShow: ({ values }) => isAudit(values.ACT_TYPE),
    },
    {
      field: 'audit0',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 1, pull: 1 },
      ifShow: ({ values }) => isAudit(values.ACT_TYPE),
      colSlot: 'auditadd',
    },
    {
      field: 'LABEL_CODE',
      label: '标签打印',
      colProps: { span: 9 },
      component: 'Input',
      ifShow: ({ values }) => isPrint(values.ACT_TYPE),
    },
    {
      field: 'print0',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 2 },
      ifShow: ({ values }) => isPrint(values.ACT_TYPE),
      colSlot: 'printadd',
    },
    {
      field: 'print1',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 1, pull: window.screen.width == 1366 ? -1 : 1 },
      ifShow: ({ values }) => isPrint(values.ACT_TYPE),
      colSlot: 'labeladd',
    },
    {
      field: 'PKG_CODE',
      label: '包装规则',
      colProps: { span: 11 },
      component: 'Input',
      ifShow: ({ values }) => isPackage(values.ACT_TYPE),
    },
    {
      field: 'pkg0',
      label: '1',
      defaultValue: '',
      component: 'Input',
      colProps: { span: 1, pull: 1 },
      ifShow: ({ values }) => isPackage(values.ACT_TYPE),
      colSlot: 'pkgadd',
    },
    {
      field: 'OPTION_2',
      label: '是否称重',
      required: true,
      component: 'Select',
      colProps: { span: 12 },
      ifShow: ({ values }) => isPackage(values.ACT_TYPE),
      componentProps: {
        options: [
          {
            label: '是',
            value: 'Y',
            key: 'Y',
          },
          {
            label: '否',
            value: 'N',
            key: 'N',
          },
        ],
      },
    },
    {
      field: 'REMARK',
      label: '备注',
      component: 'Input',
      colProps: { span: 12 },
    },
    {
      field: 'OPTION_1',
      label: '行为选项1',
      component: 'Input',
      colProps: { span: 12 },
      show: false,
    },
  ];
  /**
   * @description: 工序配置表单字段
   * @return {*}
   */
  const nodeFormShema: FormSchema[] = [
    {
      field: 'PROD_CODE',
      label: '产品编码',
      component: 'Input',
      dynamicDisabled: ({ values }) => {
        return true;
      },
      colProps: { span: 12 },
    },
    {
      field: 'ID',
      label: 'ID',
      component: 'Input',
      show: false,
    },
    {
      field: 'ACT_ID',
      label: 'ACT_ID',
      component: 'Input',
      show: false,
    },
    {
      field: 'ROT_ID',
      label: 'ROT_ID',
      component: 'Input',
      show: false,
    },
    {
      field: 'NODE_ID',
      label: 'NODE_ID',
      component: 'Input',
      show: false,
    },
    {
      field: 'NODE_NAME',
      label: '工序节点名称',
      component: 'Input',
    },
    {
      field: 'CUST_CODE',
      label: '客户编码',
      component: 'Input',
      dynamicDisabled: ({ values }) => {
        return true;
      },
      colProps: { span: 12 },
    },
    {
      field: 'OPER_CODE',
      label: '工序编码',
      component: 'Input',
    },
    {
      field: 'IS_ACTIVE',
      label: '是否启用',
      required: true,
      defaultValue: 'N',
      component: 'Select',
      colProps: { span: 12 },
      componentProps: {
        options: [
          {
            label: '是',
            value: 'Y',
            key: 'Y',
          },
          {
            label: '否',
            value: 'N',
            key: 'N',
          },
        ],
      },
    },
    {
      field: 'IS_CALC_FPY',
      label: '是否计算直通率',
      required: true,
      component: 'Select',
      defaultValue: 'N',
      colProps: { span: 12 },
      componentProps: {
        options: [
          {
            label: '是',
            value: 'Y',
            key: 'Y',
          },
          {
            label: '否',
            value: 'N',
            key: 'N',
          },
        ],
      },
    },
    {
      field: 'CAN_SKIP',
      label: '是否允许跳站',
      required: true,
      defaultValue: 'N',
      component: 'Select',
      colProps: { span: 12 },
      componentProps: {
        options: [
          {
            label: '是',
            value: 'Y',
            key: 'Y',
          },
          {
            label: '否',
            value: 'N',
            key: 'N',
          },
        ],
      },
    },
    {
      field: 'IS_INPUT',
      label: '是否投入站',
      required: true,
      defaultValue: 'N',
      component: 'Select',
      colProps: { span: 12 },
      componentProps: {
        options: [
          {
            label: '是',
            value: 'Y',
            key: 'Y',
          },
          {
            label: '否',
            value: 'N',
            key: 'N',
          },
        ],
      },
    },
    {
      field: 'IS_OUTPUT',
      label: '是否产出站',
      required: true,
      defaultValue: 'N',
      component: 'Select',
      colProps: { span: 12 },
      componentProps: {
        options: [
          {
            label: '是',
            value: 'Y',
            key: 'Y',
          },
          {
            label: '否',
            value: 'N',
            key: 'N',
          },
        ],
      },
    },
    {
      field: 'ALLOW_DFT_IN',
      label: '是否允许不良品进站',
      required: true,
      defaultValue: 'N',
      component: 'Select',
      colProps: { span: 12 },
      componentProps: {
        options: [
          {
            label: '是',
            value: 'Y',
            key: 'Y',
          },
          {
            label: '否',
            value: 'N',
            key: 'N',
          },
        ],
      },
    },
    {
      field: 'IF_DFT_OFFLINE',
      label: '判断不良后是否下线',
      required: true,
      defaultValue: 'N',
      component: 'Select',
      colProps: { span: 12 },
      componentProps: {
        options: [
          {
            label: '是',
            value: 'Y',
            key: 'Y',
          },
          {
            label: '否',
            value: 'N',
            key: 'N',
          },
        ],
      },
      ifShow: ({ values }) => values.OPER_CODE == 'TestNode',
    },
    {
      field: 'REMARK',
      label: '备注',
      component: 'Input',
      colProps: { span: 12 },
    },
  ];
  const crudForms = {
    BAS_PKG_DTL: [
      {
        label: '包装规则ID',
        field: 'PKG_RULE_ID',
        component: 'Input',
        colProps: {
          span: 24,
        },
        dynamicDisabled: ({ values }) => {
          return true;
        },
      },
      {
        label: '包装层级',
        field: 'PKG_LEVEL',
        component: 'Input',
        colProps: {
          span: 24,
        },
        dynamicDisabled: ({ values }) => {
          return true;
        },
      },
      {
        field: 'PKG_CODE',
        label: '包装/载具编码',
        component: 'Input',
        colProps: {
          span: 24,
        },
        dynamicDisabled: ({ values }) => {
          return true;
        },
      },
      {
        label: '包装数量',
        field: 'PKG_QTY',
        component: 'Input',
        colProps: {
          span: 24,
        },
        dynamicDisabled: ({ values }) => {
          return true;
        },
      },
      {
        field: 'LABEL_CODE',
        label: '模板编码',
        component: 'Input',
        show: true,
        // required: true,
        colProps: {
          span: 22,
        },
      },
      {
        field: 'BAS_LABEL_TEMP1PSelect_0', //按低代码配置的规则,实体名+序号+PSelect_0,序号用来区分多个的时候,PSelect_0这是个固定后缀
        label: '1',
        defaultValue: 'BAS_LABEL_TEMP',
        component: 'Input',
        colProps: { span: 2 },
        colSlot: 'BAS_LABEL_TEMP1add', //按低代码配置的规则,实体名+序号+add,序号用来区分多个的时候,add这是个固定后缀
      },
      {
        label: '包装名称',
        field: 'PKG_NAME',
        component: 'Input',
        colProps: {
          span: 24,
        },
        show: false,
      },
      {
        label: '备注',
        field: 'REMARK',
        component: 'Input',
        colProps: {
          span: 24,
        },
        dynamicDisabled: ({ values }) => {
          return true;
        },
      },
      {
        label: 'ID',
        field: 'ID',
        component: 'Input',
        colProps: {
          span: 24,
        },
        show: false,
      },
    ] as FormSchema[],
    ItemCode: [
      {
        label: '物料编码',
        field: 'ITEM_CODE',
        component: 'Input',
        colProps: {
          span: 24,
        },
        dynamicDisabled: ({ values }) => {
          return false;
        },
      },
      {
        field: 'RULE_CODE',
        label: '规则编码',
        component: 'Input',
        colProps: {
          span: 22,
        },
        dynamicDisabled: ({ values }) => {
          return false;
        },
      },
      {
        field: 'BAS_CODE_RULE1PSelect_0', //按低代码配置的规则,实体名+序号+PSelect_0,序号用来区分多个的时候,PSelect_0这是个固定后缀
        label: '1',
        defaultValue: 'BAS_CODE_RULE',
        component: 'Input',
        colProps: { span: 2 },
        colSlot: 'BAS_CODE_RULE1add', //按低代码配置的规则,实体名+序号+add,序号用来区分多个的时候,add这是个固定后缀
      },
      {
        label: '是否批次物料',
        field: 'IsBatchItem',
        colProps: {
          span: 24,
        },
        component: 'Select',
        componentProps: {
          options: [
            {
              label: '是',
              value: 'Y',
              key: 'Y',
            },
            {
              label: '否',
              value: 'N',
              key: 'N',
            },
          ],
        },
      },
      {
        label: '上料数量',
        field: 'QTY',
        component: 'Input',
        colProps: {
          span: 24,
        },
        dynamicDisabled: ({ values }) => {
          return false;
        },
      },
    ] as FormSchema[],
  };
  /**
   * @description: 模板维护
   * @param {*} args
   * @param {Recordable} params
   * @return {*}
   */
  function handleTemplate(args, params: Recordable) {
    const openCrudModal = args[0];
    // const OrderNo = args[2];
    const ProdCode = args[2];
    openCrudModal(true, {
      isUpdate: true, //是否更新操作
      entityName: 'ProdRouteBinding', //是哪个页面
      ctype: 'BAS_LABEL_VAR_WO', //实体名称
      title: '模板维护', //标题
      width: '1024px', //弹出框宽度
      ItemColumns: TemplateBasColumn, //弹出框中表格字段结构
      schemas: [], //查询条件字段结构
      others: { WORK_ORDER: '', PROD_CODE: ProdCode }, //需要带到弹出窗口中的数据
      searchInfo: {
        TABLE_NAME: 'BAS_LABEL_VAR_WO', //实体名称
        LabelId: params['record'].LABEL_ID, //模板ID
        WorkOrder: '', //工单号
        ProdCode: ProdCode,
        CustCode: '',
        apiUrl: mesApi.GetLabelVarByWorkOrder, //自定义获取数据分页的api,不用默认的基础方法
      },
      values: params['record'], //表单记录
    });
  }
  /* 下发界面中的表单列表 */
  const TemplateBasColumn = [
    {
      dataIndex: 'LABEL_ID',
      title: '标签模板ID',
      ifShow: false,
      sorter: true,
      resizable: true,
    },
    {
      title: '工单号',
      dataIndex: 'WORK_ORDER',
      width: 280,
      // editRow: true,
      // editable: true,
      ifShow: false,
    },
    {
      title: '工单号',
      dataIndex: 'PROD_CODE',
      width: 280,
      ifShow: false,
    },
    {
      title: '变量名',
      dataIndex: 'VAR_NAME',
    },
    {
      title: '变量值',
      dataIndex: 'VAR_VALUE',
      editRow: true,
      editRule: true,
    },
    {
      title: '默认值',
      dataIndex: 'DEFAULT_VALUE',
      // editRow: true,
      // editRule: true,
    },
  ] as BasicColumn[];
  return [methods];
}