From fedb183d1123ecceed5d0237f44b7df9a8f5700e Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期三, 18 三月 2026 17:05:40 +0800
Subject: [PATCH] 能耗成本核算
---
src/views/productionPlan/productionPlan/index.vue | 126 +++++++++++++++++++++++++++++++++++++++---
1 files changed, 117 insertions(+), 9 deletions(-)
diff --git a/src/views/productionPlan/productionPlan/index.vue b/src/views/productionPlan/productionPlan/index.vue
index d2a3efd..649d991 100644
--- a/src/views/productionPlan/productionPlan/index.vue
+++ b/src/views/productionPlan/productionPlan/index.vue
@@ -48,6 +48,20 @@
style="width: 240px;"
@change="handleQuery" />
</el-form-item>
+ <el-form-item label="涓嬪彂鐘舵��:">
+ <el-select v-model="searchForm.status"
+ placeholder="璇烽�夋嫨鐘舵��"
+ clearable
+ filterable
+ style="width: 100px">
+ <el-option label="寰呬笅鍙�"
+ value="0" />
+ <el-option label="閮ㄥ垎涓嬪彂"
+ value="1" />
+ <el-option label="宸蹭笅鍙�"
+ value="2" />
+ </el-select>
+ </el-form-item>
<el-form-item>
<el-button type="primary"
@click="handleQuery">鎼滅储</el-button>
@@ -116,6 +130,21 @@
type="date"
value-format="YYYY-MM-DD"
style="width: 100%" />
+ </el-form-item>
+ <el-form-item label="寮哄害"
+ v-if="mergeForm.productName === '鐮屽潡'">
+ <div v-if="strengthError"
+ class="strength-error"
+ style="color: red; margin-bottom: 8px;">{{ strengthError }}</div>
+ <el-select v-model="mergeForm.strength"
+ placeholder="璇烽�夋嫨寮哄害"
+ style="width: 100%"
+ required>
+ <el-option v-for="item in block_strength"
+ :key="item.id"
+ :label="item.label"
+ :value="item.id" />
+ </el-select>
</el-form-item>
<el-form-item label="鐢熶骇鏂规暟">
<el-input-number v-model="mergeForm.totalAssignedQuantity"
@@ -301,14 +330,15 @@
placeholder="璇烽�夋嫨璁″垝缁撴潫鏃ユ湡" />
</el-form-item>
<el-form-item label="寮哄害"
- prop="strength">
+ prop="strength"
+ v-if="form.productName === '鐮屽潡'">
<el-select v-model="form.strength"
placeholder="璇烽�夋嫨寮哄害"
style="width: 100%">
- <el-option label="A3.5"
- value="A3.5" />
- <el-option label="A5.0"
- value="A5.0" />
+ <el-option v-for="item in block_strength"
+ :key="item.id"
+ :label="item.label"
+ :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="澶囨敞 1"
@@ -334,11 +364,12 @@
</template>
<script setup>
- import { onMounted, ref, reactive, getCurrentInstance } from "vue";
+ import { onMounted, ref, reactive, getCurrentInstance, toRefs } from "vue";
import { ElMessage } from "element-plus";
import dayjs from "dayjs";
import ImportDialog from "@/components/Dialog/ImportDialog.vue";
import { getToken } from "@/utils/auth";
+ import { useDict } from "@/utils/dict";
import {
productionPlanListPage,
loadProdData,
@@ -490,6 +521,11 @@
{
label: "寮哄害",
prop: "strength",
+ formatData: cell => {
+ if (!cell) return "";
+ const strengthItem = block_strength.value.find(item => item.id === cell);
+ return strengthItem ? strengthItem.label : cell;
+ },
},
{
@@ -546,6 +582,7 @@
clickFun: row => {
// 鍗曠嫭涓嬪彂鎿嶄綔
// 璁剧疆琛ㄥ崟鏁版嵁
+ strengthError.value = "";
mergeForm.ids = [row.id];
mergeForm.materialCode = row.materialCode;
mergeForm.productName = row.productName || "";
@@ -556,6 +593,7 @@
mergeForm.totalAssignedQuantity =
(Number(row.volume) - Number(row.assignedQuantity)).toFixed(4) || 0;
mergeForm.planCompleteTime = row.planCompleteTime || "";
+ mergeForm.strength = row.strength || "";
sumAssignedQuantity.value = mergeForm.totalAssignedQuantity;
// 鎵撳紑寮圭獥
isShowNewModal.value = true;
@@ -597,6 +635,7 @@
height: 0,
totalAssignedQuantity: 0,
planCompleteTime: "",
+ strength: "",
});
// 杩借釜杩涘害寮圭獥鎺у埗
@@ -625,6 +664,8 @@
const productOptions = ref([]);
const specificationOptions = ref([]);
const formRef = ref(null);
+ // 鑾峰彇寮哄害瀛楀吀
+ const { block_strength } = useDict("block_strength");
const form = reactive({
id: undefined,
applyNo: "",
@@ -641,6 +682,7 @@
height: 0,
startDate: "",
endDate: "",
+ status: "",
strength: "",
remarkOne: "",
remarkTwo: "",
@@ -656,6 +698,19 @@
volume: [{ required: true, message: "璇疯緭鍏ユ柟鏁�", trigger: "blur" }],
productMaterialId: [
{ required: true, message: "璇烽�夋嫨浜у搧", trigger: "change" },
+ ],
+ strength: [
+ {
+ validator: (rule, value, callback) => {
+ if (form.productName === "鐮屽潡" && !value) {
+ callback(new Error("鐮屽潡浜у搧鐨勫己搴︿负蹇呭~椤�"));
+ } else {
+ callback();
+ }
+ },
+ trigger: ["blur", "change"],
+ required: false,
+ },
],
});
@@ -709,6 +764,26 @@
const handleProductChange = value => {
form.productMaterialSkuId = undefined;
+ // 鏌ユ壘閫変腑鐨勪骇鍝佸悕绉�
+ const findProductName = (options, value) => {
+ for (const option of options) {
+ if (option.value === value) {
+ return option.label;
+ }
+ if (option.children) {
+ const found = findProductName(option.children, value);
+ if (found) {
+ return found;
+ }
+ }
+ }
+ return "";
+ };
+ form.productName = findProductName(productOptions.value, value);
+ // 瑙﹀彂寮哄害瀛楁楠岃瘉
+ if (formRef.value) {
+ formRef.value.validateField("strength");
+ }
fetchSpecificationOptions(value);
};
@@ -931,6 +1006,9 @@
.catch(() => {});
};
const sumAssignedQuantity = ref(0);
+ // 鍝嶅簲寮忔暟鎹�
+ const strengthError = ref("");
+
// 澶勭悊鍚堝苟涓嬪彂鎸夐挳鐐瑰嚮
const handleMerge = () => {
if (selectedRows.value.length === 0) {
@@ -938,6 +1016,26 @@
return;
}
console.log(selectedRows.value);
+ // 妫�鏌ュ己搴︿竴鑷存��
+ const firstRow = selectedRows.value[0];
+ const productName = firstRow.productName || "";
+ let strengthConsistent = true;
+ let firstStrength = firstRow.strength || "";
+ strengthError.value = "";
+
+ if (productName === "鐮屽潡") {
+ for (const row of selectedRows.value) {
+ if (row.strength !== firstStrength) {
+ strengthConsistent = false;
+ break;
+ }
+ }
+
+ if (!strengthConsistent) {
+ strengthError.value = "閫夋嫨鐨勭爩鍧楀己搴︿笉涓�鑷达紝璇烽噸鏂伴�夋嫨";
+ }
+ }
+
// 璁$畻鎬诲埗閫犳暟閲�
const totalAssignedQuantity = selectedRows.value.reduce((sum, row) => {
return (
@@ -950,15 +1048,15 @@
sumAssignedQuantity.value = totalAssignedQuantity;
console.log(totalAssignedQuantity);
// 璁剧疆琛ㄥ崟鏁版嵁
- const firstRow = selectedRows.value[0];
mergeForm.materialCode = selectedserialNo.value;
- mergeForm.productName = firstRow.productName || "";
+ mergeForm.productName = productName;
mergeForm.model = firstRow.model || "";
mergeForm.length = firstRow.length || 0;
mergeForm.width = firstRow.width || 0;
mergeForm.height = firstRow.height || 0;
mergeForm.totalAssignedQuantity = totalAssignedQuantity;
mergeForm.planCompleteTime = firstRow.planCompleteTime || "";
+ mergeForm.strength = firstStrength;
mergeForm.ids = selectedRows.value.map(row => row.id);
// 鎵撳紑寮圭獥
@@ -969,6 +1067,11 @@
const handleMergeSubmit = () => {
if (mergeForm.totalAssignedQuantity === 0) {
ElMessage.warning("璇疯緭鍏ョ敓浜ф柟鏁�");
+ return;
+ }
+ // 楠岃瘉鐮屽潡浜у搧鐨勫己搴�
+ if (mergeForm.productName === "鐮屽潡" && !mergeForm.strength) {
+ ElMessage.error("鐮屽潡浜у搧鐨勫己搴︿负蹇呭~椤�");
return;
}
console.log(sumAssignedQuantity.value, "sumAssignedQuantity");
@@ -984,7 +1087,12 @@
}
console.log(mergeForm, "mergeForm");
- productionPlanCombine(mergeForm)
+ const strengthItem = block_strength.value.find(item => item.id === mergeForm.strength);
+ const payload = {
+ ...mergeForm,
+ strength: strengthItem ? strengthItem.label : mergeForm.strength
+ };
+ productionPlanCombine(payload)
.then(res => {
if (res.code === 200) {
ElMessage.success("涓嬪彂鎴愬姛");
--
Gitblit v1.9.3