From 9b9542833ee33cf7e7f5a7e020050a4ceaf37c93 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期一, 23 三月 2026 18:00:33 +0800
Subject: [PATCH] 报工模块接口对接(还需调试)
---
src/views/productionManagement/productionReporting/reportingDialog.vue | 227 +++++++++++++++++++++++++++++++++++---------------------
1 files changed, 143 insertions(+), 84 deletions(-)
diff --git a/src/views/productionManagement/productionReporting/reportingDialog.vue b/src/views/productionManagement/productionReporting/reportingDialog.vue
index 1c8ad3f..adae305 100644
--- a/src/views/productionManagement/productionReporting/reportingDialog.vue
+++ b/src/views/productionManagement/productionReporting/reportingDialog.vue
@@ -213,8 +213,8 @@
@click="handleProcessClick(process.processId)">
<span class="process-name">{{ process.processName }}</span>
<span class="process-badge"
- v-if="getProcessInfo(parseInt(process.processId)).postPersonnel">
- {{ getProcessInfo(parseInt(process.processId)).postPersonnel }}
+ v-if="getProcessInfo(parseInt(process.processId)).postName">
+ {{ getProcessInfo(parseInt(process.processId)).postName }}
</span>
</div>
</div>
@@ -232,7 +232,7 @@
<div class="form-grid">
<el-form-item label="宀椾綅浜哄憳"
class="form-item">
- <el-select v-model="getProcessInfo(parseInt(activeProcessId)).postPersonnel"
+ <el-select v-model="getProcessInfo(parseInt(activeProcessId)).postName"
placeholder="璇烽�夋嫨宀椾綅浜哄憳"
class="form-select"
:loading="userLoading">
@@ -244,7 +244,7 @@
</el-form-item>
<el-form-item label="璁惧寮傚父鎯呭喌"
class="form-item">
- <el-input v-model="getProcessInfo(parseInt(activeProcessId)).equipmentAbnormality"
+ <el-input v-model="getProcessInfo(parseInt(activeProcessId)).equipmentMalfunction"
placeholder="璇疯緭鍏ヨ澶囧紓甯告儏鍐�"
type="textarea"
:rows="2"
@@ -252,7 +252,7 @@
</el-form-item>
<el-form-item label="褰撶彮璁惧澶勭疆"
class="form-item">
- <el-input v-model="getProcessInfo(parseInt(activeProcessId)).equipmentHandling"
+ <el-input v-model="getProcessInfo(parseInt(activeProcessId)).equipmentDisposal"
placeholder="璇疯緭鍏ュ綋鐝澶囧缃�"
type="textarea"
:rows="2"
@@ -260,7 +260,7 @@
</el-form-item>
<el-form-item label="宸ヨ壓浜哄憳浜ゅ緟"
class="form-item">
- <el-input v-model="getProcessInfo(parseInt(activeProcessId)).processInstructions"
+ <el-input v-model="getProcessInfo(parseInt(activeProcessId)).processExplained"
placeholder="璇疯緭鍏ュ伐鑹轰汉鍛樹氦寰�"
type="textarea"
:rows="2"
@@ -357,9 +357,7 @@
:key="param.id"
:label="param.paramName"
:label-width="120"
- :required="param.isRequired"
:prop="`paramGroups.${activeProcessId}.${index}.${param.id}`"
- :rules="param.isRequired ? [{ required: true, message: `璇疯緭鍏�${param.paramName}`, trigger: 'blur' }] : []"
class="param-item">
<template v-if="param.paramType == '1'">
<!-- 鏁板瓧绫诲瀷 -->
@@ -459,7 +457,7 @@
:key="param.id"
:min-width="200">
<template #header>
- <span :class="{ 'required-label': param.isRequired }">{{ param.paramName }}</span>
+ <span>{{ param.paramName }}</span>
</template>
<template #default="{ row }">
<template v-if="param.paramType == '1'">
@@ -609,19 +607,15 @@
import { useRouter, useRoute } from "vue-router";
import { getDicts } from "@/api/system/dict/data";
import { productOrderListPage } from "@/api/productionManagement/productionOrder.js";
- import { productionRecordAdd } from "@/api/productionManagement/productProcessRoute.js";
+ import {
+ productionRecordAdd,
+ productionRecordAddSubmit,
+ } from "@/api/productionManagement/productProcessRoute.js";
import { userListNoPage } from "@/api/system/user.js";
import { getInfo } from "@/api/login.js";
- import {
- Check,
- Close,
- Delete,
- Plus,
- ArrowLeft,
- ArrowRight,
- Loading,
- Upload,
- } from "@element-plus/icons-vue";
+ import request from "@/utils/request";
+ import { getToken } from "@/utils/auth";
+ import dayjs from "dayjs";
const router = useRouter();
@@ -749,6 +743,7 @@
processList.value.forEach(process => {
form.processStructures[process.processId] =
process.orderStructureVos || [];
+ loadParams(process.processId, orderId);
});
// 濡傛灉鏈夊伐搴忥紝榛樿閫夋嫨绗竴涓�
if (processList.value.length > 0) {
@@ -757,7 +752,7 @@
processId.value = firstProcess.processId;
form.processId = firstProcess.processId;
// 鍔犺浇绗竴涓伐搴忕殑鍙傛暟
- loadParams(firstProcess.processId, orderId);
+ // loadParams(firstProcess.processId, orderId);
}
}
})
@@ -782,10 +777,10 @@
}
if (!form.processInfo[processId]) {
form.processInfo[processId] = {
- postPersonnel: "",
- equipmentAbnormality: "",
- equipmentHandling: "",
- processInstructions: "",
+ postName: "",
+ equipmentMalfunction: "",
+ equipmentDisposal: "",
+ processExplained: "",
files: [],
consumables: {},
};
@@ -858,7 +853,26 @@
};
// 澶勭悊鏂囦欢鍙樻洿
- const handleFileChange = (file, fileList) => {
+ const handleFileChange = async (file, fileList) => {
+ console.log(file, fileList);
+ const formData = new FormData();
+ formData.append("file", file.raw);
+
+ const uploadRes = await request({
+ url: "/file/upload",
+ method: "post",
+ data: formData,
+ headers: {
+ "Content-Type": "multipart/form-data",
+ Authorization: `Bearer ${getToken()}`,
+ },
+ });
+ console.log(uploadRes);
+ if (uploadRes.code === 200) {
+ const tempId = uploadRes.data.tempId;
+ // 灏唗empId瀛樺偍鍒癴ile瀵硅薄涓�
+ file.tempId = tempId;
+ }
const processId = parseInt(activeProcessId.value);
if (processId) {
const processInfo = getProcessInfo(processId);
@@ -936,48 +950,6 @@
}
});
} else if (activeStep.value === 2) {
- // 绗笁姝ワ細楠岃瘉鍙傛暟蹇呭~椤�
- let isValid = true;
- let errorMessage = "";
-
- // 閬嶅巻鎵�鏈夊伐搴�
- for (const process of processList.value) {
- const processId = process.processId;
- const paramGroups = form.paramGroups[processId] || [];
- const processParams = process.orderRouteItemParaVos || [];
-
- // 鑾峰彇蹇呭~鍙傛暟
- const requiredParams = processParams.filter(p => p.isRequired);
-
- if (requiredParams.length > 0) {
- // 妫�鏌ユ瘡涓弬鏁扮粍涓殑蹇呭~鍙傛暟
- for (
- let groupIndex = 0;
- groupIndex < paramGroups.length;
- groupIndex++
- ) {
- const group = paramGroups[groupIndex];
- for (const param of requiredParams) {
- const value = group[param.id];
- if (value === undefined || value === null || value === "") {
- isValid = false;
- errorMessage = `宸ュ簭銆�${process.processName}銆戝弬鏁扮粍${
- groupIndex + 1
- }鐨勩��${param.paramName}銆戜负蹇呭~椤筦;
- break;
- }
- }
- if (!isValid) break;
- }
- }
- if (!isValid) break;
- }
-
- if (!isValid) {
- ElMessage.error(errorMessage);
- return;
- }
-
activeStep.value = 3;
}
};
@@ -987,12 +959,99 @@
formRef.value.validate(valid => {
if (valid) {
isSubmitting.value = true;
- // 杩欓噷鍙互璋冪敤API杩涜鎻愪氦
- setTimeout(() => {
- ElMessage.success(data.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛");
- router.back();
- isSubmitting.value = false;
- }, 1000);
+
+ // 鏋勫缓璇锋眰鍙傛暟
+ const order = orderList.value.find(item => item.id === form.orderId);
+ console.log(order, "order");
+ const submitParams = {
+ productOrderId: form.orderId,
+ productId: order ? order.productId : null,
+ postName: form.createBy,
+ schedule: form.teamName,
+ // reportingTime: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss"),
+ qualifiedQuantity: form.outputVolume - form.unqualifiedVolume,
+ unqualifiedQuantity: form.unqualifiedVolume,
+ quantity: form.outputVolume,
+ productionProductRouteItemDtoList: processList.value.map(process => {
+ const processInfo = getProcessInfo(process.processId);
+ const paramGroups = form.paramGroups[process.processId] || [];
+ const productionProductRouteItemParamDtoList = [];
+
+ // 娣诲姞鍙傛暟缁�
+ paramGroups.forEach((group, index) => {
+ Object.entries(group).forEach(([paramId, value]) => {
+ // 浠庡綋鍓嶅伐搴忕殑鍙傛暟鍒楄〃涓煡鎵惧弬鏁�
+ const processData = processList.value.find(
+ p => p.processId === process.processId
+ );
+ const param = processData
+ ? processData.orderRouteItemParaVos.find(
+ p => p.id === parseInt(paramId)
+ )
+ : null;
+ if (param) {
+ productionProductRouteItemParamDtoList.push({
+ id: parseInt(paramId),
+ standardValue: param.standardValue,
+ minValue: param.minValue,
+ maxValue: param.maxValue,
+ productId: param.productId,
+ productValue: value,
+ sourceSort: index + 1,
+ unit: param.unit,
+ isRequired: param.isRequired,
+ });
+ }
+ });
+ });
+
+ // 娣诲姞BOM淇℃伅
+ const structures = getProcessStructures(process.processId);
+ console.log(structures, "structures");
+ structures.forEach(structure => {
+ const consumableValue = getConsumableValue(
+ process.processId,
+ structure.id
+ );
+ if (consumableValue > 0) {
+ productionProductRouteItemParamDtoList.push({
+ productId: structure.productModelId,
+ bomId: structure.bomId,
+ id: null,
+ productValue: consumableValue,
+ unit: structure.unit,
+ });
+ }
+ });
+
+ return {
+ postName: processInfo.postName,
+ equipmentMalfunction: processInfo.equipmentMalfunction,
+ equipmentDisposal: processInfo.equipmentDisposal,
+ processExplained: processInfo.processExplained,
+ processId: process.processId,
+ productionProductRouteItemParamDtoList,
+ files: processInfo.files.map(file => file.tempId || file.uid),
+ };
+ }),
+ };
+ // 璋冪敤API杩涜鎻愪氦
+ productionRecordAddSubmit(submitParams)
+ .then(res => {
+ if (res.code === 200) {
+ ElMessage.success(data.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛");
+ router.back();
+ } else {
+ ElMessage.error(res.msg || "鎻愪氦澶辫触");
+ }
+ })
+ .catch(error => {
+ ElMessage.error("鎻愪氦澶辫触锛岃绋嶅悗閲嶈瘯");
+ console.error("鎻愪氦閿欒:", error);
+ })
+ .finally(() => {
+ isSubmitting.value = false;
+ });
}
});
};
@@ -1009,9 +1068,16 @@
}
// 鍒涘缓涓�涓柊鐨勫弬鏁扮粍锛屼娇鐢ㄩ粯璁ゅ��
const newGroup = {};
- params.value.forEach(param => {
- newGroup[param.id] = param.standardValue || "";
- });
+ // 浠庡綋鍓嶅伐搴忕殑鍙傛暟鍒楄〃涓幏鍙栧弬鏁颁俊鎭�
+ const process = processList.value.find(
+ p => p.processId === parseInt(processId)
+ );
+ if (process) {
+ const processParams = process.orderRouteItemParaVos || [];
+ processParams.forEach(param => {
+ newGroup[param.id] = param.standardValue || "";
+ });
+ }
form.paramGroups[processId].push(newGroup);
};
@@ -1269,13 +1335,6 @@
font-size: 14px;
color: #666;
white-space: nowrap;
- }
-
- /* 蹇呭~鏍囪瘑鏍峰紡 */
- .required-label::before {
- content: "*";
- color: #f56c6c;
- margin-right: 4px;
}
.form-grid {
--
Gitblit v1.9.3