From 8639f19c82f6e263654db44286256bb8d028d2c2 Mon Sep 17 00:00:00 2001
From: 647556386 <647556386@qq.com>
Date: 星期日, 30 十一月 2025 10:10:40 +0800
Subject: [PATCH] 1

---
 项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue |  209 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 207 insertions(+), 2 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..ab7d308 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"
@@ -27,13 +27,25 @@
                 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="handleOpenBatchPicking"
+                >鍒嗘壒鎷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="outboundbatch"
+                >鍒嗘壒鍑哄簱</el-link
               >
               <el-link
                 type="primary"
@@ -113,8 +125,9 @@
 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 { ElDialog , ElForm, ElFormItem, ElSelect,ElOption, ElButton, ElInput, ElMessage } from 'element-plus';
 import { th } from 'element-plus/es/locale';
+
 export default {
   components: { VolBox, VolForm, StockSelect, SelectedStock,NoStockOut},
   data() {
@@ -200,6 +213,7 @@
           title: "鎸囧畾搴撳瓨",
           type: "icon",
           width: 90,
+          hidden:true,
           icon: "el-icon-s-grid",
         },
         {
@@ -336,6 +350,11 @@
         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}})
     },
     outbound() {
       if (this.selection.length === 0) {
@@ -474,6 +493,192 @@
       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);
+      }
+    }, 
+    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'
+      }
+    }, [
+      // 鍑哄簱绔欏彴閫夋嫨椤癸紙鏍稿績琛ㄥ崟椤癸級
+      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);
+},
+      
+
     setCurrent(row) {
       this.$refs.singleTable.setCurrentRow(row);
     },

--
Gitblit v1.9.3