From b680585c3a6d43f0c72a83a115ea537ce8c91a07 Mon Sep 17 00:00:00 2001
From: 647556386 <647556386@qq.com>
Date: 星期六, 13 十二月 2025 17:44:10 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu

---
 项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue |  463 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 419 insertions(+), 44 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 decb2fd..cc9b8be 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,23 +14,26 @@
               <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>
-                 
+                >鎷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
@@ -38,11 +41,19 @@
               <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-col>
           </el-row>
         </el-alert>
       </div>
@@ -80,18 +91,23 @@
                   effect="dark"
                   :content="item.title"
                   placement="bottom"
-                  ><el-link
+                >
+                  <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>
+                  >
+                    <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>
@@ -103,23 +119,40 @@
       ref="selectedStock"
       @parentCall="parentCall"
     ></selected-stock>
+    <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";
+
 export default {
-  components: { VolBox, VolForm, StockSelect, SelectedStock },
+  components: { VolBox, VolForm, StockSelect, SelectedStock, NoStockOut },
   data() {
     return {
       row: null,
+      isBatch: 0,
       showDetialBox: false,
       flag: false,
       currentRow: null,
       selection: [],
       tableData: [],
+      mainBusinessType: null, // 鏂板锛氬瓨鍌ㄤ富鍗曟嵁鐨刡usinessType
       tableColumns: [
         {
           prop: "id",
@@ -139,7 +172,7 @@
           prop: "materielCode",
           title: "鐗╂枡缂栧彿",
           type: "string",
-          width: 150,
+          width: 120,
         },
         {
           prop: "materielName",
@@ -150,6 +183,12 @@
         {
           prop: "batchNo",
           title: "鎵规鍙�",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "supplyCode",
+          title: "渚涘簲鍟嗙紪鍙�",
           type: "string",
           width: 90,
         },
@@ -172,16 +211,22 @@
           width: 90,
         },
         {
+          prop: "moveQty",
+          title: "鎸枡鏁伴噺",
+          type: "string",
+          width: 90,
+        },
+        {
           prop: "unit",
           title: "鍗曚綅",
           type: "string",
-          width: 90,
+          width: 80,
         },
         {
           prop: "orderDetailStatus",
           title: "璁㈠崟鏄庣粏鐘舵��",
           type: "tag",
-          width: 180,
+          width: 90,
           bindKey: "orderDetailStatusEnum",
         },
         {
@@ -189,6 +234,7 @@
           title: "鎸囧畾搴撳瓨",
           type: "icon",
           width: 90,
+          hidden: true, // 榛樿闅愯棌
           icon: "el-icon-s-grid",
         },
         {
@@ -233,9 +279,8 @@
         order: "desc",
         Foots: "",
         total: 0,
-        // 2020.08.29澧炲姞鑷畾涔夊垎椤垫潯澶у皬
         sizes: [30, 60, 100, 120],
-        size: 30, // 榛樿鍒嗛〉澶у皬
+        size: 30,
         Wheres: [],
         page: 1,
         rows: 30,
@@ -272,11 +317,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 }];
@@ -285,19 +343,21 @@
         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) {
       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);
       }
     },
@@ -305,7 +365,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) => {
@@ -317,29 +377,345 @@
           });
         });
     },
-    // 鎵撳紑鎷i�夐〉闈�
-   handleOpenPicking() {
+    handleOpenPicking() {
       this.$router.push({
-        path: '/outbound/picking',
-        query: { orderId: this.row.id }
-      })
+        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) {
         return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
       }
-      var keys = this.selection.map((item) => item.id); // 鑾峰彇閫変腑琛岀殑id
+      const platformOptions = [
+        { label: "绔欏彴2", value: "2-1" },
+        { label: "绔欏彴3", value: "3-1" },
+      ];
+      const mountNode = document.createElement("div");
+      document.body.appendChild(mountNode);
 
-      this.http
-        .post("api/Task/GenerateOutboundTasks", keys, "鏁版嵁澶勭悊涓�")
-        .then((x) => {
-          if (!x.status) return this.$message.error(x.message);
-          this.$message.success("鎿嶄綔鎴愬姛");
-          this.showDetialBox = false;
-          this.$emit("parentCall", ($vue) => {
-            $vue.getData();
-          });
-        });
+      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: "璇烽�夋嫨鍑哄簱绔欏彴锛�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 = {
+                        taskIds: keys,
+                        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);
+    },
+    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);
+
+      const formData = reactive({
+        selectedPlatform: platformOptions[0].value,
+        outboundDecimal: "",
+      });
+
+      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: "璇烽�夋嫨鍑哄簱绔欏彴锛�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",
+                    precision: 2,
+                    min: 0.01,
+                  }),
+                ]),
+                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 = {
+                        orderDetailId: keys[0],
+                        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);
@@ -397,7 +773,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 {
@@ -407,10 +782,12 @@
           return row[column.prop];
         }
       }
+      return row[column.prop];
     },
   },
 };
 </script>
+
 <style scoped>
 .text-button {
   border: 0px;
@@ -428,12 +805,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 {
@@ -443,4 +818,4 @@
 .box-table .el-table {
   border: 1px solid #ebeef5;
 }
-</style>
+</style>
\ No newline at end of file

--
Gitblit v1.9.3