From c6d13e58d85fbaaceb49d4c24401b50143050173 Mon Sep 17 00:00:00 2001
From: zhang_12370 <z2864490065@outlook.com>
Date: 星期四, 26 六月 2025 18:01:24 +0800
Subject: [PATCH] 调整 基础管理煤种生产人 更改采购数计算逻辑 处理供应商数据回显问题

---
 src/views/basicInformation/index.vue                  |    4 
 src/views/procureMent/index.vue                       |    2 
 src/views/procureMent/components/ProductionDialog.vue |  141 +++++++++++++++--------------------
 src/views/basicInformation/mould/coal.vue             |   31 -------
 src/api/tool/publicInterface.js                       |    2 
 src/views/production/index.vue                        |    2 
 src/components/Table/ETable.vue                       |    4 
 src/views/production/components/ProductionDialog.vue  |   20 ++--
 8 files changed, 81 insertions(+), 125 deletions(-)

diff --git a/src/api/tool/publicInterface.js b/src/api/tool/publicInterface.js
index 0de140d..8af0f82 100644
--- a/src/api/tool/publicInterface.js
+++ b/src/api/tool/publicInterface.js
@@ -3,7 +3,7 @@
 // 鑾峰彇璺敱
 export const testUserList = () => {
   return request({
-    url: '/test/user/list',
+    url: '/system/user/listAll',
     method: 'get'
   })
 }
\ No newline at end of file
diff --git a/src/components/Table/ETable.vue b/src/components/Table/ETable.vue
index 66ca0b9..1f8fdfb 100644
--- a/src/components/Table/ETable.vue
+++ b/src/components/Table/ETable.vue
@@ -17,8 +17,8 @@
     :row-key="rowKey"
     style="width: 100%;"
   >
-    <el-table-column v-if="showSelection" type="selection" width="55" align="center" />
-    <el-table-column v-if="showIndex" label="搴忓彿" width="60" align="center" fixed="left">
+    <el-table-column v-if="showSelection" type="selection" width="55" align="center" :show-overflow-tooltip="false" />
+    <el-table-column v-if="showIndex" label="搴忓彿" width="60" align="center" fixed="left" :show-overflow-tooltip="false">
       <template #default="scope">
         {{ getRowIndex(scope.$index) }}
       </template>
diff --git a/src/views/basicInformation/index.vue b/src/views/basicInformation/index.vue
index 907d60d..26dc9b9 100644
--- a/src/views/basicInformation/index.vue
+++ b/src/views/basicInformation/index.vue
@@ -310,10 +310,12 @@
 const getUserList = async () => {
   try {
     const res = await testUserList();
+    console.log("鑾峰彇鐢ㄦ埛鍒楄〃鏁版嵁:", res);
+    console.log("userMap:", userMap.value);
     if (res && res.data) {
       userList.value = res.data;
       userList.value.forEach((user) => {
-        userMap.value[user.userId] = user.username;
+        userMap.value[user.userId] = user.nickName;
       });
     }
   } catch (error) {
diff --git a/src/views/basicInformation/mould/coal.vue b/src/views/basicInformation/mould/coal.vue
index 1063da0..5702bca 100644
--- a/src/views/basicInformation/mould/coal.vue
+++ b/src/views/basicInformation/mould/coal.vue
@@ -23,7 +23,7 @@
         </el-form-item>
         <el-form-item label="缁存姢浜哄鍚�" prop="maintainerId">
           <el-input
-              :value="userStore.name || ''"
+              :value="userStore.nickName || ''"
               placeholder="缁存姢浜哄鍚�"
               disabled
           />
@@ -79,26 +79,6 @@
   required: true,
   type: Object,
 });
-// 鍦ㄧ粍浠舵寕杞芥椂鑾峰彇鐢ㄦ埛淇℃伅
-onMounted(async () => {
-  // 濡傛灉store涓病鏈夌敤鎴蜂俊鎭紝鍒欒幏鍙栫敤鎴蜂俊鎭�
-  if (!userStore.name) {
-    try {
-      await userStore.getInfo()
-      // 鑷姩濉厖缁存姢浜篒D
-      if (props.addOrEdit === 'add') {
-        formData.value.maintainerId = userStore.id
-      }
-    } catch (error) {
-      console.error('鑾峰彇鐢ㄦ埛淇℃伅澶辫触:', error)
-    }
-  } else {
-    // 鑷姩濉厖缁存姢浜篒D
-    if (props.addOrEdit === 'add') {
-      formData.value.maintainerId = userStore.id
-    }
-  }
-})
 
 const emit = defineEmits(['submit', 'handleBeforeClose', 'update:coalDialogFormVisible'])
 // 琛ㄥ崟寮曠敤
@@ -127,7 +107,6 @@
   if (!formRef.value) return
   await formRef.value.validate(async (valid, fields) => {
     if (valid) {
-      delete formData.value.maintainerName // 鍒犻櫎鏄剧ず鐢ㄧ殑瀛楁锛屽彧淇濈暀ID
 
       // 纭繚maintainerId鏈夊��
       if (!formData.value.maintainerId) {
@@ -166,12 +145,8 @@
   emit('update:coalDialogFormVisible', false)
 }
 const rules = reactive({
-  supplierName: [
-    {required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur"},
-  ],
-  identifyNumber: [
-    {required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur"},
-    {min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur"},
+  coal: [
+    {required: true, message: "璇疯緭鍏ョ叅绉嶅悕绉�", trigger: "blur"},
   ],
 });
 
diff --git a/src/views/procureMent/components/ProductionDialog.vue b/src/views/procureMent/components/ProductionDialog.vue
index 014bf2a..3fc0c99 100644
--- a/src/views/procureMent/components/ProductionDialog.vue
+++ b/src/views/procureMent/components/ProductionDialog.vue
@@ -50,10 +50,10 @@
             </template>
           </el-input>
         </el-form-item>
-        <el-form-item label="鍗曚环(涓嶅惈绋�)" prop="priceExcludingTax">
+        <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax">
           <el-input
-              v-model.number="form.priceExcludingTax"
-              placeholder="璇疯緭鍏�"
+              v-model.number="form.priceIncludingTax"
+              placeholder="璇疯緭鍏ュ惈绋庡崟浠�"
               @blur="handlePriceBlur"
               :disabled="isViewMode"
           >
@@ -62,9 +62,9 @@
             </template>
           </el-input>
         </el-form-item>
-        <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax">
+        <el-form-item label="鍗曚环(涓嶅惈绋�)" prop="priceExcludingTax">
           <el-input
-              v-model.number="form.priceIncludingTax"
+              v-model.number="form.priceExcludingTax"
               placeholder="鑷姩璁$畻"
               disabled
           >
@@ -180,116 +180,95 @@
 defineExpose({
   getDropdownData,
 });
+// 鏁板�兼牸寮忓寲宸ュ叿鍑芥暟
 const toFixed = (num, precision = 2) => {
   if (isNaN(num) || num === null || num === undefined || num === "") {
     return 0;
   }
-  return (
-      Math.floor(parseFloat(num) * Math.pow(10, precision)) /
-      Math.pow(10, precision)
-  );
+  return Number((Math.floor(parseFloat(num) * Math.pow(10, precision)) / Math.pow(10, precision)).toFixed(precision));
 };
-// 鍚◣鍗曚环璁$畻
-const unitPriceWithTax = computed(() => {
-  const priceExcludingTax = parseFloat(form.value.priceExcludingTax) || 0;
-  const taxRate = parseFloat(form.value.taxRate) || 0;
-  if (!priceExcludingTax || !taxRate) {
-    return 0;
-  }
-  const result = priceExcludingTax * (1 + taxRate / 100);
-  return toFixed(result, 2);
-});
 
-// 鍚◣鎬讳环璁$畻
-const totalUnitPriceWithTax = computed(() => {
-  const priceExcludingTax = parseFloat(form.value.priceExcludingTax) || 0;
-  const taxRate = parseFloat(form.value.taxRate) || 0;
-  const purchaseQuantity = parseFloat(form.value.purchaseQuantity) || 0;
+// 瀹夊叏鑾峰彇鏁板��
+const safeNumber = (value) => {
+  const num = parseFloat(value);
+  return isNaN(num) ? 0 : num;
+};
 
-  if (!priceExcludingTax || !taxRate || !purchaseQuantity) {
-    return 0;
-  }
+// 璁$畻閫昏緫 - 鍩轰簬鍚◣鍗曚环璁$畻涓嶅惈绋庝环鏍�
+const calculatePrices = () => {
+  const priceIncludingTax = safeNumber(form.value.priceIncludingTax); // 鍚◣鍗曚环
+  const taxRate = safeNumber(form.value.taxRate); // 绋庣巼
+  const quantity = safeNumber(form.value.purchaseQuantity); // 閲囪喘鏁伴噺
 
-  const unitPriceWithTaxValue = priceExcludingTax * (1 + taxRate / 100);
-  const result = unitPriceWithTaxValue * purchaseQuantity;
-  return toFixed(result, 2);
-});
+  // 1. 鏍规嵁鍚◣鍗曚环鍜岀◣鐜囪绠椾笉鍚◣鍗曚环
+  // 涓嶅惈绋庡崟浠� = 鍚◣鍗曚环 / (1 + 绋庣巼/100)
+  const priceExcludingTax = priceIncludingTax && taxRate 
+    ? toFixed(priceIncludingTax / (1 + taxRate / 100), 2)
+    : 0;
 
-// 涓嶅惈绋庢�讳环璁$畻
-const taxExclusiveTotalPrice = computed(() => {
-  const purchaseQuantity = parseFloat(form.value.purchaseQuantity) || 0;
-  const priceExcludingTax = parseFloat(form.value.priceExcludingTax) || 0;
+  // 2. 璁$畻涓嶅惈绋庢�讳环 = 涓嶅惈绋庡崟浠� 脳 鏁伴噺
+  const totalPriceExcludingTax = priceExcludingTax && quantity
+    ? toFixed(priceExcludingTax * quantity, 2)
+    : 0;
 
-  if (!purchaseQuantity || !priceExcludingTax) {
-    return 0;
-  }
+  // 3. 璁$畻鍚◣鎬讳环 = 鍚◣鍗曚环 脳 鏁伴噺
+  const totalPriceIncludingTax = priceIncludingTax && quantity
+    ? toFixed(priceIncludingTax * quantity, 2)
+    : 0;
 
-  const result = purchaseQuantity * priceExcludingTax;
-  return toFixed(result, 2);
-});
+  // 鏇存柊琛ㄥ崟鏁版嵁
+  form.value.priceExcludingTax = priceExcludingTax;
+  form.value.totalPriceExcludingTax = totalPriceExcludingTax;
+  form.value.totalPriceIncludingTax = totalPriceIncludingTax;
+};
 
-// 鐩戝惉璁$畻鍊煎彉鍖栵紝鍚屾鍒� form 瀵硅薄涓�
-watch(unitPriceWithTax, (newValue) => {
-  form.value.priceIncludingTax = newValue;
-});
-
-watch(totalUnitPriceWithTax, (newValue) => {
-  form.value.totalPriceIncludingTax = newValue;
-});
-
-watch(taxExclusiveTotalPrice, (newValue) => {
-  form.value.totalPriceExcludingTax = newValue;
-});
+// 鐩戝惉琛ㄥ崟瀵硅薄鍙樺寲锛岀敤浜庡鐞嗙紪杈戞ā寮忎笅鐨勬暟鎹姞杞藉拰瀹炴椂璁$畻
+watch(
+  () => [form.value.priceIncludingTax, form.value.taxRate, form.value.purchaseQuantity],
+  () => {
+    // 闃叉姈澶勭悊锛岄伩鍏嶉绻佽绠�
+    nextTick(() => {
+      calculatePrices();
+    });
+  },
+  { deep: true }
+);
 
 const userStore = useUserStore();
 const userInfo = ref({});
 const match = () => {
   return userInfo.value.nickName || "鏈煡鐢ㄦ埛";
 };
-// 澶勭悊绋庣巼杈撳叆妗嗗け鐒︼紝纭繚绮惧害
+// 澶勭悊绋庣巼杈撳叆妗嗗け鐒︿簨浠�
 const handleTaxRateBlur = () => {
-  if (
-      form.value.taxRate !== null &&
-      form.value.taxRate !== undefined &&
-      form.value.taxRate !== ""
-  ) {
+  if (form.value.taxRate !== null && form.value.taxRate !== undefined && form.value.taxRate !== "") {
     form.value.taxRate = toFixed(parseFloat(form.value.taxRate), 2);
+    // watch 浼氳嚜鍔ㄨЕ鍙� calculatePrices锛屼笉闇�瑕佹墜鍔ㄨ皟鐢�
   }
 };
 
-// 澶勭悊涓嶅惈绋庡崟浠疯緭鍏ユ澶辩劍锛岀‘淇濈簿搴�
+// 澶勭悊鍚◣鍗曚环杈撳叆妗嗗け鐒︿簨浠�
 const handlePriceBlur = () => {
-  if (
-      form.value.priceExcludingTax !== null &&
-      form.value.priceExcludingTax !== undefined &&
-      form.value.priceExcludingTax !== ""
-  ) {
-    form.value.priceExcludingTax = toFixed(
-        parseFloat(form.value.priceExcludingTax),
-        2
-    );
+  if (form.value.priceIncludingTax !== null && form.value.priceIncludingTax !== undefined && form.value.priceIncludingTax !== "") {
+    form.value.priceIncludingTax = toFixed(parseFloat(form.value.priceIncludingTax), 2);
+    // watch 浼氳嚜鍔ㄨЕ鍙� calculatePrices锛屼笉闇�瑕佹墜鍔ㄨ皟鐢�
   }
 };
 
-// 澶勭悊閲囪喘鏁伴噺杈撳叆妗嗗け鐒︼紝纭繚绮惧害
+// 澶勭悊閲囪喘鏁伴噺杈撳叆妗嗗け鐒︿簨浠�
 const handleQuantityBlur = () => {
-  if (
-      form.value.purchaseQuantity !== null &&
-      form.value.purchaseQuantity !== undefined &&
-      form.value.purchaseQuantity !== ""
-  ) {
-    form.value.purchaseQuantity = toFixed(
-        parseFloat(form.value.purchaseQuantity),
-        3
-    ); // 鏁伴噺淇濈暀3浣嶅皬鏁�
+  if (form.value.purchaseQuantity !== null && form.value.purchaseQuantity !== undefined && form.value.purchaseQuantity !== "") {
+    form.value.purchaseQuantity = toFixed(parseFloat(form.value.purchaseQuantity), 3); // 鏁伴噺淇濈暀3浣嶅皬鏁�
+    // watch 浼氳嚜鍔ㄨЕ鍙� calculatePrices锛屼笉闇�瑕佹墜鍔ㄨ皟鐢�
   }
 };
 
 onMounted(async () => {
   let res = await userStore.getInfo();
   userInfo.value = res.user;
-  getDropdownData()
-  
+  await getDropdownData();
+  // 缁勪欢鍔犺浇瀹屾垚鍚庤Е鍙戜竴娆¤绠�
+  calculatePrices();
 });
 const rules = {
   supplierName: [
diff --git a/src/views/procureMent/index.vue b/src/views/procureMent/index.vue
index 763ef87..3881e50 100644
--- a/src/views/procureMent/index.vue
+++ b/src/views/procureMent/index.vue
@@ -201,7 +201,7 @@
   form.value = {
     supplierName: "",
     coal: "",
-    unit: "t",
+    unit: "鍚�",
     purchaseQuantity: "",
     priceExcludingTax: "",
     totalPriceExcludingTax: "",
diff --git a/src/views/production/components/ProductionDialog.vue b/src/views/production/components/ProductionDialog.vue
index 955a1aa..c14ca96 100644
--- a/src/views/production/components/ProductionDialog.vue
+++ b/src/views/production/components/ProductionDialog.vue
@@ -165,6 +165,7 @@
   getCoalInfoList,
   deleteProductionInventory,
 } from "@/api/production/index.js";
+import { getSupplyList } from "@/api/procureMent/index.js"
 import {validateFormData, validateNumber, deepClone, createDefaultProductionRow} from "@/utils/production";
 import {useCoalData} from "./useCoalData";
 import useUserStore from "@/store/modules/user";
@@ -218,15 +219,13 @@
 ];
 
 const formalDatabaseColumns = ref([
-  {prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minwidth: 150
-  // ,formatter: (row) => {
-  //     console.log(row);
-  //     return supplierList.value[row.supplierId] || "--";
-  //   }
+  {prop: "supplierId", label: "渚涘簲鍟嗗悕绉�", minwidth: 150
+  ,formatter: (row) => {
+      return supplierList.value.find(supplier => supplier.id === row.supplierId)?.supplierName || "--";
+    }
   },
   {prop: "coalId", label: "鐓ょ", minwidth: 60,
     formatter: (row) => {
-      // return coalList.value[row.coalId].coal || "--";
       return coalList.value.find(coal => coal.id === row.coalId)?.coal || "--";
     }
   },
@@ -251,12 +250,13 @@
 // 鑾峰彇閰嶇疆鏁版嵁
 const handlData = async () => {
   innerVisible.value = true;
-  let getSupplier = await getOfficialAll();
+  let OfficialAll = await getOfficialAll();
+  let getSupplierList = await getSupplyList();
   let getCoalName = await getCoalInfoList();
   coalList.value = getCoalName.data || [];
-  supplierList.value = getSupplier.data || [];
-  if (getSupplier.code === 200) {
-    formalDatabaseData.value = getSupplier.data;
+  supplierList.value = getSupplierList.data || [];
+  if (OfficialAll.code === 200) {
+    formalDatabaseData.value = OfficialAll.data;
     const existingOfficialIds = tableData.value
         .map((item) => item.officialId)
         .filter((id) => id);
diff --git a/src/views/production/index.vue b/src/views/production/index.vue
index 0b74dc9..fa77e22 100644
--- a/src/views/production/index.vue
+++ b/src/views/production/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div>
+  <div class="app-container">
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form :inline="true" :model="queryParams" class="search-form">
       <el-form-item label="鎼滅储">

--
Gitblit v1.9.3