From e7dac9ecb16aa627f0603beec9930c75ee6aa3f7 Mon Sep 17 00:00:00 2001
From: 647556386 <647556386@qq.com>
Date: 星期四, 08 一月 2026 22:22:24 +0800
Subject: [PATCH] 盘点

---
 项目代码/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderDetail.js |  251 +++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 197 insertions(+), 54 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderDetail.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderDetail.js"
index 24e1d94..1bfba85 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderDetail.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderDetail.js"
@@ -1,58 +1,201 @@
-
-//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+// 鑷畾涔夋墿灞曚笟鍔′唬鐮�
+import gridBody from "./extend/OrderStockTake.vue";
+// 寮曞叆鏉傛敹鏉傚彂骞宠处寮圭獥缁勪欢
+import gridHeader from "./extend/TakeStockSelect.vue";
+import { ElMessageBox, ElLoading, ElMessage } from "element-plus";
 
 let extension = {
-    components: {
-      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
-      gridHeader: '',
-      gridBody: '',
-      gridFooter: '',
-      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
-      modelHeader: '',
-      modelBody: '',
-      modelFooter: ''
-    },
-    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
-    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
-    methods: {
-       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
-      onInit() {  
-      },
-      onInited() {
-        //妗嗘灦鍒濆鍖栭厤缃悗
-        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
-        //this.detailOptions.columns.forEach(column=>{ });
-      },
-      searchBefore(param) {
-        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
-        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
-        return true;
-      },
-      searchAfter(result) {
-        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
-        return true;
-      },
-      addBefore(formData) {
-        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
-        return true;
-      },
-      updateBefore(formData) {
-        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
-        return true;
-      },
-      rowClick({ row, column, event }) {
-        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
-        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
-      },
-      modelOpenAfter(row) {
-        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
-        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
-        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
-        //(3)this.editFormFields.瀛楁='xxx';
-        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
-        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+  components: {
+    // 鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: gridHeader,
+    gridBody: gridBody, // 鍘熸湁鐩樼偣寮圭獥缁勪欢
+    gridFooter: '',
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', // 鏃犻渶鎸囧畾琛ㄥ悕
+  buttons: { view: [], box: [], detail: [] }, // 鎵╁睍鎸夐挳
+  methods: {
+    onInit() {
+      // 鍘熸湁鐩樼偣鎸夐挳閫昏緫淇濈暀
+      let OrderStockTakeBtn = this.buttons.find(x => x.value === 'OrderStockTake');
+      if (OrderStockTakeBtn) {
+        OrderStockTakeBtn.onClick = function () {
+          let rows = this.$refs.table.getSelected();
+          if (rows.length === 0) return this.$error("璇烽�夋嫨涓�鏉$洏鐐瑰崟鎹暟鎹紒");
+          if (rows.length > 1) return this.$error("鍙兘閫夋嫨涓�鏉$洏鐐瑰崟鎹暟鎹紒");
+          
+          const selectedReceiptNo = rows[0].orderNo;
+          if (!selectedReceiptNo) return this.$error("閫変腑鐨勫崟鎹己灏戞湁鏁堢殑鍗曟嵁鍙凤紒");
+          this.$refs.gridBody.open(selectedReceiptNo);
+        };
       }
+
+      // 鐩戝惉鍘熸湁寮圭獥浜嬩欢锛堜繚鐣欙級
+      this.$nextTick(() => {
+        const stockTakeComp = this.$refs.gridBody;
+        if (stockTakeComp) {
+          stockTakeComp.$on('refresh', () => {
+            this.$refs.table.reload();
+          });
+          stockTakeComp.$on('box-returned', (boxNo) => {
+            this.$success(`鏂欑銆�${boxNo}銆戝洖搴撴垚鍔燂紝琛ㄦ牸灏嗗埛鏂帮紒`);
+            this.$refs.table.reload();
+          });
+        }
+        
+      });
+
+      // ========== 鏂板鎿嶄綔鍒楋細浜哄伐骞宠处 + 鏉傛敹鏉傚彂骞宠处 ==========
+      this.columns.push({
+        field: 'operation',
+        title: '鎿嶄綔',
+        width: 200,
+        fixed: 'right',
+        align: 'center',
+        formatter: (row) => {
+          return `
+            <span style="cursor: pointer;color: #2d8cf0;margin-right: 10px;" class="manual-reconciliation">
+              <i class="el-icon-check"></i>浜哄伐骞宠处
+            </span>
+            <span style="cursor: pointer;color: #1989fa;" class="misc-reconciliation">
+              <i class="el-icon-edit"></i>鏉傛敹鏉傚彂骞宠处
+            </span>
+          `;
+        },
+        click: (row, column, event) => {
+          const target = event.target;
+          // 鍖哄垎鐐瑰嚮鐨勬槸浜哄伐骞宠处杩樻槸鏉傛敹鏉傚彂骞宠处
+          if (target.closest('.manual-reconciliation')) {
+            this.handleManualReconciliation(row); // 浜哄伐骞宠处閫昏緫
+          } else if (target.closest('.misc-reconciliation')) {
+            this.handleMiscReconciliation(row); // 鏉傛敹鏉傚彂骞宠处閫昏緫
+          }
+        }
+      });
+    },
+
+    // ========== 浜哄伐骞宠处鏍稿績閫昏緫 ==========
+    handleManualReconciliation(row) {
+      // 寮瑰嚭纭妗�
+      ElMessageBox.confirm(
+        '纭瑕佹墽琛屼汉宸ュ钩璐︽搷浣滃悧锛�',
+        '鎿嶄綔纭',
+        {
+          confirmButtonText: '纭',
+          cancelButtonText: '鍙栨秷',
+          type: 'warning'
+        }
+      ).then(async () => {
+        // 娣诲姞閬僵灞傞槻姝㈤噸澶嶇偣鍑�
+        const loading = ElLoading.service({
+          lock: true,
+          text: '澶勭悊涓紝璇风◢鍊�...',
+          background: 'rgba(0, 0, 0, 0.7)'
+        });
+
+        try {
+          // 璋冪敤浜哄伐骞宠处鎺ュ彛
+          const response = await this.http.get(`/api/TakeStockOrder/ManualReconciliation?id=${row.id}`);
+          if (response.status) {
+            ElMessage.success('浜哄伐骞宠处鎿嶄綔鎴愬姛锛�');
+            this.$refs.table.reload(); // 鍒锋柊琛ㄦ牸
+          } else {
+            ElMessage.error(`鎿嶄綔澶辫触锛�${response.message || '鏈煡閿欒'}`);
+          }
+        } catch (error) {
+        } finally {
+          // 鍏抽棴閬僵灞�
+          loading.close();
+        }
+      }).catch(() => {
+        ElMessage.info('宸插彇娑堜汉宸ュ钩璐︽搷浣�');
+      });
+    },
+
+    // ========== 鏉傛敹鏉傚彂骞宠处鏍稿績閫昏緫锛堜慨鏀瑰悗锛� ==========
+    handleMiscReconciliation(row) {
+      // 閫変腑褰撳墠琛�
+      const table = this.$refs.table.$refs.table;
+      if (table) {
+        table.clearSelection();
+        table.toggleRowSelection(row, true);
+      }
+
+      // 璋冪敤鎺ュ彛鑾峰彇鏉傛敹鏉傚彂骞宠处鏁版嵁
+      const fetchMiscData = async () => {
+        const loading = ElLoading.service({
+          lock: true,
+          text: '鍔犺浇鏁版嵁涓�...',
+          background: 'rgba(0, 0, 0, 0.7)'
+        });
+
+        try {
+          // 璋冪敤鎺ュ彛锛屼紶閫抮ow涓殑remark鍜宨d鍙傛暟
+          const response = await this.http.get(`/api/TakeStockOrder/SelectOrder?remark=${row.remark || ''}&id=${row.id}`);
+          loading.close();
+          
+          if (response.status) {
+            if (!Array.isArray(response.data) || response.data.length === 0) {
+              ElMessage.warning("鏈煡璇㈠埌鐩稿叧鏁版嵁");
+              // 鎵撳紑绌烘暟鎹殑寮圭獥
+              this.$refs.gridHeader.open(row, []);
+              return;
+            }
+
+            // 鎻愬彇闇�瑕佸睍绀虹殑瀛楁
+            const displayData = response.data.map(item => ({
+              orderId: item.orderId || '',
+              materielCode: item.materielCode || '',
+              materielName: item.materielName || '',
+              batchNo: item.batchNo || '',
+              orderQuantity: item.orderQuantity || 0,
+              unit: item.unit || '',
+              supplyCode: item.supplyCode || '',
+              warehouseCode: item.warehouseCode || ''
+            }));
+
+            // 鎵撳紑寮圭獥骞朵紶閫掑鐞嗗悗鐨勬暟鎹�
+            this.$refs.gridHeader.open(row, displayData);
+          } else {
+            ElMessage.error(`鏌ヨ澶辫触锛�${response.message || '鏈煡閿欒'}`);
+          }
+        } catch (error) {
+          loading.close();
+          ElMessage.error(`缃戠粶寮傚父锛�${error.message || '鎺ュ彛璋冪敤澶辫触'}`);
+        }
+      };
+
+      // 鎵ц鏁版嵁鏌ヨ骞舵墦寮�寮圭獥
+      fetchMiscData();
+    },
+
+    onInited() {
+      // 妗嗘灦鍒濆鍖栧畬鎴愬悗鎵ц
+    },
+    searchBefore(param) {
+      // 鏌ヨ鍓嶆嫤鎴�
+      return true;
+    },
+    searchAfter(result) {
+      // 鏌ヨ鍚庢暟鎹鐞�
+      return true;
+    },
+    addBefore(formData) {
+      return true;
+    },
+    updateBefore(formData) {
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      // 鍗曞嚮琛岄�変腑褰撳墠琛�
+      this.$refs.table.$refs.table.toggleRowSelection(row);
+    },
+    modelOpenAfter(row) {
+      // 鏂板缓/缂栬緫寮圭獥鎵撳紑鍚庡鐞�
     }
-  };
-  export default extension;
-  
\ No newline at end of file
+  }
+};
+
+export default extension;
\ No newline at end of file

--
Gitblit v1.9.3