From 075c5319285ab9896a74655c82cec7c1ae0e0196 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期五, 12 十二月 2025 14:13:46 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu

---
 项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue | 1138 +++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 633 insertions(+), 505 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue"
index d796938..1a7d1a0 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue"
@@ -14,35 +14,34 @@
               <span>宸查�変腑 {{ selection.length }} 椤�</span>
             </el-col>
             <el-col :span="8">
-          <!--     <el-link
-                type="primary"
-                size="small"
-                style="float: right; height: 20px"
-                @click="lockstocks"
-                >閿佸畾搴撳瓨</el-link> -->
-
               <el-link
                 type="primary"
                 size="small"
+                v-if="isBatch === 0"
                 style="float: right; height: 20px"
                 @click="handleOpenPicking"
-                >鎷i��</el-link>
-                        <el-link
+                >鎷i��</el-link
+              >
+              <el-link
                 type="primary"
                 size="small"
                 style="float: right; height: 20px; margin-right: 10px"
+                v-if="isBatch === 1"
                 @click="handleOpenBatchPicking"
-                >鍒嗘壒鎷i��</el-link>
+                >鍒嗘壒鎷i��</el-link
+              >
               <el-link
                 type="primary"
                 size="small"
+                v-if="isBatch === 0"
                 style="float: right; height: 20px; margin-right: 10px"
                 @click="outbound"
                 >鐩存帴鍑哄簱</el-link
               >
-               <el-link
+              <el-link
                 type="primary"
                 size="small"
+                v-if="isBatch === 1"
                 style="float: right; height: 20px; margin-right: 10px"
                 @click="outboundbatch"
                 >鍒嗘壒鍑哄簱</el-link
@@ -53,15 +52,15 @@
                 style="float: right; height: 20px; margin-right: 10px"
                 @click="getData"
                 >鍒锋柊</el-link
-              ></el-col
-            >
+              >
+            </el-col>
           </el-row>
         </el-alert>
       </div>
       <div class="box-table" style="margin-top: 1%">
         <el-table
           ref="singleTable"
-          :data="tableData"
+          :data="groupedTableData"
           style="width: 100%; height: 100%"
           highlight-current-row
           @current-change="handleCurrentChange"
@@ -78,33 +77,127 @@
             align="center"
           ></el-table-column>
           <el-table-column
-            v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
-            :key="index"
-            :prop="item.prop"
-            :label="item.title"
-            :width="item.width"
+            prop="materielCode"
+            label="鐗╂枡缂栧彿"
+            width="120"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            prop="materielName"
+            label="鐗╂枡鍚嶇О"
+            width="150"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            prop="batchNo"
+            label="鎵规鍙�"
+            width="90"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            prop="supplyCode"
+            label="渚涘簲鍟嗙紪鍙�"
+            width="90"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            prop="orderQuantity"
+            label="鍗曟嵁鏁伴噺"
+            width="90"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            prop="lockQuantity"
+            label="閿佸畾鏁伴噺"
+            width="90"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            prop="overOutQuantity"
+            label="宸插嚭鏁伴噺"
+            width="90"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            prop="moveQty"
+            label="鎸枡鏁伴噺"
+            width="90"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            prop="unit"
+            label="鍗曚綅"
+            width="80"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            prop="orderDetailStatus"
+            label="璁㈠崟鏄庣粏鐘舵��"
+            width="90"
             align="center"
           >
             <template #default="scoped">
-              <div v-if="item.type == 'icon'">
-                <el-tooltip
-                  class="item"
-                  effect="dark"
-                  :content="item.title"
-                  placement="bottom"
-                  ><el-link
-                    type="primary"
-                    :disabled="getButtonEnable(item.prop, scoped.row)"
-                    @click="tableButtonClick(scoped.row, item)"
-                    ><i :class="item.icon" style="font-size: 22px"></i></el-link
-                ></el-tooltip>
-              </div>
-
-              <div v-else-if="item.type == 'tag'">
-                <el-tag size="small">
-                  {{ getDictionary(scoped.row, item) }}
-                </el-tag>
-              </div>
+              <el-tag size="small">
+                {{ getDictionaryForGroup(scoped.row) }}
+              </el-tag>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="assignStock"
+            label="鎸囧畾搴撳瓨"
+            width="90"
+            align="center"
+            :hidden="mainBusinessType !== '22'"
+          >
+            <template #default="scoped">
+              <el-tooltip
+                class="item"
+                effect="dark"
+                content="鎸囧畾搴撳瓨"
+                placement="bottom"
+              >
+                <el-link
+                  type="primary"
+                  :disabled="getButtonEnable('assignStock', scoped.row)"
+                  @click="handleAssignStock(scoped.row)"
+                >
+                  <i class="el-icon-s-grid" style="font-size: 22px"></i>
+                </el-link>
+              </el-tooltip>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="viewDetail"
+            label="鍑哄簱璇︾粏"
+            width="90"
+            align="center"
+          >
+            <template #default="scoped">
+              <el-tooltip
+                class="item"
+                effect="dark"
+                content="鏌ョ湅鍑哄簱璇︾粏"
+                placement="bottom"
+              >
+                <el-link
+                  type="primary"
+                  @click="handleViewDetail(scoped.row)"
+                >
+                  <i class="el-icon-s-operation" style="font-size: 22px"></i>
+                </el-link>
+              </el-tooltip>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="detailCount"
+            label="鏄庣粏鏁伴噺"
+            width="80"
+            align="center"
+          >
+            <template #default="scoped">
+              <el-tag type="info" size="small">
+                {{ scoped.row.detailCount }}
+              </el-tag>
             </template>
           </el-table-column>
         </el-table>
@@ -118,155 +211,46 @@
     <NoStockOut ref="NoStockOut" @parentCall="parentCall"></NoStockOut>
   </div>
 </template>
+
 <script>
 import VolBox from "@/components/basic/VolBox.vue";
 import VolForm from "@/components/basic/VolForm.vue";
 import StockSelect from "./StockSelect.vue";
 import SelectedStock from "./SelectedStock.vue";
 import NoStockOut from "./NoStockOut.vue";
-import { h,createVNode, render,reactive  } from 'vue';
-import { ElDialog , ElForm, ElFormItem, ElSelect,ElOption, ElButton, ElInput, ElMessage } from 'element-plus';
-import { th } from 'element-plus/es/locale';
+import { stationManager, STATION_STORAGE_KEY } from "@/../src/uitils/stationManager";
+import { h, createVNode, render, reactive } from "vue";
+import {
+  ElDialog,
+  ElForm,
+  ElFormItem,
+  ElSelect,
+  ElOption,
+  ElButton,
+  ElInput,
+  ElMessage,
+} from "element-plus";
 
 export default {
-  components: { VolBox, VolForm, StockSelect, SelectedStock,NoStockOut},
+  components: { VolBox, VolForm, StockSelect, SelectedStock, NoStockOut },
   data() {
     return {
       row: null,
+      isBatch: 0,
       showDetialBox: false,
       flag: false,
       currentRow: null,
       selection: [],
-      tableData: [],
-      tableColumns: [
-        {
-          prop: "id",
-          title: "Id",
-          type: "int",
-          width: 90,
-          hidden: true,
-        },
-        {
-          prop: "orderId",
-          title: "鍑哄簱鍗曚富閿�",
-          type: "string",
-          width: 90,
-          hidden: true,
-        },
-        {
-          prop: "materielCode",
-          title: "鐗╂枡缂栧彿",
-          type: "string",
-          width: 150,
-        },
-        {
-          prop: "materielName",
-          title: "鐗╂枡鍚嶇О",
-          type: "string",
-          width: 150,
-        },
-        {
-          prop: "batchNo",
-          title: "鎵规鍙�",
-          type: "string",
-          width: 90,
-        },
-        {
-          prop: "supplyCode",
-          title: "渚涘簲鍟嗙紪鍙�",
-          type: "string",
-          width: 150,
-        },
-        {
-          prop: "orderQuantity",
-          title: "鍗曟嵁鏁伴噺",
-          type: "string",
-          width: 90,
-        },
-        {
-          prop: "lockQuantity",
-          title: "閿佸畾鏁伴噺",
-          type: "int",
-          width: 90,
-        },
-        {
-          prop: "overOutQuantity",
-          title: "宸插嚭鏁伴噺",
-          type: "string",
-          width: 90,
-        },
-        {
-          prop: "unit",
-          title: "鍗曚綅",
-          type: "string",
-          width: 90,
-        },
-        {
-          prop: "orderDetailStatus",
-          title: "璁㈠崟鏄庣粏鐘舵��",
-          type: "tag",
-          width: 90,
-          bindKey: "orderDetailStatusEnum",
-        },
-        {
-          prop: "assignStock",
-          title: "鎸囧畾搴撳瓨",
-          type: "icon",
-          width: 90,
-          icon: "el-icon-s-grid",
-        },
-        {
-          prop: "NoStockOut",
-          title: "鏃犲簱瀛樺嚭搴�",
-          type: "icon",
-          width: 100,
-          icon: "el-icon-setting",
-        },
-        {
-          prop: "viewDetail",
-          title: "鍑哄簱璇︾粏",
-          type: "icon",
-          width: 90,
-          icon: "el-icon-s-operation",
-        },
-        {
-          prop: "creater",
-          title: "鍒涘缓浜�",
-          type: "string",
-          width: 90,
-        },
-        {
-          prop: "createDate",
-          title: "鍒涘缓鏃堕棿",
-          type: "datetime",
-          width: 160,
-        },
-        {
-          prop: "modifier",
-          title: "淇敼浜�",
-          type: "string",
-          width: 100,
-        },
-        {
-          prop: "modifyDate",
-          title: "淇敼鏃堕棿",
-          type: "datetime",
-          width: 160,
-        },
-        {
-          prop: "remark",
-          title: "澶囨敞",
-          type: "string",
-        },
-      ],
+      tableData: [], // 鍘熷鏁版嵁
+      groupedTableData: [], // 鍒嗙粍鍚庣殑鏁版嵁
+      mainBusinessType: null, // 瀛樺偍涓诲崟鎹殑businessType
       paginations: {
         sort: "id",
         order: "desc",
         Foots: "",
         total: 0,
-        // 2020.08.29澧炲姞鑷畾涔夊垎椤垫潯澶у皬
         sizes: [30, 60, 100, 120],
-        size: 30, // 榛樿鍒嗛〉澶у皬
+        size: 30,
         Wheres: [],
         page: 1,
         rows: 30,
@@ -302,13 +286,72 @@
       dictionaryList: null,
     };
   },
+        onMounted() {
+      // 浠庢湰鍦板瓨鍌ㄥ姞杞戒繚瀛樼殑绔欏彴鍊�
+      const savedStation = stationManager.getStation();
+      console.log(savedStation);
+      if (savedStation) {
+        outboundForm.selectedPlatform = savedStation;
+      } else if (stationOptions.length > 0) {
+        // 濡傛灉娌℃湁淇濆瓨鐨勫�硷紝浣跨敤绗竴涓�夐」
+        //stationValue.value = stationOptions[0].value;
+      }
+    },
   methods: {
+    // 鏍规嵁鐗╂枡缂栧彿銆佹壒娆°�佷緵搴斿晢鍒嗙粍鏁版嵁
+    groupDataByMaterial() {
+      const groups = {};
+      
+      this.tableData.forEach(item => {
+        // 鏋勫缓鍒嗙粍閿紝鎵规鍜屼緵搴斿晢鍙互涓虹┖
+        const groupKey = `${item.materielCode}_${item.batchNo || ''}_${item.supplyCode || ''}`;
+        
+        if (!groups[groupKey]) {
+          // 鍒涘缓鏂板垎缁�
+          groups[groupKey] = {
+            materielCode: item.materielCode,
+            materielName: item.materielName,
+            batchNo: item.batchNo || '-',
+            supplyCode: item.supplyCode || '-',
+            orderQuantity: 0,
+            lockQuantity: 0,
+            overOutQuantity: 0,
+            moveQty: 0,
+            unit: item.unit,
+            orderDetailStatus: item.orderDetailStatus,
+            detailCount: 0,
+            originalDetails: [] // 淇濆瓨鍘熷鏄庣粏鏁版嵁
+          };
+        }
+        
+        // 绱姞鏁伴噺
+        groups[groupKey].orderQuantity += item.orderQuantity || 0;
+        groups[groupKey].lockQuantity += item.lockQuantity || 0;
+        groups[groupKey].overOutQuantity += item.overOutQuantity || 0;
+        groups[groupKey].moveQty += item.moveQty || 0;
+        groups[groupKey].detailCount += 1;
+        groups[groupKey].originalDetails.push(item);
+        
+        // 濡傛灉鐘舵�佷笉鍚岋紝鍙互鐢ㄧ涓�涓姸鎬佹垨鐗规畩澶勭悊
+        // 杩欓噷浣跨敤绗竴涓槑缁嗙殑鐘舵��
+      });
+      
+      // 杞崲涓烘暟缁�
+      this.groupedTableData = Object.values(groups);
+      
+      console.log('鍒嗙粍鍚庣殑鏁版嵁:', this.groupedTableData);
+    },
+    
     open(row) {
       this.row = row;
       this.showDetialBox = true;
+      console.log("涓诲崟鎹暟鎹細", this.row);
+      this.isBatch = row.isBatch;
+      this.mainBusinessType = row.businessType;
       this.getDictionaryData();
       this.getData();
     },
+    
     getData() {
       var wheres = [{ name: "orderId", value: this.row.id }];
       var param = {
@@ -316,31 +359,72 @@
         rows: this.paginations.rows,
         sort: this.paginations.sort,
         order: this.paginations.order,
-        wheres: JSON.stringify(wheres), // 鏌ヨ鏉′欢锛屾牸寮忎负[{ name: "瀛楁", value: "xx" }]
+        wheres: JSON.stringify(wheres),
       };
       this.http
         .post("api/OutboundOrderDetail/GetPageData", param, "鏌ヨ涓�")
         .then((x) => {
           this.tableData = x.rows;
+          // 鍒嗙粍鏁版嵁
+          this.groupDataByMaterial();
         });
     },
-    tableButtonClick(row, column) {
-      if (column.prop == "assignStock") {
-        this.$refs.child.open(row);
-      } else if (column.prop == "NoStockOut") {
-        this.$refs.NoStockOut.open(row);
-      }else{
-          //鐐瑰嚮鎵撳紑鍑哄簱璇︽儏
-        this.$refs.selectedStock.open(row);
+    
+    // 閲嶇偣淇敼锛氬鐞嗘寚瀹氬簱瀛樼偣鍑讳簨浠� - 浼犻�掑畬鏁寸殑鍒嗙粍鏄庣粏淇℃伅
+    handleAssignStock(row) {
+      // 浼犻�掑畬鏁寸殑鍒嗙粍鏄庣粏鏁版嵁锛堝寘鍚墍鏈夊師濮嬫槑缁咺D鍜岀墿鏂欎俊鎭級
+      if (row.originalDetails && row.originalDetails.length > 0) {
+        this.$refs.child.open({
+          // 鐗╂枡鍩烘湰淇℃伅锛堝彇绗竴涓槑缁嗙殑淇℃伅锛�
+          materielCode: row.originalDetails[0].materielCode,
+          materielName: row.originalDetails[0].materielName,
+          // 鍒嗙粍鍚庣殑鎬婚渶姹傛暟閲�
+          qty: row.orderQuantity,
+          // 涓诲崟鎹紪鍙�
+          upperOrderNo: this.row.upperOrderNo,
+          // 鍏抽敭锛氬綋鍓嶅垎缁勭殑鎵�鏈夋槑缁咺D闆嗗悎
+          detailIds: row.originalDetails.map(detail => detail.id),
+          // 涓诲崟鎹甀D
+          mainOrderId: this.row.id,
+          // 瀹屾暣鍒嗙粍琛屼俊鎭紙澶囩敤锛�
+          groupRow: row
+        });
+      } else {
+        ElMessage.warning("璇ュ垎缁勬病鏈夋槑缁嗘暟鎹紝鏃犳硶鎸囧畾搴撳瓨");
       }
     },
+    
+    handleViewDetail(row) {
+      // 鏌ョ湅鍒嗙粍鏄庣粏鐨勮缁嗕俊鎭�
+      if (row.originalDetails && row.originalDetails.length > 0) {
+        // 杩欓噷鍙互鎵撳紑涓�涓柊鐨勫脊绐楁樉绀烘墍鏈夋槑缁嗭紝鎴栬�呬娇鐢ㄧ涓�涓槑缁�
+        this.$refs.selectedStock.open(row.originalDetails[0]);
+      }
+    },
+    
     lockstocks() {
       if (this.selection.length === 0) {
         return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
       }
-      var keys = this.selection.map((item) => item.id); // 鑾峰彇閫変腑琛岀殑id
+      
+      // 鑾峰彇鎵�鏈夐�変腑鍒嗙粍鐨勫師濮嬫槑缁咺D
+      const detailIds = [];
+      this.selection.forEach(group => {
+        if (group.originalDetails && group.originalDetails.length > 0) {
+          group.originalDetails.forEach(detail => {
+            if (detail.id) {
+              detailIds.push(detail.id);
+            }
+          });
+        }
+      });
+      
+      if (detailIds.length === 0) {
+        return this.$message.error("娌℃湁鎵惧埌鍙攣瀹氱殑鏄庣粏");
+      }
+      
       this.http
-        .post("api/OutboundOrderDetail/LockOutboundStocks", keys, "鏁版嵁澶勭悊涓�")
+        .post("api/OutboundOrderDetail/LockOutboundStocks", detailIds, "鏁版嵁澶勭悊涓�")
         .then((x) => {
           if (!x.status) return this.$message.error(x.message);
           this.$message.success("鎿嶄綔鎴愬姛");
@@ -350,384 +434,428 @@
           });
         });
     },
-    // 鎵撳紑鎷i�夐〉闈�
-   handleOpenPicking() {
+    
+    handleOpenPicking() {
       this.$router.push({
-        path: '/outbound/picking',
-        query: { orderId: this.row.id ,orderNo:this.row.orderNo}
-      })
+        path: "/outbound/picking",
+        query: { orderId: this.row.id, orderNo: this.row.orderNo },
+      });
     },
+    
     handleOpenBatchPicking() {
-      this.$router.push({ 
-        path: '/outbound/batchpicking',
-        query: { orderId: this.row.id ,orderNo:this.row.orderNo}})
+      this.$router.push({
+        path: "/outbound/batchpicking",
+        query: { orderId: this.row.id, orderNo: this.row.orderNo },
+      });
     },
+    
     outbound() {
+        const savedStation = stationManager.getStation();
+      console.log(savedStation);
       if (this.selection.length === 0) {
         return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
       }
-      const platformOptions = [{label:'绔欏彴2',value:'2-1'},{label:'绔欏彴3',value:'3-1'}];
-      const mountNode = document.createElement('div');
+      
+      // 鑾峰彇鎵�鏈夐�変腑鍒嗙粍鐨勫師濮嬫槑缁咺D
+      const detailIds = [];
+      this.selection.forEach(group => {
+        if (group.originalDetails && group.originalDetails.length > 0) {
+          group.originalDetails.forEach(detail => {
+            if (detail.id) {
+              detailIds.push(detail.id);
+            }
+          });
+        }
+      });
+      
+      if (detailIds.length === 0) {
+        return this.$message.error("娌℃湁鎵惧埌鍙嚭搴撶殑鏄庣粏");
+      }
+      
+      const platformOptions = [
+        { label: "绔欏彴2", value: "2-1" },
+        { label: "绔欏彴3", value: "3-1" },
+      ];
+      const mountNode = document.createElement("div");
       document.body.appendChild(mountNode);
 
-      // 2. 琛ㄥ崟鏁版嵁锛堥粯璁ら�変腑绔欏彴3锛�
       const formData = reactive({
-        selectedPlatform: platformOptions[0].value // 榛樿缁戝畾銆岀珯鍙�3銆嶇殑value
+        selectedPlatform: platformOptions[0].value,
       });
 
-      // 3. 鍔ㄦ�佸垱寤哄脊绐楃粍浠�
-      const vnode = createVNode(ElDialog, {
-        title: '鍑哄簱鎿嶄綔 - 閫夋嫨鍑哄簱绔欏彴',
-        width: '500px',
-        modelValue: true,
-        appendToBody: true,
-        'onUpdate:modelValue': (isVisible) => {
-          if (!isVisible) {
-            render(null, mountNode);
-            document.body.removeChild(mountNode);
-          }
-        }, 
-        style: {
-          padding: '20px 0',
-          borderRadius: '8px'
-        }
-      }, {
-        default: () => h(ElForm, {
-          model: formData,
-          rules: {
-            selectedPlatform: [
-              { required: true, message: '璇烽�夋嫨鍑哄簱绔欏彴', trigger: 'change' }
-            ]
+      if (savedStation) {
+        formData.selectedPlatform = savedStation;
+      } 
+      const vnode = createVNode(
+        ElDialog,
+        {
+          title: "鍑哄簱鎿嶄綔 - 閫夋嫨鍑哄簱绔欏彴",
+          width: "500px",
+          modelValue: true,
+          appendToBody: true,
+          "onUpdate:modelValue": (isVisible) => {
+            if (!isVisible) {
+              render(null, mountNode);
+              document.body.removeChild(mountNode);
+            }
           },
-          ref: 'outboundForm',
-          labelWidth: '100px',
           style: {
-            padding: '0 30px'
-          }
-        }, [
-          // 鍑哄簱绔欏彴閫夋嫨椤癸紙鏍稿績琛ㄥ崟椤癸級
-          h(ElFormItem, {
-            label: '鍑哄簱绔欏彴',
-            prop: 'selectedPlatform',
-            style: {
-              marginBottom: '24px'
-            }
-          }, [
-            h(ElSelect, {
-              placeholder: '璇烽�夋嫨鍑哄簱绔欏彴锛�3-12锛�',
-              modelValue: formData.selectedPlatform,
-              'onUpdate:modelValue': (val) => {
-                formData.selectedPlatform = val;
+            padding: "20px 0",
+            borderRadius: "8px",
+          },
+        },
+        {
+          default: () =>
+            h(
+              ElForm,
+              {
+                model: formData,
+                rules: {
+                  selectedPlatform: [
+                    { required: true, message: "璇烽�夋嫨鍑哄簱绔欏彴", trigger: "change" },
+                  ],
+                },
+                ref: "outboundForm",
+                labelWidth: "100px",
+                style: {
+                  padding: "0 30px",
+                },
               },
-              style: {
-                width: '100%',
-                height: '40px',
-                borderRadius: '4px',
-                borderColor: '#dcdfe6'
-              }
-            }, platformOptions.map(platform => 
-              h(ElOption, { label: platform.label, value: platform.value })
-            ))
-          ]),
-          // 搴曢儴鎸夐挳鍖�
-          h('div', {
-            style: {
-              textAlign: 'right',
-              marginTop: '8px',
-              paddingRight: '4px'
-            }
-          }, [
-            h(ElButton, {
-              type: 'text',
-              onClick: () => {
-                render(null, mountNode);
-                document.body.removeChild(mountNode);
-                ElMessage.info('鍙栨秷鍑哄簱鎿嶄綔');
-              },
-              style: {
-                marginRight: '8px',
-                color: '#606266'
-              }
-            }, '鍙栨秷'),
-            h(ElButton, {
-              type: 'primary',
-              onClick: async () => {
-                const formRef = vnode.component.refs.outboundForm;
-                try {
-                  // 琛ㄥ崟鏍¢獙
-                  await formRef.validate();
-                } catch (err) {
-                  return;
-                }
+              [
+                h(ElFormItem, {
+                  label: "鍑哄簱绔欏彴",
+                  prop: "selectedPlatform",
+                  style: {
+                    marginBottom: "24px",
+                  },
+                }, [
+                  h(ElSelect, {
+                    placeholder: "璇烽�夋嫨鍑哄簱绔欏彴",
+                    modelValue: formData.selectedPlatform,
+                    "onUpdate:modelValue": (val) => {
+                      formData.selectedPlatform = val;
+                    },
+                    style: {
+                      width: "100%",
+                      height: "40px",
+                      borderRadius: "4px",
+                      borderColor: "#dcdfe6",
+                    },
+                  }, platformOptions.map((platform) =>
+                    h(ElOption, { label: platform.label, value: platform.value })
+                  )),
+                ]),
+                h("div", {
+                  style: {
+                    textAlign: "right",
+                    marginTop: "8px",
+                    paddingRight: "4px",
+                  },
+                }, [
+                  h(ElButton, {
+                    type: "text",
+                    onClick: () => {
+                      render(null, mountNode);
+                      document.body.removeChild(mountNode);
+                      ElMessage.info("鍙栨秷鍑哄簱鎿嶄綔");
+                    },
+                    style: {
+                      marginRight: "8px",
+                      color: "#606266",
+                    },
+                  }, "鍙栨秷"),
+                  h(ElButton, {
+                    type: "primary",
+                    onClick: async () => {
+                      const formRef = vnode.component.refs.outboundForm;
+                      try {
+                        await formRef.validate();
+                      } catch (err) {
+                        return;
+                      }
 
-                // 4. 鏋勯�犺姹傚弬鏁帮紙閫変腑鍗曟嵁ID + 閫夋嫨鐨勫嚭搴撶珯鍙帮級
-                const keys = this.selection.map((item) => item.id);
-                const requestParams = {
-                  taskIds: keys,
-                  outboundPlatform: formData.selectedPlatform // 鍑哄簱绔欏彴
-                };
+                      const requestParams = {
+                        taskIds: detailIds,
+                        outboundPlatform: formData.selectedPlatform,
+                      };
 
-                // 5. 璋冪敤鍑哄簱鎺ュ彛
-                this.http
-                  .post("api/Task/GenerateOutboundTasks", requestParams, "鏁版嵁澶勭悊涓�")
-                  .then((x) => {
-                    if (!x.status) return ElMessage.error(x.message);
-                    
-                    ElMessage.success("鎿嶄綔鎴愬姛");
-                    this.showDetialBox = false; // 鍏抽棴璇︽儏妗�
-                    this.$emit("parentCall", ($vue) => {
-                      $vue.getData(); // 閫氱煡鐖剁粍浠跺埛鏂�
-                    });
-                    // 鍏抽棴寮圭獥
-                    render(null, mountNode);
-                    document.body.removeChild(mountNode);
-                  })
-                  .catch(() => {
-                    ElMessage.error('璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯');
-                  });
-              },
-              style: {
-                borderRadius: '4px',
-                padding: '8px 20px'
-              }
-            }, '纭畾鍑哄簱')
-          ])
-        ])
-      });
+                      this.http
+                        .post(
+                          "api/Task/GenerateOutboundTasks",
+                          requestParams,
+                          "鏁版嵁澶勭悊涓�"
+                        )
+                        .then((x) => {
+                          if (!x.status) return ElMessage.error(x.message);
+                          ElMessage.success("鎿嶄綔鎴愬姛");
+                          this.showDetialBox = false;
+                          this.$emit("parentCall", ($vue) => {
+                            $vue.getData();
+                          });
+                          render(null, mountNode);
+                          document.body.removeChild(mountNode);
+                        })
+                        .catch(() => {
+                          ElMessage.error("璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯");
+                        });
+                    },
+                    style: {
+                      borderRadius: "4px",
+                      padding: "8px 20px",
+                    },
+                  }, "纭畾鍑哄簱"),
+                ]),
+              ]),
+        }
+      );
 
-      // 缁戝畾app涓婁笅鏂囷紝纭繚El缁勪欢姝e父宸ヤ綔
       vnode.appContext = this.$.appContext;
       render(vnode, mountNode);
     },
+    
     outboundbatch() {
-  if (this.selection.length === 0) {
-    return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
-  }
-    if (this.selection.length>1) {
-    return this.$message.error("鍙兘閫夋嫨涓�鏉″崟鎹槑缁嗚繘琛屽垎鎵瑰嚭搴�");
-  }
-  const platformOptions = [{label:'绔欏彴2',value:'2-1'},{label:'绔欏彴3',value:'3-1'}];
-  const mountNode = document.createElement('div');
-  document.body.appendChild(mountNode);
-
-  // 2. 琛ㄥ崟鏁版嵁锛堥粯璁ら�変腑绔欏彴3锛屾柊澧炲皬鏁板瓧娈碉級
-  const formData = reactive({
-    selectedPlatform: platformOptions[0].value, // 榛樿缁戝畾銆岀珯鍙�3銆嶇殑value
-    outboundDecimal: '' // 鏂板锛氬皬鏁拌緭鍏ユ瀛楁
-  });
-
-  // 3. 鍔ㄦ�佸垱寤哄脊绐楃粍浠�
-  const vnode = createVNode(ElDialog, {
-    title: '鍑哄簱鎿嶄綔 - 閫夋嫨鍑哄簱绔欏彴',
-    width: '500px',
-    modelValue: true,
-    appendToBody: true,
-    'onUpdate:modelValue': (isVisible) => {
-      if (!isVisible) {
-        render(null, mountNode);
-        document.body.removeChild(mountNode);
+       const savedStation = stationManager.getStation();
+      console.log(savedStation);
+      if (this.selection.length === 0) {
+        return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
       }
-    }, 
-    style: {
-      padding: '20px 0',
-      borderRadius: '8px'
-    }
-  }, {
-    default: () => h(ElForm, {
-      model: formData,
-      rules: {
-        selectedPlatform: [
-          { required: true, message: '璇烽�夋嫨鍑哄簱绔欏彴', trigger: 'change' }
-        ],
-        // 鏂板锛氬皬鏁板瓧娈甸獙璇佽鍒欙紙蹇呭~ + 鏈夋晥灏忔暟鏍煎紡锛�
-        outboundDecimal: [
-          { required: true, message: '璇疯緭鍏ュ皬鏁版暟鍊�', trigger: 'blur' },
-          { 
-            validator: (rule, value, callback) => {
-              // 楠岃瘉瑙勫垯锛氭鏁般�佹敮鎸佸皬鏁扮偣鍚庢渶澶�2浣嶏紙鍙牴鎹渶姹傝皟鏁村皬鏁颁綅鏁帮級
-              const decimalReg = /^(([1-9]\d*)|0)(\.\d{1,2})?$/;
-              if (value && !decimalReg.test(value)) {
-                callback(new Error('璇疯緭鍏ユ湁鏁堢殑灏忔暟锛堟鏁帮紝鏈�澶�2浣嶅皬鏁帮級'));
-              } else {
-                callback();
-              }
-            },
-            trigger: 'blur'
-          }
-        ]
-      },
-      ref: 'outboundForm',
-      labelWidth: '100px',
-      style: {
-        padding: '0 30px'
+      if (this.selection.length > 1) {
+        return this.$message.error("鍙兘閫夋嫨涓�鏉″崟鎹槑缁嗚繘琛屽垎鎵瑰嚭搴�");
       }
-    }, [
-      // 鍑哄簱绔欏彴閫夋嫨椤癸紙鏍稿績琛ㄥ崟椤癸級
-      h(ElFormItem, {
-        label: '鍑哄簱绔欏彴',
-        prop: 'selectedPlatform',
-        style: {
-          marginBottom: '24px'
-        }
-      }, [
-        h(ElSelect, {
-          placeholder: '璇烽�夋嫨鍑哄簱绔欏彴锛�3-12锛�',
-          modelValue: formData.selectedPlatform,
-          'onUpdate:modelValue': (val) => {
-            formData.selectedPlatform = val;
-          },
-          style: {
-            width: '100%',
-            height: '40px',
-            borderRadius: '4px',
-            borderColor: '#dcdfe6'
-          }
-        }, platformOptions.map(platform => 
-          h(ElOption, { label: platform.label, value: platform.value })
-        ))
-      ]),
-      // 鏂板锛氬皬鏁拌緭鍏ユ琛ㄥ崟椤�
-      h(ElFormItem, {
-        label: '鍑哄簱鏁�', // 鍙牴鎹笟鍔¢渶姹備慨鏀规爣绛惧悕锛堝鈥滃嚭搴撴暟閲忊�濃�滈噸閲忊�濈瓑锛�
-        prop: 'outboundDecimal',
-        style: {
-          marginBottom: '24px'
-        }
-      }, [
-        h(ElInput, {
-          type: 'number', // 鏁板瓧绫诲瀷锛屽師鐢熸敮鎸佸皬鏁拌緭鍏�
-          placeholder: '璇疯緭鍏ュ皬鏁版暟鍊硷紙鏈�澶�2浣嶅皬鏁帮級',
-          modelValue: formData.outboundDecimal,
-          'onUpdate:modelValue': (val) => {
-            formData.outboundDecimal = val;
-          },
-          style: {
-            width: '100%',
-            height: '40px',
-            borderRadius: '4px',
-            borderColor: '#dcdfe6'
-          },
-          step: '0.01', // 姝ラ暱0.01锛岀偣鍑讳笂涓嬬澶存椂鎸�0.01澧炲噺
-          precision: 2, // 闄愬埗鏈�澶氳緭鍏�2浣嶅皬鏁帮紙Element Plus灞炴�э級
-          min: 0.01, // 鍙�夛細闄愬埗鏈�灏忓�间负0.01锛岄伩鍏嶈緭鍏�0鎴栬礋鏁�
-        })
-      ]),
-      // 搴曢儴鎸夐挳鍖�
-      h('div', {
-        style: {
-          textAlign: 'right',
-          marginTop: '8px',
-          paddingRight: '4px'
-        }
-      }, [
-        h(ElButton, {
-          type: 'text',
-          onClick: () => {
-            render(null, mountNode);
-            document.body.removeChild(mountNode);
-            ElMessage.info('鍙栨秷鍒嗘壒鍑哄簱鎿嶄綔');
-          },
-          style: {
-            marginRight: '8px',
-            color: '#606266'
-          }
-        }, '鍙栨秷'),
-        h(ElButton, {
-          type: 'primary',
-          onClick: async () => {
-            const formRef = vnode.component.refs.outboundForm;
-            try {
-              // 琛ㄥ崟鏍¢獙锛堜細鍚屾椂鏍¢獙鍑哄簱绔欏彴鍜屽皬鏁板瓧娈碉級
-              await formRef.validate();
-            } catch (err) {
-              return;
-            }
-console.log(this.selection);
-            // 4. 鏋勯�犺姹傚弬鏁帮紙鏂板灏忔暟瀛楁锛�
-            const keys = this.selection.map((item) => item.id);
-            const requestParams = {
-              orderDetailId: keys[0], // 鍒嗘壒鍑哄簱浠呮敮鎸佸崟鏉℃槑缁�
-              outboundPlatform: formData.selectedPlatform, // 鍑哄簱绔欏彴
-              batchQuantity: formData.outboundDecimal // 鏂板锛氬皬鏁板瓧娈典紶缁欏悗绔�
-            };
-
-            // 5. 璋冪敤鍑哄簱鎺ュ彛
-            this.http
-              .post("api/Task/GenerateOutboundBatchTasks", requestParams, "鏁版嵁澶勭悊涓�")
-              .then((x) => {
-                if (!x.status) return ElMessage.error(x.message);
-                
-                ElMessage.success("鎿嶄綔鎴愬姛");
-                this.showDetialBox = false; // 鍏抽棴璇︽儏妗�
-                this.$emit("parentCall", ($vue) => {
-                  $vue.getData(); // 閫氱煡鐖剁粍浠跺埛鏂�
-                });
-                // 鍏抽棴寮圭獥
-                render(null, mountNode);
-                document.body.removeChild(mountNode);
-              })
-              .catch(() => {
-                ElMessage.error('璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯');
-              });
-          },
-          style: {
-            borderRadius: '4px',
-            padding: '8px 20px'
-          }
-        }, '纭畾鍒嗘壒鍑哄簱')
-      ])
-    ])
-  });
-
-  // 缁戝畾app涓婁笅鏂囷紝纭繚El缁勪欢姝e父宸ヤ綔
-  vnode.appContext = this.$.appContext;
-  render(vnode, mountNode);
-},
       
+      const selectedGroup = this.selection[0];
+      if (!selectedGroup.originalDetails || selectedGroup.originalDetails.length === 0) {
+        return this.$message.error("娌℃湁鎵惧埌鏄庣粏鏁版嵁");
+      }
+      
+      // 鍒嗘壒鍑哄簱閫氬父閽堝鍗曚釜鏄庣粏
+      // 杩欓噷浣跨敤绗竴涓槑缁�
+      const selectedDetail = selectedGroup.originalDetails[0];
+      
+      const platformOptions = [
+        { label: "绔欏彴2", value: "2-1" },
+        { label: "绔欏彴3", value: "3-1" },
+      ];
+      const mountNode = document.createElement("div");
+      document.body.appendChild(mountNode);
 
+      const formData = reactive({
+        selectedPlatform: platformOptions[0].value,
+        outboundDecimal: "",
+      });
+  if (savedStation) {
+        formData.selectedPlatform = savedStation;
+      } 
+      const vnode = createVNode(
+        ElDialog,
+        {
+          title: "鍑哄簱鎿嶄綔 - 閫夋嫨鍑哄簱绔欏彴",
+          width: "500px",
+          modelValue: true,
+          appendToBody: true,
+          "onUpdate:modelValue": (isVisible) => {
+            if (!isVisible) {
+              render(null, mountNode);
+              document.body.removeChild(mountNode);
+            }
+          },
+          style: {
+            padding: "20px 0",
+            borderRadius: "8px",
+          },
+        },
+        {
+          default: () =>
+            h(
+              ElForm,
+              {
+                model: formData,
+                rules: {
+                  selectedPlatform: [
+                    { required: true, message: "璇烽�夋嫨鍑哄簱绔欏彴", trigger: "change" },
+                  ],
+                  outboundDecimal: [
+                    { required: true, message: "璇疯緭鍏ュ皬鏁版暟鍊�", trigger: "blur" },
+                    {
+                      validator: (rule, value, callback) => {
+                        const decimalReg = /^(([1-9]\d*)|0)(\.\d{1,2})?$/;
+                        if (value && !decimalReg.test(value)) {
+                          callback(new Error("璇疯緭鍏ユ湁鏁堢殑灏忔暟锛堟鏁帮紝鏈�澶�2浣嶅皬鏁帮級"));
+                        } else {
+                          callback();
+                        }
+                      },
+                      trigger: "blur",
+                    },
+                  ],
+                },
+                ref: "outboundForm",
+                labelWidth: "100px",
+                style: {
+                  padding: "0 30px",
+                },
+              },
+              [
+                h(ElFormItem, {
+                  label: "鍑哄簱绔欏彴",
+                  prop: "selectedPlatform",
+                  style: {
+                    marginBottom: "24px",
+                  },
+                }, [
+                  h(ElSelect, {
+                    placeholder: "璇烽�夋嫨鍑哄簱绔欏彴",
+                    modelValue: formData.selectedPlatform,
+                    "onUpdate:modelValue": (val) => {
+                      formData.selectedPlatform = val;
+                    },
+                    style: {
+                      width: "100%",
+                      height: "40px",
+                      borderRadius: "4px",
+                      borderColor: "#dcdfe6",
+                    },
+                  }, platformOptions.map((platform) =>
+                    h(ElOption, { label: platform.label, value: platform.value })
+                  )),
+                ]),
+                h(ElFormItem, {
+                  label: "鍑哄簱鏁�",
+                  prop: "outboundDecimal",
+                  style: {
+                    marginBottom: "24px",
+                  },
+                }, [
+                  h(ElInput, {
+                    type: "number",
+                    placeholder: "璇疯緭鍏ュ皬鏁版暟鍊硷紙鏈�澶�2浣嶅皬鏁帮級",
+                    modelValue: formData.outboundDecimal,
+                    "onUpdate:modelValue": (val) => {
+                      formData.outboundDecimal = val;
+                    },
+                    style: {
+                      width: "100%",
+                      height: "40px",
+                      borderRadius: "4px",
+                      borderColor: "#dcdfe6",
+                    },
+                    step: "0.01",
+                    precision: 2,
+                    min: 0.01,
+                    max: selectedDetail.orderQuantity - selectedDetail.overOutQuantity - selectedDetail.lockQuantity - selectedDetail.moveQty,
+                  }),
+                ]),
+                h("div", {
+                  style: {
+                    textAlign: "right",
+                    marginTop: "8px",
+                    paddingRight: "4px",
+                  },
+                }, [
+                  h(ElButton, {
+                    type: "text",
+                    onClick: () => {
+                      render(null, mountNode);
+                      document.body.removeChild(mountNode);
+                      ElMessage.info("鍙栨秷鍒嗘壒鍑哄簱鎿嶄綔");
+                    },
+                    style: {
+                      marginRight: "8px",
+                      color: "#606266",
+                    },
+                  }, "鍙栨秷"),
+                  h(ElButton, {
+                    type: "primary",
+                    onClick: async () => {
+                      const formRef = vnode.component.refs.outboundForm;
+                      try {
+                        await formRef.validate();
+                      } catch (err) {
+                        return;
+                      }
+
+                      const requestParams = {
+                        orderDetailId: selectedDetail.id,
+                        outboundPlatform: formData.selectedPlatform,
+                        batchQuantity: formData.outboundDecimal,
+                      };
+
+                      this.http
+                        .post(
+                          "api/Task/GenerateOutboundBatchTasks",
+                          requestParams,
+                          "鏁版嵁澶勭悊涓�"
+                        )
+                        .then((x) => {
+                          if (!x.status) return ElMessage.error(x.message);
+                          ElMessage.success("鎿嶄綔鎴愬姛");
+                          this.showDetialBox = false;
+                          this.$emit("parentCall", ($vue) => {
+                            $vue.getData();
+                          });
+                          render(null, mountNode);
+                          document.body.removeChild(mountNode);
+                        })
+                        .catch(() => {
+                          ElMessage.error("璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯");
+                        });
+                    },
+                    style: {
+                      borderRadius: "4px",
+                      padding: "8px 20px",
+                    },
+                  }, "纭畾鍒嗘壒鍑哄簱"),
+                ]),
+              ]),
+        }
+      );
+
+      vnode.appContext = this.$appContext;
+      render(vnode, mountNode);
+    },
+    
     setCurrent(row) {
       this.$refs.singleTable.setCurrentRow(row);
     },
+    
     handleCurrentChange(val) {
       this.currentRow = val;
     },
+    
     getButtonEnable(propName, row) {
       if (propName == "assignStock") {
         if (
           row.orderDetailStatus !== 0 &&
-          row.orderDetailStatus !== 60 &&
-          row.orderDetailStatus !== 70 &&
-          row.orderDetailStatus !== 80
+          row.orderDetailStatus !== 70 
         ) {
-          return true;
-        } else {
           return false;
+        } else {
+          return true;
         }
       }
       return false;
     },
+    
     parentCall(fun) {
       if (typeof fun != "function") {
         return console.log("鎵╁睍缁勪欢闇�瑕佷紶鍏ヤ竴涓洖璋冩柟娉曟墠鑳借幏鍙栫埗绾ue瀵硅薄");
       }
       fun(this);
     },
+    
     handleRowClick(row) {
       this.$refs.singleTable.toggleRowSelection(row);
     },
+    
     handleSelectionChange(val) {
       this.selection = val;
     },
+    
     getDictionaryData() {
       if (this.dictionaryList) {
         return;
       }
-      var param = [];
-      this.tableColumns.forEach((x) => {
-        if (x.type == "tag" && x.bindKey != "") {
-          param.push(x.bindKey);
-        }
-      });
+      var param = ["orderDetailStatusEnum"];
       this.http
         .post("api/Sys_Dictionary/GetVueDictionary", param, "鏌ヨ涓�")
         .then((x) => {
@@ -736,25 +864,27 @@
           }
         });
     },
-    getDictionary(row, column) {
+    
+    getDictionaryForGroup(row) {
       if (this.dictionaryList) {
-        var item = this.dictionaryList.find((x) => x.dicNo == column.bindKey);
+        var item = this.dictionaryList.find((x) => x.dicNo == "orderDetailStatusEnum");
         if (item) {
-          var dicItem = item.data.find((x) => x.key == row[column.prop]);
-          console.log(dicItem);
+          var dicItem = item.data.find((x) => x.key == row.orderDetailStatus);
           if (dicItem) {
             return dicItem.value;
           } else {
-            return row[column.prop];
+            return row.orderDetailStatus;
           }
         } else {
-          return row[column.prop];
+          return row.orderDetailStatus;
         }
       }
+      return row.orderDetailStatus;
     },
   },
 };
 </script>
+
 <style scoped>
 .text-button {
   border: 0px;
@@ -772,12 +902,10 @@
 
 .box-table .el-table tbody tr:hover > td {
   background-color: #d8e0d4 !important;
-  /* color: #ffffff; */
 }
 
 .box-table .el-table tbody tr.current-row > td {
   background-color: #f0f9eb !important;
-  /* color: #ffffff; */
 }
 
 .el-table .success-row {
@@ -787,4 +915,4 @@
 .box-table .el-table {
   border: 1px solid #ebeef5;
 }
-</style>
+</style>
\ No newline at end of file

--
Gitblit v1.9.3