From 8f8dcdae7e40ba4e94a363aa8eb91c7665810bc3 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 31 八月 2026 15:29:17 +0800
Subject: [PATCH] fix: 新疆-绿能 1.报工自动生成产品入库单 + 勾选入库 + 不合格仓库兜底
---
src/views/mes/pro/workorder-center/modules/quick-feedback.vue | 108 ++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 81 insertions(+), 27 deletions(-)
diff --git a/src/views/mes/pro/workorder-center/modules/quick-feedback.vue b/src/views/mes/pro/workorder-center/modules/quick-feedback.vue
index b249fdf..fc91d88 100644
--- a/src/views/mes/pro/workorder-center/modules/quick-feedback.vue
+++ b/src/views/mes/pro/workorder-center/modules/quick-feedback.vue
@@ -9,6 +9,13 @@
import { message } from 'ant-design-vue';
import { quickCreateFeedback } from '#/api/mes/pro/feedback';
+import { getRouteProcessByRouteAndProcess } from '#/api/mes/pro/route/process';
+import { getTask } from '#/api/mes/pro/task';
+import {
+ loadParamDetails,
+ paramDetails,
+} from '#/views/mes/pro/feedback/param-state';
+import WaitCountdown from '#/views/mes/pro/feedback/modules/wait-countdown.vue';
import ProTaskSelect from '#/views/mes/pro/task/components/select.vue';
defineOptions({ name: 'QuickFeedbackForm' });
@@ -35,10 +42,20 @@
selectedTask.value = undefined;
formData.value = {
feedbackQuantity: undefined,
- qualifiedQuantity: undefined,
- unqualifiedQuantity: undefined,
remark: '',
};
+ waitDuration.value = undefined;
+ needReportQuantity.value = true;
+ waitStartTime.value = undefined;
+ // 棰勮浠诲姟鏃跺姞杞藉叾宸ヨ壓鍙傛暟涓庣瓑寰呴厤缃紱鍚﹀垯绛夊緟閫夋嫨浠诲姟鍚庡啀鍔犺浇
+ if (props.taskId) {
+ loadParamDetails(props.taskId);
+ getTask(props.taskId)
+ .then(applyTaskWaitConfig)
+ .catch(() => {});
+ } else {
+ paramDetails.value = [];
+ }
}
},
});
@@ -48,11 +65,12 @@
const selectedTask = ref<MesProTaskApi.Task>();
const formData = ref({
feedbackQuantity: undefined as number | undefined,
- qualifiedQuantity: undefined as number | undefined,
- unqualifiedQuantity: undefined as number | undefined,
remark: '',
});
const submitting = ref(false);
+const waitDuration = ref<number>();
+const needReportQuantity = ref<boolean>(true);
+const waitStartTime = ref<string>();
const hasPredefinedTask = computed(() => !!props.taskId);
@@ -70,6 +88,28 @@
function handleTaskChange(task: MesProTaskApi.Task | undefined) {
selectedTask.value = task;
selectedTaskId.value = task?.id;
+ loadParamDetails(task?.id);
+ applyTaskWaitConfig(task);
+}
+
+/** 鎸変换鍔″伐搴忓姞杞界瓑寰呮椂闀夸笌鎶ュ伐鏁伴噺瑙勫垯 */
+async function applyTaskWaitConfig(task?: MesProTaskApi.Task) {
+ waitDuration.value = undefined;
+ needReportQuantity.value = true;
+ waitStartTime.value = task?.waitStartTime;
+ if (!task?.routeId || !task?.processId) {
+ return;
+ }
+ try {
+ const routeProcess = await getRouteProcessByRouteAndProcess(
+ task.routeId,
+ task.processId,
+ );
+ waitDuration.value = routeProcess?.waitDuration;
+ needReportQuantity.value = routeProcess?.needReportQuantity ?? true;
+ } catch {
+ // 鍔犺浇澶辫触鎸夐粯璁ゅ鐞嗭紙鏃犻渶鍊掕鏃躲�佹暟閲忓繀濉級
+ }
}
async function handleSubmit() {
@@ -78,7 +118,7 @@
message.warning('璇烽�夋嫨浠诲姟');
return;
}
- if (!formData.value.feedbackQuantity) {
+ if (needReportQuantity.value && !formData.value.feedbackQuantity) {
message.warning('璇疯緭鍏ユ姤宸ユ暟閲�');
return;
}
@@ -86,9 +126,13 @@
try {
await quickCreateFeedback({
taskId,
- feedbackQuantity: formData.value.feedbackQuantity,
- qualifiedQuantity: formData.value.qualifiedQuantity,
- unqualifiedQuantity: formData.value.unqualifiedQuantity,
+ feedbackQuantity: needReportQuantity.value
+ ? (formData.value.feedbackQuantity ?? 0)
+ : 0,
+ paramValues: paramDetails.value.map((detail) => ({
+ detailId: detail.id,
+ value: detail.paramValue,
+ })),
remark: formData.value.remark || undefined,
});
message.success('鎶ュ伐鎴愬姛');
@@ -118,7 +162,14 @@
class="!w-full"
/>
</a-form-item>
- <a-form-item label="鏈鎶ュ伐鏁伴噺" required>
+ <a-form-item v-if="waitDuration" label="鎶ュ伐鍊掕鏃�">
+ <WaitCountdown
+ :task-id="selectedTaskId"
+ :wait-duration="waitDuration"
+ :wait-start-time="waitStartTime"
+ />
+ </a-form-item>
+ <a-form-item v-if="needReportQuantity" label="鏈鎶ュ伐鏁伴噺" required>
<a-input-number
v-model:value="formData.feedbackQuantity"
:min="0.01"
@@ -128,24 +179,27 @@
class="!w-full"
/>
</a-form-item>
- <a-form-item label="鍚堟牸鍝佹暟閲�">
- <a-input-number
- v-model:value="formData.qualifiedQuantity"
- :min="0"
- :precision="2"
- placeholder="璇疯緭鍏ュ悎鏍煎搧鏁伴噺"
- class="!w-full"
- />
- </a-form-item>
- <a-form-item label="涓嶈壇鍝佹暟閲�">
- <a-input-number
- v-model:value="formData.unqualifiedQuantity"
- :min="0"
- :precision="2"
- placeholder="璇疯緭鍏ヤ笉鑹搧鏁伴噺"
- class="!w-full"
- />
- </a-form-item>
+ <div v-if="paramDetails.length" class="mb-4">
+ <div class="mb-1 font-medium">宸ヨ壓鍙傛暟</div>
+ <div
+ v-for="detail in paramDetails"
+ :key="detail.id"
+ class="mb-2 flex items-center gap-2"
+ >
+ <span class="w-40 flex-shrink-0 text-right text-sm text-gray-600">
+ <span v-if="detail.required" class="text-red-500">* </span>
+ {{ detail.paramName || detail.paramCode
+ }}{{
+ detail.unitMeasureName ? `锛�${detail.unitMeasureName}锛塦 : ''
+ }}
+ </span>
+ <a-input
+ v-model:value="detail.paramValue"
+ placeholder="璇疯緭鍏ュ弬鏁板��"
+ class="!w-full"
+ />
+ </div>
+ </div>
<a-form-item label="澶囨敞">
<a-textarea
v-model:value="formData.remark"
--
Gitblit v1.9.3