| | |
| | | * @version: |
| | | * @Date: 2024-06-19 20:34:27 |
| | | * @LastEditors: Ben Lin |
| | | * @LastEditTime: 2024-07-18 15:43:37 |
| | | * @LastEditTime: 2024-09-11 22:41:44 |
| | | */ |
| | | |
| | | import { Ref, h, ref, render, unref } from 'vue'; |
| | | import { 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 { FormSchema } from '/@/components/Table'; |
| | | import { ActionItem, BasicColumn, FormSchema } from '/@/components/Table'; |
| | | import { useUserStore } from '/@/store/modules/user'; |
| | | import { buildUUID } from '/@/utils/uuid'; |
| | | import { SaveWoBatchInput } from '/@/api/tigerapi/model/mesModel'; |
| | | import { CustModalParams, FunctionType } from '/@/api/tigerapi/model/systemModel'; |
| | | import { SaveMesBatchWo } from '/@/api/tigerapi/mes/wo'; |
| | | import { useForm } from '/@/components/Form/index'; |
| | | import { uploadApi } from '/@/api/sys/upload'; |
| | | import { SP_MES_PROD2WO } from '/@/api/tigerapi/mes/router'; |
| | | import { cloneDeep } from 'lodash-es'; |
| | | |
| | | const { t } = useI18n(); |
| | | const { createErrorModal } = useMessage(); |
| | | const { getLocale } = useLocale(); |
| | | 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; |
| | | const ActionColumn: BasicColumn = { |
| | | width: 180, |
| | | title: '操作', |
| | | dataIndex: 'action', |
| | | slots: { customRender: 'action' }, |
| | | fixed: 'right', |
| | | }; |
| | | /** |
| | | * @description: 工单管理的一些自定义方法 |
| | | * @return {*} |
| | | */ |
| | | const methods = { |
| | | /** |
| | | * @description: 获取树形图标 |
| | | * @param {Recordable} params |
| | | * @description: 获取新增按钮的行为 |
| | | * @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); |
| | | // 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'); |
| | | data.title = '工艺路线'; |
| | | data.fieldNames = { key: 'tid', title: '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; |
| | | } |
| | | return form; |
| | | }, |
| | | /** |
| | | * @description: 获取表单中的字段插槽列表 |
| | | * @return {*} |
| | | */ |
| | | GetCrudColSlots: () => { |
| | | return ['scanadd', 'assyadd', 'testadd', 'auditadd', 'printadd', 'pkgadd']; |
| | | }, |
| | | /** |
| | | * @description: 切换节点时事件方法 |
| | | * @return {*} |
| | | */ |
| | | nodeChange: (params: { |
| | | resetFields: any; |
| | | setFieldsValue: any; |
| | | objParams: Ref<any>; |
| | | selectedNodes: Ref<any[]>; |
| | | }) => { |
| | | let sqlcmd = ' 1=1 '; |
| | | if (!isNullOrEmpty(params['objParams'].value['CODE'])) { |
| | | sqlcmd += `And PROD_CODE = '${params['objParams'].value['CODE']}'`; |
| | | } |
| | | if (!isNullOrEmpty(params['selectedNodes'].value[0].cust)) { |
| | | sqlcmd += `And CUST_CODE = '${params['selectedNodes'].value[0].cust}'`; |
| | | } |
| | | if (!isNullOrEmpty(params['selectedNodes'].value[0].id)) { |
| | | sqlcmd += |
| | | params['selectedNodes'].value[0].type == 'Action' |
| | | ? `And ACT_ID = '${params['selectedNodes'].value[0].id}'` |
| | | : `And NODE_ID = '${params['selectedNodes'].value[0].id}'`; |
| | | } |
| | | getEntity({ |
| | | sqlcmd: sqlcmd, |
| | | entityName: |
| | | params['selectedNodes'].value[0].type == 'Action' ? 'MES_PROD_ACTION' : 'MES_PROD_OPER', |
| | | order: '', |
| | | }).then((res) => { |
| | | params['resetFields'](); |
| | | if (params['selectedNodes'].value[0].type == 'Action') { |
| | | params['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'].value[0].cust, |
| | | }); |
| | | } |
| | | if (params['selectedNodes'].value[0].type == 'Node') { |
| | | params['setFieldsValue']({ |
| | | 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: res.Data.Items[0].IS_ACTIVE, |
| | | IS_CALC_FPY: res.Data.Items[0].IS_CALC_FPY, |
| | | CAN_SKIP: res.Data.Items[0].CAN_SKIP, |
| | | IS_INPUT: res.Data.Items[0].IS_INPUT, |
| | | IS_OUTPUT: res.Data.Items[0].IS_OUTPUT, |
| | | REMARK: res.Data.Items[0].REMARK, |
| | | PROD_CODE: params['objParams'].value['CODE'], |
| | | CUST_CODE: params['selectedNodes'].value[0].cust, |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | /** |
| | | * @description: 自定义提交方法 |
| | | * @return {*} |
| | | */ |
| | | SubmitFunc: (values: Recordable<any>, type: string, emit) => { |
| | | let entityName = ''; |
| | | switch (type) { |
| | | case 'Action': |
| | | entityName = 'MES_PROD_ACTION'; |
| | | break; |
| | | case 'Node': |
| | | entityName = 'MES_PROD_OPER'; |
| | | break; |
| | | } |
| | | SaveEntity(values, true, entityName).then((action) => { |
| | | if (action.IsSuccessed) { |
| | | emit('success'); |
| | | } |
| | | }); |
| | | }, |
| | | /** |
| | | * @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'], |
| | | }; |
| | | case 'addRoute': |
| | | if (isNullOrEmpty(args[1]['CODE'])) { |
| | | createErrorModal({ |
| | | title: t('sys.api.errorTip'), |
| | | content: '产品为空,不能添加工艺路线,请点击左侧选择产品', |
| | | }); |
| | | return; |
| | | } |
| | | let 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; |
| | | } |
| | | let 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: 获取模态框应用列表 |
| | | * @return {*} |
| | | */ |
| | | GetUseModals: () => { |
| | | CreateAction: (type: string) => { |
| | | return { |
| | | addRoute: useModal(), |
| | | addCustomer: useModal(), |
| | | editRoute: useModal(), |
| | | action: 'drawer', //drawer(打开左侧抽屉框) | go(跳转到新的页面) |
| | | }; |
| | | }, |
| | | /** |
| | | * @description: 操作字段自定义按钮 |
| | | * @return {*} |
| | | */ |
| | | ActionItem: (params: Recordable<any>, data, ...args): ActionItem[] => { |
| | | data.map((x) => { |
| | | if (x.name == 'goDetail') { |
| | | x.onClick = goDetail.bind(null, args[5], params); |
| | | x.tooltip = '工单批次'; |
| | | } |
| | | if (x.name == 'handleConfig') { |
| | | x.onClick = handleConfig.bind(null, args, params); |
| | | x.tooltip = '配置工艺'; |
| | | } |
| | | if (x.name == 'handleRelease') { |
| | | x.onClick = handleRelease.bind(null, args, params); |
| | | x.tooltip = '下发'; |
| | | } |
| | | }); |
| | | return data; |
| | | }, |
| | | GetUseForm: () => { |
| | | return { |
| | |
| | | }; |
| | | }, |
| | | /** |
| | | * @description: 获取标题信息 |
| | | * @description: 自定义方法 |
| | | * @param {string} type |
| | | * @param {array} args |
| | | * @return {*} |
| | | */ |
| | | GetTitle: (type: string) => { |
| | | return { |
| | | configTitle: type == 'Action' ? '行为配置' : '工序配置', |
| | | navTitle: type == 'Product' ? '添加工艺路线' : '工艺路线维护', |
| | | }; |
| | | CustFunc: (param: CustModalParams) => { |
| | | switch (param.cType) { |
| | | case 'BIZ_MES_WO': |
| | | case 'BIZ_MES_WO_Config': |
| | | return getWoFns[param.FnName](param) as Promise<any>; |
| | | // break; |
| | | default: |
| | | return new Promise((resolve, reject) => { |
| | | try { |
| | | (e) => {}; |
| | | resolve(true); |
| | | } catch { |
| | | reject(false); |
| | | } finally { |
| | | // args[0][0]({ confirmLoading: false }); |
| | | } |
| | | }); |
| | | // break; |
| | | } |
| | | }, |
| | | /** |
| | | * @description: 根据选中的树节点返回主页面,自定义方法,这里是判断要切换哪个组件 |
| | | * @param {Ref} selectedNodes |
| | | * @description: 获取多表单插槽列表 |
| | | * @return {*} |
| | | */ |
| | | SelectNode: (selectedNodes: Ref<any[]>) => { |
| | | let result = { |
| | | showConfig: false, |
| | | showNav: false, |
| | | type: selectedNodes.value[0].type, |
| | | nodes: selectedNodes.value, |
| | | }; |
| | | if (isNullOrUnDef(selectedNodes)) { |
| | | return result; |
| | | } |
| | | if (selectedNodes.value[0].type == 'Product' || selectedNodes.value[0].type == 'Route') { |
| | | result.showNav = true; |
| | | result.showConfig = false; |
| | | } |
| | | if (selectedNodes.value[0].type == 'Action' || selectedNodes.value[0].type == 'Node') { |
| | | result.showNav = false; |
| | | result.showConfig = true; |
| | | GetDtlSlots: (type: string) => { |
| | | let result = [] as any[]; |
| | | switch (type) { |
| | | case 'BIZ_MES_WO_Config': |
| | | result = [ |
| | | { name: 'woinfo', slots: [], preIcons: {}, title: '工单信息' }, |
| | | { |
| | | name: 'prodinfo', |
| | | slots: ['addRot', 'setRot'], |
| | | preIcons: { addRot: 'search|svg', setRot: 'config|svg' }, |
| | | title: '产品信息', |
| | | }, |
| | | { name: 'rotinfo', slots: ['add'], preIcons: { add: 'search|svg' }, title: '工艺信息' }, |
| | | ]; |
| | | break; |
| | | case 'BIZ_MES_WO': |
| | | result = [ |
| | | { |
| | | name: 'forminfo', |
| | | slots: ['add', 'set'], |
| | | preIcons: { add: 'search|svg', set: 'config|svg' }, //如果是多个表单,增加多个插槽。slots是弹出框按钮的插槽,preIcons是插槽对应的按钮图标 |
| | | title: '下发配置', |
| | | }, |
| | | ]; |
| | | break; |
| | | } |
| | | return result; |
| | | }, |
| | | /** |
| | | * @description: 获取导航项 |
| | | * @description: 获取模态框应用列表 |
| | | * @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, |
| | | }, |
| | | { |
| | | title: '添加客户工艺路线', |
| | | icon: 'add_customer|svg', |
| | | color: '#bf0c2c', |
| | | url: '/addCustomer', |
| | | action: 'addCustomer', |
| | | isStep: true, |
| | | }, |
| | | ]; |
| | | break; |
| | | case 'Route': |
| | | item = [ |
| | | { |
| | | title: '编辑工艺路线', |
| | | icon: 'clarity:note-edit-line', |
| | | color: '#1fdaca', |
| | | url: '/editRoute', |
| | | action: 'editRoute', |
| | | isStep: false, |
| | | }, |
| | | ]; |
| | | break; |
| | | } |
| | | return item; |
| | | GetUseModals: () => { |
| | | return { |
| | | useModalData: { |
| | | add: useModal(), |
| | | set: useModal(), |
| | | addRot: useModal(), |
| | | setRot: useModal(), |
| | | }, |
| | | }; |
| | | }, |
| | | /** |
| | | * @description: 导航页面切换按钮时调用方法 |
| | | * @param {any} action |
| | | * @description: 获取自定义数据 |
| | | * @return {*} |
| | | */ |
| | | navChangeItem: (action: any, ...args) => { |
| | | switch (action) { |
| | | case 'addRoute': |
| | | args[0](true, { |
| | | GetCustData: () => { |
| | | return { |
| | | isCustEl: { |
| | | forminfo: false, |
| | | woinfo: false, |
| | | prodinfo: false, |
| | | rotinfo: true, |
| | | }, |
| | | }; |
| | | }, |
| | | /** |
| | | * @description: 弹出选择框选择成功返回方法 |
| | | * @param {*} d |
| | | * @param {*} u |
| | | * @return {*} |
| | | */ |
| | | GetSelectSuccess: (d, u) => { |
| | | return { |
| | | ROUTE_CODE: d.values['val'], |
| | | // ID: d.values['id'], |
| | | ROT_ID: d.values['id'], |
| | | }; |
| | | }, |
| | | /** |
| | | * @description: 打开弹出选择框 |
| | | * @param {Fn} openItemModal |
| | | * @param {array} args |
| | | * @return {*} |
| | | */ |
| | | OpenSelectItem: (openItemModal: Fn, ...args) => { |
| | | const slotName = args[0]; |
| | | const openRvModal = args[1]; |
| | | const selectVals = args[2]; |
| | | switch (slotName) { |
| | | case 'addRot': |
| | | case 'add': |
| | | openItemModal(true, { |
| | | title: '工艺路线列表', |
| | | schemas: [ |
| | | { |
| | |
| | | ], |
| | | tableName: 'MES_ROUTE', |
| | | rowKey: 'ROT_CODE', |
| | | returnFieldName: 'ROUTE_CODE', //返回值要赋值的字段名称 |
| | | returnFieldName: ['ROUTE_CODE', 'ROT_ID'], //返回值要赋值的字段名称 |
| | | searchInfo: { TABLE_NAME: 'MES_ROUTE' }, |
| | | which: action, |
| | | }); |
| | | break; |
| | | case 'addCustomer': |
| | | args[0](true, { |
| | | title: '请完成以下步骤', |
| | | }); |
| | | case 'set': |
| | | openRvModal(true, { rotId: selectVals.value['ROUTE_CODE'], slotName: slotName }); |
| | | break; |
| | | case 'editRoute': |
| | | args[1](true, { rotId: args[2][0].id, slotName: '' }); |
| | | case 'setRot': |
| | | 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: (param: CustModalParams) => { |
| | | switch (param.cType) { |
| | | case 'BIZ_MES_WO': |
| | | case 'BIZ_MES_WO_Config': |
| | | return getWoFns[param.FnName](param) as Promise<any>; |
| | | // break; |
| | | default: |
| | | return new Promise((resolve, reject) => { |
| | | try { |
| | | (e) => {}; |
| | | resolve(true); |
| | | } catch { |
| | | reject(false); |
| | | } finally { |
| | | // args[0][0]({ confirmLoading: false }); |
| | | } |
| | | }); |
| | | // break; |
| | | } |
| | | }, |
| | | }; |
| | |
| | | try { |
| | | const form = param.values['prodinfo']; |
| | | const wo = param.values['mValues']; |
| | | wo.ROUTE_STATUS = 1; |
| | | SaveEntity(wo, true, 'BIZ_MES_WO').then((action) => { |
| | | const _wo = cloneDeep(wo); |
| | | _wo.ROUTE_STATUS = 1; |
| | | _wo.ROUTE_CODE = form.ROUTE_CODE; |
| | | SaveEntity(_wo, true, 'BIZ_MES_WO').then((action) => { |
| | | if (action.IsSuccessed) { |
| | | resolve(true); |
| | | SP_MES_PROD2WO({ rotId: form.ROT_ID, wo: wo.ORDER_NO }).then((res) => { |
| | | if (!res.IsSuccessed) { |
| | | SaveEntity(wo, true, 'BIZ_MES_WO'); |
| | | } |
| | | resolve(res); |
| | | }); |
| | | } else { |
| | | reject(false); |
| | | reject(action); |
| | | } |
| | | }); |
| | | } catch { |
| | |
| | | try { |
| | | const form = param.values['forminfo']; |
| | | const wo = param.values['mValues']; |
| | | wo.ROUTE_CODE = form.ROUTE_CODE; |
| | | wo.STATUS = 2; |
| | | wo.STATUS = wo.STATUS == 3?wo.STATUS: 2; |
| | | let input: SaveWoBatchInput = { |
| | | Wo: wo, |
| | | WoBatch: { |
| | |
| | | UPDATE_TIME: new Date(), |
| | | UPDATE_USER: useUserStore().getUserInfo.userId as string, |
| | | GHOST_ROW: false, |
| | | AUTH_ORG: '', |
| | | AUTH_ORG: useUserStore().getUserInfo.orgCode, |
| | | AUTH_PROD: useUserStore().getUserInfo.prodCode as string, |
| | | AUTH_WH: '', |
| | | ORDER_NO: wo.ORDER_NO, |
| | |
| | | CUST_CODE: wo.CUST_CODE, |
| | | FACTORY: wo.FACTORY, |
| | | WS_CODE: wo.WS_CODE, |
| | | ACT_LINE: form.PLAN_LINE, |
| | | ACT_LINE: form.ACT_LINE, |
| | | STD_WORKER_QTY: wo.STD_WORKER_QTY, |
| | | ACT_WORKER_QTY: wo.ACT_WORKER_QTY, |
| | | RELEASE_TIME: new Date(), |
| | |
| | | }; |
| | | |
| | | /** |
| | | * @description: 弹出选择框-物料选择框配置 |
| | | * @description: 跳转到详情页面方法 |
| | | * @param {Fn} go |
| | | * @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' }, |
| | | }; |
| | | function goDetail(go: Fn, params: Recordable) { |
| | | const id = { |
| | | ID: params['record'].ID, |
| | | CODE: params['record']['ORDER_NO'], |
| | | Name: 'BIZ_MES_WO_BATCH', |
| | | firstTabName: '工单批次', |
| | | secondTabName: '', //'标签过程变量', |
| | | firstTitle: '批次', |
| | | secondTitle: '', //'过程变量', |
| | | pageTitle: '工单详情', //详情页面标题 |
| | | contentStr: '这里是工单批次管理页面,可以显示工单下发的所有批次详情', |
| | | detailName: `工单[${params['record'].ORDER_NO}]批次详情`, |
| | | keyFieldValues: { ORDER_NO: params['record']['ORDER_NO'] }, |
| | | colSlots: params['colSlots'].value, |
| | | SessionName: 'BIZ_MES_WO_BATCH_update', |
| | | ifSave: false, |
| | | }; |
| | | // 将对象转换为JSON字符串并保存到sessionStorage |
| | | sessionStorage.removeItem(`${id.SessionName}_params`); |
| | | sessionStorage.setItem(`${id.SessionName}_params`, encodeURI(JSON.stringify(id))); |
| | | go(`/BIZ_MES_WO_BATCH/${encodeURI(JSON.stringify({ sName: id.SessionName, Name: id.Name }))}`); |
| | | } |
| | | |
| | | /** |
| | | * @description: 弹出选择框-规则选择框配置 |
| | | * @description: 配置工艺 |
| | | * @param {Recordable} record |
| | | * @param {array} args |
| | | * @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' }, |
| | | }; |
| | | function handleConfig(args, params: Recordable) { |
| | | const go = args[5]; |
| | | const id = { |
| | | ID: params['record'].ID, |
| | | Name: 'WoRouteBinding', |
| | | CODE: params['record'].ORDER_NO, |
| | | Title: `工单[${params['record'].ORDER_NO}]工艺绑定`, |
| | | colSlots: params['colSlots'].value, /* 表格内的查询表单字段的插槽列表,一般用于弹出选择框按钮 */ |
| | | crudColSlots: {BAS_PKG_DTL:['BAS_LABEL_TEMP1add'], ItemCode: ['BAS_CODE_RULE1add']} /* 增删改表单字段的插槽列表,一般用于弹出选择框按钮 */, |
| | | OtherTableName: ['BAS_PKG_DTL', 'ItemCode'], /* 自定义显示列表的表名,跟上面增删改的表名一致,有多个就放列表中 */ |
| | | dense: true, |
| | | pageTitle: `工单工艺绑定`, |
| | | pageContent: `这里是管理工单的工艺绑定,一个工单可以绑定一个工艺路线,并可以保存为客户专用的工艺路线`, |
| | | SessionName: 'WoRouteBinding_update', |
| | | ifSave: false, |
| | | rotType: 'Wo' |
| | | }; |
| | | // 将对象转换为JSON字符串并保存到sessionStorage |
| | | sessionStorage.removeItem(`${id.SessionName}_params`); |
| | | sessionStorage.setItem(`${id.SessionName}_params`, encodeURI(JSON.stringify(id))); |
| | | go(`/WoRouteBinding/CP/${encodeURI(JSON.stringify({ sName: id.SessionName, Name: id.Name }))}`); |
| | | } |
| | | |
| | | /** |
| | | * @description: 弹出选择框-打印模板选择框配置 |
| | | * @description: 下发 |
| | | * @param {*} record |
| | | * @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' }, |
| | | }; |
| | | function handleRelease(args, params: Recordable) { |
| | | const openCustModal = args[7]; |
| | | openCustModal(true, { |
| | | isUpdate: true, //是否更新操作 |
| | | ctype: 'BIZ_MES_WO', //是哪个页面 |
| | | title: '工单下发', //标题 |
| | | width: '900px', //弹出框宽度 |
| | | formEl: params['useFormData'].value, |
| | | formElName: ['forminfo'], //表单插槽名称 |
| | | RowKeys: { add: 'ROUTE_CODE', set: 'ROUTE_CODE' }, //插槽的弹出框选择的code |
| | | fnName: 'SaveWoBatch', //保存方法名 |
| | | initFnName: {}, //初始化方法名,没有就留空{} |
| | | values: params['record'], //表单记录 |
| | | }); |
| | | } |
| | | |
| | | 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: 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 {*} |
| | | */ |
| | | 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, |
| | | 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', |
| | | colProps: { span: 12 }, |
| | | componentProps: { |
| | | options: [ |
| | | { |
| | | label: '是', |
| | | value: 'Y', |
| | | key: 'Y', |
| | | }, |
| | | { |
| | | label: '否', |
| | | value: 'N', |
| | | key: 'N', |
| | | }, |
| | | ], |
| | | }, |
| | | }, |
| | | { |
| | | field: 'CAN_SKIP', |
| | | label: '是否允许跳站', |
| | | required: true, |
| | | component: 'Select', |
| | | colProps: { span: 12 }, |
| | | componentProps: { |
| | | options: [ |
| | | { |
| | | label: '是', |
| | | value: 'Y', |
| | | key: 'Y', |
| | | }, |
| | | { |
| | | label: '否', |
| | | value: 'N', |
| | | key: 'N', |
| | | }, |
| | | ], |
| | | }, |
| | | }, |
| | | { |
| | | field: 'IS_INPUT', |
| | | label: '是否投入站', |
| | | required: true, |
| | | component: 'Select', |
| | | colProps: { span: 12 }, |
| | | componentProps: { |
| | | options: [ |
| | | { |
| | | label: '是', |
| | | value: 'Y', |
| | | key: 'Y', |
| | | }, |
| | | { |
| | | label: '否', |
| | | value: 'N', |
| | | key: 'N', |
| | | }, |
| | | ], |
| | | }, |
| | | }, |
| | | { |
| | | field: 'IS_OUTPUT', |
| | | label: '是否产出站', |
| | | required: true, |
| | | component: 'Select', |
| | | colProps: { span: 12 }, |
| | | componentProps: { |
| | | options: [ |
| | | { |
| | | label: '是', |
| | | value: 'Y', |
| | | key: 'Y', |
| | | }, |
| | | { |
| | | label: '否', |
| | | value: 'N', |
| | | key: 'N', |
| | | }, |
| | | ], |
| | | }, |
| | | }, |
| | | { |
| | | field: 'REMARK', |
| | | label: '备注', |
| | | component: 'Input', |
| | | colProps: { span: 12 }, |
| | | }, |
| | | ]; |
| | | |
| | | /* 下发界面中的表单列表 */ |
| | | const woformSchema: FormSchema[] = [ |
| | | { |
| | | field: 'PLAN_QTY', |
| | |
| | | required: true, |
| | | colProps: { |
| | | span: 24, |
| | | }, |
| | | dynamicDisabled: ({ values }) => { |
| | | return true; |
| | | }, |
| | | }, |
| | | { |
| | |
| | | }, |
| | | }, |
| | | { |
| | | label: '计划产线', |
| | | field: 'PLAN_LINE', |
| | | label: '实际产线', |
| | | field: 'ACT_LINE', |
| | | component: 'ApiSelect', |
| | | required: true, |
| | | colProps: { |
| | |
| | | valueField: 'LINE_CODE', |
| | | }, |
| | | }, |
| | | { |
| | | label: '工艺路线', |
| | | field: 'ROUTE_CODE', |
| | | component: 'Input', |
| | | required: true, |
| | | colProps: { |
| | | span: 22, |
| | | }, |
| | | }, |
| | | { |
| | | field: 'add', |
| | | component: 'Input', |
| | | label: '1', |
| | | colSlot: 'add', |
| | | defaultValue: 'MES_ROUTE', |
| | | colProps: { |
| | | span: 1, |
| | | }, |
| | | }, |
| | | { |
| | | field: 'set', |
| | | component: 'Input', |
| | | label: '1', |
| | | colSlot: 'set', |
| | | defaultValue: 'MES_ROUTE', |
| | | colProps: { |
| | | span: 1, |
| | | }, |
| | | }, |
| | | // { |
| | | // label: '工艺路线', |
| | | // field: 'ROUTE_CODE', |
| | | // component: 'Input', |
| | | // required: true, |
| | | // colProps: { |
| | | // span: 22, |
| | | // }, |
| | | // }, |
| | | // { |
| | | // field: 'add', |
| | | // component: 'Input', |
| | | // label: '1', |
| | | // colSlot: 'add', |
| | | // defaultValue: 'MES_ROUTE', |
| | | // colProps: { |
| | | // span: 1, |
| | | // }, |
| | | // }, |
| | | // { |
| | | // field: 'set', |
| | | // component: 'Input', |
| | | // label: '1', |
| | | // colSlot: 'set', |
| | | // defaultValue: 'MES_ROUTE', |
| | | // colProps: { |
| | | // span: 1, |
| | | // }, |
| | | // }, |
| | | ]; |
| | | |
| | | const woCfgformSchema: FormSchema[] = [ |
| | |
| | | }, |
| | | { |
| | | field: 'ORDER_TYPE', |
| | | component: 'Select', |
| | | component: 'ApiSelect', |
| | | label: '工单类型', |
| | | colProps: { |
| | | span: 8, |
| | | }, |
| | | defaultValue: 'Normal', |
| | | defaultValue: 0, |
| | | componentProps: { |
| | | options: [ |
| | | { |
| | | label: '正常', |
| | | value: 'Normal', |
| | | }, |
| | | { |
| | | label: '返工', |
| | | value: 'Rework', |
| | | }, |
| | | ], |
| | | api: GetEnum, |
| | | params: { name: 'BIZ_MES_WO+ORDER_TYPEs' }, |
| | | resultField: 'Data', |
| | | labelField: unref(getLocale) == 'zh_CN' ? 'Desc' : 'Name', |
| | | valueField: 'Value', |
| | | placeholder: '请选择工单类型', |
| | | }, |
| | | dynamicDisabled: true, |
| | | }, |
| | |
| | | }, |
| | | }, |
| | | { |
| | | field: 'fieldsc', |
| | | component: 'Upload', |
| | | label: '打印模板', |
| | | label: '工艺路线', |
| | | field: 'ROT_ID', |
| | | component: 'Input', |
| | | show: false, |
| | | colProps: { |
| | | span: 10, |
| | | }, |
| | | rules: [{ required: true, message: '请选择上传文件' }], |
| | | componentProps: { |
| | | api: uploadApi, |
| | | multiple: false, |
| | | span: 12, |
| | | }, |
| | | }, |
| | | // { |
| | | // field: 'fieldsc', |
| | | // component: 'Upload', |
| | | // label: '打印模板', |
| | | // colProps: { |
| | | // span: 10, |
| | | // }, |
| | | // rules: [{ required: true, message: '请选择上传文件' }], |
| | | // componentProps: { |
| | | // api: uploadApi, |
| | | // multiple: false, |
| | | // }, |
| | | // }, |
| | | ]; |
| | | |
| | | return [methods]; |
| | | return [methods, ActionColumn]; |
| | | } |
| | | |
| | | export default _default; |