From c7d9c7f73f92dd8fb2b7cb3f8cfe6841ca956d18 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 12 八月 2026 11:48:57 +0800
Subject: [PATCH] dev_天津_建诚恒商贸 1.供应商往来添加付款功能 2.客户往来添加回款功能

---
 src/views/productionManagement/productionTraceability/index.vue |  103 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 95 insertions(+), 8 deletions(-)

diff --git a/src/views/productionManagement/productionTraceability/index.vue b/src/views/productionManagement/productionTraceability/index.vue
index a850788..53ff013 100644
--- a/src/views/productionManagement/productionTraceability/index.vue
+++ b/src/views/productionManagement/productionTraceability/index.vue
@@ -1,5 +1,7 @@
 <template>
   <div class="app-container">
+    <PageHeader v-if="showHeader"
+                content="鐢熶骇璁㈠崟" />
     <el-card style="height:82vh;overflow:auto;">
       <template #header>
         <div class="card-header">
@@ -11,7 +13,7 @@
                          filterable
                          remote
                          reserve-keyword
-                         placeholder="璇疯緭鍏ョ敓浜ц鍗曞彿"
+                         placeholder="璇疯緭鍏ョ敓浜ц鍗曞彿鎼滅储"
                          :loading="npsNoLoading"
                          :remote-method="handleNpsNoSearch"
                          @change="handleSearch"
@@ -20,6 +22,18 @@
                            :key="option.id"
                            :label="option.npsNo + '-' + option.productName + '-' + option.model"
                            :value="option.id" />
+                <template #footer>
+                  <div v-if="npsNoHasMore"
+                       class="select-load-more"
+                       @click="loadMoreNpsNo">
+                    <span v-if="npsNoLoadingMore">鍔犺浇涓�...</span>
+                    <span v-else>鐐瑰嚮鍔犺浇鏇村</span>
+                  </div>
+                  <div v-else-if="npsNoOptions.length > 0"
+                       class="select-load-more no-more">
+                    娌℃湁鏇村浜�
+                  </div>
+                </template>
               </el-select>
             </el-form-item>
           </el-form>
@@ -33,7 +47,7 @@
                          border>
           <el-descriptions-item label="鐢熶骇璁㈠崟鍙�">{{ rowData.productionOrderDto?.npsNo || '-' }}</el-descriptions-item>
           <el-descriptions-item label="浜у搧鍚嶇О">{{ rowData.productionOrderDto?.productName || '-' }}</el-descriptions-item>
-          <el-descriptions-item label="浜у搧瑙勬牸">{{ rowData.productionOrderDto?.model || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="瑙勬牸鍨嬪彿">{{ rowData.productionOrderDto?.model || '-' }}</el-descriptions-item>
           <!-- <el-descriptions-item label="鐗╂枡缂栫爜">{{ rowData.productionOrderDto?.materialCode || '-' }}</el-descriptions-item> -->
           <el-descriptions-item label="璁″垝鏁伴噺">{{ rowData.productionOrderDto?.quantity || 0 }} <span class="unit">{{ rowData.productionOrderDto?.unit || '-' }}</span></el-descriptions-item>
           <el-descriptions-item label="褰撳墠鐘舵��">
@@ -78,11 +92,17 @@
                   {{ row.workOrder.model || '-' }}
                 </template>
               </el-table-column>
+              <el-table-column label="宸ュ簭"
+                               prop="workOrder.operationName"
+                               align="center" />
               <el-table-column prop="workOrder.planQuantity"
                                label="闇�姹傛暟閲�"
                                align="center" />
               <el-table-column prop="workOrder.completeQuantity"
                                label="瀹屾垚鏁伴噺"
+                               align="center" />
+              <el-table-column prop="workOrder.scrapQty"
+                               label="鎶ュ簾鏁伴噺"
                                align="center" />
               <el-table-column prop="workOrder.completionStatus"
                                label="瀹屾垚杩涘害"
@@ -152,6 +172,15 @@
                 {{ parseTime(row.createTime) }}
               </template>
             </el-table-column>
+            <el-table-column label="宸ユ椂锛坔锛�"
+                             prop="workHour"
+                             align="center" />
+            <el-table-column label="浜у嚭鏁伴噺"
+                             prop="quantity"
+                             align="center" />
+            <el-table-column label="鎶ュ簾鏁伴噺"
+                             prop="scrapQty"
+                             align="center" />
             <el-table-column label="鎿嶄綔"
                              align="center"
                              width="200">
@@ -267,7 +296,7 @@
 </template>
 
 <script setup>
-  import { ref, reactive, onMounted } from "vue";
+  import { ref, reactive, onMounted, computed } from "vue";
   import { useRoute, useRouter } from "vue-router";
   import { ElMessage } from "element-plus";
   import { parseTime } from "@/utils/ruoyi";
@@ -280,13 +309,24 @@
   const route = useRoute();
   const router = useRouter();
 
+  // 鍒ゆ柇鏄惁鏄剧ず椤靛ご
+  const showHeader = computed(() => {
+    return (
+      Object.keys(route.query).length > 0 || Object.keys(route.params).length > 0
+    );
+  });
+
   // 鎼滅储鐩稿叧
   const searchForm = reactive({
     npsNo: "",
   });
   const selectedNpsNo = ref(null);
   const npsNoLoading = ref(false);
+  const npsNoLoadingMore = ref(false);
   const npsNoOptions = ref([]);
+  const npsNoPage = reactive({ current: 1, size: 20, total: 0 });
+  const npsNoHasMore = computed(() => npsNoOptions.value.length < npsNoPage.total);
+  const npsNoSearchKeyword = ref("");
 
   // 璇︽儏鏁版嵁
   const rowData = reactive({
@@ -336,21 +376,45 @@
     return "#67c23a";
   };
 
-  // 妯℃嫙鎼滅储鏂规硶
   const handleNpsNoSearch = async query => {
+    npsNoSearchKeyword.value = query || "";
+    npsNoPage.current = 1;
+    npsNoOptions.value = [];
     npsNoLoading.value = true;
     try {
       const res = await productOrderListPage({
         npsNo: query || "",
-        pageNum: 1,
-        pageSize: 50,
+        current: npsNoPage.current,
+        size: npsNoPage.size,
       });
-      // 鍙傜収 productionOrder/index.vue 鐨勬暟鎹粨鏋� res.data.records
-      npsNoOptions.value = res.data?.records || res.rows || [];
+      const records = res.data?.records || [];
+      npsNoOptions.value = records;
+      npsNoPage.total = res.data?.total || 0;
     } catch (error) {
       console.error(error);
     } finally {
       npsNoLoading.value = false;
+    }
+  };
+
+  const loadMoreNpsNo = async () => {
+    if (npsNoLoadingMore.value || !npsNoHasMore.value) return;
+    npsNoLoadingMore.value = true;
+    npsNoPage.current++;
+    try {
+      const res = await productOrderListPage({
+        npsNo: npsNoSearchKeyword.value,
+        current: npsNoPage.current,
+        size: npsNoPage.size,
+      });
+      const records = res.data?.records || [];
+      npsNoOptions.value = [...npsNoOptions.value, ...records];
+      npsNoPage.total = res.data?.total || 0;
+    } catch (error) {
+      console.error(error);
+      npsNoPage.current--;
+    } finally {
+      npsNoLoadingMore.value = false;
     }
   };
 
@@ -385,6 +449,7 @@
       workOrder: row.workOrder || {},
       reports: (row.reportList || []).map(r => ({
         ...r.reportMain,
+        ...(r.reportOutputList[0] || {}),
         productionOperationParamList: r.reportParamList || [],
       })),
     };
@@ -703,4 +768,26 @@
   .param-detail-list {
     padding: 10px;
   }
+
+  .select-load-more {
+    text-align: center;
+    padding: 8px 0;
+    font-size: 13px;
+    color: #409eff;
+    cursor: pointer;
+    border-top: 1px solid #ebeef5;
+
+    &:hover {
+      background-color: #f5f7fa;
+    }
+
+    &.no-more {
+      color: #c0c4cc;
+      cursor: default;
+
+      &:hover {
+        background-color: transparent;
+      }
+    }
+  }
 </style>

--
Gitblit v1.9.3