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 |  344 +++++++++++++++++++--------------------------------------
 1 files changed, 114 insertions(+), 230 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 07275a9..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,84 +8,44 @@
               <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"
-                style="float: right; height: 20px"
-                @click="handleOpenPicking"
-                >鎷i��</el-link>
-                 
-              <el-link
-                type="primary"
-                size="small"
-                style="float: right; height: 20px; margin-right: 10px"
-                @click="outbound"
-                >鐩存帴鍑哄簱</el-link
-              >
-              <el-link
-                type="primary"
-                size="small"
-                style="float: right; height: 20px; margin-right: 10px"
-                @click="getData"
-                >鍒锋柊</el-link
-              ></el-col
-            >
+              <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="tableData"
-          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
-            v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
-            :key="index"
-            :prop="item.prop"
-            :label="item.title"
-            :width="item.width"
-            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">
               <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>
+                <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>
@@ -99,32 +53,43 @@
       </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>
+
 <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, ElMessage } from 'element-plus';
-import { th } from 'element-plus/es/locale';
+import DirectOutbound from "./DirectOutbound.vue";
+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, DirectOutbound },
   data() {
     return {
       row: null,
+      isBatch: 0,
       showDetialBox: false,
       flag: false,
       currentRow: null,
       selection: [],
       tableData: [],
+      mainBusinessType: null, // 鏂板锛氬瓨鍌ㄤ富鍗曟嵁鐨刡usinessType
       tableColumns: [
         {
           prop: "id",
@@ -144,7 +109,7 @@
           prop: "materielCode",
           title: "鐗╂枡缂栧彿",
           type: "string",
-          width: 150,
+          width: 120,
         },
         {
           prop: "materielName",
@@ -162,7 +127,7 @@
           prop: "supplyCode",
           title: "渚涘簲鍟嗙紪鍙�",
           type: "string",
-          width: 150,
+          width: 90,
         },
         {
           prop: "orderQuantity",
@@ -183,10 +148,16 @@
           width: 90,
         },
         {
+          prop: "moveQty",
+          title: "鎸枡鏁伴噺",
+          type: "string",
+          width: 90,
+        },
+        {
           prop: "unit",
           title: "鍗曚綅",
           type: "string",
-          width: 90,
+          width: 80,
         },
         {
           prop: "orderDetailStatus",
@@ -200,6 +171,7 @@
           title: "鎸囧畾搴撳瓨",
           type: "icon",
           width: 90,
+          //hidden: true, // 榛樿闅愯棌
           icon: "el-icon-s-grid",
         },
         {
@@ -244,9 +216,8 @@
         order: "desc",
         Foots: "",
         total: 0,
-        // 2020.08.29澧炲姞鑷畾涔夊垎椤垫潯澶у皬
         sizes: [30, 60, 100, 120],
-        size: 30, // 榛樿鍒嗛〉澶у皬
+        size: 30,
         Wheres: [],
         page: 1,
         rows: 30,
@@ -283,11 +254,24 @@
     };
   },
   methods: {
+    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;
+      console.log("涓诲崟鎹暟鎹細", this.row);
+      this.isBatch = row.isBatch;
+      this.mainBusinessType = row.businessType;
       this.getDictionaryData();
       this.getData();
+      this.toggleAssignStockColumn();
     },
     getData() {
       var wheres = [{ name: "orderId", value: this.row.id }];
@@ -296,12 +280,13 @@
         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.toggleAssignStockColumn(); // 鏁版嵁鍔犺浇鍚庨噸鏂扮‘璁ゅ垪鏄鹃殣
         });
     },
     tableButtonClick(row, column) {
@@ -309,8 +294,7 @@
         this.$refs.child.open(row);
       } else if (column.prop == "NoStockOut") {
         this.$refs.NoStockOut.open(row);
-      }else{
-          //鐐瑰嚮鎵撳紑鍑哄簱璇︽儏
+      } else {
         this.$refs.selectedStock.open(row);
       }
     },
@@ -318,7 +302,7 @@
       if (this.selection.length === 0) {
         return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
       }
-      var keys = this.selection.map((item) => item.id); // 鑾峰彇閫変腑琛岀殑id
+      var keys = this.selection.map((item) => item.id);
       this.http
         .post("api/OutboundOrderDetail/LockOutboundStocks", keys, "鏁版嵁澶勭悊涓�")
         .then((x) => {
@@ -330,149 +314,50 @@
           });
         });
     },
-    // 鎵撳紑鎷i�夐〉闈�
-   handleOpenPicking() {
+    handleOpenPicking() {
       this.$router.push({
-        path: '/outbound/picking',
-        query: { orderId: this.row.id ,orderNo:this.row.orderNo}
-      })
+        path: "/outbound/outPicking",
+        query: { orderId: this.row.id, orderNo: this.row.orderNo },
+      });
+    },
+    handleOpenBatchPicking() {
+      this.$router.push({
+        path: "/outbound/outPicking",
+        query: { orderId: this.row.id, orderNo: this.row.orderNo },
+      });
     },
     outbound() {
       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');
-      document.body.appendChild(mountNode);
 
-      // 2. 琛ㄥ崟鏁版嵁锛堥粯璁ら�変腑绔欏彴3锛�
-      const formData = reactive({
-        selectedPlatform: platformOptions[0].value // 榛樿缁戝畾銆岀珯鍙�3銆嶇殑value
-      });
+      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("璇烽�夋嫨鍗曟嵁鏄庣粏");
+      }
 
-      // 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' }
-            ]
-          },
-          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;
-              },
-              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 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);
 
-                // 4. 鏋勯�犺姹傚弬鏁帮紙閫変腑鍗曟嵁ID + 閫夋嫨鐨勫嚭搴撶珯鍙帮級
-                const keys = this.selection.map((item) => item.id);
-                const requestParams = {
-                  taskIds: keys,
-                  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'
-              }
-            }, '纭畾鍑哄簱')
-          ])
-        ])
-      });
-
-      // 缁戝畾app涓婁笅鏂囷紝纭繚El缁勪欢姝e父宸ヤ綔
-      vnode.appContext = this.$.appContext;
-      render(vnode, mountNode);
     },
     setCurrent(row) {
       this.$refs.singleTable.setCurrentRow(row);
@@ -530,7 +415,6 @@
         var item = this.dictionaryList.find((x) => x.dicNo == column.bindKey);
         if (item) {
           var dicItem = item.data.find((x) => x.key == row[column.prop]);
-          console.log(dicItem);
           if (dicItem) {
             return dicItem.value;
           } else {
@@ -540,10 +424,12 @@
           return row[column.prop];
         }
       }
+      return row[column.prop];
     },
   },
 };
 </script>
+
 <style scoped>
 .text-button {
   border: 0px;
@@ -559,14 +445,12 @@
   background: oldlace;
 }
 
-.box-table .el-table tbody tr:hover > td {
+.box-table .el-table tbody tr:hover>td {
   background-color: #d8e0d4 !important;
-  /* color: #ffffff; */
 }
 
-.box-table .el-table tbody tr.current-row > td {
+.box-table .el-table tbody tr.current-row>td {
   background-color: #f0f9eb !important;
-  /* color: #ffffff; */
 }
 
 .el-table .success-row {
@@ -576,4 +460,4 @@
 .box-table .el-table {
   border: 1px solid #ebeef5;
 }
-</style>
+</style>
\ No newline at end of file

--
Gitblit v1.9.3