| | |
| | | * @version: |
| | | * @Date: 2024-06-19 20:34:27 |
| | | * @LastEditors: Ben Lin |
| | | * @LastEditTime: 2024-09-25 15:08:58 |
| | | * @LastEditTime: 2024-10-24 01:21:57 |
| | | */ |
| | | |
| | | import { Ref, h, ref, render, unref } from 'vue'; |
| | |
| | | GetRoutePTree, |
| | | RouteToCust, |
| | | RouteToProd, |
| | | SetDefaultRoute, |
| | | } from '/@/api/tigerapi/mes/router'; |
| | | import { GetEnum, SaveEntity, convertToTree, getEntity } from '/@/api/tigerapi/system'; |
| | | import { useLocale } from '/@/locales/useLocale'; |
| | |
| | | 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; |
| | |
| | | * @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: 获取树形数据 |
| | |
| | | */ |
| | | fetchTreeData: async (type: string, itemCode: string) => { |
| | | let data = { title: '', treeData: [] as any[], fieldNames: {} }; |
| | | let prodTreeData = await GetRoutePTree({ |
| | | let 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[]; |
| | | let _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); |
| | | if (useProdRoute.curProdRotTree.some((q) => q.name == itemCode)) { |
| | | data.treeData = useProdRoute.curProdRotTree.filter((q) => q.name == itemCode)[0].treeInfo; |
| | | } |
| | | return data; |
| | | }, |
| | | /** |
| | |
| | | ? 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'; |
| | |
| | | ItemCode: false, |
| | | }; |
| | | } |
| | | useProdRoute.setcurDtl(result); |
| | | resolve(result); |
| | | } catch (e) { |
| | | reject(e); |
| | |
| | | } |
| | | 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'); |
| | |
| | | /** |
| | | * @description: 弹出选择框打开方法 |
| | | * @param {Fn} openItemModal |
| | | * @param {array} args |
| | | * @return {*} |
| | | */ |
| | | OpenSelectItem: (openItemModal: Fn, ...args) => { |
| | |
| | | * @description: 弹出选择框选择成功返回 |
| | | * @param {*} d |
| | | * @param {*} u |
| | | * @param {array} args |
| | | * @return {*} |
| | | */ |
| | | GetSelectSuccess: async (d, u, ...args) => { |
| | |
| | | }; |
| | | }, |
| | | /** |
| | | * @description: 获取模态框应用列表 |
| | | * @description: 获取在增删改表单中的模态框应用列表 |
| | | * @return {*} |
| | | */ |
| | | GetUseCrudModals: () => { |
| | |
| | | // searchInfo: { TABLE_NAME: 'V_BAS_PKG_DTL' }, |
| | | dataSource: data.value['BAS_PKG_DTL'], |
| | | 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' |
| | |
| | | }), |
| | | }; |
| | | }, |
| | | /** |
| | | * @description: 获取行为或者节点的配置表单结构,使用useForm() |
| | | * @return {*} |
| | | */ |
| | | GetUseForm: () => { |
| | | return { |
| | | Action: useForm({ |
| | |
| | | /** |
| | | * @description: 获取标题信息 |
| | | * @param {string} type |
| | | * @param {*} item |
| | | * @return {*} |
| | | */ |
| | | GetTitle: (type: string, item) => { |
| | |
| | | * @param {Ref} selectedNodes |
| | | * @return {*} |
| | | */ |
| | | SelectNode: (selectedNodes: Ref<any[]>) => { |
| | | SelectNode: (selectedNodes: Ref<any[]>, code: string) => { |
| | | let result = { |
| | | showConfig: false, |
| | | showNav: false, |
| | |
| | | if (selectedNodes.value[0].type == 'Action' || selectedNodes.value[0].type == 'Node') { |
| | | result.showNav = false; |
| | | result.showConfig = true; |
| | | if (selectedNodes.value[0].type == 'Action') { |
| | | result.showOtherTable = { BAS_PKG_DTL: false, ItemCode: false }; |
| | | } else { |
| | | result.showOtherTable = { BAS_PKG_DTL: false, ItemCode: false }; |
| | | } |
| | | 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) => { |
| | |
| | | url: '/addRoute', |
| | | action: 'addRoute', |
| | | isStep: false, |
| | | isCustEl: false, |
| | | }, |
| | | { |
| | | title: '添加客户工艺路线', |
| | |
| | | url: '/addCustomer', |
| | | action: 'addCustomer', |
| | | isStep: true, |
| | | isCustEl: false, |
| | | }, |
| | | ]; |
| | | break; |
| | | case 'Route': |
| | | item = [ |
| | | { |
| | | title: '编辑工艺路线', |
| | | icon: 'clarity:note-edit-line', |
| | | title: '编辑工艺路线', //标题 |
| | | icon: 'clarity:note-edit-line', //图标 |
| | | color: '#1fdaca', //字体颜色 |
| | | url: '/editRoute', //导航地址 |
| | | action: 'editRoute', //导航执行的方法,如果按这个action来执行,上面的url就无效 |
| | | isStep: false, //是否是步骤 |
| | | isCustEl: false, //是否是自定义html内容 |
| | | }, |
| | | { |
| | | title: '设置默认工艺路线', |
| | | icon: '', |
| | | color: '#1fdaca', |
| | | url: '/editRoute', |
| | | action: 'editRoute', |
| | | url: '', |
| | | action: '', |
| | | isStep: false, |
| | | isCustEl: true, |
| | | }, |
| | | ]; |
| | | break; |
| | |
| | | /** |
| | | * @description: 导航页面切换按钮时调用方法 |
| | | * @param {any} action |
| | | * @param {array} args |
| | | * @return {*} |
| | | */ |
| | | navChangeItem: (action: any, ...args) => { |
| | | const openRvModal = args[1]; |
| | | const openModal = args[0]; |
| | | switch (action) { |
| | | case 'addRoute': |
| | | args[0](true, { |
| | | openModal(true, { |
| | | title: '工艺路线列表', |
| | | schemas: [ |
| | | { |
| | |
| | | }); |
| | | break; |
| | | case 'addCustomer': |
| | | args[0](true, { |
| | | openModal(true, { |
| | | title: '请完成以下步骤', |
| | | }); |
| | | break; |
| | | case 'editRoute': |
| | | args[1](true, { |
| | | openRvModal(true, { |
| | | rotId: args[2][0].id, |
| | | slotName: '', |
| | | prodCode: args[3], |
| | |
| | | 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']; |
| | | 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) => { |
| | |
| | | param.data.value['Action'][0]['OPTION_1'] = JSON.stringify( |
| | | param.data.value['ItemCode'], |
| | | ); |
| | | 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(); |
| | | await AddOrEditLabelVarByWorkOrder(param.values as unknown as BAS_LABEL_VAR_WO); |
| | | 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; |
| | | } |
| | | resolve('OK'); |
| | | } catch (e) { |
| | | reject(e); |
| | | } |
| | |
| | | ] as FormSchema[], |
| | | }; |
| | | |
| | | |
| | | /** |
| | | * @description: 模板维护 |
| | | * @param {*} args |
| | |
| | | */ |
| | | function handleTemplate(args, params: Recordable) { |
| | | const openCrudModal = args[0]; |
| | | const OrderNo = args[2]; |
| | | // const OrderNo = args[2]; |
| | | const ProdCode = args[2]; |
| | | openCrudModal(true, { |
| | | isUpdate: true, //是否更新操作 |
| | | entityName: 'ProdRouteBinding', //是哪个页面 |
| | |
| | | width: '1024px', //弹出框宽度 |
| | | ItemColumns: TemplateBasColumn, //弹出框中表格字段结构 |
| | | schemas: [], //查询条件字段结构 |
| | | others: { WORK_ORDER: OrderNo }, //需要带到弹出窗口中的数据 |
| | | others: { WORK_ORDER: '', PROD_CODE: ProdCode }, //需要带到弹出窗口中的数据 |
| | | 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'], //表单记录 |
| | | }); |
| | |
| | | title: '工单号', |
| | | dataIndex: 'WORK_ORDER', |
| | | width: 280, |
| | | editRow: true, |
| | | // editRow: true, |
| | | // editable: true, |
| | | ifShow: false, |
| | | }, |
| | | { |
| | | title: '工单号', |
| | | dataIndex: 'PROD_CODE', |
| | | width: 280, |
| | | ifShow: false, |
| | | }, |
| | | { |
| | |
| | | { |
| | | title: '默认值', |
| | | dataIndex: 'DEFAULT_VALUE', |
| | | editRow: true, |
| | | editRule: true, |
| | | // editRow: true, |
| | | // editRule: true, |
| | | }, |
| | | ] as BasicColumn[]; |
| | | |