From 266e4bf654c55ce2f7e9271048e4625f1b8b49f6 Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期一, 29 十二月 2025 14:36:08 +0800
Subject: [PATCH] Merge branch 'htq20251215' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu into htq20251215

---
 项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue |  872 ++++++++++++++-------------------------------------------
 1 files changed, 219 insertions(+), 653 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 1dd121e..7d27ed6 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"
@@ -1,12 +1,6 @@
 <template>
   <div>
-    <vol-box
-      v-model="showDetialBox"
-      :lazy="true"
-      width="75%"
-      :padding="15"
-      title="鍗曟嵁鏄庣粏淇℃伅"
-    >
+    <vol-box v-model="showDetialBox" :lazy="true" width="75%" :padding="15" title="鍗曟嵁鏄庣粏淇℃伅">
       <div class="box-head">
         <el-alert :closable="false" style="width: 100%">
           <el-row>
@@ -14,201 +8,54 @@
               <span>宸查�変腑 {{ selection.length }} 椤�</span>
             </el-col>
             <el-col :span="8">
-              <el-link
-                type="primary"
-                size="small"
-                v-if="isBatch === 0"
-                style="float: right; height: 20px"
-                @click="handleOpenPicking"
-                >鎷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
-              >
-              <el-link
-                type="primary"
-                size="small"
-                v-if="isBatch === 0"
-                style="float: right; height: 20px; margin-right: 10px"
-                @click="outbound"
-                >鐩存帴鍑哄簱</el-link
-              >
-              <el-link
-                type="primary"
-                size="small"
-                v-if="isBatch === 1"
-                style="float: right; height: 20px; margin-right: 10px"
-                @click="outboundbatch"
-                >鍒嗘壒鍑哄簱</el-link
-              >
-              <el-link
-                type="primary"
-                size="small"
-                style="float: right; height: 20px; margin-right: 10px"
-                @click="getData"
-                >鍒锋柊</el-link
-              >
+              <el-link type="primary" size="small" v-if="isBatch === 0" style="float: right; height: 20px"
+                @click="handleOpenPicking">鎷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>
+              <el-link type="primary" size="small" v-if="isBatch === 0"
+                style="float: right; height: 20px; margin-right: 10px" @click="outbound">鐩存帴鍑哄簱</el-link>
+              <el-link type="primary" size="small" v-if="isBatch === 1"
+                style="float: right; height: 20px; margin-right: 10px" @click="outboundbatch">鍒嗘壒鍑哄簱</el-link>
+              <el-link type="primary" size="small" style="float: right; height: 20px; margin-right: 10px"
+                @click="getData">鍒锋柊</el-link>
             </el-col>
           </el-row>
         </el-alert>
       </div>
       <div class="box-table" style="margin-top: 1%">
-        <el-table
-          ref="singleTable"
-          :data="groupedTableData"
-          style="width: 100%; height: 100%"
-          highlight-current-row
-          @current-change="handleCurrentChange"
-          height="500px"
-          @row-click="handleRowClick"
-          @selection-change="handleSelectionChange"
-        >
+        <el-table ref="singleTable" :data="tableData" style="width: 100%; height: 100%" highlight-current-row
+          @current-change="handleCurrentChange" height="500px" @row-click="handleRowClick"
+          @selection-change="handleSelectionChange">
           <el-table-column type="selection" width="55"> </el-table-column>
-          <el-table-column
-            label="搴忓彿"
-            type="index"
-            fixed="left"
-            width="55"
-            align="center"
-          ></el-table-column>
-          <el-table-column
-            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"
-          >
+          <el-table-column label="搴忓彿" type="index" fixed="left" width="55" 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" align="center">
             <template #default="scoped">
-              <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>
+              <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>
+              <div v-else>
+                {{ scoped.row[item.prop] }}
+              </div>
             </template>
           </el-table-column>
         </el-table>
       </div>
     </vol-box>
     <stock-select ref="child" @parentCall="parentCall"></stock-select>
-    <selected-stock
-      ref="selectedStock"
-      @parentCall="parentCall"
-    ></selected-stock>
+    <selected-stock ref="selectedStock" @parentCall="parentCall"></selected-stock>
     <NoStockOut ref="NoStockOut" @parentCall="parentCall"></NoStockOut>
+    <DirectOutbound ref="DirectOutbound" @parentCall="parentCall"></DirectOutbound>
   </div>
 </template>
 
@@ -218,6 +65,7 @@
 import StockSelect from "./StockSelect.vue";
 import SelectedStock from "./SelectedStock.vue";
 import NoStockOut from "./NoStockOut.vue";
+import DirectOutbound from "./DirectOutbound.vue";
 import { h, createVNode, render, reactive } from "vue";
 import {
   ElDialog,
@@ -231,7 +79,7 @@
 } from "element-plus";
 
 export default {
-  components: { VolBox, VolForm, StockSelect, SelectedStock, NoStockOut },
+  components: { VolBox, VolForm, StockSelect, SelectedStock, NoStockOut, DirectOutbound },
   data() {
     return {
       row: null,
@@ -240,9 +88,129 @@
       flag: false,
       currentRow: null,
       selection: [],
-      tableData: [], // 鍘熷鏁版嵁
-      groupedTableData: [], // 鍒嗙粍鍚庣殑鏁版嵁
-      mainBusinessType: null, // 瀛樺偍涓诲崟鎹殑businessType
+      tableData: [],
+      mainBusinessType: null, // 鏂板锛氬瓨鍌ㄤ富鍗曟嵁鐨刡usinessType
+      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: 120,
+        },
+        {
+          prop: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "batchNo",
+          title: "鎵规鍙�",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "supplyCode",
+          title: "渚涘簲鍟嗙紪鍙�",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "orderQuantity",
+          title: "鍗曟嵁鏁伴噺",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "lockQuantity",
+          title: "閿佸畾鏁伴噺",
+          type: "int",
+          width: 90,
+        },
+        {
+          prop: "overOutQuantity",
+          title: "宸插嚭鏁伴噺",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "moveQty",
+          title: "鎸枡鏁伴噺",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "unit",
+          title: "鍗曚綅",
+          type: "string",
+          width: 80,
+        },
+        {
+          prop: "orderDetailStatus",
+          title: "璁㈠崟鏄庣粏鐘舵��",
+          type: "tag",
+          width: 90,
+          bindKey: "orderDetailStatusEnum",
+        },
+        {
+          prop: "assignStock",
+          title: "鎸囧畾搴撳瓨",
+          type: "icon",
+          width: 90,
+          //hidden: true, // 榛樿闅愯棌
+          icon: "el-icon-s-grid",
+        },
+        {
+          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",
+        },
+      ],
       paginations: {
         sort: "id",
         order: "desc",
@@ -286,50 +254,15 @@
     };
   },
   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);
+    toggleAssignStockColumn() {
+      const assignStockColumn = this.tableColumns.find(
+        (item) => item.prop === "assignStock"
+      );
+      // if (assignStockColumn) {
+      //   // businessType涓�22鏃舵樉绀猴紝鍚﹀垯闅愯棌
+      //   assignStockColumn.hidden = this.mainBusinessType !== '22';
+      // }
     },
-    
     open(row) {
       this.row = row;
       this.showDetialBox = true;
@@ -338,8 +271,8 @@
       this.mainBusinessType = row.businessType;
       this.getDictionaryData();
       this.getData();
+      this.toggleAssignStockColumn();
     },
-    
     getData() {
       var wheres = [{ name: "orderId", value: this.row.id }];
       var param = {
@@ -353,66 +286,25 @@
         .post("api/OutboundOrderDetail/GetPageData", param, "鏌ヨ涓�")
         .then((x) => {
           this.tableData = x.rows;
-          // 鍒嗙粍鏁版嵁
-          this.groupDataByMaterial();
+          this.toggleAssignStockColumn(); // 鏁版嵁鍔犺浇鍚庨噸鏂扮‘璁ゅ垪鏄鹃殣
         });
     },
-    
-    // 閲嶇偣淇敼锛氬鐞嗘寚瀹氬簱瀛樼偣鍑讳簨浠� - 浼犻�掑畬鏁寸殑鍒嗙粍鏄庣粏淇℃伅
-    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
-        });
+    tableButtonClick(row, column) {
+      if (column.prop == "assignStock") {
+        this.$refs.child.open(row);
+      } else if (column.prop == "NoStockOut") {
+        this.$refs.NoStockOut.open(row);
       } else {
-        ElMessage.warning("璇ュ垎缁勬病鏈夋槑缁嗘暟鎹紝鏃犳硶鎸囧畾搴撳瓨");
+        this.$refs.selectedStock.open(row);
       }
     },
-    
-    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("璇烽�夋嫨鍗曟嵁鏄庣粏");
       }
-      
-      // 鑾峰彇鎵�鏈夐�変腑鍒嗙粍鐨勫師濮嬫槑缁咺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("娌℃湁鎵惧埌鍙攣瀹氱殑鏄庣粏");
-      }
-      
+      var keys = this.selection.map((item) => item.id);
       this.http
-        .post("api/OutboundOrderDetail/LockOutboundStocks", detailIds, "鏁版嵁澶勭悊涓�")
+        .post("api/OutboundOrderDetail/LockOutboundStocks", keys, "鏁版嵁澶勭悊涓�")
         .then((x) => {
           if (!x.status) return this.$message.error(x.message);
           this.$message.success("鎿嶄綔鎴愬姛");
@@ -422,419 +314,94 @@
           });
         });
     },
-    
     handleOpenPicking() {
       this.$router.push({
-        path: "/outbound/picking",
+        path: "/outbound/outPicking",
         query: { orderId: this.row.id, orderNo: this.row.orderNo },
       });
     },
-    
     handleOpenBatchPicking() {
       this.$router.push({
-        path: "/outbound/batchpicking",
+        path: "/outbound/outPicking",
         query: { orderId: this.row.id, orderNo: this.row.orderNo },
       });
     },
-    
     outbound() {
       if (this.selection.length === 0) {
         return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
       }
-      
-      // 鑾峰彇鎵�鏈夐�変腑鍒嗙粍鐨勫師濮嬫槑缁咺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);
 
-      const formData = reactive({
-        selectedPlatform: platformOptions[0].value,
-      });
-
-      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" },
-                  ],
-                },
-                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("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 = {
-                        taskIds: detailIds,
-                        outboundPlatform: formData.selectedPlatform,
-                      };
-
-                      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",
-                    },
-                  }, "纭畾鍑哄簱"),
-                ]),
-              ]),
-        }
-      );
-
-      vnode.appContext = this.$.appContext;
-      render(vnode, mountNode);
+      const keys = this.selection.map((item) => item.id);
+      const requestParams = {
+        detailIds: keys,
+        outboundQuantity: 1,
+        operator: "",
+        orderNo: this.row.orderNo,
+        isBatch: this.isBatch
+      };
+      console.log(requestParams);
+      this.$refs.DirectOutbound.open(requestParams);
     },
-    
     outboundbatch() {
       if (this.selection.length === 0) {
         return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
       }
-      if (this.selection.length > 1) {
-        return this.$message.error("鍙兘閫夋嫨涓�鏉″崟鎹槑缁嗚繘琛屽垎鎵瑰嚭搴�");
-      }
-      
-      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: "",
-      });
+      const keys = this.selection.map((item) => item.id);
+      const requestParams = {
+        detailIds: keys,
+        outboundQuantity: this.selection[0].orderQuantity - this.selection[0].lockQuantity,
+        operator: "",
+        orderNo: this.row.orderNo,
+        isBatch: this.isBatch
+      };
+      console.log(requestParams);
+      this.$refs.DirectOutbound.open(requestParams);
 
-      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 !== 70 
+          row.orderDetailStatus !== 60 &&
+          row.orderDetailStatus !== 70 &&
+          row.orderDetailStatus !== 80
         ) {
-          return false;
-        } else {
           return true;
+        } else {
+          return false;
         }
       }
       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 = ["orderDetailStatusEnum"];
+      var param = [];
+      this.tableColumns.forEach((x) => {
+        if (x.type == "tag" && x.bindKey != "") {
+          param.push(x.bindKey);
+        }
+      });
       this.http
         .post("api/Sys_Dictionary/GetVueDictionary", param, "鏌ヨ涓�")
         .then((x) => {
@@ -843,22 +410,21 @@
           }
         });
     },
-    
-    getDictionaryForGroup(row) {
+    getDictionary(row, column) {
       if (this.dictionaryList) {
-        var item = this.dictionaryList.find((x) => x.dicNo == "orderDetailStatusEnum");
+        var item = this.dictionaryList.find((x) => x.dicNo == column.bindKey);
         if (item) {
-          var dicItem = item.data.find((x) => x.key == row.orderDetailStatus);
+          var dicItem = item.data.find((x) => x.key == row[column.prop]);
           if (dicItem) {
             return dicItem.value;
           } else {
-            return row.orderDetailStatus;
+            return row[column.prop];
           }
         } else {
-          return row.orderDetailStatus;
+          return row[column.prop];
         }
       }
-      return row.orderDetailStatus;
+      return row[column.prop];
     },
   },
 };
@@ -879,11 +445,11 @@
   background: oldlace;
 }
 
-.box-table .el-table tbody tr:hover > td {
+.box-table .el-table tbody tr:hover>td {
   background-color: #d8e0d4 !important;
 }
 
-.box-table .el-table tbody tr.current-row > td {
+.box-table .el-table tbody tr.current-row>td {
   background-color: #f0f9eb !important;
 }
 

--
Gitblit v1.9.3