diff --git a/apps/web-antd/src/api/mes/wm/barcode/index.ts b/apps/web-antd/src/api/mes/wm/barcode/index.ts index 7e8154141..39673a3ae 100644 --- a/apps/web-antd/src/api/mes/wm/barcode/index.ts +++ b/apps/web-antd/src/api/mes/wm/barcode/index.ts @@ -5,17 +5,17 @@ import { requestClient } from '#/api/request'; export namespace MesWmBarcodeApi { /** MES 条码清单 */ export interface Barcode { - id?: number; - configId?: number; - format?: number; - bizType?: number; - content?: string; - bizId?: number; - bizCode?: string; - bizName?: string; - status?: number; - remark?: string; - createTime?: Date; + id?: number; // 条码编号 + configId?: number; // 条码配置编号 + format?: number; // 条码格式 + bizType?: number; // 业务类型 + content?: string; // 条码内容 + bizId?: number; // 业务对象编号 + bizCode?: string; // 业务对象编码 + bizName?: string; // 业务对象名称 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 } } diff --git a/apps/web-antd/src/api/mes/wm/batch/index.ts b/apps/web-antd/src/api/mes/wm/batch/index.ts index 7ce0a76f9..14d5fa1bd 100644 --- a/apps/web-antd/src/api/mes/wm/batch/index.ts +++ b/apps/web-antd/src/api/mes/wm/batch/index.ts @@ -39,22 +39,22 @@ export namespace MesWmBatchApi { /** MES 批次分页查询参数 */ export interface PageParams extends PageParam { - code?: string; - itemId?: number; - vendorId?: number; - clientId?: number; - workOrderId?: number; - taskId?: number; - workstationId?: number; - toolId?: number; - moldId?: number; - salesOrderCode?: string; - purchaseOrderCode?: string; - lotNumber?: string; - qualityStatus?: number; - produceDate?: string[]; - expireDate?: string[]; - receiptDate?: string[]; + code?: string; // 批次号 + itemId?: number; // 物料编号 + vendorId?: number; // 供应商编号 + clientId?: number; // 客户编号 + workOrderId?: number; // 工单编号 + taskId?: number; // 生产任务编号 + workstationId?: number; // 工作站编号 + toolId?: number; // 工具编号 + moldId?: number; // 模具编号 + salesOrderCode?: string; // 销售订单号 + purchaseOrderCode?: string; // 采购订单号 + lotNumber?: string; // 批号 + qualityStatus?: number; // 质量状态 + produceDate?: string[]; // 生产日期 + expireDate?: string[]; // 过期日期 + receiptDate?: string[]; // 入库日期 } } diff --git a/apps/web-antd/src/api/mes/wm/sn/index.ts b/apps/web-antd/src/api/mes/wm/sn/index.ts index 5a733fa39..6970a796a 100644 --- a/apps/web-antd/src/api/mes/wm/sn/index.ts +++ b/apps/web-antd/src/api/mes/wm/sn/index.ts @@ -27,11 +27,11 @@ export namespace MesWmSnApi { /** MES SN 码分组分页查询参数 */ export interface PageParams extends PageParam { - uuid?: string; - code?: string; - itemId?: number; - batchCode?: string; - createTime?: string[]; + uuid?: string; // 分组 UUID + code?: string; // SN 码 + itemId?: number; // 物料编号 + batchCode?: string; // 批次号 + createTime?: string[]; // 创建时间 } } diff --git a/apps/web-antd/src/views/mes/cal/plan/data.ts b/apps/web-antd/src/views/mes/cal/plan/data.ts index c0c957956..2fcb12099 100644 --- a/apps/web-antd/src/views/mes/cal/plan/data.ts +++ b/apps/web-antd/src/views/mes/cal/plan/data.ts @@ -16,7 +16,10 @@ import { getRangePickerDefaultProps } from '#/utils'; export type FormType = 'create' | 'detail' | 'update'; /** 新增/修改排班计划的表单 */ -export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { +export function useFormSchema( + formType: FormType, + formApi?: VbenFormApi, +): VbenFormSchema[] { return [ { fieldName: 'id', @@ -43,18 +46,21 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { placeholder: '请输入计划编码', }, rules: 'required', - suffix: () => - h( - Button, - { - type: 'default', - onClick: async () => { - const code = await generateAutoCode(MesAutoCodeRuleCode.CAL_PLAN_CODE); - await formApi?.setFieldValue('code', code); - }, - }, - { default: () => '生成' }, - ), + suffix: + formType === 'detail' + ? undefined + : () => + h( + Button, + { + type: 'default', + onClick: async () => { + const code = await generateAutoCode(MesAutoCodeRuleCode.CAL_PLAN_CODE); + await formApi?.setFieldValue('code', code); + }, + }, + { default: () => '生成' }, + ), }, { fieldName: 'name', diff --git a/apps/web-antd/src/views/mes/cal/plan/modules/form.vue b/apps/web-antd/src/views/mes/cal/plan/modules/form.vue index c2402d002..3ecbda54e 100644 --- a/apps/web-antd/src/views/mes/cal/plan/modules/form.vue +++ b/apps/web-antd/src/views/mes/cal/plan/modules/form.vue @@ -103,11 +103,11 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - formApi.setState({ schema: useFormSchema(formApi) }); subTabsName.value = 'shift'; // 加载数据 const data = modalApi.getData<{ formType: FormType; id?: number }>(); formType.value = data.formType; + formApi.setState({ schema: useFormSchema(data.formType, formApi) }); formApi.setDisabled(formType.value === 'detail'); modalApi.setState({ showConfirmButton: formType.value !== 'detail' }); if (!data?.id) { diff --git a/apps/web-antd/src/views/mes/cal/team/data.ts b/apps/web-antd/src/views/mes/cal/team/data.ts index fac2487aa..fb28dd230 100644 --- a/apps/web-antd/src/views/mes/cal/team/data.ts +++ b/apps/web-antd/src/views/mes/cal/team/data.ts @@ -16,7 +16,10 @@ import { generateAutoCode } from '#/api/mes/md/autocode/record'; export type FormType = 'create' | 'detail' | 'update'; /** 新增/修改班组的表单 */ -export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { +export function useFormSchema( + formType: FormType, + formApi?: VbenFormApi, +): VbenFormSchema[] { return [ { fieldName: 'id', @@ -35,18 +38,21 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { placeholder: '请输入班组编码', }, rules: z.string().min(1, '班组编码不能为空').max(64), - suffix: () => - h( - Button, - { - type: 'default', - onClick: async () => { - const code = await generateAutoCode(MesAutoCodeRuleCode.CAL_TEAM_CODE); - await formApi?.setFieldValue('code', code); - }, - }, - { default: () => '生成' }, - ), + suffix: + formType === 'detail' + ? undefined + : () => + h( + Button, + { + type: 'default', + onClick: async () => { + const code = await generateAutoCode(MesAutoCodeRuleCode.CAL_TEAM_CODE); + await formApi?.setFieldValue('code', code); + }, + }, + { default: () => '生成' }, + ), }, { fieldName: 'name', diff --git a/apps/web-antd/src/views/mes/cal/team/modules/form.vue b/apps/web-antd/src/views/mes/cal/team/modules/form.vue index 388db173d..2406bcd43 100644 --- a/apps/web-antd/src/views/mes/cal/team/modules/form.vue +++ b/apps/web-antd/src/views/mes/cal/team/modules/form.vue @@ -79,11 +79,11 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - formApi.setState({ schema: useFormSchema(formApi) }); subTabsName.value = 'member'; // 加载数据 const data = modalApi.getData<{ formType: FormType; id?: number }>(); formType.value = data.formType; + formApi.setState({ schema: useFormSchema(data.formType, formApi) }); formApi.setDisabled(formType.value === 'detail'); modalApi.setState({ showConfirmButton: formType.value !== 'detail' }); if (!data?.id) { diff --git a/apps/web-antd/src/views/mes/dv/checkplan/data.ts b/apps/web-antd/src/views/mes/dv/checkplan/data.ts index 6c42eb7b3..bb77b4879 100644 --- a/apps/web-antd/src/views/mes/dv/checkplan/data.ts +++ b/apps/web-antd/src/views/mes/dv/checkplan/data.ts @@ -17,7 +17,10 @@ import { getRangePickerDefaultProps } from '#/utils'; export type FormType = 'create' | 'detail' | 'update'; /** 新增/修改点检保养方案的表单 */ -export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { +export function useFormSchema( + formType: FormType, + formApi?: VbenFormApi, +): VbenFormSchema[] { return [ { fieldName: 'id', @@ -44,18 +47,21 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { placeholder: '请输入方案编码', }, rules: 'required', - suffix: () => - h( - Button, - { - type: 'default', - onClick: async () => { - const code = await generateAutoCode(MesAutoCodeRuleCode.DV_CHECK_PLAN_CODE); - await formApi?.setFieldValue('code', code); - }, - }, - { default: () => '生成' }, - ), + suffix: + formType === 'detail' + ? undefined + : () => + h( + Button, + { + type: 'default', + onClick: async () => { + const code = await generateAutoCode(MesAutoCodeRuleCode.DV_CHECK_PLAN_CODE); + await formApi?.setFieldValue('code', code); + }, + }, + { default: () => '生成' }, + ), }, { fieldName: 'name', diff --git a/apps/web-antd/src/views/mes/dv/checkplan/modules/form.vue b/apps/web-antd/src/views/mes/dv/checkplan/modules/form.vue index 94b3f064d..391ab971d 100644 --- a/apps/web-antd/src/views/mes/dv/checkplan/modules/form.vue +++ b/apps/web-antd/src/views/mes/dv/checkplan/modules/form.vue @@ -78,11 +78,11 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - formApi.setState({ schema: useFormSchema(formApi) }); subTabsName.value = 'machinery'; // 加载数据 const data = modalApi.getData<{ formType: FormType; id?: number }>(); formType.value = data.formType; + formApi.setState({ schema: useFormSchema(data.formType, formApi) }); formApi.setDisabled(formType.value === 'detail'); modalApi.setState({ showConfirmButton: formType.value !== 'detail' }); if (!data?.id) { diff --git a/apps/web-antd/src/views/mes/dv/machinery/data.ts b/apps/web-antd/src/views/mes/dv/machinery/data.ts index b32f87ad9..b54a2c556 100644 --- a/apps/web-antd/src/views/mes/dv/machinery/data.ts +++ b/apps/web-antd/src/views/mes/dv/machinery/data.ts @@ -41,18 +41,21 @@ export function useFormSchema(formType: FormType, formApi?: VbenFormApi): VbenFo componentProps: (values) => ({ disabled: !!values.id }), }, rules: 'required', - suffix: () => - h( - Button, - { - type: 'default', - onClick: async () => { - const code = await generateAutoCode(MesAutoCodeRuleCode.DV_MACHINERY_CODE); - await formApi?.setFieldValue('code', code); - }, - }, - { default: () => '生成' }, - ), + suffix: + formType === 'detail' + ? undefined + : () => + h( + Button, + { + type: 'default', + onClick: async () => { + const code = await generateAutoCode(MesAutoCodeRuleCode.DV_MACHINERY_CODE); + await formApi?.setFieldValue('code', code); + }, + }, + { default: () => '生成' }, + ), }, { fieldName: 'name', diff --git a/apps/web-antd/src/views/mes/dv/machinery/type/data.ts b/apps/web-antd/src/views/mes/dv/machinery/type/data.ts index 604ea3054..5bdf07bf6 100644 --- a/apps/web-antd/src/views/mes/dv/machinery/type/data.ts +++ b/apps/web-antd/src/views/mes/dv/machinery/type/data.ts @@ -14,8 +14,14 @@ import { z } from '#/adapter/form'; import { getMachineryTypeList } from '#/api/mes/dv/machinery/type'; import { generateAutoCode } from '#/api/mes/md/autocode/record'; +/** 表单类型 */ +export type FormType = 'create' | 'detail' | 'update'; + /** 新增/修改设备类型的表单 */ -export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { +export function useFormSchema( + formType: FormType, + formApi?: VbenFormApi, +): VbenFormSchema[] { return [ { fieldName: 'id', @@ -52,18 +58,23 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { placeholder: '请输入类型编码', }, rules: z.string().min(1, '类型编码不能为空').max(64), - suffix: () => - h( - Button, - { - type: 'default', - onClick: async () => { - const code = await generateAutoCode(MesAutoCodeRuleCode.DV_MACHINERY_TYPE_CODE); - await formApi?.setFieldValue('code', code); - }, - }, - { default: () => '生成' }, - ), + suffix: + formType === 'detail' + ? undefined + : () => + h( + Button, + { + type: 'default', + onClick: async () => { + const code = await generateAutoCode( + MesAutoCodeRuleCode.DV_MACHINERY_TYPE_CODE, + ); + await formApi?.setFieldValue('code', code); + }, + }, + { default: () => '生成' }, + ), }, { fieldName: 'name', diff --git a/apps/web-antd/src/views/mes/dv/machinery/type/modules/form.vue b/apps/web-antd/src/views/mes/dv/machinery/type/modules/form.vue index 4a0269d17..f88cb4c0f 100644 --- a/apps/web-antd/src/views/mes/dv/machinery/type/modules/form.vue +++ b/apps/web-antd/src/views/mes/dv/machinery/type/modules/form.vue @@ -64,9 +64,11 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - formApi.setState({ schema: useFormSchema(formApi) }); // 加载数据 const data = modalApi.getData(); + formApi.setState({ + schema: useFormSchema(data?.id ? 'update' : 'create', formApi), + }); if (!data || !data.id) { formData.value = data || undefined; if (data) { diff --git a/apps/web-antd/src/views/mes/dv/repair/data.ts b/apps/web-antd/src/views/mes/dv/repair/data.ts index 524f41e87..a2eaaae1f 100644 --- a/apps/web-antd/src/views/mes/dv/repair/data.ts +++ b/apps/web-antd/src/views/mes/dv/repair/data.ts @@ -16,8 +16,17 @@ import { DvMachinerySelect } from '#/views/mes/dv/machinery/components'; /** 表单类型 */ export type FormType = 'confirm' | 'create' | 'detail' | 'finish' | 'update'; +/** 表头是否只读(完成维修、验收、详情态;finishDate 在 confirm 单独放开) */ +function isHeaderReadonly(formType: FormType): boolean { + return ['confirm', 'detail', 'finish'].includes(formType); +} + /** 新增/修改维修工单的表单 */ -export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { +export function useFormSchema( + formType: FormType, + formApi?: VbenFormApi, +): VbenFormSchema[] { + const headerReadonly = isHeaderReadonly(formType); return [ { fieldName: 'id', @@ -45,27 +54,30 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { }, dependencies: { triggerFields: ['id'], - componentProps: (values) => ({ disabled: !!values.id }), + componentProps: (values) => ({ disabled: headerReadonly || !!values.id }), }, rules: 'required', - suffix: () => - h( - Button, - { - type: 'default', - onClick: async () => { - const code = await generateAutoCode(MesAutoCodeRuleCode.DV_REPAIR_CODE); - await formApi?.setFieldValue('code', code); - }, - }, - { default: () => '生成' }, - ), + suffix: headerReadonly + ? undefined + : () => + h( + Button, + { + type: 'default', + onClick: async () => { + const code = await generateAutoCode(MesAutoCodeRuleCode.DV_REPAIR_CODE); + await formApi?.setFieldValue('code', code); + }, + }, + { default: () => '生成' }, + ), }, { fieldName: 'name', label: '维修单名称', component: 'Input', componentProps: { + disabled: headerReadonly, placeholder: '请输入维修单名称', }, rules: 'required', @@ -75,6 +87,7 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { label: '设备', component: markRaw(DvMachinerySelect), componentProps: { + disabled: headerReadonly, placeholder: '请选择设备', }, rules: 'selectRequired', @@ -84,6 +97,7 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { label: '报修日期', component: 'DatePicker', componentProps: { + disabled: headerReadonly, format: 'YYYY-MM-DD HH:mm:ss', placeholder: '请选择报修日期', showTime: true, @@ -98,10 +112,18 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { componentProps: { allowClear: true, api: getSimpleUserList, + disabled: true, labelField: 'nickname', placeholder: '请选择维修人', valueField: 'id', }, + // 维修人为待验收(≥APPROVING)态自动产生的只读回显字段 + dependencies: { + triggerFields: ['status'], + if: (values) => + values.status != null && + values.status >= MesDvRepairStatusEnum.APPROVING, + }, }, { fieldName: 'finishDate', @@ -113,6 +135,15 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { showTime: true, valueFormat: 'x', }, + // 维修中(≥CONFIRMED)态展示;仅"完成维修"弹窗可编辑并必填,其余态只读回显 + dependencies: { + triggerFields: ['status'], + if: (values) => + values.status != null && + values.status >= MesDvRepairStatusEnum.CONFIRMED, + disabled: formType !== 'confirm', + rules: () => (formType === 'confirm' ? 'required' : null), + }, }, { fieldName: 'confirmUserId', @@ -121,21 +152,37 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { componentProps: { allowClear: true, api: getSimpleUserList, + disabled: true, labelField: 'nickname', placeholder: '请选择验收人', valueField: 'id', }, + // 验收信息为已确认(≥FINISHED)态自动产生的只读回显字段 + dependencies: { + triggerFields: ['status'], + if: (values) => + values.status != null && + values.status >= MesDvRepairStatusEnum.FINISHED, + }, }, { fieldName: 'confirmDate', label: '验收日期', component: 'DatePicker', componentProps: { + disabled: true, format: 'YYYY-MM-DD HH:mm:ss', placeholder: '请选择验收日期', showTime: true, valueFormat: 'x', }, + // 验收信息为已确认(≥FINISHED)态自动产生的只读回显字段 + dependencies: { + triggerFields: ['status'], + if: (values) => + values.status != null && + values.status >= MesDvRepairStatusEnum.FINISHED, + }, }, { fieldName: 'result', @@ -143,9 +190,17 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { component: 'RadioGroup', componentProps: { buttonStyle: 'solid', + disabled: true, optionType: 'button', options: getDictOptions(DICT_TYPE.MES_DV_REPAIR_RESULT, 'number'), }, + // 验收信息为已确认(≥FINISHED)态自动产生的只读回显字段 + dependencies: { + triggerFields: ['status'], + if: (values) => + values.status != null && + values.status >= MesDvRepairStatusEnum.FINISHED, + }, }, { fieldName: 'remark', @@ -153,6 +208,7 @@ export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { component: 'Textarea', formItemClass: 'col-span-3', componentProps: { + disabled: headerReadonly, placeholder: '请输入备注', rows: 3, }, diff --git a/apps/web-antd/src/views/mes/dv/repair/modules/form.vue b/apps/web-antd/src/views/mes/dv/repair/modules/form.vue index 1ae2e612b..efbe2058b 100644 --- a/apps/web-antd/src/views/mes/dv/repair/modules/form.vue +++ b/apps/web-antd/src/views/mes/dv/repair/modules/form.vue @@ -28,20 +28,29 @@ const emit = defineEmits(['success']); const formType = ref('create'); const formData = ref(); const isDetail = computed(() => formType.value === 'detail'); -const isReadonly = computed(() => ['confirm', 'detail', 'finish'].includes(formType.value)); +const isLineReadonly = computed(() => + // 明细只读:完成维修/验收/详情态明细均不可编辑 + ['confirm', 'detail', 'finish'].includes(formType.value), +); +const isFormDisabled = computed(() => + // 整表禁用:仅详情/验收态;完成维修态需放开 finishDate,故单头只读改由 schema 逐字段控制 + ['detail', 'finish'].includes(formType.value), +); const canSubmit = computed( () => formType.value === 'update' && formData.value?.status === MesDvRepairStatusEnum.PREPARE, ); -const getTitle = computed( - () => - ({ - create: '新增维修工单', - update: '修改维修工单', - confirm: '完成维修', - finish: '验收维修', - detail: '查看维修工单', - })[formType.value], -); +const getTitle = computed(() => { + if (formType.value === 'detail') { + return '查看维修工单'; + } + if (formType.value === 'confirm') { + return '完成维修'; + } + if (formType.value === 'finish') { + return '验收维修'; + } + return formType.value === 'update' ? '修改维修工单' : '新增维修工单'; +}); const [Form, formApi] = useVbenForm({ commonConfig: { @@ -161,11 +170,11 @@ const [Modal, modalApi] = useVbenModal({ formData.value = undefined; return; } - formApi.setState({ schema: useFormSchema(formApi) }); // 加载数据 const data = modalApi.getData<{ formType: FormType; id?: number }>(); formType.value = data.formType; - formApi.setDisabled(isReadonly.value); + formApi.setState({ schema: useFormSchema(data.formType, formApi) }); + formApi.setDisabled(isFormDisabled.value); modalApi.setState({ showConfirmButton: ['create', 'update'].includes(formType.value) }); if (!data?.id) { return; @@ -184,7 +193,7 @@ const [Modal, modalApi] = useVbenModal({