From 94605a200eb33add7ed68d36ba96e89d23220b62 Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期四, 09 四月 2026 17:22:57 +0800
Subject: [PATCH] feat(产品与库存): 增加辅单位字段并优化检验类别交互

---
 src/views/inventoryManagement/stockManagement/New.vue               |   80 +++++++++++++++++++++++++-
 src/api/basicData/product.js                                        |    7 +-
 src/views/basicData/product/index.vue                               |   25 +++++++-
 src/views/inventoryManagement/stockManagement/Qualified.vue         |    3 
 src/views/inventoryManagement/stockManagement/rawMaterialRecord.vue |    3 
 src/views/inventoryManagement/stockManagement/Unqualified.vue       |    3 
 src/views/qualityManagement/metricBinding/index.vue                 |   41 ++++++++-----
 7 files changed, 132 insertions(+), 30 deletions(-)

diff --git a/src/api/basicData/product.js b/src/api/basicData/product.js
index f0ce00a..76b4634 100644
--- a/src/api/basicData/product.js
+++ b/src/api/basicData/product.js
@@ -64,10 +64,11 @@
         params: query
     })
 }
-// 涓嬭浇浜у搧瀵煎叆妯℃澘
-export function downloadTemplate() {
+
+//  涓嬭浇浜у搧瀵煎叆妯℃澘
+export function downloadProductModelImportTemplate() {
     return request({
-        url: '/basic/product/downloadTemplate',
+        url: '/basic/product/export',
         method: 'get',
         responseType: 'blob'
     })
diff --git a/src/views/basicData/product/index.vue b/src/views/basicData/product/index.vue
index 7b2a819..4f0a1fd 100644
--- a/src/views/basicData/product/index.vue
+++ b/src/views/basicData/product/index.vue
@@ -152,10 +152,22 @@
         </el-row>
         <el-row>
           <el-col :span="24">
-            <el-form-item label="鍗曚綅锛�" prop="unit">
+            <el-form-item label="涓诲崟浣嶏細" prop="unit">
               <el-input
                 v-model="modelForm.unit"
-                placeholder="璇疯緭鍏ュ崟浣�"
+                placeholder="璇疯緭鍏ヤ富鍗曚綅"
+                clearable
+                @keydown.enter.prevent
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="杈呭崟浣嶏細" prop="subUnit">
+              <el-input
+                v-model="modelForm.subUnit"
+                placeholder="璇疯緭鍏ヨ緟鍗曚綅"
                 clearable
                 @keydown.enter.prevent
               />
@@ -210,6 +222,10 @@
     prop: "unit",
   },
   {
+    label: "杈呭崟浣�",
+    prop: "subUnit",
+  },
+  {
     dataType: "action",
     label: "鎿嶄綔",
     align: "center",
@@ -246,11 +262,14 @@
   modelForm: {
     model: "",
     unit: "",
+    subUnit: "",
   },
   modelRules: {
     model: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    unit: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+    unit: [{ required: true, message: "璇疯緭鍏ヤ富鍗曚綅", trigger: "blur" }],
+    subUnit: [{ required: false, message: "璇疯緭鍏ヨ緟鍗曚綅", trigger: "blur" }],
   },
+
 });
 const { form, rules, modelForm, modelRules } = toRefs(data);
 // 鏌ヨ浜у搧鏍�
diff --git a/src/views/inventoryManagement/stockManagement/New.vue b/src/views/inventoryManagement/stockManagement/New.vue
index 1f86fd6..341010d 100644
--- a/src/views/inventoryManagement/stockManagement/New.vue
+++ b/src/views/inventoryManagement/stockManagement/New.vue
@@ -6,7 +6,7 @@
         width="800"
         @close="closeModal"
     >
-      <el-form label-width="140px" :model="formState" label-position="top" ref="formRef">
+      <el-form label-width="140px" :model="formState" :rules="rules" label-position="top" ref="formRef">
         <el-form-item
             label="浜у搧鍚嶇О"
             prop="productModelId"
@@ -31,10 +31,39 @@
         </el-form-item>
 
         <el-form-item
-            label="鍗曚綅"
+            label="鍗曚綅(涓�)"
             prop="unit"
         >
           <el-input v-model="formState.unit"  disabled />
+        </el-form-item>
+        <el-form-item
+            label="鍗曚綅(杈�)"
+            prop="subUnit"
+        >
+          <el-input v-model="formState.subUnit"  disabled />
+        </el-form-item>
+
+        <el-form-item
+            label="浠撳簱缂栫爜"
+            prop="warehouseCode"
+        >
+          <el-select v-model="formState.warehouseCode" :options="warehouseCode" placeholder="璇烽�夋嫨浠撳簱缂栫爜" @change="handleWarehouseSelect">
+            <el-option v-for="item in warehouseCode" :key="item.value" :label="item.value" :value="item.value" />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item
+            label="浠撳簱鍚嶇О"
+            prop="warehouseName"
+        >
+          <el-input v-model="formState.warehouseName"  disabled />
+        </el-form-item>
+
+        <el-form-item
+            label="瀛樿揣缂栫爜"
+            prop="productCode"
+        >
+          <el-input v-model="formState.productCode"  />
         </el-form-item>
 
         <el-form-item
@@ -78,6 +107,13 @@
 import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
 import {createStockInventory} from "@/api/inventoryManagement/stockInventory.js";
 import {createStockUnInventory} from "@/api/inventoryManagement/stockUninventory.js";
+const { proxy } = getCurrentInstance();
+// 鑾峰彇瀛楀吀
+const { warehouse_code } = proxy.useDict(
+  "warehouse_code"
+);
+
+const warehouseCode = computed(() => warehouse_code?.value || []);// 鎺у埗寮圭獥鏄剧ず
 
 const props = defineProps({
   visible: {
@@ -101,9 +137,23 @@
   productName: "",
   productModelName: "",
   unit: "",
+  subUnit: "",
+  productCode: "",
+  warehouseCode: "",
+  warehouseName: "",
   qualitity: 0,
   warnNum: 0,
   remark: '',
+});
+
+// 琛ㄥ崟楠岃瘉瑙勫垯
+const rules = ref({
+  warehouseCode: [
+    { required: true, message: '璇烽�夋嫨浠撳簱缂栫爜', trigger: 'change' },
+  ],
+  productCode: [
+    { required: true, message: '璇疯緭鍏ュ簱瀛樻暟閲�', trigger: 'blur' },
+  ],
 });
 
 const isShow = computed({
@@ -117,8 +167,6 @@
 
 const showProductSelectDialog = ref(false);
 
-let { proxy } = getCurrentInstance()
-
 const closeModal = () => {
   // 閲嶇疆琛ㄥ崟鏁版嵁
   formState.value = {
@@ -126,10 +174,31 @@
     productModelId: undefined,
     productName: "",
     productModelName: "",
-    description: '',
+    unit: "",
+    subUnit: "",
+    qualitity: 0,
+    productCode: "",
+    warehouseCode: "",
+    warehouseName: "",
+    warnNum: 0,
+    remark: '',
   };
   isShow.value = false;
 };
+
+// 浠撳簱閫夋嫨澶勭悊
+const handleWarehouseSelect = (val) => {
+  if (val) {
+    console.log(val);
+    // 杩囨护鍑烘潵warehouseCode
+    warehouseCode.value.find(item => {
+      if(item.value == val){
+        formState.value.warehouseName = item.label;
+      }
+    })
+  }
+}
+
 
 // 浜у搧閫夋嫨澶勭悊
 const handleProductSelect = async (products) => {
@@ -140,6 +209,7 @@
     formState.value.productModelName = product.model;
     formState.value.productModelId = product.id;
     formState.value.unit = product.unit;
+    formState.value.subUnit = product.subUnit;
     showProductSelectDialog.value = false;
     // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
     proxy.$refs["formRef"]?.validateField('productModelId');
diff --git a/src/views/inventoryManagement/stockManagement/Qualified.vue b/src/views/inventoryManagement/stockManagement/Qualified.vue
index 7dfcd2e..36073e7 100644
--- a/src/views/inventoryManagement/stockManagement/Qualified.vue
+++ b/src/views/inventoryManagement/stockManagement/Qualified.vue
@@ -27,7 +27,8 @@
         <el-table-column label="浠撳簱" prop="warehouseName" show-overflow-tooltip />
         <el-table-column label="瀛樿揣缂栫爜" prop="productCode" show-overflow-tooltip />
         <el-table-column label="瑙勬牸鍨嬪彿" prop="model" show-overflow-tooltip />
-        <el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
+        <el-table-column label="鍗曚綅(涓诲崟浣�)" prop="unit" show-overflow-tooltip />
+        <el-table-column label="鍗曚綅(杈呭崟浣�)" prop="subUnit" show-overflow-tooltip />
         <el-table-column label="搴撳瓨鏁伴噺" prop="qualitity" show-overflow-tooltip />
         <el-table-column label="澶囨敞" prop="remark"  show-overflow-tooltip />
         <el-table-column label="鏈�杩戞洿鏂版椂闂�" prop="updateTime" show-overflow-tooltip />
diff --git a/src/views/inventoryManagement/stockManagement/Unqualified.vue b/src/views/inventoryManagement/stockManagement/Unqualified.vue
index 3483daf..9bc5c79 100644
--- a/src/views/inventoryManagement/stockManagement/Unqualified.vue
+++ b/src/views/inventoryManagement/stockManagement/Unqualified.vue
@@ -27,7 +27,8 @@
         <el-table-column label="浠撳簱" prop="warehouseName" show-overflow-tooltip />
         <el-table-column label="瀛樿揣缂栫爜" prop="productCode" show-overflow-tooltip />
         <el-table-column label="瑙勬牸鍨嬪彿" prop="model" show-overflow-tooltip />
-        <el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
+        <el-table-column label="鍗曚綅(涓诲崟浣�)" prop="unit" show-overflow-tooltip />
+        <el-table-column label="鍗曚綅(杈呭崟浣�)" prop="subUnit" show-overflow-tooltip />
         <el-table-column label="搴撳瓨鏁伴噺" prop="qualitity" show-overflow-tooltip />
         <el-table-column label="澶囨敞" prop="remark"  show-overflow-tooltip />
         <el-table-column label="鏈�杩戞洿鏂版椂闂�" prop="updateTime" show-overflow-tooltip />
diff --git a/src/views/inventoryManagement/stockManagement/rawMaterialRecord.vue b/src/views/inventoryManagement/stockManagement/rawMaterialRecord.vue
index 531f156..4387467 100644
--- a/src/views/inventoryManagement/stockManagement/rawMaterialRecord.vue
+++ b/src/views/inventoryManagement/stockManagement/rawMaterialRecord.vue
@@ -27,7 +27,8 @@
         <el-table-column label="浠撳簱" prop="warehouseName" show-overflow-tooltip />
         <el-table-column label="瀛樿揣缂栫爜" prop="productCode" show-overflow-tooltip />
         <el-table-column label="瑙勬牸鍨嬪彿" prop="model" show-overflow-tooltip />
-        <el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
+        <el-table-column label="鍗曚綅(涓诲崟浣�)" prop="unit" show-overflow-tooltip />
+        <el-table-column label="鍗曚綅(杈呭崟浣�)" prop="subUnit" show-overflow-tooltip />
         <el-table-column label="搴撳瓨鏁伴噺" prop="qualitity" show-overflow-tooltip />
         <el-table-column label="澶囨敞" prop="remark"  show-overflow-tooltip />
         <el-table-column label="鏈�杩戞洿鏂版椂闂�" prop="updateTime" show-overflow-tooltip />
diff --git a/src/views/qualityManagement/metricBinding/index.vue b/src/views/qualityManagement/metricBinding/index.vue
index 2a78e1d..2b64757 100644
--- a/src/views/qualityManagement/metricBinding/index.vue
+++ b/src/views/qualityManagement/metricBinding/index.vue
@@ -1,5 +1,10 @@
 <template>
   <div class="app-container metric-binding">
+    <el-tabs v-model="activeTab" @tab-change="handleTabChange" class="metric-tabs">
+      <el-tab-pane label="鍘熸潗鏂欐楠�" name="0" />
+      <el-tab-pane label="杩囩▼妫�楠�" name="1" />
+      <el-tab-pane label="鍑哄巶妫�楠�" name="2" />
+    </el-tabs>
     <el-row :gutter="16" class="metric-binding-row">
       <!-- 宸︿晶锛氭娴嬫爣鍑嗗垪琛� -->
       <el-col :xs="24" :sm="24" :md="12" :lg="14" :xl="14" class="left-col">
@@ -42,21 +47,6 @@
             @change="handleQuery"
             @clear="handleQuery"
           />
-        </template>
-        <template #inspectTypeHeader>
-          <el-select
-            v-model="searchForm.inspectType"
-            placeholder="绫诲埆"
-            clearable
-            size="small"
-            style="width: 120px"
-            @change="handleQuery"
-            @clear="handleQuery"
-          >
-            <el-option label="鍘熸潗鏂欐楠�" value="0" />
-            <el-option label="杩囩▼妫�楠�" value="1" />
-            <el-option label="鍑哄巶妫�楠�" value="2" />
-          </el-select>
         </template>
         <template #stateHeader>
           <el-select
@@ -167,6 +157,9 @@
 
 const { proxy } = getCurrentInstance()
 
+// 绫诲埆 Tab锛�0=鍘熸潗鏂欙紝1=杩囩▼锛�2=鍑哄巶锛�
+const activeTab = ref('0')
+
 // 宸︿晶鏍囧噯鍒楄〃锛氭暣琛屽唴瀹瑰眳涓紙閰嶅悎鏍峰紡锛�
 const rowClassNameCenter = () => 'row-center'
 
@@ -209,7 +202,6 @@
   {
     label: '绫诲埆',
     prop: 'inspectType',
-    headerSlot: 'inspectTypeHeader',
     align: 'center',
     dataType: 'tag',
     formatData: (val) => {
@@ -251,6 +243,18 @@
   //   }
   // }
 ])
+
+const handleTabChange = () => {
+  searchForm.value.standardNo = ''
+  searchForm.value.standardName = ''
+  searchForm.value.state = ''
+  searchForm.value.inspectType = activeTab.value
+  page.current = 1
+  currentStandard.value = null
+  bindingTableData.value = []
+  bindingSelectedRows.value = []
+  getStandardList()
+}
 
 const currentStandard = ref(null)
 
@@ -426,6 +430,7 @@
 }
 
 onMounted(() => {
+  searchForm.value.inspectType = activeTab.value
   getStandardList()
   getProcessList()
 })
@@ -436,6 +441,10 @@
   padding: 0;
 }
 
+.metric-tabs {
+  margin-bottom: 10px;
+}
+
 .metric-binding-row {
   width: 100%;
 }

--
Gitblit v1.9.3