From fda6d3c555fd317137a24e9a6c0d342eb50bfe57 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 21 四月 2026 09:33:38 +0800
Subject: [PATCH] 湟水峡 1.项目利润页面加上采购合同号字段。项目名称、增值税字段去掉 2.生产订单删掉404接口

---
 src/views/productionManagement/workOrder/index.vue |  244 ++++++++++++++++++++++++++++++------------------
 1 files changed, 150 insertions(+), 94 deletions(-)

diff --git a/src/views/productionManagement/workOrder/index.vue b/src/views/productionManagement/workOrder/index.vue
index 65acc32..97333a9 100644
--- a/src/views/productionManagement/workOrder/index.vue
+++ b/src/views/productionManagement/workOrder/index.vue
@@ -219,6 +219,47 @@
       </template>
     </el-dialog>
     <FilesDia ref="workOrderFilesRef" />
+		<el-dialog v-model="allocationDialogVisible"
+	             title="宸ュ崟鍒嗛厤"
+	             width="500px">
+			<el-form :model="allocationForm"
+		           :rules="allocationFormRules"
+		           ref="allocationFormRef"
+		           label-width="120px">
+				<el-form-item label="宸ュ崟缂栧彿">
+					<el-input v-model="allocationForm.workOrderNo"
+				            readonly
+				            disabled
+				            style="width: 300px" />
+				</el-form-item>
+				<el-form-item label="浜у搧鍚嶇О">
+					<el-input v-model="allocationForm.productName"
+				            readonly
+				            disabled
+				            style="width: 300px" />
+				</el-form-item>
+				<el-form-item label="鍒嗛厤浜哄憳" prop="userId">
+					<el-select v-model="allocationForm.userId"
+				             style="width: 300px"
+				             placeholder="璇烽�夋嫨鐝粍淇℃伅"
+				             clearable
+				             filterable
+				             @change="handleAllocationUserChange">
+						<el-option v-for="user in userOptions"
+					             :key="user.userId"
+					             :label="user.nickName"
+					             :value="user.userId" />
+					</el-select>
+				</el-form-item>
+			</el-form>
+			<template #footer>
+        <span class="dialog-footer">
+          <el-button type="primary"
+                     @click="handleAllocationSubmit">纭畾</el-button>
+          <el-button @click="allocationDialogVisible = false">鍙栨秷</el-button>
+        </span>
+			</template>
+		</el-dialog>
   </div>
 </template>
 
@@ -237,6 +278,8 @@
   import { getCurrentInstance, reactive, toRefs } from "vue";
   import FilesDia from "./components/filesDia.vue";
   const { proxy } = getCurrentInstance();
+
+  const allocationFormRef = ref(null);
 
   const tableColumn = ref([
     {
@@ -338,11 +381,25 @@
           clickFun: row => {
             showReportDialog(row);
           },
+          disabled: row => row.planQuantity <= 0 || !canReportByUser(row),
+        },
+        {
+          name: "鍒嗛厤",
+          clickFun: row => {
+            allocationDialog(row);
+          },
           disabled: row => row.planQuantity <= 0,
         },
       ],
     },
   ]);
+
+  // 璁$畻灞炴�э細寰呯敓浜ф暟閲� = 璁″垝 - 宸插畬鎴�
+  const waitProduceQuantity = computed(() => {
+    const plan = Number(currentReportRowData.value?.planQuantity) || 0;
+    const complete = Number(currentReportRowData.value?.completeQuantity) || 0;
+    return plan - complete;
+  });
   const tableData = ref([]);
   const tableLoading = ref(false);
   const qrCodeUrl = ref("");
@@ -353,13 +410,11 @@
   const transferCardQrUrl = ref("");
   const transferCardRowData = ref(null);
   const reportDialogVisible = ref(false);
-  const workOrderFilesRef = ref(null);
-  const reportFormRef = ref(null);
+  const allocationDialogVisible = ref(false);
   const userOptions = ref([]);
   const reportForm = reactive({
     planQuantity: 0,
-    quantity: null,
-    scrapQty: null,
+    quantity: 0,
     userName: "",
     workOrderId: "",
     reportWork: "",
@@ -367,97 +422,18 @@
     userId: "",
     productMainId: null,
   });
-
-  // 鏈鐢熶骇鏁伴噺楠岃瘉瑙勫垯
-  const validateQuantity = (rule, value, callback) => {
-    if (value === null || value === undefined || value === "") {
-      callback(new Error("璇疯緭鍏ユ湰娆$敓浜ф暟閲�"));
-      return;
-    }
-    const num = Number(value);
-    // 鏁存暟涓斿ぇ浜庣瓑浜�1
-    if (isNaN(num) || !Number.isInteger(num) || num < 1) {
-      callback(new Error("鏈鐢熶骇鏁伴噺蹇呴』澶т簬绛変簬1"));
-      return;
-    }
-    callback();
-  };
-
-  // 鎶ュ簾鏁伴噺楠岃瘉瑙勫垯
-  const validateScrapQty = (rule, value, callback) => {
-    if (value === null || value === undefined || value === "") {
-      callback();
-      return;
-    }
-    const num = Number(value);
-    // 鏁存暟涓斿ぇ浜庣瓑浜�0
-    if (isNaN(num) || !Number.isInteger(num) || num < 0) {
-      callback(new Error("鎶ュ簾鏁伴噺蹇呴』澶т簬绛変簬0"));
-      return;
-    }
-    callback();
-  };
-
-  // 楠岃瘉瑙勫垯
-  const reportFormRules = {
-    quantity: [{ required: true, validator: validateQuantity, trigger: "blur" }],
-    scrapQty: [{ validator: validateScrapQty, trigger: "blur" }],
-  };
-
-  // 澶勭悊鏈鐢熶骇鏁伴噺杈撳叆锛岄檺鍒跺繀椤诲ぇ浜庣瓑浜�1
-  const handleQuantityInput = value => {
-    if (value === "" || value === null || value === undefined) {
-      reportForm.quantity = null;
-      return;
-    }
-    const num = Number(value);
-    if (isNaN(num)) {
-      return;
-    }
-    // 濡傛灉灏忎簬1锛屾竻闄�
-    if (num < 1) {
-      reportForm.quantity = null;
-      return;
-    }
-    // 濡傛灉鏄皬鏁板彇鏁存暟閮ㄥ垎
-    if (!Number.isInteger(num)) {
-      const intValue = Math.floor(num);
-      // 濡傛灉鍙栨暣鍚庡皬浜�1锛屾竻闄�
-      if (intValue < 1) {
-        reportForm.quantity = null;
-        return;
-      }
-      reportForm.quantity = intValue;
-      return;
-    }
-    reportForm.quantity = num;
-  };
-
-  // 澶勭悊鎶ュ簾鏁伴噺
-  const handleScrapQtyInput = value => {
-    if (value === "" || value === null || value === undefined) {
-      reportForm.scrapQty = null;
-      return;
-    }
-    const num = Number(value);
-    // 濡傛灉鏄疦aN锛屼繚鎸佸師鍊�
-    if (isNaN(num)) {
-      return;
-    }
-    // 濡傛灉鏄礋鏁帮紝娓呴櫎杈撳叆
-    if (num < 0) {
-      reportForm.scrapQty = null;
-      return;
-    }
-    // 濡傛灉鏄皬鏁帮紝鍙栨暣鏁伴儴鍒�
-    if (!Number.isInteger(num)) {
-      reportForm.scrapQty = Math.floor(num);
-      return;
-    }
-    // 鏈夋晥鐨勯潪璐熸暣鏁帮紙鍖呮嫭0锛�
-    reportForm.scrapQty = num;
-  };
+  const allocationForm = reactive({
+    workOrderId: "",
+    workOrderNo: "",
+    productName: "",
+    currentReportWork: "",
+    nickName: "",
+    userId: "",
+  });
+  const currentAllocationRowData = ref(null);
   const currentReportRowData = ref(null);
+  const currentUserId = ref("");
+  const currentUserName = ref("");
   const page = reactive({
     current: 1,
     size: 100,
@@ -485,6 +461,12 @@
     return "#67c23a";
   };
   let editrow = ref(null);
+
+  const allocationFormRules = {
+    userId: [
+      { required: true, message: '璇烽�夋嫨鍒嗛厤浜哄憳', trigger: 'change' }
+    ]
+  }
 
   // 鏌ヨ鍒楄〃
   /** 鎼滅储鎸夐挳鎿嶄綔 */
@@ -594,7 +576,81 @@
       });
   };
 
+  // 鍒嗛厤鍔熻兘
+  const allocationDialog = row => {
+    currentAllocationRowData.value = row;
+    allocationForm.workOrderId = row.id;
+    allocationForm.workOrderNo = row.workOrderNo || "";
+    allocationForm.productName = row.productName || "";
+    allocationForm.currentReportWork = row.reportWork || "";
+    allocationForm.nickName =row.nickName || "";
+    allocationForm.userId =row.userId ||  "";
+    allocationDialogVisible.value = true;
+  };
+
+  const canReportByUser = row => {
+    if (!row || !row.userId) {
+      return true;
+    }
+    if (!currentUserId.value) {
+      return false;
+    }
+    return String(row.userId) === String(currentUserId.value);
+  };
+
+  const handleAllocationUserChange = userId => {
+    if (!userId) {
+      allocationForm.nickName = "";
+      return;
+    }
+    const selectedUser = userOptions.value.find(user => user.userId === userId);
+    allocationForm.nickName = selectedUser ? selectedUser.nickName : "";
+  };
+
+  const handleAllocationSubmit = async () => {
+    if (!allocationFormRef.value) {
+      return;
+    }
+    try {
+      await allocationFormRef.value.validate();
+    } catch {
+      return;
+    }
+    if (!currentAllocationRowData.value) {
+      return;
+    }
+    const payload = {
+      ...currentAllocationRowData.value,
+      id: allocationForm.workOrderId,
+      userId: allocationForm.userId,
+      nickName: allocationForm.nickName,
+    };
+    try {
+      await updateProductWorkOrder(payload);
+      proxy.$modal.msgSuccess("鍒嗛厤鎴愬姛");
+      allocationDialogVisible.value = false;
+      getList();
+    } catch (err) {
+      const apiMsg =
+        err?.response?.data?.msg ||
+        err?.msg ||
+        (err?.userId && Array.isArray(err.userId)
+          ? (err.userId[0]?.message || err.userId[0] || "")
+          : "");
+      ElMessageBox.alert(apiMsg || "鍒嗛厤澶辫触", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+      });
+    }
+  };
+
+
   const showReportDialog = row => {
+    if (!canReportByUser(row)) {
+      ElMessageBox.alert("璇ュ伐鍗曞凡鍒嗛厤缁欏叾浠栫彮缁勶紝褰撳墠鐢ㄦ埛鏃犳姤宸ユ潈闄�", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+      });
+      return;
+    }
     currentReportRowData.value = row;
 		reportForm.planQuantity = row.planQuantity - row.completeQuantity;
     reportForm.quantity =

--
Gitblit v1.9.3