From 70703e0fa04092997db53846d2cd2367f5997284 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期五, 20 三月 2026 17:55:32 +0800
Subject: [PATCH] 生产报工页面更改
---
src/views/productionManagement/productionReporting/components/ReportingDialog.vue | 367 ++++++++++++++++++++++++----------------------------
1 files changed, 171 insertions(+), 196 deletions(-)
diff --git a/src/views/productionManagement/productionReporting/components/ReportingDialog.vue b/src/views/productionManagement/productionReporting/components/ReportingDialog.vue
index 9016880..8eff508 100644
--- a/src/views/productionManagement/productionReporting/components/ReportingDialog.vue
+++ b/src/views/productionManagement/productionReporting/components/ReportingDialog.vue
@@ -5,8 +5,7 @@
@close="handleClose">
<!-- 姝ラ鏉� -->
<el-steps :active="activeStep"
- finish-status="success"
- v-if="!props.data.id">
+ finish-status="success">
<el-step title="閫夋嫨鐢熶骇璁㈠崟" />
<el-step title="濉啓鍩虹淇℃伅" />
<el-step title="鏌ョ湅宸ュ簭鍙傛暟" />
@@ -98,42 +97,98 @@
:key="process.id"
:label="process.processName"
:name="process.id + ''">
- <el-form :model="form"
- ref="formRef"
- label-width="120px">
- <!-- 鍔ㄦ�佸弬鏁� -->
- <el-form-item v-for="param in params"
- :key="param.id"
- :label="param.paramName">
- <template v-if="param.paramType == '1'">
- <!-- 鏁板瓧绫诲瀷 -->
- <el-input v-model="form.params[param.id]" />
- </template>
- <template v-else-if="param.paramType == '2'">
- <!-- 鏂囨湰绫诲瀷 -->
- <el-input v-model="form.params[param.id]" />
- </template>
- <template v-else-if="param.paramType == '3'">
- <!-- 瀛楀吀绫诲瀷 -->
- <el-select v-model="form.params[param.id]"
- placeholder="璇烽�夋嫨"
- style="width: 100%">
- <el-option v-for="option in dictOptions[param.paramFormat] || []"
- :key="option.dictValue"
- :label="option.dictLabel"
- :value="option.dictValue" />
- </el-select>
- </template>
- <template v-else-if="param.paramType == '4'">
- <!-- 鏃ユ湡绫诲瀷 -->
- <el-date-picker v-model="form.params[param.id]" />
- </template>
- <template v-else>
- <!-- 鍏朵粬绫诲瀷 -->
- <el-input v-model="form.params[param.id]" />
- </template>
- </el-form-item>
- </el-form>
+ <div>
+ <!-- 鍙傛暟缁勫垪琛� -->
+ <div v-for="(group, groupIndex) in form.paramGroups[process.id] || []"
+ :key="groupIndex"
+ class="param-group">
+ <div class="group-header">
+ <span>鍙傛暟缁� {{ groupIndex + 1 }}</span>
+ <el-button type="danger"
+ size="small"
+ @click="removeParamGroup(process.id, groupIndex)"
+ v-if="(form.paramGroups[process.id] || []).length > 1">
+ 鍒犻櫎
+ </el-button>
+ </div>
+ <el-form :model="form"
+ ref="formRef"
+ label-width="120px">
+ <!-- 鍔ㄦ�佸弬鏁� -->
+ <el-form-item v-for="param in params"
+ :key="param.id"
+ :label="param.paramName">
+ <template v-if="param.paramType == '1'">
+ <!-- 鏁板瓧绫诲瀷 -->
+ <div style="display: flex; align-items: center; gap: 8px;">
+ <el-input-number v-model="group[param.id]"
+ controls-position="right"
+ :precision="getPrecision(param.paramFormat)"
+ style="flex: 1" />
+ <span v-if="param.unit && param.unit != '/'">
+ {{ param.unit }}
+ </span>
+ </div>
+ </template>
+ <template v-else-if="param.paramType == '2'">
+ <!-- 鏂囨湰绫诲瀷 -->
+ <div style="display: flex; align-items: center; gap: 8px;">
+ <el-input v-model="group[param.id]"
+ style="flex: 1" />
+ <span v-if="param.unit && param.unit != '/'">
+ {{ param.unit }}
+ </span>
+ </div>
+ </template>
+ <template v-else-if="param.paramType == '3'">
+ <!-- 瀛楀吀绫诲瀷 -->
+ <div style="display: flex; align-items: center; gap: 8px;">
+ <el-select v-model="group[param.id]"
+ placeholder="璇烽�夋嫨"
+ style="flex: 1;width: 150px">
+ <el-option v-for="option in dictOptions[param.paramFormat] || []"
+ :key="option.dictValue"
+ :label="option.dictLabel"
+ :value="option.dictValue" />
+ </el-select>
+ <span v-if="param.unit && param.unit != '/'">
+ {{ param.unit }}
+ </span>
+ </div>
+ </template>
+ <template v-else-if="param.paramType == '4'">
+ <!-- 鏃ユ湡绫诲瀷 -->
+ <div style="display: flex; align-items: center; gap: 8px;">
+ <el-date-picker :value-format="param.paramFormat"
+ :format="param.paramFormat"
+ :type="param.paramFormat=='YYYY-MM-DD'?'daterange':'datetimerange'"
+ v-model="group[param.id]"
+ style="flex: 1" />
+ <span v-if="param.unit && param.unit != '/'">
+ {{ param.unit }}
+ </span>
+ </div>
+ </template>
+ <template v-else>
+ <!-- 鍏朵粬绫诲瀷 -->
+ <div style="display: flex; align-items: center; gap: 8px;">
+ <el-input v-model="group[param.id]"
+ style="flex: 1" />
+ <span v-if="param.unit && param.unit != '/'">
+ {{ param.unit }}
+ </span>
+ </div>
+ </template>
+ </el-form-item>
+ </el-form>
+ </div>
+ <!-- 鏂板鍙傛暟缁勬寜閽� -->
+ <el-button type="primary"
+ size="small"
+ @click="addParamGroup(process.id)">
+ 鏂板鍙傛暟缁�
+ </el-button>
+ </div>
</el-tab-pane>
</el-tabs>
</div>
@@ -169,135 +224,6 @@
</el-form-item>
</el-form>
</div>
- <!-- 缂栬緫妯″紡锛氱洿鎺ユ樉绀烘墍鏈変俊鎭� -->
- <div v-if="props.data.id">
- <el-form :model="form"
- :rules="rules"
- ref="formRef"
- label-width="120px">
- <el-form-item label="鐢熶骇璁㈠崟鍙�"
- prop="npsNo"
- disabled>
- <el-input v-model="form.npsNo" />
- </el-form-item>
- <el-form-item label="鐝粍"
- prop="teamName">
- <el-select v-model="form.teamName"
- placeholder="璇烽�夋嫨鐝粍"
- style="width: 100%">
- <el-option label="鐧界彮"
- value="鐧界彮" />
- <el-option label="澶滅彮"
- value="澶滅彮" />
- </el-select>
- </el-form-item>
- <el-form-item label="浜у搧缂栫爜"
- prop="materialCode"
- disabled>
- <el-input v-model="form.materialCode" />
- </el-form-item>
- <el-form-item label="浜у搧鍚嶇О"
- prop="productName"
- disabled>
- <el-input v-model="form.productName" />
- </el-form-item>
- <el-form-item label="瑙勬牸"
- prop="specification"
- disabled>
- <el-input v-model="form.specification" />
- </el-form-item>
- <el-form-item label="鍒涘缓浜�"
- prop="createBy">
- <el-input v-model="form.createBy"
- placeholder="璇疯緭鍏ュ垱寤轰汉" />
- </el-form-item>
- <el-form-item label="鍒涘缓鏃堕棿"
- prop="createTime"
- disabled>
- <el-date-picker v-model="form.createTime"
- type="datetime"
- placeholder="璇烽�夋嫨鍒涘缓鏃堕棿"
- style="width: 100%" />
- </el-form-item>
- <el-form-item label="浜у嚭鏂归噺"
- prop="outputVolume">
- <el-input-number v-model="form.outputVolume"
- :min="0"
- :precision="2"
- style="width: 100%" />
- </el-form-item>
- <el-form-item label="涓嶅悎鏍兼柟閲�"
- prop="unqualifiedVolume">
- <el-input-number v-model="form.unqualifiedVolume"
- :min="0"
- :precision="2"
- style="width: 100%" />
- </el-form-item>
- <el-form-item label="瀹屾垚鏂归噺"
- prop="completedVolume">
- <el-input-number v-model="form.completedVolume"
- :min="0"
- :precision="2"
- style="width: 100%" />
- </el-form-item>
- </el-form>
- <!-- 宸ュ簭Tab椤� -->
- <el-tabs v-model="activeProcessId"
- @tab-click="handleTabClick">
- <el-tab-pane v-for="process in processList"
- :key="process.id"
- :label="process.processName"
- :name="process.id + ''">
- <el-form :model="form"
- :rules="rules"
- ref="formRef"
- label-width="120px">
- <!-- 鍔ㄦ�佸弬鏁� -->
- <el-form-item v-for="param in params"
- :key="param.id"
- :label="param.paramName"
- :prop="`params.${param.id}`"
- :rules="param.isRequired ? [{ required: true, message: `璇疯緭鍏�${param.paramName}`, trigger: 'blur' }] : []">
- <template v-if="param.paramType == '1'">
- <!-- 鏁板瓧绫诲瀷 -->
- <el-input-number v-model="form.params[param.id]"
- :min="0"
- :precision="getPrecision(param.paramFormat)"
- style="width: 100%" />
- </template>
- <template v-else-if="param.paramType == '2'">
- <!-- 鏂囨湰绫诲瀷 -->
- <el-input v-model="form.params[param.id]"
- :placeholder="`璇疯緭鍏�${param.paramName}`" />
- </template>
- <template v-else-if="param.paramType == '3'">
- <!-- 瀛楀吀绫诲瀷 -->
- <el-select v-model="form.params[param.id]"
- placeholder="璇烽�夋嫨"
- style="width: 100%">
- <el-option v-for="option in dictOptions[param.paramFormat] || []"
- :key="option.dictValue"
- :label="option.dictLabel"
- :value="option.dictValue" />
- </el-select>
- </template>
- <template v-else-if="param.paramType == '4'">
- <!-- 鏃ユ湡绫诲瀷 -->
- <el-date-picker v-model="form.params[param.id]"
- type="datetime"
- placeholder="璇烽�夋嫨鏃ユ湡鏃堕棿"
- style="width: 100%" />
- </template>
- <template v-else>
- <!-- 鍏朵粬绫诲瀷 -->
- <el-input v-model="form.params[param.id]"
- :placeholder="`璇疯緭鍏�${param.paramName}`" />
- </template>
- </el-form-item>
- </el-form>
- </el-tab-pane>
- </el-tabs>
- </div>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose">鍙� 娑�</el-button>
@@ -305,10 +231,10 @@
v-if="activeStep > 0"
@click="activeStep--">涓婁竴姝�</el-button>
<el-button type="primary"
- v-if="activeStep < 3 && !props.data.id"
+ v-if="activeStep < 3"
@click="handleNextStep">涓嬩竴姝�</el-button>
<el-button type="primary"
- v-if="activeStep === 3 || props.data.id"
+ v-if="activeStep === 3"
:loading="submitLoading"
@click="handleSubmit">纭� 璁�</el-button>
</span>
@@ -369,7 +295,7 @@
completedVolume: props.data.completedVolume || 0,
createBy: props.data.createBy || "褰撳墠鐧诲綍浜�",
createTime: props.data.createTime || new Date(),
- params: props.data.params || {},
+ paramGroups: props.data.paramGroups || {}, // 瀛樺偍姣忎釜宸ュ簭鐨勫弬鏁扮粍
});
const rules = {
@@ -478,15 +404,21 @@
findProcessParamListOrder({ orderId, routeItemId: processId }).then(
async res => {
params.value = res.data || [];
- // 鍒濆鍖栧弬鏁板�煎苟鑾峰彇瀛楀吀鏁版嵁
- for (const param of params.value) {
- if (!form.params[param.id]) {
- form.params[param.id] = param.standardValue || "";
+ // 鍒濆鍖栧弬鏁扮粍
+ if (!form.paramGroups[processId]) {
+ form.paramGroups[processId] = [];
+ }
+ // 濡傛灉娌℃湁鍙傛暟缁勶紝娣诲姞涓�涓粯璁ゅ弬鏁扮粍
+ if (form.paramGroups[processId].length === 0) {
+ const defaultGroup = {};
+ for (const param of params.value) {
+ defaultGroup[param.id] = param.standardValue || "";
+ // 濡傛灉鏄瓧鍏哥被鍨嬪弬鏁帮紝鑾峰彇瀛楀吀鏁版嵁
+ if (param.paramType == "3" && param.paramFormat) {
+ await getDictOptions(param.paramFormat);
+ }
}
- // 濡傛灉鏄瓧鍏哥被鍨嬪弬鏁帮紝鑾峰彇瀛楀吀鏁版嵁
- if (param.paramType == "3" && param.paramFormat) {
- await getDictOptions(param.paramFormat);
- }
+ form.paramGroups[processId].push(defaultGroup);
}
}
);
@@ -564,29 +496,50 @@
localVisible.value = false;
};
+ // 鏂板鍙傛暟缁�
+ const addParamGroup = processId => {
+ if (!form.paramGroups[processId]) {
+ form.paramGroups[processId] = [];
+ }
+ // 鍒涘缓涓�涓柊鐨勫弬鏁扮粍锛屼娇鐢ㄩ粯璁ゅ��
+ const newGroup = {};
+ params.value.forEach(param => {
+ newGroup[param.id] = param.standardValue || "";
+ });
+ form.paramGroups[processId].push(newGroup);
+ };
+
+ // 鍒犻櫎鍙傛暟缁�
+ const removeParamGroup = (processId, index) => {
+ if (form.paramGroups[processId] && form.paramGroups[processId].length > 1) {
+ form.paramGroups[processId].splice(index, 1);
+ }
+ };
+
// 鍒濆鍖�
const init = () => {
- if (!props.data.id) {
- // 鏂板鏃跺姞杞借鍗曞垪琛�
- loadOrders();
- // 璁剧疆榛樿鍒涘缓浜哄拰鍒涘缓鏃堕棿
+ // 鏃犺鏂板杩樻槸缂栬緫锛岄兘鍔犺浇璁㈠崟鍒楄〃
+ loadOrders();
+
+ if (props.data.id) {
+ // 缂栬緫鏃惰缃〃鍗曟暟鎹�
+ Object.assign(form, props.data);
+ // 璁剧疆orderId
+ orderId.value = props.data.orderId || "";
+ // 濡傛灉鏈夎鍗旾D锛屽姞杞藉伐搴忓拰鍙傛暟
+ if (props.data.orderId) {
+ // 妯℃嫙閫夋嫨璁㈠崟鐨勬搷浣滐紝瑙﹀彂鏁版嵁鍔犺浇
+ setTimeout(() => {
+ handleOrderChange(props.data.orderId);
+ }, 100);
+ }
+ } else {
+ // 鏂板鏃惰缃粯璁ゅ��
form.createBy = "褰撳墠鐧诲綍浜�";
form.createTime = new Date();
- } else {
- // 缂栬緫鏃跺姞杞界浉鍏虫暟鎹�
- if (props.data.orderId) {
- orderId.value = props.data.orderId;
- if (props.data.processId) {
- processId.value = props.data.processId;
- activeProcessId.value = props.data.processId + "";
- loadParams(props.data.processId, props.data.orderId);
- } else {
- loadProcesses(props.data.orderId);
- }
- } else {
- loadOrders();
- }
}
+ // 濮嬬粓浠庣涓�姝ュ紑濮�
+ activeStep.value = 0;
};
// 鐩戝惉props.visible鍙樺寲
@@ -610,4 +563,26 @@
.dialog-footer {
text-align: right;
}
+
+ .param-group {
+ border: 1px solid #e4e7ed;
+ border-radius: 4px;
+ padding: 16px;
+ margin-bottom: 16px;
+ background-color: #f9f9f9;
+ }
+
+ .group-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 16px;
+ padding-bottom: 8px;
+ border-bottom: 1px solid #e4e7ed;
+ }
+
+ .group-header span {
+ font-weight: bold;
+ font-size: 14px;
+ }
</style>
\ No newline at end of file
--
Gitblit v1.9.3