From 7d1924d1924e2cafd77ca1ce3b7d5ca9336edb9c Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期二, 31 三月 2026 10:08:53 +0800
Subject: [PATCH] Merge branch 'dev_长治_健齿齿科器材' of http://114.132.189.42:9002/r/product-inventory-management into dev_长治_健齿齿科器材

---
 src/views/inventoryManagement/dispatchLog/Record.vue                         |   34 +++++-
 src/views/inventoryManagement/stockManagement/New.vue                        |   64 ++++++++++++
 src/views/productionManagement/productionOrder/MaterialRequisitionDialog.vue |    1 
 src/views/productionManagement/workOrder/index.vue                           |    6 
 src/views/productionManagement/productionOrder/index.vue                     |    1 
 src/views/inventoryManagement/stockManagement/Qualified.vue                  |   20 ++++
 src/views/inventoryManagement/stockManagement/Unqualified.vue                |   20 ++++
 src/api/qualityManagement/nonconformingManagement.js                         |   10 ++
 src/views/inventoryManagement/stockReport/index.vue                          |   28 ++++-
 src/views/qualityManagement/nonconformingManagement/index.vue                |   39 +++++++
 src/views/inventoryManagement/receiptManagement/Record.vue                   |   18 +++
 11 files changed, 220 insertions(+), 21 deletions(-)

diff --git a/src/api/qualityManagement/nonconformingManagement.js b/src/api/qualityManagement/nonconformingManagement.js
index 50a1b74..bcab3ec 100644
--- a/src/api/qualityManagement/nonconformingManagement.js
+++ b/src/api/qualityManagement/nonconformingManagement.js
@@ -48,3 +48,13 @@
     data: query,
   });
 }
+
+// 涓嬭浇杩斿伐闄勪欢
+export function downloadReturnRecord(id) {
+  return request({
+    url: "/quality/qualityUnqualified/downloadReturnRecord",
+    method: "get",
+    params: { id },
+    responseType: "blob",
+  });
+}
diff --git a/src/views/inventoryManagement/dispatchLog/Record.vue b/src/views/inventoryManagement/dispatchLog/Record.vue
index 57f1d04..3860bb2 100644
--- a/src/views/inventoryManagement/dispatchLog/Record.vue
+++ b/src/views/inventoryManagement/dispatchLog/Record.vue
@@ -29,7 +29,7 @@
 			<div>
 				<el-button @click="handleOut">瀵煎嚭</el-button>
 				<el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
-				<el-button type="primary" plain @click="handlePrint">鎵撳嵃</el-button>
+				<!-- <el-button type="primary" plain @click="handlePrint">鎵撳嵃</el-button> -->
 			</div>
 		</div>
 		<div class="table_list">
@@ -45,12 +45,30 @@
 			>
 				<el-table-column align="center" type="selection" width="55" />
 				<el-table-column align="center" label="搴忓彿" type="index" width="60" />
-        <el-table-column
+        <!-- <el-table-column
             label="鍑哄簱鎵规"
             prop="outboundBatches"
             min-width="100"
             show-overflow-tooltip
-        />
+        /> -->
+        <el-table-column
+            label="鎵瑰彿"
+            min-width="120"
+            show-overflow-tooltip
+        >
+          <template #default="scope">
+            {{ scope.row.batchNo || "" }}
+          </template>
+        </el-table-column>
+        <el-table-column
+            label="渚涘簲鍟�"
+            min-width="160"
+            show-overflow-tooltip
+        >
+          <template #default="scope">
+            {{ scope.row.supplierName || scope.row.customer || "" }}
+          </template>
+        </el-table-column>
 				<el-table-column
 					label="鍑哄簱鏃ユ湡"
 					prop="createTime"
@@ -424,8 +442,14 @@
               </div>
             </div>
             <div class="info-row">
-              <span class="label">鍗曞彿锛�</span>
-              <span class="value">${item.code || ''}</span>
+              <div>
+                <span class="label">鎵瑰彿锛�</span>
+                <span class="value">${item.batchNo || item.outboundBatches || ''}</span>
+              </div>
+              <div>
+                <span class="label">鍗曞彿锛�</span>
+                <span class="value">${item.code || ''}</span>
+              </div>
             </div>
           </div>
 
diff --git a/src/views/inventoryManagement/receiptManagement/Record.vue b/src/views/inventoryManagement/receiptManagement/Record.vue
index 6e904ec..3715fb5 100644
--- a/src/views/inventoryManagement/receiptManagement/Record.vue
+++ b/src/views/inventoryManagement/receiptManagement/Record.vue
@@ -54,10 +54,24 @@
                          label="搴忓彿"
                          type="index"
                          width="60"/>
-        <el-table-column label="鍏ュ簱鎵规"
+        <!-- <el-table-column label="鍏ュ簱鎵规"
                          prop="inboundBatches"
                          width="280"
-                         show-overflow-tooltip/>
+                         show-overflow-tooltip/> -->
+        <el-table-column label="鎵瑰彿"
+                         min-width="160"
+                         show-overflow-tooltip>
+          <template #default="scope">
+            {{ scope.row.batchNo || '' }}
+          </template>
+        </el-table-column>
+        <el-table-column label="渚涘簲鍟�"
+                         min-width="200"
+                         show-overflow-tooltip>
+          <template #default="scope">
+            {{ scope.row.supplierName || scope.row.customer || '' }}
+          </template>
+        </el-table-column>
         <el-table-column label="鍏ュ簱鏃堕棿"
                          prop="createTime"
                          show-overflow-tooltip/>
diff --git a/src/views/inventoryManagement/stockManagement/New.vue b/src/views/inventoryManagement/stockManagement/New.vue
index 1f86fd6..913c3fd 100644
--- a/src/views/inventoryManagement/stockManagement/New.vue
+++ b/src/views/inventoryManagement/stockManagement/New.vue
@@ -37,6 +37,35 @@
           <el-input v-model="formState.unit"  disabled />
         </el-form-item>
 
+        <el-form-item label="鎵瑰彿" prop="batchNo" :rules="[{ required: true, message: '璇疯緭鍏ユ壒鍙�', trigger: 'blur' }]">
+          <el-input v-model="formState.batchNo" placeholder="璇疯緭鍏ユ壒鍙�" clearable />
+        </el-form-item>
+
+        <el-form-item
+          label="渚涘簲鍟�"
+          prop="customer"
+          :rules="[{ required: true, message: '璇烽�夋嫨渚涘簲鍟�', trigger: 'change' }]"
+        >
+          <el-select
+            v-model="formState.customer"
+            placeholder="璇烽�夋嫨渚涘簲鍟�"
+            filterable
+            clearable
+            allow-create
+            :reserve-keyword="true"
+            :default-first-option="false"
+          >
+            <el-option
+              v-for="item in supplierList"
+              :key="item.id"
+              :label="item.supplierName"
+              :value="item.supplierName"
+            >
+              {{ item.supplierName}}
+            </el-option>
+          </el-select>
+        </el-form-item>
+
         <el-form-item
             label="搴撳瓨鏁伴噺"
             prop="qualitity"
@@ -74,10 +103,11 @@
 </template>
 
 <script setup>
-import {ref, computed, getCurrentInstance} from "vue";
+import {ref, computed, getCurrentInstance, watch} from "vue";
 import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
 import {createStockInventory} from "@/api/inventoryManagement/stockInventory.js";
 import {createStockUnInventory} from "@/api/inventoryManagement/stockUninventory.js";
+import {getOptions as getSupplierOptions} from "@/api/procurementManagement/procurementLedger.js";
 
 const props = defineProps({
   visible: {
@@ -101,6 +131,8 @@
   productName: "",
   productModelName: "",
   unit: "",
+  batchNo: "",
+  customer: "",
   qualitity: 0,
   warnNum: 0,
   remark: '',
@@ -126,11 +158,39 @@
     productModelId: undefined,
     productName: "",
     productModelName: "",
-    description: '',
+    unit: "",
+    batchNo: "",
+    customer: "",
+    qualitity: 0,
+    warnNum: 0,
+    remark: '',
   };
   isShow.value = false;
 };
 
+const supplierList = ref([]);
+
+const loadSuppliers = async () => {
+  try {
+    const res = await getSupplierOptions();
+    // 澶嶇敤閲囪喘鍙拌处绛涢�夐�昏緫锛歩sWhite=0 鐨勪緵搴斿晢
+    supplierList.value = (res?.data || []).filter(item => item.isWhite === 0);
+  } catch (e) {
+    console.error("鑾峰彇渚涘簲鍟嗗垪琛ㄥけ璐�:", e);
+    supplierList.value = [];
+  }
+};
+
+watch(
+  () => props.visible,
+  (val) => {
+    if (val) {
+      loadSuppliers();
+    }
+  },
+  { immediate: true }
+);
+
 // 浜у搧閫夋嫨澶勭悊
 const handleProductSelect = async (products) => {
   if (products && products.length > 0) {
diff --git a/src/views/inventoryManagement/stockManagement/Qualified.vue b/src/views/inventoryManagement/stockManagement/Qualified.vue
index e255778..bcdf9bd 100644
--- a/src/views/inventoryManagement/stockManagement/Qualified.vue
+++ b/src/views/inventoryManagement/stockManagement/Qualified.vue
@@ -7,6 +7,21 @@
                   style="width: 240px"
                   placeholder="璇疯緭鍏�"
                   clearable/>
+        <span class="search_title ml10" style="margin-left: 20px">瑙勬牸鍨嬪彿锛�</span>
+        <el-input v-model="searchForm.model"
+                  style="width: 240px"
+                  placeholder="璇疯緭鍏�"
+                  clearable/>
+        <span class="search_title ml10" style="margin-left: 20px">UID鐮侊細</span>
+        <el-input v-model="searchForm.uidNo"
+                  style="width: 200px"
+                  placeholder="璇疯緭鍏�"
+                  clearable/>
+        <span class="search_title ml10" style="margin-left: 20px">鎵规鍙凤細</span>
+        <el-input v-model="searchForm.batchNo"
+                  style="width: 200px"
+                  placeholder="璇疯緭鍏�"
+                  clearable/>
         <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
       </div>
       <div>
@@ -26,6 +41,8 @@
         <el-table-column label="浜у搧澶х被" prop="productName" show-overflow-tooltip />
         <el-table-column label="瑙勬牸鍨嬪彿" prop="model" show-overflow-tooltip />
         <el-table-column label="UID鐮�" prop="uidNo" show-overflow-tooltip />
+        <el-table-column label="鎵瑰彿" prop="batchNo" show-overflow-tooltip />
+        <el-table-column label="渚涘簲鍟�" prop="customer" show-overflow-tooltip />
         <el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
         <el-table-column label="搴撳瓨鏁伴噺" prop="qualitity" show-overflow-tooltip />
         <el-table-column label="鍐荤粨鏁伴噺" prop="lockedQuantity" show-overflow-tooltip />
@@ -100,6 +117,9 @@
 const data = reactive({
   searchForm: {
     productName: '',
+    model: '',
+    uidNo: '',
+    batchNo: '',
   }
 })
 const { searchForm } = toRefs(data)
diff --git a/src/views/inventoryManagement/stockManagement/Unqualified.vue b/src/views/inventoryManagement/stockManagement/Unqualified.vue
index 6214f39..a5c22ba 100644
--- a/src/views/inventoryManagement/stockManagement/Unqualified.vue
+++ b/src/views/inventoryManagement/stockManagement/Unqualified.vue
@@ -7,6 +7,21 @@
                   style="width: 240px"
                   placeholder="璇疯緭鍏�"
                   clearable/>
+        <span class="search_title ml10" style="margin-left: 20px">瑙勬牸鍨嬪彿锛�</span>
+        <el-input v-model="searchForm.model"
+                  style="width: 240px"
+                  placeholder="璇疯緭鍏�"
+                  clearable/>
+        <span class="search_title ml10" style="margin-left: 20px">UID鐮侊細</span>
+        <el-input v-model="searchForm.uidNo"
+                  style="width: 200px"
+                  placeholder="璇疯緭鍏�"
+                  clearable/>
+        <span class="search_title ml10" style="margin-left: 20px">鎵规鍙凤細</span>
+        <el-input v-model="searchForm.batchNo"
+                  style="width: 200px"
+                  placeholder="璇疯緭鍏�"
+                  clearable/>
         <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
       </div>
       <div>
@@ -23,6 +38,8 @@
         <el-table-column label="浜у搧澶х被" prop="productName" show-overflow-tooltip />
         <el-table-column label="瑙勬牸鍨嬪彿" prop="model" show-overflow-tooltip />
         <el-table-column label="UID鐮�" prop="uidNo" show-overflow-tooltip />
+        <el-table-column label="鎵瑰彿" prop="batchNo" show-overflow-tooltip />
+        <el-table-column label="渚涘簲鍟�" prop="customer" show-overflow-tooltip />
         <el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
         <el-table-column label="搴撳瓨鏁伴噺" prop="qualitity" show-overflow-tooltip />
         <el-table-column label="鍐荤粨鏁伴噺" prop="lockedQuantity" show-overflow-tooltip />
@@ -89,6 +106,9 @@
 const data = reactive({
   searchForm: {
     productName: '',
+    model: '',
+    uidNo: '',
+    batchNo: '',
   }
 })
 const { searchForm } = toRefs(data)
diff --git a/src/views/inventoryManagement/stockReport/index.vue b/src/views/inventoryManagement/stockReport/index.vue
index 90198ef..86252a6 100644
--- a/src/views/inventoryManagement/stockReport/index.vue
+++ b/src/views/inventoryManagement/stockReport/index.vue
@@ -168,13 +168,27 @@
              show-overflow-tooltip
              v-if="searchForm.reportType !== 'inout'"
            />
-           <el-table-column
-             label="鍏ュ簱鎵规"
-             prop="inboundBatches"
-             width="240"
-             show-overflow-tooltip
-             v-if="searchForm.reportType !== 'inout'"
-           />
+          <el-table-column
+            label="鎵瑰彿"
+            width="240"
+            show-overflow-tooltip
+            v-if="searchForm.reportType !== 'inout'"
+          >
+            <template #default="scope">
+              {{ scope.row.batchNo || scope.row.inboundBatches || "" }}
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="渚涘簲鍟�"
+            prop="supplierName"
+            min-width="200"
+            show-overflow-tooltip
+            v-if="searchForm.reportType !== 'inout'"
+          >
+            <template #default="scope">
+              {{ scope.row.supplierName || scope.row.customer || "" }}
+            </template>
+          </el-table-column>
            <el-table-column
              label="浜у搧澶х被"
              prop="productName"
diff --git a/src/views/productionManagement/productionOrder/MaterialRequisitionDialog.vue b/src/views/productionManagement/productionOrder/MaterialRequisitionDialog.vue
index 4aa002b..98d4f71 100644
--- a/src/views/productionManagement/productionOrder/MaterialRequisitionDialog.vue
+++ b/src/views/productionManagement/productionOrder/MaterialRequisitionDialog.vue
@@ -270,6 +270,7 @@
     visible.value = false;
     materialList.value = [];
     activeTab.value = 'material';
+    emit('confirm');
   } catch (error) {
     console.error('淇濆瓨棰嗘枡澶辫触:', error);
     ElMessage.error('淇濆瓨棰嗘枡澶辫触');
diff --git a/src/views/productionManagement/productionOrder/index.vue b/src/views/productionManagement/productionOrder/index.vue
index 3b4adc7..f05afaf 100644
--- a/src/views/productionManagement/productionOrder/index.vue
+++ b/src/views/productionManagement/productionOrder/index.vue
@@ -107,6 +107,7 @@
     <material-requisition-dialog
       v-model="materialRequisitionVisible"
       :order-data="currentOrderData"
+      @confirm="handleQuery"
     />
   </div>
 </template>
diff --git a/src/views/productionManagement/workOrder/index.vue b/src/views/productionManagement/workOrder/index.vue
index 78d184d..ea22e4f 100644
--- a/src/views/productionManagement/workOrder/index.vue
+++ b/src/views/productionManagement/workOrder/index.vue
@@ -257,8 +257,8 @@
                   :min="0"
                   :precision="2"
                   :controls="false"
-                  :max="row.qualitity || 0"
-                  :disabled="!row.qualitity"
+                  :max="row.requisitionQty || 0"
+                  :disabled="!row.requisitionQty"
                   style="width: 100%"
                 />
               </template>
@@ -308,7 +308,7 @@
           <el-table-column prop="productName" label="浜у搧鍚嶇О" min-width="160" />
           <el-table-column prop="model" label="鍨嬪彿" min-width="150" />
           <el-table-column prop="unit" label="鍗曚綅" width="90" align="center" />
-          <el-table-column prop="qualitity" label="鍙鐢ㄦ暟閲�" width="140" align="center" />
+          <el-table-column prop="requisitionQty" label="鍙鐢ㄦ暟閲�" width="140" align="center" />
         </el-table>
 
         <!-- 宸查�夋嫨鏄庣粏灞曠ず鏀惧湪鎶ュ伐寮规涓嬫柟鐨� reportForm.drawMaterialList 琛ㄦ牸閲� -->
diff --git a/src/views/qualityManagement/nonconformingManagement/index.vue b/src/views/qualityManagement/nonconformingManagement/index.vue
index 8538fa4..4910331 100644
--- a/src/views/qualityManagement/nonconformingManagement/index.vue
+++ b/src/views/qualityManagement/nonconformingManagement/index.vue
@@ -63,7 +63,7 @@
 import {onMounted, ref, reactive, toRefs, nextTick, getCurrentInstance} from "vue";
 import FormDia from "@/views/qualityManagement/nonconformingManagement/components/formDia.vue";
 import {ElMessageBox} from "element-plus";
-import {qualityUnqualifiedDel, qualityUnqualifiedListPage} from "@/api/qualityManagement/nonconformingManagement.js";
+import {qualityUnqualifiedDel, qualityUnqualifiedListPage, downloadReturnRecord} from "@/api/qualityManagement/nonconformingManagement.js";
 import InspectionFormDia from "@/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue";
 import dayjs from "dayjs";
 
@@ -181,7 +181,7 @@
     label: "鎿嶄綔",
     align: "center",
     fixed: "right",
-    width: 100,
+    width: 180,
     operation: [
       {
         name: "澶勭悊",
@@ -190,6 +190,14 @@
           openInspectionForm("edit", row);
         },
         disabled: (row) => row.inspectState === 1,
+      },
+      {
+        name: "涓嬭浇杩斿伐闄勪欢",
+        type: "text",
+        clickFun: (row) => {
+          handleDownloadReturnRecord(row);
+        },
+        show: (row) => row.dealResult === "杩斿伐",
       },
     ],
   },
@@ -264,6 +272,33 @@
   })
 };
 
+// 涓嬭浇杩斿伐闄勪欢
+const handleDownloadReturnRecord = async (row) => {
+  try {
+    const blobData = await downloadReturnRecord(row.id);
+
+    // 鏋勫缓 Blob
+    const blob = new Blob([blobData], {
+      type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
+    });
+
+    // 涓嬭浇
+    const url = window.URL.createObjectURL(blob);
+    const link = document.createElement("a");
+    link.href = url;
+    link.download = `杩斿伐闄勪欢.docx`;
+    document.body.appendChild(link);
+    link.click();
+    document.body.removeChild(link);
+    window.URL.revokeObjectURL(url);
+
+    proxy.$modal.msgSuccess("涓嬭浇鎴愬姛");
+  } catch (error) {
+    console.error("涓嬭浇杩斿伐闄勪欢澶辫触:", error);
+    proxy.$modal.msgError("涓嬭浇澶辫触");
+  }
+};
+
 // 鍒犻櫎
 const handleDelete = () => {
   let ids = [];

--
Gitblit v1.9.3