Ben Lin
2025-03-08 858b9bccead46cdefc99325b7c956d50a2964309
src/views/tigerprojects/system/lowcode/entityts/ProdRouteBinding.ts
@@ -1,19 +1,20 @@
/* 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-10-06 16:48:25
 * @LastEditTime: 2024-10-24 01:21:57
 */
import { Ref, h, ref, render, unref } from 'vue';
import { Ref, unref } from 'vue';
import {
  DeleteProdRoute,
  GetRoutePTree,
  RouteToCust,
  RouteToProd,
  SetDefaultRoute,
} from '/@/api/tigerapi/mes/router';
import { GetEnum, SaveEntity, convertToTree, getEntity } from '/@/api/tigerapi/system';
import { useLocale } from '/@/locales/useLocale';
@@ -29,13 +30,16 @@
import { ContextMenuItem } from '/@/components/TigerTree';
import { useForm } from '/@/components/Form';
import { mesApi } from '/@/api/tigerapi/mes/mesApi';
import { BAS_LABEL_VAR_WO } from '/@/api/tigerapi/model/mesModel';
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;
@@ -80,8 +84,8 @@
     * @description: 高级表单和详情页面返回主页面的url
     * @return {*}
     */
    GetHomeUrl: () => {
      return `/V_BAS_PROD_R/LC/${encodeURI(JSON.stringify({ ID: 'V_BAS_PROD_R', colSlots: [], crudColSlots: [] }))}`;
    GetHomeUrl: (params) => {
      return `/V_BAS_PROD_R/LC/${encodeURI(JSON.stringify({ ID: 'V_BAS_PROD_R', colSlots: [], crudColSlots: [], sName: params['sName'] }))}`;
    },
    /**
     * @description: 获取树形数据
@@ -89,20 +93,29 @@
     * @return {*}
     */
    fetchTreeData: async (type: string, itemCode: string) => {
      let data = { title: '', treeData: [] as any[], fieldNames: {} };
      let prodTreeData = await GetRoutePTree({
      const data = { title: '', treeData: [] as any[], fieldNames: {} };
      const prodTreeData = (await GetRoutePTree({
        prodCode: itemCode,
        orgCode: useUserStore().getUserInfo.orgCode,
      });
      // let uniqueArr = prodTreeData.reduce((acc, current) => {
      //   if (!acc.some((x) => x.pid == current.pid && x.id == current.id && x.seq == current.seq && x.type == current.type)) {
      //     acc.push(current);
      //   }
      //   return acc;
      // }, [] as V_MES_ROUTE_PTREE[]);
      data.treeData = convertToTree(prodTreeData, 'pid', 'tid', 'root');
      })) as unknown as MesRotTree[];
      const _treeData = convertToTree(prodTreeData, 'pid', 'tid', 'root');
      data.title = '工艺路线';
      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;
    },
    /**
@@ -150,7 +163,7 @@
        { name: 'auditadd', icon: 'search|svg' },
        { name: 'printadd', icon: 'search|svg' },
        { name: 'pkgadd', icon: 'search|svg' },
        { name: 'labeladd', icon: 'search|svg' },
        { name: 'labeladd', icon: 'template|svg' },
      ];
    },
    /**
@@ -160,14 +173,13 @@
    nodeChange: (params: { useForms: Ref<any>; objParams: Ref<any>; selectedNodes: any[] }) =>
      new Promise<any>(async (resolve, reject) => {
        // params['useForms'].value = methods.GetUseForm();
        let result = { isShow: {} };
        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}'`;
        }
        sqlcmd += `And ISNULL(CUST_CODE, '') = ISNULL('${params['selectedNodes'][0].cust}', '')`;
        if (!isNullOrEmpty(params['selectedNodes'][0].id)) {
          sqlcmd +=
            params['selectedNodes'][0].type == 'Action'
@@ -223,9 +235,7 @@
                ? ents.Data.Items
                : JSON.parse(res.Data.Items[0].OPTION_1);
              /* 如果OPTION_1字段为空就把包装信息转JSON存到OPTION_1字段 */
              res.Data.Items[0].OPTION_1 = isNullOrEmpty(res.Data.Items[0].OPTION_1)
                ? JSON.stringify(ents.Data.Items)
                : res.Data.Items[0].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';
@@ -239,34 +249,38 @@
          }
          if (params['selectedNodes'][0].type == 'Node') {
            resetFieldsNode();
            setFieldsValueNode({
              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,
              REMARK: res.Data.Items[0].REMARK,
              PROD_CODE: params['objParams'].value['CODE'],
              CUST_CODE: params['selectedNodes'][0].cust,
            });
            if(isNullOrEmpty(res.Data.Items[0].IS_ACTIVE)){
              res.Data.Items[0].IS_ACTIVE = 'N'
            }
            if(isNullOrEmpty(res.Data.Items[0].IS_CALC_FPY)){
              res.Data.Items[0].IS_CALC_FPY = 'N'
            }
            if(isNullOrEmpty(res.Data.Items[0].CAN_SKIP)){
              res.Data.Items[0].CAN_SKIP = 'N'
            }
            if(isNullOrEmpty(res.Data.Items[0].IS_INPUT)){
              res.Data.Items[0].IS_INPUT = 'N'
            }
            if(isNullOrEmpty(res.Data.Items[0].IS_OUTPUT)){
              res.Data.Items[0].IS_OUTPUT = 'N'
            }
            if(isNullOrEmpty(res.Data.Items[0].ALLOW_DFT_IN)){
              res.Data.Items[0].ALLOW_DFT_IN = 'N'
            }
            if(isNullOrEmpty(res.Data.Items[0].IF_DFT_OFFLINE)){
              res.Data.Items[0].IF_DFT_OFFLINE = 'N'
            }
            if(!isNullOrEmpty(params['objParams'].value['CODE'])){
              res.Data.Items[0].PROD_CODE = params['objParams'].value['CODE']
            }
            if(!isNullOrEmpty(params['selectedNodes'][0].cust)){
              res.Data.Items[0].CUST_CODE = params['selectedNodes'][0].cust
            }
            setFieldsValueNode(res.Data.Items[0]);
            /* 默认保存 */
            SaveEntity(res.Data.Items[0], true, 'MES_PROD_OPER');
            // result['Node'] = res.Data.Items;
            result['name'] = 'Node';
            result['isShow'] = {
@@ -274,6 +288,7 @@
              ItemCode: false,
            };
          }
          useProdRoute.setcurDtl(result);
          resolve(result);
        } catch (e) {
          reject(e);
@@ -296,6 +311,9 @@
        }
        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');
@@ -341,6 +359,11 @@
          ItemColumns: TemplateBasColumn, //弹出框中表格字段结构
          schemas: [], //查询条件字段结构
          others: { WORK_ORDER: OrderNo }, //需要带到弹出窗口中的数据
          alertConfig: {
            showAlert: false,
            message: '销售订单备注',
            description: '',
          },
          searchInfo: {
            TABLE_NAME: 'BAS_LABEL_VAR_WO', //实体名称
            LabelId: record.LABEL_CODE, //模板ID
@@ -381,7 +404,7 @@
          break;
        case 'assyadd':
          const items = d.values['val'].split(',');
          let data: any[] = [];
          const data: any[] = [];
          if (!isNullOrEmpty(items) && items.length > 0) {
            items.map((x) => {
              data.push({
@@ -432,7 +455,7 @@
            });
            return;
          }
          let codes = d.values.id.split(',');
          const codes = d.values.id.split(',');
          var i;
          for (i = 0; i < codes.length; i++) {
            if (d.which == 'addRoute') {
@@ -450,7 +473,7 @@
            });
            return;
          }
          let rotIds = d.ROT_ID.split(',');
          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 });
@@ -504,19 +527,25 @@
     * @return {*}
     */
    GetUseTables: (data: Ref<{}>, ...args) => {
      // data.value['Table'] = [];
      let sortData = isNullOrUnDef(data.value['BAS_PKG_DTL'])
        ? data.value['BAS_PKG_DTL']
        : data.value['BAS_PKG_DTL'].sort((a, b) => {
            return a.PKG_LEVEL - b.PKG_LEVEL;
          });
      return {
        BAS_PKG_DTL: useTable({
          title: '列表信息',
          // api: getListByPage,
          // searchInfo: { TABLE_NAME: 'V_BAS_PKG_DTL' },
          dataSource: data.value['BAS_PKG_DTL'],
          dataSource: sortData,
          columns: GetBaseColumns('BAS_PKG_DTL', args[0], data),
          maxHeight: 520,
          // maxHeight: 520,
          // scroll: { y: window.screen.width == 1366? 400: 450 },
          isCanResizeParent: true,
          useSearchForm: false,
          showTableSetting: false,
          bordered: true,
          canResize: true,
          // canResize: false,
          showIndexColumn: false,
          // rowSelection: {
          //   type: 'radio', //'checkbox'
@@ -610,8 +639,8 @@
     * @param {Ref} selectedNodes
     * @return {*}
     */
    SelectNode: (selectedNodes: Ref<any[]>) => {
      let result = {
    SelectNode: (selectedNodes: Ref<any[]>, code: string) => {
      const result = {
        showConfig: false,
        showNav: false,
        type: selectedNodes.value[0].type,
@@ -631,6 +660,8 @@
        result.showConfig = true;
        result.showOtherTable = { BAS_PKG_DTL: false, ItemCode: false };
      }
      /* 保存当前选择的节点数据到状态管理 */
      useProdRoute.setCurSelectedNodes({ name: code, SelectedNodes: selectedNodes.value });
      return result;
    },
    /**
@@ -835,29 +866,24 @@
              resolve('OK');
              break;
            case 'BAS_LABEL_VAR_WO':
              param.values['WORK_ORDER'] = param.others['WORK_ORDER'];
              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 SetDefaultRoute({
                rotCode: param.others['code'],
                prodCode: param.keyCode,
                rotId: '',
                options: {
                  //根据据点查询,必需带这个参数
                  UserId: useUserStore().getUserInfo.userId as string,
                  ByOrg: true,
                  CurOrg: useUserStore().getUserInfo.orgCode as string,
                  ByProd: false,
                  ByWh: false,
                  OrgCode: useUserStore().getUserInfo.orgCode as string,
                },
                isDefault: param.others['isDefault'],
              });
            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);
@@ -883,18 +909,21 @@
          label: '删除',
          handler: () => {
            console.log('点击了删除', node);
            DeleteProdRoute({ rotId: node.id, rotCode: node.code, prodCode: args[1] }).then(
              (action) => {
                if (action.IsSuccessed) {
                  emit('deletenode', node);
                } else {
                  createErrorModal({
                    title: t('sys.api.errorTip'),
                    content: t(action.LocaleMsg),
                  });
                }
              },
            );
            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',
        },
@@ -1629,6 +1658,29 @@
      },
    },
    {
      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',
@@ -1805,7 +1857,9 @@
   */
  function handleTemplate(args, params: Recordable) {
    const openCrudModal = args[0];
    const OrderNo = args[2];
    // const OrderNo = args[2];
    const ProdCode = args[2];
    const WoRecord = args[4];
    openCrudModal(true, {
      isUpdate: true, //是否更新操作
      entityName: 'ProdRouteBinding', //是哪个页面
@@ -1814,20 +1868,19 @@
      width: '1024px', //弹出框宽度
      ItemColumns: TemplateBasColumn, //弹出框中表格字段结构
      schemas: [], //查询条件字段结构
      others: { WORK_ORDER: OrderNo }, //需要带到弹出窗口中的数据
      others: { WORK_ORDER: '', PROD_CODE: ProdCode }, //需要带到弹出窗口中的数据
      alertConfig: {
        showAlert: false,
        message: '销售订单备注',
        description: '',
      },
      searchInfo: {
        TABLE_NAME: 'BAS_LABEL_VAR_WO', //实体名称
        LabelId: params['record'].LABEL_ID, //模板ID
        WorkOrder: OrderNo, //工单号
        WorkOrder: '', //工单号
        ProdCode: ProdCode,
        CustCode: '',
        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: params['record'], //表单记录
    });
@@ -1846,8 +1899,14 @@
      title: '工单号',
      dataIndex: 'WORK_ORDER',
      width: 280,
      editRow: true,
      // editRow: true,
      // editable: true,
      ifShow: false,
    },
    {
      title: '工单号',
      dataIndex: 'PROD_CODE',
      width: 280,
      ifShow: false,
    },
    {
@@ -1863,8 +1922,8 @@
    {
      title: '默认值',
      dataIndex: 'DEFAULT_VALUE',
      editRow: true,
      editRule: true,
      // editRow: true,
      // editRule: true,
    },
  ] as BasicColumn[];