| src/packages/locales/src/langs/zh-CN/common.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/mes/pro/feedback/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/mes/pro/feedback/modules/form.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/mes/workbench/components/TaskListPanel.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/mes/workbench/components/tabs/FeedbackHistoryTab.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/mes/workbench/components/tabs/FeedbackTab.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/mes/workbench/components/tabs/RecordParamTab.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/mes/workbench/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/packages/locales/src/langs/zh-CN/common.json
@@ -24,5 +24,9 @@ "submit": "提交", "approve": "审批", "showSearchPanel": "显示搜索面板", "hideSearchPanel": "隐藏搜索面板" "hideSearchPanel": "隐藏搜索面板", "createSuccess": "创建成功", "updateSuccess": "更新成功", "deleteSuccess": "删除成功" } src/views/mes/pro/feedback/index.vue
@@ -40,7 +40,7 @@ /** 编辑生产报工 */ function handleEdit(row: MesProFeedbackApi.Feedback) { formModalApi.setData({ formType: 'update', id: row.id }).open(); formModalApi.setData({ formType: 'update', id: row.id, showSubmitButton: false }).open(); } /** 提交生产报工 */ src/views/mes/pro/feedback/modules/form.vue
@@ -30,6 +30,7 @@ const emit = defineEmits(['success']); const formType = ref<FormType>('create'); const showSubmitButton = ref(true); const formData = ref<MesProFeedbackApi.Feedback>(); const userStore = useUserStore(); const subTabsName = ref('itemConsume'); @@ -40,6 +41,7 @@ ); const canSubmit = computed( () => showSubmitButton.value && isEditable.value && formData.value?.status === MesProFeedbackStatusEnum.PREPARE, ); @@ -224,8 +226,9 @@ return; } // 加载数据 const data = modalApi.getData<{ formType: FormType; id?: number }>(); const data = modalApi.getData<{ formType: FormType; id?: number; showSubmitButton?: boolean }>(); formType.value = data.formType; showSubmitButton.value = data.showSubmitButton !== false; formApi.setState({ schema: useFormSchema(formType.value, formApi) }); // 审批/详情整表禁用,避免审核人误改未提交的字段 formApi.setDisabled( @@ -233,7 +236,9 @@ ); modalApi.setState({ showConfirmButton: formType.value !== 'detail' && formType.value !== 'approve', formType.value !== 'detail' && formType.value !== 'approve' && formType.value !== 'submit', }); if (!data?.id) { // 新增:默认报工人和报工时间,并自动生成报订单号 src/views/mes/workbench/components/TaskListPanel.vue
@@ -11,8 +11,6 @@ list: PendingTask[]; selectedId?: number; loading?: boolean; /** 当前工作站对应的工序名称,列表只展示匹配的工序 */ processName?: string; }>(); const emit = defineEmits<{ @@ -23,14 +21,9 @@ /** 先按工作站工序过滤,再按搜索关键字匹配 */ const filteredList = computed(() => { let result = props.list; // 固定只显示和当前工作站工序匹配的任务 if (props.processName) { result = result.filter((row) => row.processName === props.processName); } const kw = searchKeyword.value.trim().toLowerCase(); if (!kw) return result; return result.filter((row) => { if (!kw) return props.list; return props.list.filter((row) => { const fields = [ row.code, row.workOrderCode, src/views/mes/workbench/components/tabs/FeedbackHistoryTab.vue
@@ -46,7 +46,7 @@ /** 编辑(仅草稿) */ function handleEdit(row: MesProFeedbackApi.Feedback) { formModalApi.setData({ formType: 'update', id: row.id }).open(); formModalApi.setData({ formType: 'update', id: row.id, showSubmitButton: false }).open(); } /** 删除(仅草稿) */ src/views/mes/workbench/components/tabs/FeedbackTab.vue
@@ -10,7 +10,7 @@ } from '@vben/constants'; import { useUserStore } from '@vben/stores'; import { Button, message, Popconfirm } from 'ant-design-vue'; import { Button, message, Modal, Popconfirm } from 'ant-design-vue'; import { useVbenForm } from '#/adapter/form'; import { generateAutoCode } from '#/api/mes/md/autocode/record'; @@ -18,6 +18,7 @@ approveFeedback, createFeedback, getFeedback, getFeedbackPage, rejectFeedback, submitFeedback, updateFeedback, @@ -140,6 +141,7 @@ if (!valid) return; const data = await getAlignedData(); const code = data.code as string; if (formType.value === 'create') { const id = await createFeedback(data); @@ -148,12 +150,73 @@ formType.value = 'update'; formApi.setState({ schema: useFormSchema(formType.value, formApi) }); await formApi.setFieldValue('id', id); message.success($t('common.createSuccess')); } else { await updateFeedback(data); message.success($t('common.updateSuccess')); } originalSnapshot.value = JSON.stringify(data); // 显示显眼的成功提示 Modal.success({ title: '保存成功', content: `报工单 ${code} 已保存`, centered: true, }); // 重置表单为新建模式,重新生成报订单号 if (props.task) { await resetForTask(props.task); } emit('reported'); } /** 保存并提交(先保存,再查询并提交) */ async function handleSaveAndSubmit() { const { valid } = await formApi.validate(); if (!valid) return; const data = await getAlignedData(); const code = data.code as string; // 1. 先保存 if (formType.value === 'create') { const id = await createFeedback(data); feedbackId.value = id; feedbackStatus.value = MesProFeedbackStatusEnum.PREPARE; formType.value = 'update'; formApi.setState({ schema: useFormSchema(formType.value, formApi) }); await formApi.setFieldValue('id', id); } else { await updateFeedback(data); } originalSnapshot.value = JSON.stringify(data); // 2. 查询报工记录,匹配该报工单号 const pageResult = await getFeedbackPage({ code, pageNo: 1, pageSize: 1 }); const record = pageResult.list?.[0]; // 3. 检查是否可提交(草稿状态) if (!record || record.status !== MesProFeedbackStatusEnum.PREPARE) { message.warning('保存成功,但当前报工单状态不可提交'); emit('reported'); return; } // 4. 调用提交接口 await submitFeedback(record.id!); feedbackId.value = record.id; feedbackStatus.value = record.status; // 显示显眼的成功提示 Modal.success({ title: '保存并提交成功', content: `报工单 ${code} 已提交`, centered: true, }); // 重置表单为新建模式,重新生成报订单号 if (props.task) { await resetForTask(props.task); } emit('reported'); } @@ -252,6 +315,13 @@ > 保存 </Button> <Button v-if="isEditable" type="primary" @click="handleSaveAndSubmit" > 保存并提交 </Button> <Popconfirm v-if="canSubmit" title="确认提交该报订单?提交后将不能修改。" src/views/mes/workbench/components/tabs/RecordParamTab.vue
@@ -24,6 +24,8 @@ defineOptions({ name: 'WorkbenchRecordParamTab' }); const props = defineProps<{ /** 当前任务编号(用于监听任务切换) */ taskId?: number; /** 当前工单编号 */ workOrderId?: number; /** 当前工作站编号 */ @@ -295,9 +297,9 @@ } } // 工单或工作站变更时加载记录 // 任务/工单/工作站变更时加载记录 watch( () => [props.workOrderId, props.workstationId], () => [props.taskId, props.workOrderId, props.workstationId], () => { handleCancelForm(); refreshRecordList(); src/views/mes/workbench/index.vue
@@ -167,7 +167,6 @@ :list="taskList" :selected-id="selectedTask?.id" :loading="taskLoading" :process-name="workstation?.processName" @select="handleSelectTask" /> </aside> @@ -204,6 +203,7 @@ /> <RecordParamTab v-else-if="activeTab === 'record-param'" :task-id="selectedTask?.id" :work-order-id="selectedTask?.workOrderId" :workstation-id="workstationId" />