| | |
| | | * @version: |
| | | * @Date: 2024-06-24 23:44:31 |
| | | * @LastEditors: Ben Lin |
| | | * @LastEditTime: 2024-06-25 21:34:33 |
| | | * @LastEditTime: 2024-07-23 20:48:29 |
| | | --> |
| | | <template> |
| | | <Card title="行为配置"> |
| | | <Card :title="GetTitle(props.configType)['configTitle']"> |
| | | <BasicForm @register="registerForm"> |
| | | <template #[item]="{ field }" v-for="item in crudColSlots" :key="item"> |
| | | <template #[item]="{ field }" v-for="item in GetCrudColSlots()" :key="item"> |
| | | <a-button |
| | | v-if="field" |
| | | class="mt-1 ml-1" |
| | |
| | | import { Card } from 'ant-design-vue'; |
| | | import { useModal } from '/@/components/Modal'; |
| | | import GeneralModal from '/@/views/components/GeneralModal.vue'; |
| | | import { useUserStore } from '/@/store/modules/user'; |
| | | import { useI18n } from '/@/hooks/web/useI18n'; |
| | | import { GetEnum, getEntity } from '/@/api/tigerapi/system'; |
| | | import { useLocale } from '/@/locales/useLocale'; |
| | | import { isNullOrEmpty } from '/@/utils/is'; |
| | | import { isNullOrUnDef } from '/@/utils/is'; |
| | | import { EntityCustFunctionType } from '/@/api/tigerapi/model/basModel'; |
| | | |
| | | const { t } = useI18n(); |
| | | const { getLocale } = useLocale(); |
| | | const emit = defineEmits(['success', 'register']); |
| | | const props = defineProps({ |
| | | configType: { type: String }, |
| | | }); |
| | | const [registerItemAdd, { openModal: openItemModal }] = useModal(); |
| | | const Prod_Code = inject('prodCode') as Ref<string>; |
| | | const ACT_ID = inject('actionCode') as Ref<string>; |
| | | const Cust_Code = inject('custCode') as Ref<string>; |
| | | const crudColSlots = ref<any>([ |
| | | 'scanadd', |
| | | 'assyadd', |
| | | 'testadd', |
| | | 'auditadd', |
| | | 'printadd', |
| | | 'pkgadd', |
| | | const objParams = inject('objParams') as Ref<any>; |
| | | const custImport = ref<any[]>([]); |
| | | const EntityCustFunction = ref([ |
| | | { |
| | | GetCrudForm(type: string | undefined) {}, |
| | | GetCrudColSlots(val, id) {}, |
| | | OpenSelectItem(openItemModal: Fn, ...args) {}, |
| | | GetSelectSuccess(d, u, ...args) {}, |
| | | GetTitle(type: string | undefined) {}, |
| | | nodeChange(params: { |
| | | resetFields: any; |
| | | setFieldsValue: any; |
| | | objParams: Ref<any>; |
| | | selectedNodes: Ref<any[]>; |
| | | }) {}, |
| | | SubmitFunc(values: Recordable<any>, type: string, emit) {}, |
| | | } as EntityCustFunctionType, |
| | | ]); |
| | | /* 动态import实体名.ts的自定义方法 */ |
| | | try { |
| | | custImport.value = await import(`../entityts/${objParams.value['Name']}.ts`); |
| | | } catch (e) {} |
| | | const [ |
| | | { |
| | | GetCrudForm, |
| | | GetCrudColSlots, |
| | | nodeChange, |
| | | OpenSelectItem, |
| | | GetSelectSuccess, |
| | | GetTitle, |
| | | SubmitFunc, |
| | | }, |
| | | ] = isNullOrUnDef(custImport.value['default']) |
| | | ? EntityCustFunction.value |
| | | : custImport.value['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 formSchema: FormSchema[] = [ |
| | | { |
| | | field: 'PROD_CODE', |
| | | label: '产品编码', |
| | | component: 'Input', |
| | | dynamicDisabled: ({ values }) => { |
| | | return true; |
| | | }, |
| | | colProps: { span: 12 }, |
| | | }, |
| | | { |
| | | field: 'ID', |
| | | label: 'ID', |
| | | component: 'Input', |
| | | show: false, |
| | | }, |
| | | { |
| | | field: 'CUST_CODE', |
| | | label: '客户编码', |
| | | component: 'Input', |
| | | dynamicDisabled: ({ values }) => { |
| | | return true; |
| | | }, |
| | | colProps: { span: 12 }, |
| | | }, |
| | | { |
| | | field: 'ACT_TYPE', |
| | | label: '行为类型', |
| | | component: 'ApiSelect', |
| | | colProps: { span: 12 }, |
| | | defaultValue: 0, |
| | | componentProps: { |
| | | api: GetEnum, |
| | | params: { name: 'MES_PROD_ACTION+ACT_TYPEs' }, |
| | | resultField: 'Data', |
| | | labelField: unref(getLocale) == 'zh_CN' ? 'Desc' : 'Name', |
| | | valueField: 'Value', |
| | | // onChange: (e, v) => { |
| | | // alert(e) |
| | | // console.log('ApiSelect====>:', e, v); |
| | | // }, |
| | | }, |
| | | }, |
| | | { |
| | | field: 'IS_ACTIVE', |
| | | label: '是否启用', |
| | | required: true, |
| | | component: 'Select', |
| | | colProps: { span: 12 }, |
| | | componentProps: { |
| | | options: [ |
| | | { |
| | | label: '是', |
| | | value: 'Y', |
| | | key: 'Y', |
| | | }, |
| | | { |
| | | label: '否', |
| | | value: 'N', |
| | | key: 'N', |
| | | }, |
| | | ], |
| | | }, |
| | | }, |
| | | { |
| | | field: 'RULE_CODE', |
| | | label: '扫码验证', |
| | | component: 'Input', |
| | | colProps: { span: 10 }, |
| | | ifShow: ({ values }) => isScan(values.ACT_TYPE), |
| | | }, |
| | | { |
| | | field: '0', |
| | | label: '1', |
| | | defaultValue: '', |
| | | component: 'Input', |
| | | colProps: { span: 2, pull: 1 }, |
| | | ifShow: ({ values }) => isScan(values.ACT_TYPE), |
| | | colSlot: 'scanadd', |
| | | }, |
| | | { |
| | | field: 'ITEM_CODE', |
| | | label: '组装上料', |
| | | colProps: { span: 10 }, |
| | | component: 'Input', |
| | | ifShow: ({ values }) => isAssy(values.ACT_TYPE), |
| | | }, |
| | | { |
| | | field: '00', |
| | | label: '1', |
| | | defaultValue: '', |
| | | component: 'Input', |
| | | colProps: { span: 2, pull: 1 }, |
| | | ifShow: ({ values }) => isAssy(values.ACT_TYPE), |
| | | colSlot: 'assyadd', |
| | | }, |
| | | { |
| | | field: 'TEST_CODE', |
| | | label: '产品测试', |
| | | colProps: { span: 10 }, |
| | | component: 'Input', |
| | | ifShow: ({ values }) => isTest(values.ACT_TYPE), |
| | | }, |
| | | { |
| | | field: 'test0', |
| | | label: '1', |
| | | defaultValue: '', |
| | | component: 'Input', |
| | | colProps: { span: 2, pull: 1 }, |
| | | ifShow: ({ values }) => isTest(values.ACT_TYPE), |
| | | colSlot: 'testadd', |
| | | }, |
| | | { |
| | | field: 'SAPL_CODE', |
| | | label: '产品抽检', |
| | | colProps: { span: 10 }, |
| | | component: 'Input', |
| | | ifShow: ({ values }) => isAudit(values.ACT_TYPE), |
| | | }, |
| | | { |
| | | field: 'audit0', |
| | | label: '1', |
| | | defaultValue: '', |
| | | component: 'Input', |
| | | colProps: { span: 2, pull: 1 }, |
| | | ifShow: ({ values }) => isAudit(values.ACT_TYPE), |
| | | colSlot: 'auditadd', |
| | | }, |
| | | { |
| | | field: 'LABEL_CODE', |
| | | label: '标签打印', |
| | | colProps: { span: 10 }, |
| | | component: 'Input', |
| | | ifShow: ({ values }) => isPrint(values.ACT_TYPE), |
| | | }, |
| | | { |
| | | field: 'print0', |
| | | label: '1', |
| | | defaultValue: '', |
| | | component: 'Input', |
| | | colProps: { span: 2, pull: 1 }, |
| | | ifShow: ({ values }) => isPrint(values.ACT_TYPE), |
| | | colSlot: 'printadd', |
| | | }, |
| | | { |
| | | field: 'pkgRULE_CODE', |
| | | label: '包装规则', |
| | | colProps: { span: 10 }, |
| | | component: 'Input', |
| | | ifShow: ({ values }) => isPackage(values.ACT_TYPE), |
| | | }, |
| | | { |
| | | field: 'pkg0', |
| | | label: '1', |
| | | defaultValue: '', |
| | | component: 'Input', |
| | | colProps: { span: 2, pull: 1 }, |
| | | ifShow: ({ values }) => isPackage(values.ACT_TYPE), |
| | | colSlot: 'pkgadd', |
| | | }, |
| | | { |
| | | field: 'REMARK', |
| | | label: '备注', |
| | | component: 'Input', |
| | | colProps: { span: 12 }, |
| | | }, |
| | | ]; |
| | | const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({ |
| | | let formSchema: FormSchema[] = GetCrudForm(props.configType); |
| | | const [registerForm, { resetFields, setFieldsValue, validate, setProps }] = useForm({ |
| | | labelWidth: 120, |
| | | schemas: formSchema, |
| | | actionColOptions: { |
| | |
| | | }, |
| | | showActionButtonGroup: true, |
| | | submitButtonOptions: { |
| | | text: '提交', |
| | | text: '保存', |
| | | }, |
| | | submitFunc: customSubmitFunc, |
| | | }); |
| | | |
| | | /* 注入选中节点数据 */ |
| | | const selectedNodes = inject('selectedNodes') as Ref<any>; |
| | | watch( |
| | | () => ACT_ID.value, |
| | | (newVal, oldVal) => { |
| | | () => selectedNodes.value, |
| | | (newVal, oldVal) => { |
| | | nextTick(() => { |
| | | getActType(); |
| | | /* 节点切换事件 */ |
| | | nodeChange({ resetFields, setFieldsValue, objParams, selectedNodes }); |
| | | formSchema = GetCrudForm(selectedNodes.value[0].type); |
| | | setProps({ |
| | | schemas: [] |
| | | }); |
| | | setProps({ |
| | | schemas: formSchema |
| | | }); |
| | | }); |
| | | }, |
| | | { deep: true, immediate: true }, |
| | | ); |
| | | }, |
| | | { deep: true, immediate: true }, |
| | | ); |
| | | |
| | | onMounted(() => { |
| | | getActType(); |
| | | /* 节点切换事件 */ |
| | | nodeChange({ resetFields, setFieldsValue, objParams, selectedNodes }); |
| | | }); |
| | | |
| | | function getActType() { |
| | | resetFields(); |
| | | let sqlcmd = ' 1=1 '; |
| | | if (!isNullOrEmpty(Prod_Code.value)) { |
| | | sqlcmd += `And PROD_CODE = '${Prod_Code.value}'`; |
| | | } |
| | | if (!isNullOrEmpty(Cust_Code.value)) { |
| | | sqlcmd += `And CUST_CODE = '${Cust_Code.value}'`; |
| | | } |
| | | if (!isNullOrEmpty(ACT_ID.value)) { |
| | | sqlcmd += `And ACT_ID = '${ACT_ID.value}'`; |
| | | } |
| | | getEntity({ |
| | | sqlcmd: sqlcmd, |
| | | entityName: 'MES_PROD_ACTION', |
| | | }).then((res) => { |
| | | setFieldsValue({ |
| | | PROD_CODE: Prod_Code.value, |
| | | ACT_TYPE: res.Data.Items[0].ACT_TYPE |
| | | }); |
| | | }); |
| | | async function customSubmitFunc() { |
| | | try { |
| | | const values = await validate(); |
| | | SubmitFunc(values,props.configType, emit); |
| | | // values.AUTH_PROD = useUserStore().getUserInfo.prodCode; |
| | | // values.FACTORY = useUserStore().getUserInfo.prodCode; |
| | | // const apiAction = SaveEntity(values, true, 'MES_PROD_ACTION'); |
| | | // apiAction.then((action) => { |
| | | // if (action.IsSuccessed) { |
| | | // emit('success'); |
| | | // } |
| | | // }); |
| | | } catch (e) {} |
| | | } |
| | | |
| | | async function handleSubmit() { |
| | | // try { |
| | | // const values = await validate(); |
| | | // setDrawerProps({ confirmLoading: true }); |
| | | // // TODO custom api |
| | | // //保存工单 |
| | | // if (!unref(isUpdate)) { |
| | | // values.STATUS = 0; |
| | | // } |
| | | // values.AUTH_PROD = useUserStore().getUserInfo.prodCode; |
| | | // values.FACTORY = useUserStore().getUserInfo.prodCode; |
| | | // const apiAction = SaveEntity(values, unref(isUpdate), 'BIZ_MES_WO'); |
| | | // apiAction.then((action) => { |
| | | // if (action.IsSuccessed) { |
| | | // closeDrawer(); |
| | | // emit('success'); |
| | | // } |
| | | // }); |
| | | // } finally { |
| | | // setDrawerProps({ confirmLoading: false }); |
| | | // } |
| | | } |
| | | |
| | | const itemCodeModalCfg = { |
| | | title: '物料列表', |
| | | schemas: [ |
| | | { |
| | | field: 'ITEM_CODE', |
| | | component: 'Input', |
| | | label: '物料编码', |
| | | colProps: { |
| | | span: 12, |
| | | }, |
| | | }, |
| | | ], |
| | | ItemColumns: [ |
| | | { |
| | | title: t('物料编码'), |
| | | dataIndex: 'ITEM_CODE', |
| | | resizable: true, |
| | | sorter: true, |
| | | width: 200, |
| | | }, |
| | | { |
| | | title: t('物料名称'), |
| | | dataIndex: 'ITEM_NAME', |
| | | resizable: true, |
| | | sorter: true, |
| | | width: 180, |
| | | }, |
| | | ], |
| | | tableName: 'BAS_ITEM', |
| | | rowKey: 'ITEM_CODE', |
| | | searchInfo: { TABLE_NAME: 'BAS_ITEM' }, |
| | | }; |
| | | |
| | | const ruleModalCfg = { |
| | | title: '规则列表', |
| | | schemas: [ |
| | | { |
| | | field: 'RULE_CODE', |
| | | component: 'Input', |
| | | label: '规则编码', |
| | | colProps: { |
| | | span: 12, |
| | | }, |
| | | }, |
| | | ], |
| | | ItemColumns: [ |
| | | { |
| | | title: t('规则编码'), |
| | | dataIndex: 'RULE_CODE', |
| | | resizable: true, |
| | | sorter: true, |
| | | width: 200, |
| | | }, |
| | | { |
| | | title: t('规则名称'), |
| | | dataIndex: 'RULE_NAME', |
| | | resizable: true, |
| | | sorter: true, |
| | | width: 180, |
| | | }, |
| | | ], |
| | | tableName: 'BAS_CODE_RULE', |
| | | rowKey: 'RULE_CODE', |
| | | searchInfo: { TABLE_NAME: 'BAS_CODE_RULE' }, |
| | | }; |
| | | |
| | | const printModalCfg = { |
| | | title: '打印模板列表', |
| | | schemas: [ |
| | | { |
| | | field: 'LABEL_CODE', |
| | | component: 'Input', |
| | | label: '模板编码', |
| | | colProps: { |
| | | span: 12, |
| | | }, |
| | | }, |
| | | ], |
| | | ItemColumns: [ |
| | | { |
| | | title: t('模板编码'), |
| | | dataIndex: 'LABEL_CODE', |
| | | resizable: true, |
| | | sorter: true, |
| | | width: 200, |
| | | }, |
| | | { |
| | | title: t('模板名称'), |
| | | dataIndex: 'LABEL_NAME', |
| | | resizable: true, |
| | | sorter: true, |
| | | width: 180, |
| | | }, |
| | | ], |
| | | tableName: 'BAS_LABEL_TEMP', |
| | | rowKey: 'LABEL_CODE', |
| | | searchInfo: { TABLE_NAME: 'BAS_LABEL_TEMP' }, |
| | | }; |
| | | |
| | | const pkgModalCfg = { |
| | | title: '包装规则列表', |
| | | schemas: [ |
| | | { |
| | | field: 'RULE_CODE', |
| | | component: 'Input', |
| | | label: '包装规则编码', |
| | | colProps: { |
| | | span: 12, |
| | | }, |
| | | }, |
| | | ], |
| | | ItemColumns: [ |
| | | { |
| | | title: t('包装规则编码'), |
| | | dataIndex: 'RULE_CODE', |
| | | resizable: true, |
| | | sorter: true, |
| | | width: 200, |
| | | }, |
| | | { |
| | | title: t('包装规则名称'), |
| | | dataIndex: 'RULE_NAME', |
| | | resizable: true, |
| | | sorter: true, |
| | | width: 180, |
| | | }, |
| | | ], |
| | | tableName: 'BAS_PKG_RULE', |
| | | rowKey: 'RULE_CODE', |
| | | searchInfo: { TABLE_NAME: 'BAS_PKG_RULE' }, |
| | | }; |
| | | |
| | | /** |
| | | * @description: 点击打开弹出选择列表框 |
| | |
| | | * @return {*} |
| | | */ |
| | | function handleSelectItem(item) { |
| | | let config = {}; |
| | | switch (item) { |
| | | 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); |
| | | OpenSelectItem(openItemModal, item); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @return {*} |
| | | */ |
| | | function handleItemSuccess(d, u, item) { |
| | | let value = {}; |
| | | switch (item) { |
| | | case 'scanadd': |
| | | value = { |
| | | RULE_CODE: d.values['val'], |
| | | }; |
| | | break; |
| | | case 'assyadd': |
| | | value = { |
| | | ITEM_CODE: d.values['val'], |
| | | }; |
| | | break; |
| | | case 'printadd': |
| | | value = { |
| | | LABEL_CODE: d.values['val'], |
| | | }; |
| | | break; |
| | | case 'pkgadd': |
| | | value = { |
| | | pkgRULE_CODE: d.values['val'], |
| | | }; |
| | | break; |
| | | } |
| | | setFieldsValue(value); |
| | | setFieldsValue(GetSelectSuccess(d, u, item)); |
| | | } |
| | | </script> |