From 664df90a747e5a97b4e1131a5f958ded3176250c Mon Sep 17 00:00:00 2001
From: z8018 <1282578289@qq.com>
Date: 星期四, 25 十二月 2025 11:23:35 +0800
Subject: [PATCH] Merge branch 'htq20251215' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu into htq20251215

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/MESOperation/FeedbackMesService.cs                      |   31 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Allocate/AllocateOrderController.cs            |    2 
 项目代码/WIDESEA_WMSClient/src/extension/stock/stockView.js                                                     |  172 +
 项目代码/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js                                              |    3 
 项目代码/WIDESEA_WMSClient/src/router/viewGird.js                                                               |   12 
 项目代码/WIDESEA_WMSClient/src/views/inbound/takeStockOrderDetail.vue                                           |  254 ++
 项目代码/WIDESEA_WMSClient/public/static/webconfig.js                                                           |    7 
 项目代码/WIDESEA_WMSClient/src/extension/taskinfo/task.js                                                       |   26 
 项目代码/WIDESEA_WMSClient/src/views/taskinfo/task.vue                                                          |   28 
 项目代码/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue                                       |  456 ++--
 项目代码/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue                                                 |  103 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_MenuController.cs                   |    3 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/InventoryLockJob.cs                                   |   14 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs                              |   10 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs                                     |    1 
 项目代码/WIDESEA_WMSClient/package-lock.json                                                                    |  174 -
 项目代码/WIDESEA_WMSClient/src/extension/inbound/extend/OrderStockTake.vue                                      |  868 +++++++++
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderService.cs                            |   24 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderDetailController.cs      |   16 
 项目代码/WIDESEA_WMSClient/src/extension/inbound/extend/allocateOrderDetail.vue                                 |  276 +-
 项目代码/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue                                                  |    8 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderDetailService.cs                        |   21 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs                                   |    2 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderDetailService.cs                      |   14 
 项目代码/WIDESEA_WMSClient/src/views/inbound/takeStockOrder.vue                                                 |  291 +++
 项目代码/WIDESEA_WMSClient/src/extension/inbound/takeStockOrder.js                                              |   83 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db     |    0 
 项目代码/WIDESEA_WMSClient/src/views/Login.vue                                                                  |    4 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile2.pubxml           |   15 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm      |    0 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/CompleteStockTakeDTO.cs                                  |   23 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db          |    0 
 项目代码/WIDESEA_WMSClient/src/views/outbound/allocateoutboundOrder.vue                                         |  122 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal |    0 
 项目代码/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue                                                      |   45 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                                       |  134 +
 项目代码/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderDetail.js                                        |   58 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs                              |  252 ++
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderController.cs            |   57 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal      |    0 
 项目代码/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue                                                   |  725 ++++++++
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderDetail.cs                      |   21 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs                               |   48 
 项目代码/WIDESEA_WMSClient/src/extension/outbound/allocateoutboundOrder.js                                      |  286 ---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm |    0 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/ESSApiService.cs                                        |   52 
 项目代码/WIDESEA_WMSClient/config/buttons.js                                                                    |   19 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/QuartzJobMildd.cs                                     |   28 
 项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/newAllocateOrderDetail.vue                             |  482 +---
 49 files changed, 3,916 insertions(+), 1,354 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/config/buttons.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/config/buttons.js"
index b3561d6..26a9f2e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/config/buttons.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/config/buttons.js"
@@ -275,7 +275,24 @@
     type: 'primary',
     onClick: function () {
     }
-}
+},{
+    name: "閫� 瀹� 搴� 瀛� 鐩� 鐐�",
+    icon: '',
+    class: '',
+    value: 'SelectStockTake',
+    type: 'warning',
+    onClick: function () {
+    }
+},
+,{
+    name: "鍗� 鎹� 鐩� 鐐� 鎿� 浣�",
+    icon: '',
+    class: '',
+    value: 'OrderStockTake',
+    type: 'warning',
+    onClick: function () {
+    }
+},
 ]
 
 export default buttons
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/package-lock.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/package-lock.json"
index 053131a..55513a8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/package-lock.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/package-lock.json"
@@ -3612,6 +3612,11 @@
       "dev": true,
       "optional": true
     },
+    "@popperjs/core": {
+      "version": "npm:@sxzz/popperjs-es@2.11.7",
+      "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+      "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
+    },
     "@soda/friendly-errors-webpack-plugin": {
       "version": "1.8.0",
       "resolved": "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.0.tgz?cache=0&sync_timestamp=1607927406873&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40soda%2Ffriendly-errors-webpack-plugin%2Fdownload%2F%40soda%2Ffriendly-errors-webpack-plugin-1.8.0.tgz",
@@ -4386,87 +4391,6 @@
         "webpack-chain": "^6.4.0",
         "webpack-dev-server": "^3.11.0",
         "webpack-merge": "^4.2.2"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://mirrors.huaweicloud.com/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://mirrors.huaweicloud.com/repository/npm/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://mirrors.huaweicloud.com/repository/npm/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://mirrors.huaweicloud.com/repository/npm/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true,
-          "optional": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://mirrors.huaweicloud.com/repository/npm/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.4",
-          "resolved": "https://mirrors.huaweicloud.com/repository/npm/loader-utils/-/loader-utils-2.0.4.tgz",
-          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://mirrors.huaweicloud.com/repository/npm/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        },
-        "vue-loader-v16": {
-          "version": "npm:vue-loader@16.8.3",
-          "resolved": "https://mirrors.huaweicloud.com/repository/npm/vue-loader/-/vue-loader-16.8.3.tgz",
-          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "chalk": "^4.1.0",
-            "hash-sum": "^2.0.0",
-            "loader-utils": "^2.0.0"
-          }
-        }
       }
     },
     "@vue/cli-shared-utils": {
@@ -7637,13 +7561,6 @@
         "lodash-unified": "^1.0.2",
         "memoize-one": "^6.0.0",
         "normalize-wheel-es": "^1.2.0"
-      },
-      "dependencies": {
-        "@popperjs/core": {
-          "version": "npm:@sxzz/popperjs-es@2.11.7",
-          "resolved": "https://mirrors.huaweicloud.com/repository/npm/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
-          "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
-        }
       }
     },
     "element-ui": {
@@ -15471,6 +15388,87 @@
         }
       }
     },
+    "vue-loader-v16": {
+      "version": "npm:vue-loader@16.8.3",
+      "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chalk": "^4.1.0",
+        "hash-sum": "^2.0.0",
+        "loader-utils": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
     "vue-qrcode": {
       "version": "2.2.2",
       "resolved": "https://registry.npmmirror.com/vue-qrcode/-/vue-qrcode-2.2.2.tgz",
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/public/static/webconfig.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/public/static/webconfig.js"
new file mode 100644
index 0000000..c8cba7b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/public/static/webconfig.js"
@@ -0,0 +1,7 @@
+window.webConfig = {
+   "webApiBaseUrl": "http://localhost:9291/",
+    "webApiProduction":"http://localhost:9291/"
+
+    //  "webApiBaseUrl": "http://172.19.69.152:9291/",
+    // "webApiProduction":"http://172.19.69.152:9291/"
+}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/OrderStockTake.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/OrderStockTake.vue"
new file mode 100644
index 0000000..5f1f0be
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/OrderStockTake.vue"
@@ -0,0 +1,868 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showStockTakeBox"
+      :lazy="true"
+      :width="isMobile ? '95%' : '70%'"
+      :padding="24"
+      title="搴撳瓨鐩樼偣鎿嶄綔"
+      class="custom-vol-box"
+    >
+      <div class="stock-take-container">
+        <div class="receipt-info">
+          <el-tag type="primary" size="small" class="receipt-tag">
+            褰撳墠鐩樼偣鍗曟嵁鍙凤細<span class="receipt-no">{{ orderNo }}</span>
+          </el-tag>
+        </div>
+
+        <!-- 鏍稿績杈撳叆琛ㄥ崟 -->
+        <el-form
+          :model="formData"
+          ref="formRef"
+          label-width="100px"
+          class="stock-take-form"
+          @submit.prevent
+        >
+          <!-- 鏂欑鍙疯緭鍏ユ -->
+          <el-form-item
+            label="鏂欑鍙凤細"
+            name="boxNo"
+            :rules="[
+              {
+                required: true,
+                message: '璇锋壂鎻忔垨杈撳叆鏂欑鍙�',
+                trigger: 'blur',
+              },
+              { validator: validateBoxNo, trigger: 'blur' },
+            ]"
+            class="form-item"
+          >
+            <el-input
+              ref="boxNoInputRef"
+              v-model="formData.boxNo"
+              placeholder="璇蜂娇鐢ㄦ壂鐮佹灙鎵弿鏂欑鍙凤紝鎴栨墜鍔ㄨ緭鍏�"
+              clearable
+              @keydown.enter="debouncedHandleBoxNoScan"
+              @blur="handleBoxNoBlur"
+              :disabled="loading"
+              class="custom-input"
+              :class="{ 'has-value': formData.boxNo.trim() }"
+            >
+              <template #append>
+                <el-button
+                  icon="Search"
+                  type="primary"
+                  size="small"
+                  @click="handleBoxNoScan"
+                  :disabled="!formData.boxNo.trim() || loading"
+                  class="input-btn"
+                ></el-button>
+              </template>
+            </el-input>
+          </el-form-item>
+
+          <!-- 鏉$爜杈撳叆妗� -->
+          <el-form-item
+            label="鐩樼偣鏉$爜锛�"
+            name="barcode"
+            :rules="[
+              { required: true, message: '璇锋壂鎻忔垨杈撳叆鏉$爜', trigger: 'blur' },
+              { validator: validateBarcode, trigger: 'blur' },
+            ]"
+            class="form-item"
+          >
+            <el-input
+              ref="barcodeInputRef"
+              v-model="formData.barcode"
+              placeholder="璇蜂娇鐢ㄦ壂鐮佹灙鎵弿鏉$爜锛屾垨鎵嬪姩杈撳叆"
+              clearable
+              @keydown.enter="debouncedHandleBarcodeScan"
+              :disabled="!formData.boxNo.trim() || loading"
+              class="custom-input"
+              :class="{ 'has-value': formData.barcode.trim() }"
+            >
+              <template #append>
+                <el-button
+                  icon="Search"
+                  type="primary"
+                  size="small"
+                  @click="handleBarcodeScan"
+                  :disabled="
+                    !formData.boxNo.trim() ||
+                    !formData.barcode.trim() ||
+                    loading
+                  "
+                  class="input-btn"
+                ></el-button>
+              </template>
+            </el-input>
+          </el-form-item>
+
+          <!-- 搴撳瓨鏁伴噺妗嗭紙鍙锛� -->
+          <el-form-item
+            label="搴撳瓨鏁伴噺锛�"
+            name="stockQuantity"
+            class="form-item"
+          >
+            <el-input
+              v-model="formData.stockQuantity"
+              placeholder="鎵弿鏉$爜鍚庤嚜鍔ㄥ~鍏�"
+              readonly
+              class="custom-input custom-readonly-input"
+              :class="{ 'has-value': formData.stockQuantity }"
+            ></el-input>
+          </el-form-item>
+
+          <!-- 瀹為檯鐩樼偣鏁伴噺 -->
+          <el-form-item
+            label="瀹為檯鐩樼偣鏁伴噺锛�"
+            name="actualQuantity"
+            :rules="[
+              {
+                required: true,
+                message: '璇疯緭鍏ュ疄闄呯洏鐐规暟閲�',
+                trigger: 'blur',
+              },
+              { type: 'number', message: '璇疯緭鍏ユ湁鏁堢殑鏁板瓧', trigger: 'blur' },
+              { validator: validateActualQuantity, trigger: 'blur' },
+            ]"
+            class="form-item"
+          >
+            <el-input
+              v-model.number="formData.actualQuantity"
+              placeholder="璇疯緭鍏ュ疄闄呯洏鐐规暟閲忥紙澶т簬0锛�"
+              type="number"
+              clearable
+              @keydown.enter="handleStockTakeComplete"
+              :disabled="!formData.stockQuantity || loading"
+              class="custom-input"
+              :class="{ 'has-value': formData.actualQuantity }"
+            ></el-input>
+          </el-form-item>
+        </el-form>
+
+        <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+        <div class="action-buttons">
+          <el-button
+            type="info"
+            size="small"
+            @click="handleBoxReturn"
+            :disabled="!formData.boxNo.trim() || loading"
+            class="return-btn"
+          >
+            <Return /> 鏂欑鍥炲簱
+          </el-button>
+          <el-button
+            type="primary"
+            size="small"
+            @click="handleStockTakeComplete"
+            :disabled="
+              loading ||
+              !formData.boxNo.trim() ||
+              !formData.barcode.trim() ||
+              !formData.stockQuantity ||
+              !formData.actualQuantity
+            "
+            class="complete-btn"
+          >
+            <Check /> 鐩樼偣瀹屾垚
+          </el-button>
+          <el-button
+            type="text"
+            size="small"
+            @click="handleCancel"
+            :disabled="loading"
+            class="cancel-btn"
+          >
+            鍙栨秷
+          </el-button>
+        </div>
+      </div>
+    </vol-box>
+  </div>
+</template>
+
+<script setup>
+import { ref, reactive, onMounted, nextTick, watch, defineEmits, computed } from "vue";
+import { ElMessage, ElTag, ElMessageBox } from "element-plus";
+import { Search, Check, Return } from "@element-plus/icons-vue";
+
+import VolBox from "@/components/basic/VolBox.vue";
+import http from "@/api/http";
+
+// 鍝嶅簲寮忓彉閲� - 鍗曟嵁鍙�
+const orderNo = ref("");
+
+// 鏆撮湶浜嬩欢
+const emit = defineEmits(["close", "refresh", "box-returned"]);
+
+// 鍝嶅簲寮忔暟鎹�
+const showStockTakeBox = ref(false);
+const formData = reactive({
+  boxNo: "", // 鏂欑鍙�
+  barcode: "", // 鐩樼偣鏉$爜
+  stockQuantity: "", // 搴撳瓨鏁伴噺锛堝彧璇伙級
+  actualQuantity: "", // 瀹為檯鐩樼偣鏁伴噺
+});
+const loading = ref(false);
+const formRef = ref(null);
+
+// 妯℃澘寮曠敤
+const boxNoInputRef = ref(null);
+const barcodeInputRef = ref(null);
+
+// 妫�娴嬫槸鍚︿负绉诲姩绔�
+const isMobile = computed(() => {
+  return window.innerWidth < 768;
+});
+
+// 缁勪欢鎸傝浇鏃惰仛鐒﹀埌鏂欑鍙疯緭鍏ユ
+onMounted(() => {
+  nextTick(() => {
+    boxNoInputRef.value?.focus();
+  });
+  // 鐩戝惉绐楀彛澶у皬鍙樺寲
+  window.addEventListener("resize", () => {});
+});
+
+// 鐩戝惉鏂欑鍙峰彉鍖栵紝娓呯┖鍚庣画鐩稿叧瀛楁
+watch(
+  () => formData.boxNo,
+  (newVal) => {
+    if (!newVal.trim()) {
+      formData.barcode = "";
+      formData.stockQuantity = "";
+      formData.actualQuantity = "";
+    }
+  },
+  { immediate: true }
+);
+
+// 闃叉姈鍑芥暟
+const debounce = (fn, delay = 100) => {
+  let timer = null;
+  return (...args) => {
+    if (timer) clearTimeout(timer);
+    timer = setTimeout(() => {
+      fn.apply(this, args);
+    }, delay);
+  };
+};
+
+// 鎵撳紑寮圭獥骞舵帴鏀跺崟鎹彿
+const open = (receiptNo) => {
+  showStockTakeBox.value = true;
+  orderNo.value = receiptNo;
+  // 閲嶇疆琛ㄥ崟
+  formData.boxNo = "";
+  formData.barcode = "";
+  formData.stockQuantity = "";
+  formData.actualQuantity = "";
+  nextTick(() => {
+    boxNoInputRef.value?.focus();
+  });
+};
+
+// 鍏抽棴寮圭獥
+const handleCancel = (e) => {
+  e.stopPropagation();
+  e.preventDefault();
+  showStockTakeBox.value = false;
+  emit("close");
+  orderNo.value = "";
+};
+
+// 鏂欑鍙烽獙璇侊紙浼樺寲锛氭湁鍊兼椂浠呴獙璇侀暱搴︼紝鏃犲�兼椂瑙﹀彂蹇呭~锛�
+const validateBoxNo = (rule, value, callback) => {
+  // 鏈夊�兼椂楠岃瘉闀垮害
+  if (value && value.trim().length < 3) {
+    callback(new Error("鏂欑鍙烽暱搴︿笉鑳藉皯浜�3浣�"));
+  } 
+  // 鏃犲�兼椂鐢眗equired瑙勫垯澶勭悊锛岃繖閲屼笉閲嶅鎻愮ず
+  else {
+    callback();
+  }
+};
+
+// 鏉$爜楠岃瘉锛堜紭鍖栵細鏈夊�兼椂浠呴獙璇侀暱搴︼級
+const validateBarcode = (rule, value, callback) => {
+  if (value && value.trim().length < 6) {
+    callback(new Error("鏉$爜闀垮害涓嶈兘灏戜簬6浣�"));
+  } else {
+    callback();
+  }
+};
+
+// 瀹為檯鐩樼偣鏁伴噺楠岃瘉锛堜紭鍖栵細鏈夊�兼椂楠岃瘉鍚堟硶鎬э級
+const validateActualQuantity = (rule, value, callback) => {
+  if (value === null || value === undefined) {
+    callback(new Error("璇疯緭鍏ュ疄闄呯洏鐐规暟閲�"));
+  } else if (value <= 0) {
+    callback(new Error("瀹為檯鐩樼偣鏁伴噺蹇呴』澶т簬0"));
+  } else if (!Number.isInteger(value)) {
+    callback(new Error("瀹為檯鐩樼偣鏁伴噺蹇呴』鏄暣鏁�"));
+  } else {
+    callback();
+  }
+};
+
+// 鏂欑鍙峰け鐒﹀鐞�
+const handleBoxNoBlur = () => {
+  if (formData.boxNo.trim() && boxNoInputRef.value?.input) {
+    boxNoInputRef.value.input.select();
+  }
+};
+
+// 鏂欑鍙锋壂鎻忛獙璇侊紙鍚庣鎺ュ彛锛�
+const validateBoxNoApi = async (boxNo) => {
+  try {
+    const res = await http.post(
+      `/api/TakeStockOrder/ValidateBoxNo?orderNo=${encodeURIComponent(
+        orderNo.value
+      )}&boxNo=${encodeURIComponent(boxNo)}`,
+      "楠岃瘉鏂欑鍙蜂腑..."
+    );
+
+    if (!res.status) {
+      throw new Error(res.message || "鏂欑鍙烽獙璇佸け璐�");
+    }
+    return res.data;
+  } catch (error) {
+    throw error;
+  }
+};
+
+// 鏂欑鍙锋壂鎻忓鐞�
+const handleBoxNoScan = async () => {
+  if (!formRef.value) return;
+  // 鎵嬪姩瑙﹀彂楠岃瘉锛堜粎楠岃瘉褰撳墠瀛楁锛�
+  const valid = await formRef.value.validateField("boxNo");
+  if (valid !== true) return;
+
+  const boxNo = formData.boxNo.trim();
+  if (!boxNo) return;
+
+  try {
+    loading.value = true;
+    await validateBoxNoApi(boxNo);
+    ElMessage.success(`鏂欑鍙� ${boxNo} 楠岃瘉閫氳繃`);
+    nextTick(() => {
+      barcodeInputRef.value?.focus();
+    });
+  } catch (error) {
+    ElMessage.error(error.message);
+    nextTick(() => {
+      if (boxNoInputRef.value?.input) {
+        boxNoInputRef.value.input.select();
+      }
+    });
+  } finally {
+    loading.value = false;
+  }
+};
+
+// 鏉$爜鎵弿楠岃瘉锛堝悗绔帴鍙o級
+const validateBarcodeApi = async (boxNo, barcode) => {
+  try {
+    const res = await http.post(
+      `/api/TakeStockOrder/ValidateBarcode?boxNo=${encodeURIComponent(
+        boxNo
+      )}&barcode=${encodeURIComponent(barcode)}`,
+      "楠岃瘉鏉$爜涓�..."
+    );
+
+    if (!res.status) {
+      throw new Error(res.message || "鏉$爜楠岃瘉澶辫触");
+    }
+
+    if (
+      res.data?.stockQuantity === undefined ||
+      res.data?.stockQuantity === null
+    ) {
+      throw new Error("鏈煡璇㈠埌璇ユ潯鐮佺殑搴撳瓨鏁伴噺");
+    }
+
+    return res.data;
+  } catch (error) {
+    throw error;
+  }
+};
+
+// 鏉$爜鎵弿澶勭悊
+const handleBarcodeScan = async () => {
+  if (!formRef.value) return;
+  const valid = await formRef.value.validateField("barcode");
+  if (valid !== true) return;
+
+  const boxNo = formData.boxNo.trim();
+  const barcode = formData.barcode.trim();
+  if (!boxNo || !barcode) return;
+
+  try {
+    loading.value = true;
+    const result = await validateBarcodeApi(boxNo, barcode);
+    formData.stockQuantity = result.stockQuantity;
+    ElMessage.success(
+      `鏉$爜 ${barcode} 楠岃瘉閫氳繃锛屽簱瀛樻暟閲忥細${result.stockQuantity}`
+    );
+    nextTick(() => {
+      const actualQuantityInput = document.querySelector(
+        ".form-item:last-child .el-input__inner"
+      );
+      actualQuantityInput?.focus();
+    });
+  } catch (error) {
+    ElMessage.error(error.message);
+    nextTick(() => {
+      if (barcodeInputRef.value?.input) {
+        barcodeInputRef.value.input.select();
+      }
+    });
+  } finally {
+    loading.value = false;
+  }
+};
+
+// 鐩樼偣瀹屾垚鎻愪氦
+const handleStockTakeComplete = async () => {
+  if (!formRef.value) return;
+  // 鍏ㄨ〃鍗曢獙璇�
+  const valid = await formRef.value.validate();
+  if (!valid) return;
+
+  const { boxNo, barcode, actualQuantity, stockQuantity } = formData;
+  const receiptNo = orderNo.value;
+
+  try {
+    loading.value = true;
+
+    const res = await http.post(
+      "/api/TakeStockOrder/CompleteStockTake",
+      {
+        orderNo: receiptNo,
+        boxNo,
+        barcode,
+        actualQuantity,
+        stockQuantity,
+      },
+      {
+        loadingText: "鎻愪氦鐩樼偣鏁版嵁涓�...",
+      }
+    );
+
+    if (res.status) {
+      ElMessage.success("鐩樼偣瀹屾垚锛屾彁浜ゆ垚鍔燂紒");
+      formData.barcode = "";
+      formData.stockQuantity = "";
+      formData.actualQuantity = "";
+      nextTick(() => {
+        barcodeInputRef.value?.focus();
+      });
+      emit("refresh");
+    } else {
+      throw new Error(res.message || "鐩樼偣鎻愪氦澶辫触");
+    }
+  } catch (error) {
+    ElMessage.error(error.message || "缃戠粶寮傚父锛屾彁浜ゅけ璐�");
+  } finally {
+    loading.value = false;
+  }
+};
+
+// 鏂欑鍥炲簱鍔熻兘
+const handleBoxReturn = async () => {
+  const boxNo = formData.boxNo.trim();
+  if (!boxNo) {
+    ElMessage.warning("璇峰厛杈撳叆鎴栨壂鎻忔枡绠卞彿");
+    return;
+  }
+
+  try {
+    await ElMessageBox.confirm(`纭畾灏嗘枡绠便��${boxNo}銆戝洖搴撳悧锛焋, "鍥炲簱纭", {
+      confirmButtonText: "纭畾",
+      cancelButtonText: "鍙栨秷",
+      type: "info",
+      center: true,
+      confirmButtonClass: "el-button--primary",
+      cancelButtonClass: "el-button--text",
+    });
+
+    loading.value = true;
+
+    const res = await http.post(
+      `/api/TakeStockOrder/ReturnBox?boxNo=${encodeURIComponent(boxNo)}&orderNo=${encodeURIComponent(
+        orderNo.value
+      )}`,
+      "鏂欑鍥炲簱涓�..."
+    );
+
+    if (res.status) {
+      ElMessage.success(`鏂欑銆�${boxNo}銆戝洖搴撴垚鍔燂紒`);
+      formData.boxNo = "";
+      formData.barcode = "";
+      formData.stockQuantity = "";
+      formData.actualQuantity = "";
+      nextTick(() => {
+        boxNoInputRef.value?.focus();
+      });
+      emit("box-returned", boxNo);
+    } else {
+      throw new Error(res.message || "鏂欑鍥炲簱澶辫触");
+    }
+  } catch (error) {
+    if (error.name !== "Cancel") {
+      ElMessage.error(error.message);
+    }
+  } finally {
+    loading.value = false;
+  }
+};
+
+// 甯﹂槻鎶栫殑鎵弿澶勭悊
+const debouncedHandleBoxNoScan = debounce(async (e) => {
+  e.stopPropagation();
+  e.preventDefault();
+  await handleBoxNoScan();
+}, 100);
+
+const debouncedHandleBarcodeScan = debounce(async (e) => {
+  e.stopPropagation();
+  e.preventDefault();
+  await handleBarcodeScan();
+}, 100);
+
+// 鏆撮湶鏂规硶
+defineExpose({
+  open,
+});
+</script>
+
+<style scoped>
+/* 涓诲鍣ㄦ牱寮� - 浼樺寲闂磋窛鍜屽搷搴斿紡 */
+.stock-take-container {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+  gap: 16px;
+  padding: 8px 0;
+}
+
+/* 鍗曟嵁淇℃伅鏍峰紡 - 浼樺寲瑙嗚灞傜骇 */
+.receipt-info {
+  margin-bottom: 4px;
+}
+
+.receipt-tag {
+  padding: 8px 16px;
+  font-size: 14px;
+  background-color: #e8f4f8 !important;
+  border-color: #409eff !important;
+  color: #1989fa !important;
+  border-radius: 8px;
+  box-shadow: 0 2px 8px rgba(64, 158, 255, 0.1);
+}
+
+.receipt-no {
+  font-weight: 600;
+  color: #1989fa;
+  margin-left: 6px;
+}
+
+/* 琛ㄥ崟鏍峰紡 - 浼樺寲闃村奖鍜屽唴杈硅窛 */
+.stock-take-form {
+  width: 100%;
+  background-color: #ffffff;
+  padding: 20px;
+  border-radius: 12px;
+  box-shadow: 0 2px 12px rgba(64, 158, 255, 0.06);
+  border: 1px solid #f0f8fb;
+}
+
+.form-item {
+  margin-bottom: 16px;
+}
+
+/* 杈撳叆妗嗘牳蹇冩牱寮� - 浼樺寲鐘舵�佹樉绀� */
+.custom-input {
+  width: 100%;
+  position: relative;
+}
+
+/* 鏈夊�兼椂闅愯棌鍗犱綅绗� + 浼樺寲杈规 */
+.custom-input.has-value :deep(.el-input__inner) {
+  --el-input-placeholder-color: transparent; /* 闅愯棌鍗犱綅绗� */
+  border-color: #8cc5ff; /* 娴呰摑杈规锛屽尯鍒嗘棤鍊肩姸鎬� */
+  background-color: #ffffff;
+}
+
+.custom-input :deep(.el-input__inner) {
+  border-radius: 8px;
+  border-color: #e5f0fa;
+  transition: all 0.2s ease;
+  height: 42px;
+  line-height: 42px;
+  font-size: 14px;
+  background-color: #f8fbff;
+  padding: 0 12px;
+}
+
+/* 鑱氱劍鏍峰紡浼樺寲 */
+.custom-input :deep(.el-input__inner:focus) {
+  border-color: #409eff;
+  box-shadow: 0 0 0 3px rgba(64, 158, 255, 0.1);
+  background-color: #ffffff;
+  outline: none;
+}
+
+/* 娓呴櫎鎸夐挳鏍峰紡浼樺寲 */
+.custom-input :deep(.el-input__clear) {
+  color: #91c9f7;
+  width: 18px;
+  height: 18px;
+}
+
+.custom-input :deep(.el-input__clear:hover) {
+  color: #409eff;
+}
+
+/* 鍙杈撳叆妗嗘牱寮� - 澧炲己鍖哄垎搴� */
+.custom-readonly-input :deep(.el-input__inner) {
+  background-color: #f0f8fb;
+  color: #1989fa;
+  font-weight: 500;
+  cursor: default;
+  border-color: #d1e7fd;
+  padding-right: 12px;
+}
+
+/* 杈撳叆妗嗘寜閽牱寮� - 浼樺寲灏哄鍜宧over鏁堟灉 */
+.input-btn {
+  border-radius: 0 8px 8px 0 !important;
+  height: 42px;
+  width: 48px;
+  background-color: #409eff;
+  border-color: #409eff;
+  transition: all 0.2s ease;
+}
+
+.input-btn:hover {
+  background-color: #1989fa !important;
+  border-color: #1989fa !important;
+  box-shadow: 0 2px 8px rgba(64, 158, 255, 0.2);
+  transform: translateY(-1px);
+}
+
+/* 琛ㄥ崟楠岃瘉閿欒鏍峰紡 - 鍏抽敭锛氭湁鍊兼椂涓嶆樉绀洪敊璇竟妗� */
+.form-item :deep(.el-form-item__error) {
+  font-size: 12px;
+  color: #f56c6c;
+  margin-top: 4px;
+  /* 浠呭湪杈撳叆妗嗕负绌轰笖楠岃瘉澶辫触鏃舵樉绀� */
+  display: none;
+}
+
+/* 鍙湁杈撳叆妗嗕负绌� + 楠岃瘉澶辫触鏃舵樉绀洪敊璇彁绀� */
+.form-item:deep(.el-form-item--error) .custom-input:not(.has-value) + .el-form-item__error {
+  display: block;
+}
+
+/* 鏈夊�兼椂鍗充娇楠岃瘉澶辫触锛屼篃涓嶆樉绀洪敊璇竟妗� */
+.custom-input.has-value :deep(.el-input__inner.el-input__inner--error) {
+  border-color: #8cc5ff;
+  box-shadow: none;
+}
+
+/* 鎿嶄綔鎸夐挳鍖哄煙 - 浼樺寲闂磋窛鍜屽搷搴斿紡 */
+.action-buttons {
+  display: flex;
+  justify-content: flex-end;
+  gap: 10px;
+  margin-top: 20px;
+  flex-wrap: wrap;
+}
+
+/* 鍥炲簱鎸夐挳鏍峰紡 - 浼樺寲浜や簰 */
+.return-btn {
+  border-radius: 8px;
+  padding: 9px 20px;
+  font-size: 14px;
+  font-weight: 500;
+  background-color: #e8f4f8;
+  border-color: #409eff;
+  color: #1989fa;
+  transition: all 0.2s ease;
+}
+
+.return-btn:hover {
+  background-color: #d1e7fd !important;
+  border-color: #1989fa !important;
+  color: #1989fa !important;
+  transform: translateY(-1px);
+  box-shadow: 0 2px 8px rgba(64, 158, 255, 0.15);
+}
+
+.return-btn:disabled {
+  background-color: #f0f8fb !important;
+  border-color: #b3d8ff !important;
+  color: #91c9f7 !important;
+  cursor: not-allowed;
+  transform: none;
+  box-shadow: none;
+}
+
+/* 鐩樼偣瀹屾垚鎸夐挳鏍峰紡 - 浼樺寲浜や簰 */
+.complete-btn {
+  border-radius: 8px;
+  padding: 9px 20px;
+  font-size: 14px;
+  font-weight: 500;
+  background-color: #409eff;
+  border-color: #409eff;
+  transition: all 0.2s ease;
+}
+
+.complete-btn:hover {
+  background-color: #1989fa !important;
+  border-color: #1989fa !important;
+  transform: translateY(-1px);
+  box-shadow: 0 2px 8px rgba(64, 158, 255, 0.2);
+}
+
+.complete-btn:disabled {
+  background-color: #a0cfff !important;
+  border-color: #a0cfff !important;
+  color: #ffffff !important;
+  cursor: not-allowed;
+  transform: none;
+  box-shadow: none;
+}
+
+/* 鍙栨秷鎸夐挳鏍峰紡 - 浼樺寲鐐瑰嚮鍖哄煙 */
+.cancel-btn {
+  color: #666666;
+  font-size: 14px;
+  transition: all 0.2s ease;
+  padding: 9px 20px;
+  border-radius: 8px;
+  min-width: 80px;
+}
+
+.cancel-btn:hover {
+  color: #1989fa !important;
+  background-color: #f0f8fb !important;
+}
+
+/* 寮圭獥鏁翠綋鏍峰紡 - 浼樺寲鍦嗚鍜岄槾褰� */
+.custom-vol-box {
+  border-radius: 16px !important;
+  overflow: hidden;
+  box-shadow: 0 8px 24px rgba(64, 158, 255, 0.12);
+}
+
+.custom-vol-box :deep(.el-dialog__header) {
+  background-color: #e8f4f8;
+  border-bottom: 1px solid #d1e7fd;
+  padding: 16px 24px;
+}
+
+.custom-vol-box :deep(.el-dialog__title) {
+  color: #1989fa;
+  font-size: 18px;
+  font-weight: 600;
+}
+
+.custom-vol-box :deep(.el-dialog__body) {
+  padding: 16px 24px;
+}
+
+/* 鍝嶅簲寮忛�傞厤 - 灏忓睆骞曚紭鍖� */
+@media (max-width: 768px) {
+  .stock-take-form {
+    padding: 16px;
+  }
+
+  .form-item {
+    margin-bottom: 12px;
+  }
+
+  .action-buttons {
+    justify-content: center;
+  }
+
+  .custom-vol-box :deep(.el-dialog__header) {
+    padding: 12px 16px;
+  }
+
+  .custom-vol-box :deep(.el-dialog__body) {
+    padding: 12px 16px;
+  }
+}
+</style>
+
+<style>
+/* 鍏ㄥ眬琛ュ厖鏍峰紡 - 缁熶竴涓婚 */
+.el-tag--primary {
+  --el-tag-bg-color: #e8f4f8;
+  --el-tag-border-color: #409eff;
+  --el-tag-text-color: #1989fa;
+}
+
+/* 鍗犱綅绗︽牱寮� - 缁熶竴棰滆壊 */
+.el-input__inner::-webkit-input-placeholder {
+  color: #b3d8ff;
+  font-size: 13px;
+}
+
+.el-input__inner::-moz-placeholder {
+  color: #b3d8ff;
+  font-size: 13px;
+}
+
+.el-input__inner:-ms-input-placeholder {
+  color: #b3d8ff;
+  font-size: 13px;
+}
+
+.el-input__inner::placeholder {
+  color: #b3d8ff;
+  font-size: 13px;
+}
+
+/* 淇℃伅鎸夐挳鍏ㄥ眬鏍峰紡 */
+.el-button--info {
+  --el-button-bg-color: #e8f4f8;
+  --el-button-border-color: #409eff;
+  --el-button-text-color: #1989fa;
+  --el-button-hover-bg-color: #d1e7fd;
+  --el-button-hover-border-color: #1989fa;
+  --el-button-hover-text-color: #1989fa;
+}
+
+/* 纭寮圭獥鏍峰紡浼樺寲 */
+.el-message-box {
+  border-radius: 12px !important;
+  box-shadow: 0 4px 20px rgba(64, 158, 255, 0.15);
+}
+
+.el-message-box__header {
+  border-bottom: 1px solid #f0f8fb;
+  padding: 12px 20px;
+}
+
+.el-message-box__title {
+  color: #1989fa;
+  font-size: 16px;
+  font-weight: 600;
+}
+
+.el-message-box__content {
+  color: #666666;
+  font-size: 14px;
+  padding: 16px 20px;
+}
+
+.el-message-box__btns {
+  padding: 12px 20px;
+  border-top: 1px solid #f0f8fb;
+}
+</style>
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/allocateOrderDetail.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/allocateOrderDetail.vue"
index 1bdbfaf..e170fa5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/allocateOrderDetail.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/allocateOrderDetail.vue"
@@ -315,149 +315,149 @@
       });
     },
     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);
+      // 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);
 
-      const formData = reactive({
-        selectedPlatform: platformOptions[0].value,
-      });
+      // 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 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,
-                        outboundTargetLocation: formData.selectedPlatform,
-                        outboundQuantity: 1,
-                        operator: "",
-                        orderNo: this.row.orderNo,
-                      };
+      //                 const keys = this.selection.map((item) => item.id);
+      //                 const requestParams = {
+      //                   detailIds: keys,
+      //                   outboundTargetLocation: formData.selectedPlatform,
+      //                   outboundQuantity: 1,
+      //                   operator: "",
+      //                   orderNo: this.row.orderNo,
+      //                 };
 
-                      this.http
-                        .post(
-                          "api/Outbound/ProcessPickingOutbound",
-                          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/Outbound/ProcessPickingOutbound",
+      //                     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);
+      // vnode.appContext = this.$.appContext;
+      // render(vnode, mountNode);
     },
     outboundbatch() {
       if (this.selection.length === 0) {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrder.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrder.js"
new file mode 100644
index 0000000..cae7d0a
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrder.js"
@@ -0,0 +1,83 @@
+// 鑷畾涔夋墿灞曚笟鍔′唬鐮�
+import gridBody from "./extend/OrderStockTake.vue";
+
+let extension = {
+  components: {
+    // 鏌ヨ鐣岄潰鎵╁睍缁勪欢锛氬皢鑷畾涔夊脊绐楁敞鍐屼负 gridBody 缁勪欢
+    gridHeader: '',
+    gridBody: gridBody, // 瀵瑰簲浣犵殑鐩樼偣寮圭獥缁勪欢
+    gridFooter: '',
+    // 鏂板缓/缂栬緫寮瑰嚭妗嗘墿灞曠粍浠讹紙姝ゅ涓嶇敤锛岀暀绌猴級
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', // 鏃犻渶鎸囧畾琛ㄥ悕锛堥粯璁ら�傜敤褰撳墠椤甸潰琛ㄦ牸锛�
+  buttons: { view: [], box: [], detail: [] }, // 鎵╁睍鎸夐挳锛堝闇�棰濆娣诲姞鍙湪姝ら厤缃級
+  methods: {
+    onInit() {
+      // 鎵惧埌 value 涓� "OrderStockTake" 鐨勬寜閽紙闇�鍦ㄦ鏋朵腑鎻愬墠閰嶇疆璇ユ寜閽級
+      let OrderStockTakeBtn = this.buttons.find(x => x.value === 'OrderStockTake');
+      if (OrderStockTakeBtn) {
+        // 閲嶅啓鎸夐挳鐐瑰嚮浜嬩欢
+        OrderStockTakeBtn.onClick = function () {
+          // 1. 鑾峰彇琛ㄦ牸閫変腑琛屾暟鎹�
+          let rows = this.$refs.table.getSelected();
+          if (rows.length === 0) return this.$error("璇烽�夋嫨涓�鏉$洏鐐瑰崟鎹暟鎹紒");
+          if (rows.length > 1) return this.$error("鍙兘閫夋嫨涓�鏉$洏鐐瑰崟鎹暟鎹紒");
+          
+          const selectedReceiptNo = rows[0].orderNo;
+          if (!selectedReceiptNo) return this.$error("閫変腑鐨勫崟鎹己灏戞湁鏁堢殑鍗曟嵁鍙凤紒");
+
+          // 3. 璋冪敤鑷畾涔夊脊绐楃殑 open 鏂规硶锛屽苟浼犻�掑崟鎹彿锛堟牳蹇冿細缁欏脊绐椾紶鍙傦級
+          this.$refs.gridBody.open(selectedReceiptNo);
+        };
+      }
+
+      // 4. 鐩戝惉鑷畾涔夊脊绐楃殑浜嬩欢锛堝悓姝ヤ富椤甸潰鏁版嵁锛�
+      this.$nextTick(() => {
+        const stockTakeComp = this.$refs.gridBody;
+        if (stockTakeComp) {
+          // 鐩戝惉寮圭獥鐨� "refresh" 浜嬩欢锛堢洏鐐瑰畬鎴愬悗鍒锋柊涓婚〉闈級
+          stockTakeComp.$on('refresh', () => {
+            this.$refs.table.reload(); // 鍒锋柊琛ㄦ牸鏁版嵁
+          });
+
+          // 鐩戝惉寮圭獥鐨� "box-returned" 浜嬩欢锛堟枡绠卞洖搴撳悗鍙寜闇�澶勭悊锛�
+          stockTakeComp.$on('box-returned', (boxNo) => {
+            this.$success(`鏂欑銆�${boxNo}銆戝洖搴撴垚鍔燂紝琛ㄦ牸灏嗗埛鏂帮紒`);
+            this.$refs.table.reload(); // 鍥炲簱鍚庝篃鍒锋柊琛ㄦ牸锛堝彲閫夛紝鏍规嵁涓氬姟闇�姹傦級
+          });
+        }
+      });
+    },
+    onInited() {
+      // 妗嗘灦鍒濆鍖栧畬鎴愬悗鎵ц锛堝闇�閰嶇疆鏄庣粏琛ㄥ彲鍦ㄦ鎿嶄綔锛�
+    },
+    searchBefore(param) {
+      // 鏌ヨ鍓嶆嫤鎴細鍙坊鍔犻澶栨煡璇㈡潯浠讹紙濡傛潈闄愯繃婊わ級
+      return true;
+    },
+    searchAfter(result) {
+      // 鏌ヨ鍚庢暟鎹鐞嗭紙濡傛牸寮忓寲鏃ユ湡銆佺姸鎬佹樉绀猴級
+      return true;
+    },
+    addBefore(formData) {
+      // 鏂板缓淇濆瓨鍓嶅鐞嗭紙姝ゅ涓嶇敤锛�
+      return true;
+    },
+    updateBefore(formData) {
+      // 缂栬緫淇濆瓨鍓嶅鐞嗭紙姝ゅ涓嶇敤锛�
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      // 鍗曞嚮琛岄�変腑褰撳墠琛岋紙浼樺寲鐢ㄦ埛浣撻獙锛�
+      this.$refs.table.$refs.table.toggleRowSelection(row);
+    },
+    modelOpenAfter(row) {
+      // 鏂板缓/缂栬緫寮圭獥鎵撳紑鍚庡鐞嗭紙姝ゅ涓嶇敤锛�
+    }
+  }
+};
+
+export default extension;
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderDetail.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderDetail.js"
new file mode 100644
index 0000000..24e1d94
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderDetail.js"
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/allocateoutboundOrder.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/allocateoutboundOrder.js"
index 836d54c..25f7268 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/allocateoutboundOrder.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/allocateoutboundOrder.js"
@@ -1,9 +1,5 @@
 
 //姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
-import http from '@/api/http.js'
-import { h,createVNode, render,reactive ,ref } from 'vue';
-import { ElDialog , ElForm, ElFormItem, ElInput, ElButton, ElMessage ,ElSelect, ElOption} from 'element-plus';
-
 import gridBody from './extend/newAllocateOrderDetail.vue'
 let extension = {
     components: {
@@ -17,287 +13,7 @@
       modelFooter: ''
     },
     tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
-    buttons: { view: [
-       /* {
-        name: '鍑哄簱',
-        type: 'primary',
-        value: '鍑哄簱',
-        onClick: function () { // 淇锛氱敤ElMessage鏇夸唬this.$message
-          const selectedRows = this.$refs.table.getSelected();
-          if (selectedRows.length === 0) {
-            ElMessage.warning('璇峰厛閫夋嫨瑕佺敓鎴愪换鍔$殑琛�');
-            return;
-          }
-          if (selectedRows.length > 1) {
-            ElMessage.warning('鍙兘閫夋嫨涓�琛�');
-            return;
-          }
-    
-
-          // 鎵�鏈夋牎楠岄�氳繃锛岃Е鍙戜富缁勪欢鎵撳紑鍑哄簱寮圭獥
-          console.log('鎵�鏈夋牎楠岄�氳繃锛岃Е鍙憃penOutboundDialog浜嬩欢锛屽崟鎹暟鎹細', selectedRows[0]);
-         
-          this.$emit('openOutboundDialog', {
-            transNo: selectedRows[0].transNo,       // 鍑哄簱鍗曠紪鍙�
-            createDate: selectedRows[0].createDate || new Date().toLocaleDateString()  // 鍑哄簱鏃ユ湡
-          });
-        }
-      }, */
-      {
-  name: '绌烘墭鐩樺嚭搴�',
-  type: 'primary',
-  value: '绌烘墭鐩樺嚭搴�',
-  onClick: function () {
-    
-   
-    const platformOptions = Array.from({ length: 1 }, (_, i) => {
-      const num = 1;
-      return { label: `绔欏彴${num}`, value: `1-2` };
-    });
-
-    const quantityOptions = Array.from({ length: 6 }, (_, i) => ({
-      label: (i + 1).toString(), 
-      value: i + 1 
-    }));
-
-    const warehouseOptions = ref([]);
-    const isLoadingWarehouses = ref(false);
-
-    const getWarehouseList = async () => {
-      isLoadingWarehouses.value = true;
-      try {
-        const { data, status } = await http.post('/api/LocationInfo/GetLocationTypes'); 
-        if (status && Array.isArray(data)) {
-          // 鏍煎紡鍖栦粨搴撻�夐」锛氶�傞厤ElSelect鐨刲abel-value鏍煎紡
-          warehouseOptions.value = data.map(item => ({
-            label: item.locationTypeDesc,
-            value: item.locationType  
-          }));
-        } else {
-          ElMessage.error('鑾峰彇鍖哄煙鍒楄〃澶辫触');
-          warehouseOptions.value = [];
-        }
-      } catch (err) {
-        ElMessage.error('鍖哄煙鏁版嵁璇锋眰寮傚父锛岃绋嶅悗閲嶈瘯');
-        warehouseOptions.value = [];
-      } finally {
-        isLoadingWarehouses.value = false;
-      }
-    };
-
-    const mountNode = document.createElement('div');
-    document.body.appendChild(mountNode);
-
-    
-    const formData = reactive({
-      warehouseCode:'',
-      palletCode: '',
-      selectedPlatform: platformOptions[0].value,
-      quantity:1 
-    });
-
-    const vnode = createVNode(ElDialog, {
-      title: '绌烘墭鐩樺嚭搴�',
-      width: '500px', 
-      modelValue: true,
-      appendToBody: true,
-      onOpened: async () => {
-        await getWarehouseList();
-        const inputRef = vnode.component.refs.boxCodeInput;
-        inputRef?.focus();
-      },
-      'onUpdate:modelValue': (isVisible) => {
-        if (!isVisible) {
-          render(null, mountNode);
-          document.body.removeChild(mountNode);
-        }
-      },
-      style: {
-        padding: '20px 0', 
-        borderRadius: '8px' 
-      }
-    }, {
-      default: () => h(ElForm, {
-        model: formData,
-        rules: {
-          warehouseCode:[
-            { required: true, message: '璇烽�夋嫨鍖哄煙', trigger: ['change', 'blur'] }
-          ],
-          palletCode: [
-            { type: 'string', message: '鏂欑鍙峰繀椤讳负瀛楃涓�', trigger: 'blur' }
-          ],
-          selectedPlatform: [
-            { required: true, message: '璇烽�夋嫨鍑哄簱绔欏彴', trigger: 'change' }
-          ],
-          quantity:[
-            { required: true, message: '璇烽�夋嫨绌虹鏁伴噺', trigger: 'change'}
-          ]                       
-        },
-        ref: 'batchOutForm',
-        labelWidth: '100px', 
-        style: {
-          padding: '0 30px', 
-        }
-       }, 
-       [
-      //   h(ElFormItem, {
-      //     label: '浠撳簱鍖哄煙',
-      //     prop: 'warehouseCode',
-      //     style: {
-      //       marginBottom: '24px' 
-      //     }
-      //   }, [
-      //     h(ElSelect, {
-      //       placeholder: '璇烽�夋嫨浠撳簱鍖哄煙',
-      //       modelValue: formData.warehouseCode,
-      //       'onUpdate:modelValue': (val) => {
-      //         formData.warehouseCode = val;
-      //       },
-      //       style: {
-      //         width: '100%',
-      //         height: '40px', 
-      //         borderRadius: '4px',
-      //         borderColor: '#dcdfe6'
-      //       }
-      //     }, warehouseOptions.value.map(platform => 
-      //       h(ElOption, { label: platform.label, value: platform.value })
-      //     ))
-      //   ]),
-        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:'quantity',
-      //     style:{
-      //       marginBottom:'24px'
-      //     }
-      //   },[h(ElSelect,{
-      //     placeholder:'璇烽�夋嫨绌虹鏁伴噺',
-      //     modelValue:formData.quantity,
-      //     'onUpdate:modelValue':(val)=>{
-      //       formData.quantity=val;
-      //     },
-      //     style:{
-      //       width:'100%',
-      //       height:'40px',
-      //       borderRadius:'4px',
-      //       borderColor:'#dcdfe6'
-      //     },
-      //     filterable:false
-      //   },
-      //   quantityOptions.map(option=>
-      //     h(ElOption,{
-      //       label:option.label,
-      //       value:option.value
-      //     })
-      //   )
-      // )]),                                 
-        h(ElFormItem, {
-          label: '鏂欑鍙�',
-          prop: 'palletCode',
-          style: {
-            marginBottom: '16px' 
-          }
-        }, [
-          h(ElInput, {
-            type: 'text',
-            placeholder: '鍙�夎緭鍏ユ枡绠卞彿锛屼笉濉垯鑷姩鍒嗛厤绌烘枡绠�',
-            modelValue: formData.palletCode,
-            'onUpdate:modelValue': (val) => {
-              formData.palletCode = val;
-            },
-            style: {
-              width: '100%',
-              height: '40px', 
-              borderRadius: '4px',
-              borderColor: '#dcdfe6'
-            },
-            attrs: {
-              placeholderStyle: 'color: #909399;' 
-            }
-          })
-        ]),
-        
-        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.batchOutForm;
-              try {
-                await formRef.validate();
-              } catch (err) {
-                return;
-              }
-
-              http.post('/api/Task/PalletOutboundTask?palletCode='+formData.palletCode+'&endStation='+formData.selectedPlatform, {
-                
-              }).then(({ data, status, message }) => {
-                if (status) {
-
-                  ElMessage.success(`鍑哄簱鎴愬姛`);
-                  this.refresh();
-                  render(null, mountNode);
-                  document.body.removeChild(mountNode);
-                } else {
-                  ElMessage.error(message || data?.message || '鍑哄簱澶辫触');
-                }
-              }).catch(() => {
-                ElMessage.error('璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯');
-              });
-            },
-            style: {
-              borderRadius: '4px',
-              padding: '8px 20px' 
-            }
-          }, '纭畾')
-        ])
-      ])
-    });
-
-    vnode.appContext = this.$.appContext;
-    render(vnode, mountNode);
-  }
-}
-    ], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
     methods: {
        //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
       onInit() {  
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/newAllocateOrderDetail.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/newAllocateOrderDetail.vue"
index 77d3fad..a4f1a20 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/newAllocateOrderDetail.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/newAllocateOrderDetail.vue"
@@ -55,6 +55,7 @@
     <stock-select ref="child" @parentCall="parentCall"></stock-select>
     <selected-stock ref="selectedStock" @parentCall="parentCall"></selected-stock>
     <NoStockOut ref="NoStockOut" @parentCall="parentCall"></NoStockOut>
+    <DirectOutbound ref="DirectOutbound" @parentCall="parentCall"></DirectOutbound>
   </div>
 </template>
 
@@ -64,20 +65,10 @@
 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 DirectOutbound from "./DirectOutbound.vue";
 
 export default {
-  components: { VolBox, VolForm, StockSelect, SelectedStock, NoStockOut },
+  components: { VolBox, VolForm, StockSelect, SelectedStock, NoStockOut, DirectOutbound },
   data() {
     return {
       row: null,
@@ -324,337 +315,166 @@
       });
     },
     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);
+      // 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);
 
-      const formData = reactive({
-        selectedPlatform: platformOptions[0].value,
-      });
+      // 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 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,
-                        outboundTargetLocation: formData.selectedPlatform,
-                        outboundQuantity: 1,
-                        operator: "",
-                        orderNo: this.row.orderNo,
-                      };
+      //                 const keys = this.selection.map((item) => item.id);
+      //                 const requestParams = {
+      //                   detailIds: keys,
+      //                   outboundTargetLocation: formData.selectedPlatform,
+      //                   outboundQuantity: 1,
+      //                   operator: "",
+      //                   orderNo: this.row.orderNo,
+      //                 };
 
-                      this.http
-                        .post(
-                          "api/Outbound/ProcessPickingOutbound",
-                          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/Outbound/ProcessPickingOutbound",
+      //                     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);
+      // 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 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: "璇烽�夋嫨鍑哄簱绔欏彴锛�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 = {
-                        detailIds: keys,
-                        outboundTargetLocation: formData.selectedPlatform,
-                        outboundQuantity: formData.outboundDecimal,
-                        operator: "",
-                        orderNo: this.row.orderNo,
-                      };
-
-                      this.http
-                        .post(
-                          "api/Outbound/ProcessPickingOutbound",
-                          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);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js"
index be51ac6..6fa1f60 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js"
@@ -385,10 +385,13 @@
     if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
     if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
     
+    
     // 纭繚閫変腑琛屾湁id锛堟牴鎹疄闄呰〃鏍兼暟鎹瓧娈佃皟鏁达紝姣斿rows[0].detailId绛夛級
     const selectedId = rows[0].id || rows[0].detailId;
     if (!selectedId) return this.$error("閫変腑鏁版嵁缂哄皯蹇呰ID瀛楁!");
 
+    if(rows[0].orderStatus!=0&&rows[0].orderStatus!=1)return this.$error("璇ュ崟鎹凡缁忓畬鎴�");
+
     const platformOptions = [
       { label: "绔欏彴2", value: "2-1" },
       { label: "绔欏彴3", value: "3-1" },
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockView.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockView.js"
index c58c825..62c338f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockView.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockView.js"
@@ -1,4 +1,5 @@
-
+import { createVNode, render, h, reactive } from 'vue';
+import { ElDialog, ElForm, ElFormItem, ElSelect, ElOption, ElButton, ElMessage, ElLoading } from 'element-plus';
 let extension = {
   components: {
     //鏌ヨ鐣岄潰鎵╁睍缁勪欢
@@ -156,6 +157,175 @@
           }
         }
       })
+
+      let SelectTake = this.buttons.find(x => x.value == 'SelectStockTake');
+if (SelectTake) {
+  // 鏀逛负绠ご鍑芥暟纭繚this鎸囧悜Vue缁勪欢瀹炰緥
+  SelectTake.onClick = async () => {
+    // 鑾峰彇閫変腑鏁版嵁锛堜笌鍘熼�昏緫涓�鑷达紝纭繚鏄暟缁勬牸寮忥級
+    let stockViews = this.$refs.table.getSelected();
+    
+    // 鏁版嵁鏍¢獙锛氳嚦灏戦�夋嫨涓�鏉℃暟鎹�
+    if (stockViews.length === 0) return ElMessage.error("璇烽�夋嫨闇�瑕佹搷浣滅殑鏁版嵁!");
+    
+    // 绔欏彴閫夐」锛堝彲鏍规嵁瀹為檯涓氬姟璋冩暣閫夐」鍊硷級
+    const stationOptions = [
+      { label: "绔欏彴2", value: "2-1" },
+      { label: "绔欏彴3", value: "3-1" },
+      { label: "绔欏彴4", value: "4-1" },
+    ];
+    
+    // 鍒涘缓寮圭獥鎸傝浇鑺傜偣
+    const mountNode = document.createElement("div");
+    document.body.appendChild(mountNode);
+    
+    // 琛ㄥ崟鏁版嵁锛堢粦瀹氶�変腑鐨勭珯鍙帮級
+    const formData = reactive({
+      outStation: stationOptions[0].value, // 榛樿閫変腑绗竴涓珯鍙�
+    });
+    
+    // 鍒涘缓寮圭獥VNode
+    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: {
+                outStation: [
+                  { required: true, message: "璇烽�夋嫨鍑哄簱绔欏彴", trigger: "change" },
+                ],
+              },
+              ref: "stockTakeForm", // 琛ㄥ崟ref鏍囪瘑
+              labelWidth: "100px",
+              style: {
+                padding: "0 30px",
+              },
+            },
+            [
+              // 绔欏彴閫夋嫨涓嬫媺妗�
+              h(ElFormItem, {
+                label: "鍑哄簱绔欏彴",
+                prop: "outStation",
+                style: { marginBottom: "24px" },
+              }, [
+                h(ElSelect, {
+                  placeholder: "璇烽�夋嫨鍑哄簱绔欏彴",
+                  modelValue: formData.outStation,
+                  "onUpdate:modelValue": (val) => {
+                    formData.outStation = val;
+                  },
+                  style: {
+                    width: "100%",
+                    height: "40px",
+                    borderRadius: "4px",
+                    borderColor: "#dcdfe6",
+                  },
+                }, stationOptions.map((station) =>
+                  h(ElOption, { label: station.label, value: station.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 () => {
+                    // 纭繚琛ㄥ崟ref宸叉寕杞�
+                    await this.$nextTick();
+                    const formRef = vnode.component.refs.stockTakeForm;
+
+                    if (!formRef) {
+                      ElMessage.error("琛ㄥ崟鍒濆鍖栧け璐ワ紝璇烽噸璇�");
+                      return;
+                    }
+
+                    // 琛ㄥ崟楠岃瘉
+                    try {
+                      await formRef.validate();
+                    } catch (err) {
+                      return;
+                    }
+
+                    // 鏋勯�犺姹傚弬鏁帮細
+                    // 1. 璇锋眰浣擄細鐩存帴浼犻�抯tockViews鏁扮粍锛堝搴斿悗绔疞ist<StockViewDTO>锛�
+                    // 2. outStation锛氶�氳繃鏌ヨ鍙傛暟浼犻�掞紙鍥犲悗绔湭鎸囧畾[FromBody]鎺ユ敹璇ュ弬鏁帮級
+                    const requestBody = stockViews; // 鐩存帴浼犻�掗�変腑鏁扮粍锛堢‘淇濇暟缁勫唴瀵硅薄缁撴瀯涓嶴tockViewDTO涓�鑷达級
+                    const outStation = formData.outStation;
+
+                    // 鎺ュ彛璇锋眰锛歅ost鏂瑰紡锛岃姹備綋浼爏tockViews鏁扮粍锛宱utStation鎷煎埌URL鏌ヨ鍙傛暟
+                    try {
+                      // 鎷兼帴鏌ヨ鍙傛暟锛堝鏋渙utStation鏈夌壒娈婂瓧绗︼紝鍙娇鐢╡ncodeURIComponent澶勭悊锛�
+                      const url = `api/Task/TakeOutbound?outStation=${encodeURIComponent(outStation)}`;
+                      
+                      const x = await this.http.post(
+                        url, // 甯︽煡璇㈠弬鏁扮殑URL
+                        requestBody, // 璇锋眰浣擄細stockViews鏁扮粍
+                        "鏁版嵁澶勭悊涓�"
+                      );
+
+                      if (!x.status) {
+                        ElMessage.error(x.message || "搴撳瓨鎿嶄綔澶辫触");
+                        return;
+                      }
+
+                      ElMessage.success("鎿嶄綔鎴愬姛");
+                      this.refresh(); // 鍘熷埛鏂伴�昏緫淇濈暀
+                    } catch (error) {
+                      console.error("搴撳瓨鎺ュ彛璇锋眰澶辫触锛�", error);
+                      ElMessage.error("璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯");
+                    } finally {
+                      // 鏃犺鎴愬姛澶辫触锛屽叧闂脊绐�
+                      render(null, mountNode);
+                      document.body.removeChild(mountNode);
+                    }
+                  },
+                  style: { borderRadius: "4px", padding: "8px 20px" },
+                }, "纭畾鎿嶄綔"),
+              ]),
+            ]),
+      }
+    );
+
+    // 缁戝畾app涓婁笅鏂囷紙纭繚寮圭獥鍐呯粍浠舵甯稿伐浣滐級
+    vnode.appContext = this.$.appContext;
+    render(vnode, mountNode);
+  };
+}
     },
     onInited() {
       //妗嗘灦鍒濆鍖栭厤缃悗
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/taskinfo/task.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/taskinfo/task.js"
index f5c8e2e..3f548de 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/taskinfo/task.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/taskinfo/task.js"
@@ -15,31 +15,7 @@
       modelFooter: ''
     },
     tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
-    buttons: { view: [
-      {
-        name: '閲嶄笅浠诲姟',
-        type: 'primary',
-        value: '閲嶄笅浠诲姟',
-        onClick: async function () {
-          const selectRows = this.$refs.table.getSelected();
-          if (selectRows.length == 0) return ElMessage.warning('璇烽�夋嫨涓�鏉′换鍔�');
-          if (selectRows.length > 1) return ElMessage.warning('鍙兘閫夋嫨涓�鏉′换鍔�');
-          const taskNum = selectRows[0].taskId;
-          try{
-            const response = await http.post('api/Task/RecreateTasks?taskNums='+taskNum, '浠诲姟閲嶄笅涓�...');
-            const { status, message ,data} = response;
-            if (status) {
-              ElMessage.success(`閲嶄笅浠诲姟鎴愬姛`);
-              this.refresh();
-            }else{
-              ElMessage.error(`閲嶄笅浠诲姟澶辫触锛�${message}`);
-            }
-          }catch(err){
-            ElMessage.error(`閲嶄笅浠诲姟寮傚父锛�${err.message}`);
-          }
-        }
-      }
-    ], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    buttons: { view: [ ], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
     methods: {
        //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
       onInit() {  
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/router/viewGird.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/router/viewGird.js"
index 9b747c8..727c0c8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/router/viewGird.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/router/viewGird.js"
@@ -239,6 +239,18 @@
     component: () => import('@/views/system/Log.vue'),
     meta: {
     }
+  }, {
+    path: '/takeStockOrder',
+    name: 'takeStockOrder',
+    component: () => import('@/views/inbound/takeStockOrder.vue')
+  }, {
+    path: '/takeStockOrderDetail',
+    name: 'takeStockOrderDetail',
+    component: () => import('@/views/inbound/takeStockOrderDetail.vue')
+  }, {
+    path: '/dashboard',
+    name: 'dashboard',
+    component: () => import('@/views/charts/wms-dashboard.vue')
   }
 ]
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Login.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Login.vue"
index 99d69b8..91b5e8d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Login.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Login.vue"
@@ -68,8 +68,8 @@
     const codeImgSrc = ref("");
     const value = ref("");
     const userInfo = reactive({
-      userName: "admin",
-      password: "123456",
+      userName: "",
+      password: "",
       verificationCode: "1234",
       UUID: undefined,
     });
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue"
new file mode 100644
index 0000000..5271c53
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue"
@@ -0,0 +1,725 @@
+<template>
+  <div class="wms-dashboard">
+    <!-- 椤堕儴鏍囬鏍� -->
+    <div class="header">
+      <h1>WMS浠撳偍鍙鍖栧浘琛ㄧ湅鏉�</h1>
+      <div class="header-right">
+        <span>2025-12-24 16:11:44</span>
+        <el-select v-model="month" placeholder="鏈湀" style="margin-left: 10px; width: 80px;">
+          <el-option label="鏈湀" value="month"></el-option>
+          <el-option label="涓婃湀" value="lastMonth"></el-option>
+        </el-select>
+        <el-button type="primary" style="margin-left: 10px;" @click="refreshCharts">鍒锋柊</el-button>
+      </div>
+    </div>
+
+    <!-- 缁熻鍗$墖鍖哄煙 -->
+    <el-row :gutter="20" class="stats-card-row">
+      <el-col :span="6">
+        <el-card class="stats-card">
+          <div class="card-title">鎬诲簱瀛橈紙浠讹級</div>
+          <div class="card-value">269,225</div>
+          <div class="card-change"><el-tag type="success">鈫� 2.1% 杈冩槰鏃�</el-tag></div>
+        </el-card>
+      </el-col>
+      <el-col :span="6">
+        <el-card class="stats-card">
+          <div class="card-title">寰呭嚭搴撹鍗�</div>
+          <div class="card-value">425</div>
+          <div class="card-change"><el-tag type="warning">鈫� 5.3% 杈�1灏忔椂鍓�</el-tag></div>
+        </el-card>
+      </el-col>
+      <el-col :span="6">
+        <el-card class="stats-card">
+          <div class="card-title">浠婃棩浣滀笟瀹屾垚鐜�</div>
+          <div class="card-value">93.9%</div>
+          <div class="card-change"><el-tag type="success">鈫� 1.8% 杈冩槰鏃�</el-tag></div>
+        </el-card>
+      </el-col>
+      <el-col :span="6">
+        <el-card class="stats-card">
+          <div class="card-title">鏈鐞嗗紓甯�</div>
+          <div class="card-value">7</div>
+          <div class="card-change"><el-tag type="danger">鈫� 1 杈�30鍒嗛挓鍓�</el-tag></div>
+        </el-card>
+      </el-col>
+    </el-row>
+
+    <!-- 鍥捐〃鍖哄煙锛堢涓�琛岋級 -->
+    <el-row :gutter="20" class="chart-row">
+      <el-col :span="12">
+        <el-card class="chart-card">
+          <div class="chart-title">搴撳瓨搴撲綅鍒嗗竷锛堝浘鍍忓寲鍗犳瘮锛�<el-button type="text" class="view-btn">鍒囨崲瑙嗗浘</el-button></div>
+          <div ref="inventoryPieRef" class="chart-container"></div>
+        </el-card>
+      </el-col>
+      <el-col :span="12">
+        <el-card class="chart-card">
+          <div class="chart-title">杩�7鏃ュ嚭鍏ュ簱瓒嬪娍锛堝浘鍍忓寲璧板娍锛�
+            <el-button-group class="btn-group">
+              <el-button type="primary" size="small">鍏ㄩ儴</el-button>
+              <el-button type="default" size="small">鍏ュ簱</el-button>
+              <el-button type="default" size="small">鍑哄簱</el-button>
+            </el-button-group>
+          </div>
+          <div ref="stockTrendRef" class="chart-container"></div>
+        </el-card>
+      </el-col>
+    </el-row>
+
+    <!-- 鍥捐〃鍖哄煙锛堢浜岃锛� -->
+    <el-row :gutter="20" class="chart-row">
+      <el-col :span="8">
+        <el-card class="chart-card">
+          <div class="chart-title">搴撲綅鍒╃敤鐜�</div>
+          <div ref="locationRateRef" class="chart-container"></div>
+        </el-card>
+      </el-col>
+      <el-col :span="8">
+        <el-card class="chart-card">
+          <div class="chart-title">浣滀笟绫诲瀷鍒嗗竷<el-button type="text" class="view-btn">鏌ョ湅璇︽儏</el-button></div>
+          <div ref="operationRadarRef" class="chart-container"></div>
+        </el-card>
+      </el-col>
+      <el-col :span="8">
+        <el-card class="chart-card">
+          <div class="chart-title">寮傚父绫诲瀷缁熻瓒嬪娍<el-button type="text" class="view-btn">绛涢��</el-button></div>
+          <div ref="exceptionTrendRef" class="chart-container"></div>
+        </el-card>
+      </el-col>
+    </el-row>
+
+    <!-- 琛ㄦ牸鍖哄煙 -->
+    <el-row :gutter="20" class="table-row">
+      <el-col :span="12">
+        <el-card class="table-card">
+          <div class="table-title">璁㈠崟澶勭悊杩涘害<el-select v-model="orderType" placeholder="閫�璐у叆搴�"
+              style="width: 100px; margin-left: 10px;">
+              <el-option label="閫�璐у叆搴�" value="return"></el-option>
+              <el-option label="鏅�氬嚭搴�" value="normal"></el-option>
+            </el-select></div>
+          <el-table :data="orderList" border style="width: 100%;">
+            <el-table-column prop="orderNo" label="璁㈠崟鍙�" />
+            <el-table-column prop="type" label="绫诲瀷" />
+            <el-table-column prop="priority" label="浼樺厛绾�">
+              <template #default="scope">
+                <el-tag
+                  :type="scope.row.priority === '绱ф��' ? 'danger' : scope.row.priority === '鍔犳��' ? 'warning' : 'success'">
+                  {{ scope.row.priority }}
+                </el-tag>
+              </template>
+            </el-table-column>
+            <el-table-column prop="progress" label="杩涘害">
+              <template #default="scope">
+                <el-progress :percentage="scope.row.progress" :color="scope.row.progressColor" />
+              </template>
+            </el-table-column>
+          </el-table>
+          <div class="table-pagination">
+            <el-button type="text">鍔犺浇鏇村璁㈠崟</el-button>
+            <el-pagination layout="prev, pager, next, jumper" :current-page="1" :total="50" />
+          </div>
+        </el-card>
+      </el-col>
+      <el-col :span="12">
+        <el-card class="table-card">
+          <div class="table-title">瀹炴椂浣滀笟鐩戞帶
+            <el-button-group class="btn-group">
+              <el-button type="primary" size="small">鍏ㄩ儴浣滀笟</el-button>
+              <el-button type="default" size="small">鍏ュ簱</el-button>
+              <el-button type="default" size="small">鍑哄簱</el-button>
+              <el-button type="default" size="small">鐩樼偣</el-button>
+            </el-button-group>
+          </div>
+          <el-table :data="operationList" border style="width: 100%;">
+            <el-table-column prop="opNo" label="浣滀笟鍗曞彿" />
+            <el-table-column prop="opType" label="浣滀笟绫诲瀷" />
+            <el-table-column prop="operator" label="鎿嶄綔浜哄憳" />
+            <el-table-column prop="startTime" label="寮�濮嬫椂闂�" />
+            <el-table-column prop="status" label="褰撳墠鐘舵��">
+              <template #default="scope">
+                <el-tag :type="scope.row.status === '澶勭悊涓�' ? 'info' : scope.row.status === '宸插畬鎴�' ? 'success' : 'danger'">
+                  {{ scope.row.status }}
+                </el-tag>
+              </template>
+            </el-table-column>
+            <el-table-column label="鎿嶄綔"><el-button type="text">璇︽儏</el-button></el-table-column>
+          </el-table>
+          <div class="table-pagination">
+            <el-pagination layout="prev, pager, next, jumper" :current-page="1" :total="50" />
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup>
+import { ref, onMounted, onUnmounted, nextTick } from 'vue';
+import * as echarts from 'echarts';
+
+// 鍝嶅簲寮忔暟鎹�
+const month = ref('month');
+const orderType = ref('return');
+
+// 妯℃嫙鏁版嵁
+const orderList = ref([
+  { orderNo: 'OD20251224001', type: '鏅�氬嚭搴�', priority: '绱ф��', progress: 60, progressColor: '#ff4d4f' },
+  { orderNo: 'OD20251224002', type: '閫�璐у叆搴�', priority: '鏅��', progress: 80, progressColor: '#1890ff' },
+  { orderNo: 'OD20251224003', type: '璋冩嫧璁㈠崟', priority: '鍔犳��', progress: 40, progressColor: '#faad14' },
+  { orderNo: 'OD20251224004', type: '鏅�氬嚭搴�', priority: '甯歌', progress: 100, progressColor: '#52c41a' }
+]);
+const operationList = ref([
+  { opNo: 'JW251224001', opType: '鍏ュ簱', operator: '寮犱笁', startTime: '15:30:22', status: '澶勭悊涓�' },
+  { opNo: 'CK251224002', opType: '鍑哄簱', operator: '鏉庡洓', startTime: '15:25:10', status: '宸插畬鎴�' },
+  { opNo: 'PD251224003', opType: '鐩樼偣', operator: '鐜嬩簲', startTime: '15:20:05', status: '寰呯‘璁�' },
+  { opNo: 'SC251224005', opType: '涓婃灦', operator: '瀛欎竷', startTime: '15:10:18', status: '寮傚父' }
+]);
+
+// 鍥捐〃瀹瑰櫒
+const inventoryPieRef = ref(null);
+const stockTrendRef = ref(null);
+const locationRateRef = ref(null);
+const operationRadarRef = ref(null);
+const exceptionTrendRef = ref(null);
+
+// 鍥捐〃瀹炰緥
+let inventoryPieChart = null;
+let stockTrendChart = null;
+let locationRateChart = null;
+let operationRadarChart = null;
+let exceptionTrendChart = null;
+
+// 鍒濆鍖栧簱瀛樺簱浣嶅垎甯冮ゼ鍥�
+const initInventoryPie = () => {
+  if (!inventoryPieRef.value) return;
+
+  if (inventoryPieChart) {
+    inventoryPieChart.dispose();
+  }
+
+  inventoryPieChart = echarts.init(inventoryPieRef.value);
+  const option = {
+    tooltip: {
+      trigger: 'item',
+      formatter: '{a} <br/>{b}: {c}%'
+    },
+    legend: {
+      bottom: 0,
+      left: 'center',
+      data: ['甯告俯鍖篈鍖�', '鍐疯棌鍖築鍖�', '淇濈◣鍖篊鍖�', '娈嬫鍝佸尯D鍖�']
+    },
+    series: [{
+      name: '搴撳瓨搴撲綅鍒嗗竷',
+      type: 'pie',
+      radius: ['40%', '70%'],
+      center: ['50%', '40%'],
+      avoidLabelOverlap: false,
+      itemStyle: {
+        borderRadius: 10,
+        borderColor: '#fff',
+        borderWidth: 2
+      },
+      label: {
+        show: false,
+        position: 'center'
+      },
+      emphasis: {
+        label: {
+          show: true,
+          fontSize: 20,
+          fontWeight: 'bold'
+        }
+      },
+      labelLine: {
+        show: false
+      },
+      data: [
+        { value: 48.7, name: '甯告俯鍖篈鍖�', itemStyle: { color: '#5470c6' } },
+        { value: 29.2, name: '鍐疯棌鍖築鍖�', itemStyle: { color: '#91cc75' } },
+        { value: 21.9, name: '淇濈◣鍖篊鍖�', itemStyle: { color: '#fac858' } },
+        { value: 2.2, name: '娈嬫鍝佸尯D鍖�', itemStyle: { color: '#ee6666' } }
+      ]
+    }]
+  };
+
+  inventoryPieChart.setOption(option);
+  return inventoryPieChart;
+};
+
+// 鍒濆鍖栬繎7鏃ュ嚭鍏ュ簱瓒嬪娍鍥�
+const initStockTrend = () => {
+  if (!stockTrendRef.value) return;
+
+  if (stockTrendChart) {
+    stockTrendChart.dispose();
+  }
+
+  stockTrendChart = echarts.init(stockTrendRef.value);
+  const option = {
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        type: 'cross'
+      }
+    },
+    legend: {
+      data: ['鍏ュ簱閲�', '鍑哄簱閲�'],
+      top: 10
+    },
+    grid: {
+      left: '3%',
+      right: '4%',
+      bottom: '3%',
+      top: '15%',
+      containLabel: true
+    },
+    xAxis: {
+      type: 'category',
+      boundaryGap: true,
+      data: ['12-18', '12-19', '12-20', '12-21', '12-22', '12-23', '12-24']
+    },
+    yAxis: {
+      type: 'value',
+      name: '鏁伴噺锛堝崈浠讹級',
+      max: 25
+    },
+    series: [
+      {
+        name: '鍏ュ簱閲�',
+        type: 'bar',
+        barWidth: '30%',
+        data: [10, 12, 10, 12, 10, 12, 12],
+        itemStyle: { color: '#52c41a' }
+      },
+      {
+        name: '鍑哄簱閲�',
+        type: 'bar',
+        barWidth: '30%',
+        data: [16, 18, 14, 18, 16, 18, 20],
+        itemStyle: { color: '#1890ff' }
+      }
+    ]
+  };
+
+  stockTrendChart.setOption(option);
+  return stockTrendChart;
+};
+
+// 鍒濆鍖栧簱浣嶅埄鐢ㄧ巼鐜舰鍥�
+const initLocationRate = () => {
+  if (!locationRateRef.value) return;
+
+  if (locationRateChart) {
+    locationRateChart.dispose();
+  }
+
+  locationRateChart = echarts.init(locationRateRef.value);
+  const option = {
+    tooltip: {
+      formatter: '{a} <br/>{b} : {c}%'
+    },
+    series: [{
+      name: '搴撲綅鍒╃敤鐜�',
+      type: 'gauge',
+      min: 0,
+      max: 100,
+      splitNumber: 10,
+      radius: '90%',
+      center: ['50%', '55%'],
+      startAngle: 180,
+      endAngle: 0,
+      progress: {
+        show: true,
+        width: 20,
+        itemStyle: {
+          color: '#1890ff'
+        }
+      },
+      axisLine: {
+        lineStyle: {
+          width: 20,
+          color: [[1, 'rgba(200,200,200,0.3)']]
+        }
+      },
+      axisTick: {
+        distance: -30,
+        splitNumber: 5,
+        lineStyle: {
+          width: 2,
+          color: '#999'
+        }
+      },
+      splitLine: {
+        distance: -30,
+        length: 14,
+        lineStyle: {
+          width: 3,
+          color: '#999'
+        }
+      },
+      axisLabel: {
+        distance: -20,
+        color: '#999',
+        fontSize: 12
+      },
+      anchor: {
+        show: false
+      },
+      title: {
+        show: true,
+        offsetCenter: [0, '30%'],
+        fontSize: 16,
+        fontWeight: 'bold'
+      },
+      detail: {
+        valueAnimation: true,
+        formatter: '{value}%',
+        fontSize: 20,
+        fontWeight: 'bold',
+        offsetCenter: [0, '70%']
+      },
+      data: [{
+        value: 86.2,
+        name: '搴撲綅鍒╃敤鐜�'
+      }]
+    }]
+  };
+
+  locationRateChart.setOption(option);
+  return locationRateChart;
+};
+
+// 鍒濆鍖栦綔涓氱被鍨嬮浄杈惧浘
+const initOperationRadar = () => {
+  if (!operationRadarRef.value) return;
+
+  if (operationRadarChart) {
+    operationRadarChart.dispose();
+  }
+
+  operationRadarChart = echarts.init(operationRadarRef.value);
+  const option = {
+    tooltip: {
+      trigger: 'item'
+    },
+    legend: {
+      show: false
+    },
+    radar: {
+      indicator: [
+        { name: '鍑哄簱浣滀笟', max: 100 },
+        { name: '鍏ュ簱浣滀笟', max: 100 },
+        { name: '璋冩嫧浣滀笟', max: 100 },
+        { name: '鐩樼偣浣滀笟', max: 100 }
+      ],
+      shape: 'circle',
+      splitNumber: 5,
+      axisName: {
+        color: '#666'
+      },
+      splitLine: {
+        lineStyle: {
+          color: 'rgba(0,0,0,0.1)'
+        }
+      },
+      splitArea: {
+        show: true,
+        areaStyle: {
+          color: ['rgba(255,255,255,0.8)', 'rgba(200,200,200,0.2)']
+        }
+      }
+    },
+    series: [{
+      name: '浣滀笟绫诲瀷鍒嗗竷',
+      type: 'radar',
+      symbolSize: 8,
+      areaStyle: {
+        color: 'rgba(24,144,255,0.3)'
+      },
+      lineStyle: {
+        width: 2
+      },
+      itemStyle: {
+        color: '#1890ff'
+      },
+      data: [{
+        value: [45, 30, 15, 10],
+        name: '浣滀笟鍗犳瘮',
+        label: {
+          show: true,
+          formatter: function (params) {
+            return params.value + '%';
+          }
+        }
+      }]
+    }]
+  };
+
+  operationRadarChart.setOption(option);
+  return operationRadarChart;
+};
+
+// 鍒濆鍖栧紓甯歌秼鍔挎姌绾垮浘
+const initExceptionTrend = () => {
+  if (!exceptionTrendRef.value) return;
+
+  if (exceptionTrendChart) {
+    exceptionTrendChart.dispose();
+  }
+
+  exceptionTrendChart = echarts.init(exceptionTrendRef.value);
+  const option = {
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        type: 'cross'
+      }
+    },
+    legend: {
+      data: ['搴撳瓨涓嶈冻', '璁㈠崟瓒呮椂', '搴撲綅寮傚父', '鐩樼偣宸紓'],
+      top: 10
+    },
+    grid: {
+      left: '3%',
+      right: '4%',
+      bottom: '3%',
+      top: '15%',
+      containLabel: true
+    },
+    xAxis: {
+      type: 'category',
+      boundaryGap: false,
+      data: ['12-18', '12-19', '12-20', '12-21', '12-22', '12-23', '12-24']
+    },
+    yAxis: {
+      type: 'value',
+      name: '寮傚父鏁伴噺'
+    },
+    series: [
+      {
+        name: '搴撳瓨涓嶈冻',
+        type: 'line',
+        smooth: true,
+        symbol: 'circle',
+        symbolSize: 8,
+        data: [10, 11, 9, 12, 10, 13, 12],
+        itemStyle: { color: '#ff4d4f' },
+        lineStyle: {
+          width: 3
+        }
+      },
+      {
+        name: '璁㈠崟瓒呮椂',
+        type: 'line',
+        smooth: true,
+        symbol: 'circle',
+        symbolSize: 8,
+        data: [8, 9, 7, 8, 7, 9, 8],
+        itemStyle: { color: '#faad14' },
+        lineStyle: {
+          width: 3
+        }
+      },
+      {
+        name: '搴撲綅寮傚父',
+        type: 'line',
+        smooth: true,
+        symbol: 'circle',
+        symbolSize: 8,
+        data: [4, 5, 2, 4, 3, 5, 4],
+        itemStyle: { color: '#722ed1' },
+        lineStyle: {
+          width: 3
+        }
+      },
+      {
+        name: '鐩樼偣宸紓',
+        type: 'line',
+        smooth: true,
+        symbol: 'circle',
+        symbolSize: 8,
+        data: [2, 3, 1, 2, 1, 3, 2],
+        itemStyle: { color: '#13c2c2' },
+        lineStyle: {
+          width: 3
+        }
+      }
+    ]
+  };
+
+  exceptionTrendChart.setOption(option);
+  return exceptionTrendChart;
+};
+
+// 鍒锋柊鎵�鏈夊浘琛�
+const refreshCharts = () => {
+  const charts = [
+    initInventoryPie,
+    initStockTrend,
+    initLocationRate,
+    initOperationRadar,
+    initExceptionTrend
+  ];
+
+  charts.forEach(initFunc => {
+    const chart = initFunc();
+    if (chart) {
+      chart.resize();
+    }
+  });
+};
+
+// 鐩戝惉绐楀彛澶у皬鍙樺寲
+const handleResize = () => {
+  const charts = [
+    inventoryPieChart,
+    stockTrendChart,
+    locationRateChart,
+    operationRadarChart,
+    exceptionTrendChart
+  ];
+
+  charts.forEach(chart => {
+    if (chart) {
+      chart.resize();
+    }
+  });
+};
+
+// 鎸傝浇鍚庡垵濮嬪寲鍥捐〃
+onMounted(() => {
+  nextTick(() => {
+    initInventoryPie();
+    initStockTrend();
+    initLocationRate();
+    initOperationRadar();
+    initExceptionTrend();
+
+    window.addEventListener('resize', handleResize);
+  });
+});
+
+// 缁勪欢鍗歌浇鏃舵竻鐞�
+onUnmounted(() => {
+  const charts = [
+    inventoryPieChart,
+    stockTrendChart,
+    locationRateChart,
+    operationRadarChart,
+    exceptionTrendChart
+  ];
+
+  charts.forEach(chart => {
+    if (chart) {
+      chart.dispose();
+    }
+  });
+
+  window.removeEventListener('resize', handleResize);
+});
+</script>
+
+<style scoped>
+.wms-dashboard {
+  padding: 20px;
+  background: #f5f7fa;
+  min-height: 100vh;
+  box-sizing: border-box;
+}
+
+.header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 20px;
+  background: white;
+  padding: 15px 20px;
+  border-radius: 8px;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+}
+
+.stats-card-row,
+.chart-row,
+.table-row {
+  margin-bottom: 20px;
+}
+
+.stats-card {
+  height: 120px;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  padding: 0 20px;
+  transition: all 0.3s ease;
+}
+
+.stats-card:hover {
+  transform: translateY(-2px);
+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+}
+
+.card-title {
+  font-size: 14px;
+  color: #666;
+  margin-bottom: 8px;
+}
+
+.card-value {
+  font-size: 28px;
+  font-weight: bold;
+  margin: 8px 0 4px;
+  color: #333;
+}
+
+.card-change {
+  margin-top: 8px;
+}
+
+.chart-card {
+  height: 320px;
+  padding: 15px;
+  display: flex;
+  flex-direction: column;
+}
+
+.chart-container {
+  width: 100%;
+  height: 100%;
+  min-height: 250px;
+  flex: 1;
+}
+
+.chart-title,
+.table-title {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 15px;
+  font-size: 16px;
+  font-weight: bold;
+  color: #333;
+}
+
+.view-btn {
+  font-size: 12px;
+}
+
+.table-pagination {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-top: 15px;
+}
+
+.btn-group {
+  margin-left: 10px;
+}
+
+/* 纭繚鍥捐〃瀹瑰櫒鏈夋槑纭昂瀵� */
+:deep(.el-card__body) {
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+}
+</style>
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/takeStockOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/takeStockOrder.vue"
new file mode 100644
index 0000000..88f8af2
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/takeStockOrder.vue"
@@ -0,0 +1,291 @@
+
+<template>
+    <!-- <div>
+      <assemble-dist></assemble-dist>
+    </div> -->
+    <view-grid
+      ref="grid"
+      :columns="columns"
+      :detail="detail"
+      :editFormFields="editFormFields"
+      :editFormOptions="editFormOptions"
+      :searchFormFields="searchFormFields"
+      :searchFormOptions="searchFormOptions"
+      :table="table"
+      :extend="extend"
+    >
+    </view-grid>
+  </template>
+<script>
+  import extend from "@/extension/inbound/takeStockOrder.js";
+  import { ref, defineComponent } from "vue";
+  // import AssembleDistVue from '../charts/AssembleDist.vue';
+  export default defineComponent({
+    // components: {
+    //   'assemble-dist': AssembleDistVue,
+    // },
+    setup() {
+      //浣跨敤缁勪欢AssembleDist
+      const table = ref({ 
+        key: "id",
+        footer: "Foots",
+        cnName: "鐩樼偣鍗�",
+        name: "takeStockOrder",
+        url: "/TakeStockOrder/",
+        sortName: "id",
+      });
+  
+      const searchFormFields = ref({
+        orderNo:""
+      });
+      const searchFormOptions = ref([
+        [
+        { title: "鍗曟嵁缂栧彿", field: "orderNo", type: "like" },
+        ]
+      ]);
+  
+      const editFormFields = ref({
+        orderNo:"",
+        warehouseId: "",
+        remark:""
+      });
+      const editFormOptions = ref([
+      [
+        {
+          field: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "string",
+          readonly: "true",
+        },
+        {
+          title: "浠撳簱",
+          field: "warehouseId",
+          type: "select",
+          dataKey: "warehouses",
+          data: [],
+          required: true,
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+        }
+      ]
+      ]);
+      const columns = ref([
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "orderNo",
+          title: "鐩樼偣鍗曞彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "takeStockStatus",
+          title: "鐩樼偣鐘舵��",
+          type: "string",
+          width: 120,
+          align: "left",
+          bind: { key: "takeStockStatusEnum", data: [] },
+        },
+        {
+          field: "allPalletCode",
+          title: "鍗曟嵁鐩樼偣鎵樼洏",
+          type: "string",
+          width: 600,
+          align: "left",
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "鍑哄簱绔欏彴",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ]);
+      const detail = ref({
+        cnName: "鐩樼偣鏄庣粏",
+        table: "Dt_TakeStockOrderDetail",
+        columns: [
+          {
+            field: "id",
+            title: "Id",
+            type: "int",
+            width: 90,
+            hidden: true,
+            readonly: true,
+            require: true,
+            align: "left",
+          },
+          {
+            field: "takeStockId",
+            title: "鐩樼偣鍗曚富閿�",
+            type: "string",
+            width: 90,
+            align: "left",
+            hidden: true,
+          },
+          {
+            field: "takePalletCode",
+            title: "鐩樼偣鎵樼洏",
+            type: "string",
+            width: 150,
+            align: "left",
+            required: true,
+          },
+          {
+            field: "takeDetalStatus",
+            title: "鐩樼偣鏄庣粏鐘舵��",
+            type: "int",
+            width: 130,
+            align: "left",
+            bind: { key: "takeStockDetailStatusEnum", data: [] },
+          },
+          {
+            field: "materielCode",
+            title: "鐗╂枡缂栫爜",
+            type: "string",
+            width: 110,
+            align: "left",
+            required: true,
+          },
+          {
+            field: "materielName",
+            title: "鐗╂枡鍚嶇О",
+            type: "string",
+            width: 120,
+            align: "left",
+            required: true,
+          },
+          {
+            field: "batchNo",
+            title: "鎵规鍙�",
+            type: "string",
+            width: 130,
+            align: "left",
+            required: true,
+          },
+          {
+            field: "materielSpec",
+            title: "鐗╂枡鍚嶇О",
+            type: "string",
+            width: 120,
+            align: "left",
+            required: true,
+          },
+          {
+            field: "sysQty",
+            title: "璐﹂潰鏁伴噺",
+            type: "decimal",
+            width: 90,
+            align: "left",
+            required: true,
+            edit: { type: "decimal" }
+          },
+          {
+            field: "qty",
+            title: "瀹炵洏鏁伴噺",
+            type: "decimal",
+            width: 90,
+            align: "left",
+            required: true,
+            edit: { type: "decimal" }
+          },
+          {
+            field: "unit",
+            title: "鍗曚綅",
+            type: "string",
+            width: 90,
+            align: "left",
+          },
+          {
+            field: "creater",
+            title: "鍒涘缓浜�",
+            type: "string",
+            width: 90,
+            align: "left",
+          },
+          {
+            field: "createDate",
+            title: "鍒涘缓鏃堕棿",
+            type: "datetime",
+            width: 160,
+            align: "left",
+          },
+          {
+            field: "modifier",
+            title: "淇敼浜�",
+            type: "string",
+            width: 100,
+            align: "left",
+          },
+          {
+            field: "modifyDate",
+            title: "淇敼鏃堕棿",
+            type: "datetime",
+            width: 160,
+            align: "left",
+          },
+          {
+            field: "remark",
+            title: "澶囨敞",
+            type: "string",
+            width: 100,
+            align: "left",
+          },
+        ],
+        sortName: "id",
+        key: "id",
+      });
+      return {
+        table,
+        extend,
+        editFormFields,
+        editFormOptions,
+        searchFormFields,
+        searchFormOptions,
+        columns,
+        detail,
+      };
+    },
+  });
+  </script>
+        
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/takeStockOrderDetail.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/takeStockOrderDetail.vue"
new file mode 100644
index 0000000..28acfed
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/takeStockOrderDetail.vue"
@@ -0,0 +1,254 @@
+
+<template>
+    <!-- <div>
+      <assemble-dist></assemble-dist>
+    </div> -->
+    <view-grid
+      ref="grid"
+      :columns="columns"
+      :detail="detail"
+      :editFormFields="editFormFields"
+      :editFormOptions="editFormOptions"
+      :searchFormFields="searchFormFields"
+      :searchFormOptions="searchFormOptions"
+      :table="table"
+      :extend="extend"
+    >
+    </view-grid>
+  </template>
+<script>
+  import extend from "@/extension/inbound/takeStockOrderDetail.js";
+  import { ref, defineComponent } from "vue";
+  // import AssembleDistVue from '../charts/AssembleDist.vue';
+  export default defineComponent({
+    // components: {
+    //   'assemble-dist': AssembleDistVue,
+    // },
+    setup() {
+      //浣跨敤缁勪欢AssembleDist
+      const table = ref({ 
+        key: "id",
+        footer: "Foots",
+        cnName: "鐩樼偣鍗�",
+        name: "TakeStockOrderDetail",
+        url: "/TakeStockOrderDetail/",
+        sortName: "id",
+      });
+  
+      const searchFormFields = ref({
+        orderNo:""
+      });
+      const searchFormOptions = ref([
+        [
+        { title: "鐩樼偣鍗曟嵁", field: "takeStockNo", type: "like" },
+        { title: "鐩樼偣鏂欑", field: "takePalletCode", type: "like" },
+        { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
+        { title: "鎵规鍙�", field: "batchNo", type: "like" },
+
+        ],
+        [
+        { title: "鏉$爜", field: "barcode", type: "like" },
+        { title: "浠撳簱", field: "warehouseCode", type: "like" },
+        { title: "鍘傚尯", field: "factoryArea", type: "like" },
+        { title: "渚涘簲鍟嗙紪鍙�", field: "supplyCode", type: "like" },
+        ],
+        [
+        { title: "鍒涘缓浜�", field: "creater", type: "like" },
+        { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+        ]
+      ]);
+  
+      const editFormFields = ref({
+        orderNo:"",
+        warehouseId: "",
+        remark:""
+      });
+      const editFormOptions = ref([
+      [
+        {
+          field: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "string",
+          readonly: "true",
+        },
+        {
+          title: "浠撳簱",
+          field: "warehouseId",
+          type: "select",
+          dataKey: "warehouses",
+          data: [],
+          required: true,
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+        }
+      ]
+      ]);
+      const columns = ref([
+        {
+            field: "id",
+            title: "Id",
+            type: "int",
+            width: 90,
+            hidden: true,
+            readonly: true,
+            require: true,
+            align: "left",
+          },
+          {
+            field: "takeStockId",
+            title: "鐩樼偣鍗曚富閿�",
+            type: "string",
+            width: 90,
+            align: "left",
+            hidden: true,
+          },
+          {
+            field: "takeStockNo",
+            title: "鐩樼偣鍗曟嵁",
+            type: "string",
+            width: 145,
+            align: "left",
+          },
+          {
+            field: "takePalletCode",
+            title: "鐩樼偣鏂欑",
+            type: "string",
+            width: 110,
+            align: "left",
+            required: true,
+          },
+          
+          {
+            field: "materielCode",
+            title: "鐗╂枡缂栫爜",
+            type: "string",
+            width: 130,
+            align: "left",
+            required: true,
+          },
+          {
+            field: "materielName",
+            title: "鐗╂枡鍚嶇О",
+            type: "string",
+            width: 120,
+            align: "left",
+            required: true,
+          },
+          {
+            field: "batchNo",
+            title: "鎵规鍙�",
+            type: "string",
+            width: 130,
+            align: "left",
+            required: true,
+          },
+          {
+            field: "barcode",
+            title: "鏉$爜",
+            type: "string",
+            width: 120,
+            align: "left",
+            required: true,
+          },
+          {
+            field: "sysQty",
+            title: "璐﹂潰鏁伴噺",
+            type: "decimal",
+            width: 90,
+            align: "left",
+            required: true,
+            edit: { type: "decimal" }
+          },
+          {
+            field: "qty",
+            title: "瀹炵洏鏁伴噺",
+            type: "decimal",
+            width: 90,
+            align: "left",
+            required: true,
+            edit: { type: "decimal" }
+          },
+          {
+            field: "unit",
+            title: "鍗曚綅",
+            type: "string",
+            width: 90,
+            align: "left",
+          },
+          {
+            field: "takeDetalStatus",
+            title: "鐩樼偣鏄庣粏鐘舵��",
+            type: "int",
+            width: 130,
+            align: "left",
+            bind: { key: "takeStockDetailStatusEnum", data: [] },
+          },
+          {
+            field: "warehouseCode",
+            title: "浠撳簱缂栧彿",
+            type: "string",
+            width: 90,
+            align: "left",
+          },
+          {
+            field: "factoryArea",
+            title: "鍘傚尯",
+            type: "string",
+            width: 90,
+            align: "left",
+          },
+          {
+            field: "supplyCode",
+            title: "渚涘簲鍟嗙紪鍙�",
+            type: "string",
+            width: 90,
+            align: "left",
+          },
+          {
+            field: "creater",
+            title: "鍒涘缓浜�",
+            type: "string",
+            width: 90,
+            align: "left",
+          },
+          {
+            field: "createDate",
+            title: "鍒涘缓鏃堕棿",
+            type: "datetime",
+            width: 160,
+            align: "left",
+          },
+          {
+            field: "remark",
+            title: "澶囨敞",
+            type: "string",
+            width: 100,
+            align: "left",
+          },
+      ]);
+      const detail = ref({
+        cnName: "鐩樼偣鏄庣粏",
+        table: "Dt_TakeStockOrderDetail",
+        columns: [
+          
+        ],
+        sortName: "id",
+        key: "id",
+      });
+      return {
+        table,
+        extend,
+        editFormFields,
+        editFormOptions,
+        searchFormFields,
+        searchFormOptions,
+        columns,
+        detail,
+      };
+    },
+  });
+  </script>
+        
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/allocateoutboundOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/allocateoutboundOrder.vue"
index 5e5f89d..2a9ad08 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/allocateoutboundOrder.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/allocateoutboundOrder.vue"
@@ -1,39 +1,15 @@
 
 <template>
-  <view-grid
-    ref="grid"
-        @openOutboundDialog="handleOpenOutboundDialog"  
-    :columns="columns"
-    :detail="detail"
-    :editFormFields="editFormFields"
-    :editFormOptions="editFormOptions"
-    :searchFormFields="searchFormFields"
-    :searchFormOptions="searchFormOptions"
-    :table="table"
-    :extend="extend"
-  >
+  <view-grid ref="grid" @openOutboundDialog="handleOpenOutboundDialog" :columns="columns" :detail="detail"
+    :editFormFields="editFormFields" :editFormOptions="editFormOptions" :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions" :table="table" :extend="extend">
   </view-grid>
-      <!-- 鍑哄簱鎿嶄綔寮圭獥 -->
-    <OutboundDialog
-      v-model:visible="outboundVisible"  
-      :selected-document="selectedOutboundDocument"  
-      @outbound-success="handleOutboundSuccess"  
-    ></OutboundDialog>
 </template>
-    <script>
+<script>
 import extend from "@/extension/outbound/allocateoutboundOrder.js";
-import ViewGrid from '@/components/basic/ViewGrid/ViewGrid.vue'; 
 import { ref, defineComponent } from "vue";
-import { ElMessage } from "element-plus";
-import OutboundDialog from "@/extension/outbound/extend/OutBound.vue";  // 寮曞叆鍑哄簱寮圭獥缁勪欢
- 
 
 export default defineComponent({
-   components: {
-    // 鍏抽敭淇2锛氱粍浠舵敞鍐屽悕涓庢ā鏉挎爣绛惧悕閫傞厤锛坘ebab-case瀵瑰簲view-grid锛�
-    viewGrid: ViewGrid,  // 娉ㄥ唽涓簁ebab-case锛屾ā鏉跨敤<view-grid>
-    OutboundDialog  // 娉ㄥ唽鍑哄簱寮圭獥缁勪欢
-  },
   setup() {
     const table = ref({
       key: "id",
@@ -45,11 +21,11 @@
     });
     const editFormFields = ref({
       orderType: "",
-      orderNo:"",
+      orderNo: "",
       upperOrderNo: "",
       orderStatus: "",
       remark: "",
-      warehouseId:""
+      warehouseId: ""
     });
     const editFormOptions = ref([
       [
@@ -62,11 +38,11 @@
           data: [],
         },
         {
-        field: "orderNo",
-        title: "鍗曟嵁缂栧彿",
-        type: "string",
-        readonly:true
-      },
+          field: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "string",
+          readonly: true
+        },
         {
           title: "涓婃父鍗曟嵁缂栧彿",
           field: "upperOrderNo",
@@ -220,7 +196,7 @@
         type: "string",
         width: 120,
         align: "left",
-        hidden:true
+        hidden: true
       },
       {
         field: "departmentName",
@@ -401,41 +377,41 @@
       sortName: "id",
       key: "id",
     });
-      // 璋冩嫧寮圭獥鐩稿叧
-    const outboundVisible = ref(false);
-    const selectedOutboundDocument = ref({});  // 瀛樺偍閫変腑鐨勮皟鎷ㄥ崟鏁版嵁
+    // 璋冩嫧寮圭獥鐩稿叧
+    // const outboundVisible = ref(false);
+    // const selectedOutboundDocument = ref({});  // 瀛樺偍閫変腑鐨勮皟鎷ㄥ崟鏁版嵁
 
-    // 鎵撳紑璋冩嫧寮圭獥锛堜粠鎵╁睍閰嶇疆鐨勬寜閽簨浠惰Е鍙戯級
-    const handleOpenOutboundDialog = (docData) => {
-      selectedOutboundDocument.value = docData;  // 淇濆瓨閫変腑鐨勫崟鎹暟鎹�
-      outboundVisible.value = true;  // 鏄剧ず寮圭獥
-    };
+    // // 鎵撳紑璋冩嫧寮圭獥锛堜粠鎵╁睍閰嶇疆鐨勬寜閽簨浠惰Е鍙戯級
+    // const handleOpenOutboundDialog = (docData) => {
+    //   selectedOutboundDocument.value = docData;  // 淇濆瓨閫変腑鐨勫崟鎹暟鎹�
+    //   outboundVisible.value = true;  // 鏄剧ず寮圭獥
+    // };
 
-    // 璋冩嫧鎴愬姛鍚庣殑鍥炶皟
-    const handleOutboundSuccess = (docNo) => {
-      ElMessage.success(`鍗曟嵁 ${docNo} 璋冩嫧鎴愬姛`);
-      gridRef.value?.refresh();  // 鍒锋柊琛ㄦ牸鏁版嵁
-    };
+    // // 璋冩嫧鎴愬姛鍚庣殑鍥炶皟
+    // const handleOutboundSuccess = (docNo) => {
+    //   ElMessage.success(`鍗曟嵁 ${docNo} 璋冩嫧鎴愬姛`);
+    //   gridRef.value?.refresh();  // 鍒锋柊琛ㄦ牸鏁版嵁
+    // };
 
-    // 鍒濆鍖栨墿灞曢厤缃細涓鸿皟鎷ㄦ寜閽坊鍔犱簨浠惰Е鍙戦�昏緫
-    const initExtension = () => {
-      // 鎵惧埌"璋冩嫧"鎸夐挳骞剁粦瀹氭墦寮�寮圭獥鐨勯�昏緫
-      const outboundBtn = extend.buttons.view.find(btn => btn.name === '鍑哄簱');
-      if (outboundBtn) {
-        const originalOnClick = outboundBtn.onClick;
-        outboundBtn.onClick = function() {
-          // 鍏堟墽琛屽師鏈夋牎楠岄�昏緫
-          const selectedRows = this.$refs.table.getSelected();
-          if (selectedRows.length === 1) {
-            // 鏍¢獙閫氳繃鍚庯紝瑙﹀彂涓荤粍浠剁殑鍑哄簱寮圭獥浜嬩欢
-            this.$emit('openOutboundDialog', selectedRows[0]);
-          } else {
-            // 鍘熸湁閫昏緫宸插鐞嗘彁绀猴紝鏃犻渶閲嶅
-            originalOnClick.call(this);
-          }
-        };
-      }
-    };
+    // // 鍒濆鍖栨墿灞曢厤缃細涓鸿皟鎷ㄦ寜閽坊鍔犱簨浠惰Е鍙戦�昏緫
+    // const initExtension = () => {
+    //   // 鎵惧埌"璋冩嫧"鎸夐挳骞剁粦瀹氭墦寮�寮圭獥鐨勯�昏緫
+    //   const outboundBtn = extend.buttons.view.find(btn => btn.name === '鍑哄簱');
+    //   if (outboundBtn) {
+    //     const originalOnClick = outboundBtn.onClick;
+    //     outboundBtn.onClick = function () {
+    //       // 鍏堟墽琛屽師鏈夋牎楠岄�昏緫
+    //       const selectedRows = this.$refs.table.getSelected();
+    //       if (selectedRows.length === 1) {
+    //         // 鏍¢獙閫氳繃鍚庯紝瑙﹀彂涓荤粍浠剁殑鍑哄簱寮圭獥浜嬩欢
+    //         this.$emit('openOutboundDialog', selectedRows[0]);
+    //       } else {
+    //         // 鍘熸湁閫昏緫宸插鐞嗘彁绀猴紝鏃犻渶閲嶅
+    //         originalOnClick.call(this);
+    //       }
+    //     };
+    //   }
+    // };
     return {
       table,
       extend,
@@ -445,11 +421,11 @@
       searchFormOptions,
       columns,
       detail,
-       // 鍑哄簱鐩稿叧
-      outboundVisible,
-      selectedOutboundDocument,
-      handleOpenOutboundDialog,
-      handleOutboundSuccess 
+      // 鍑哄簱鐩稿叧
+      // outboundVisible,
+      // selectedOutboundDocument,
+      // handleOpenOutboundDialog,
+      // handleOutboundSuccess 
     };
   },
 });
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
index 99010c3..5db27f5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
@@ -1,39 +1,16 @@
 
 <template>
-  <view-grid
-    ref="grid"
-        @openOutboundDialog="handleOpenOutboundDialog"  
-    :columns="columns"
-    :detail="detail"
-    :editFormFields="editFormFields"
-    :editFormOptions="editFormOptions"
-    :searchFormFields="searchFormFields"
-    :searchFormOptions="searchFormOptions"
-    :table="table"
-    :extend="extend"
-  >
+  <view-grid ref="grid" @openOutboundDialog="handleOpenOutboundDialog" :columns="columns" :detail="detail"
+    :editFormFields="editFormFields" :editFormOptions="editFormOptions" :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions" :table="table" :extend="extend">
   </view-grid>
-      <!-- 鍑哄簱鎿嶄綔寮圭獥 -->
-    <OutboundDialog
-      v-model:visible="outboundVisible"  
-      :selected-document="selectedOutboundDocument"  
-      @outbound-success="handleOutboundSuccess"  
-    ></OutboundDialog>
 </template>
-    <script>
+<script>
 import extend from "@/extension/outbound/outboundOrder.js";
-import ViewGrid from '@/components/basic/ViewGrid/ViewGrid.vue'; 
 import { ref, defineComponent } from "vue";
-import { ElMessage } from "element-plus";
-import OutboundDialog from "@/extension/outbound/extend/OutBound.vue";  // 寮曞叆鍑哄簱寮圭獥缁勪欢
- 
 
 export default defineComponent({
-   components: {
-    // 鍏抽敭淇2锛氱粍浠舵敞鍐屽悕涓庢ā鏉挎爣绛惧悕閫傞厤锛坘ebab-case瀵瑰簲view-grid锛�
-    viewGrid: ViewGrid,  // 娉ㄥ唽涓簁ebab-case锛屾ā鏉跨敤<view-grid>
-    OutboundDialog  // 娉ㄥ唽鍑哄簱寮圭獥缁勪欢
-  },
+
   setup() {
     const table = ref({
       key: "id",
@@ -45,20 +22,20 @@
     });
     const editFormFields = ref({
       orderType: "",
-      orderNo:"",
+      orderNo: "",
       upperOrderNo: "",
       orderStatus: "",
       remark: "",
-      warehouseId:""
+      warehouseId: ""
     });
     const editFormOptions = ref([
       [
         {
-        field: "orderNo",
-        title: "鍗曟嵁缂栧彿",
-        type: "string",
-        readonly:true
-      },
+          field: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "string",
+          readonly: true
+        },
         {
           title: "涓婃父鍗曟嵁缂栧彿",
           field: "upperOrderNo",
@@ -104,9 +81,9 @@
           title: "鎿嶄綔鑰�",
           field: "operator",
           type: "string",
-          hidden:true,
+          hidden: true,
           readonly: true,
-          
+
         },
       ],
     ]);
@@ -182,7 +159,7 @@
         width: 150,
         align: "left",
         bind: { key: "outOrderType", data: [] },
-        hidden:true
+        hidden: true
       },
       {
         field: "businessType",
@@ -219,7 +196,7 @@
         field: "returnToMESStatus",
         title: "鍥炰紶MES鐘舵��",
         width: 120,
-        bind: { key: "createType", data:[{key:0, value:"鏈洖浼�"},{key:1, value:"宸插洖浼犳垚鍔�"},{key:2, value:"鍥炰紶澶辫触"}]},
+        bind: { key: "createType", data: [{ key: 0, value: "鏈洖浼�" }, { key: 1, value: "宸插洖浼犳垚鍔�" }, { key: 2, value: "鍥炰紶澶辫触" }] },
       },
       {
         field: "factoryArea",
@@ -234,7 +211,7 @@
         type: "string",
         width: 120,
         align: "left",
-        hidden:true
+        hidden: true
       },
       {
         field: "departmentName",
@@ -350,7 +327,7 @@
           width: 90,
           align: "left",
           edit: { type: "number" },
-          readonly:true
+          readonly: true
         },
         {
           field: "rowNo",
@@ -359,7 +336,7 @@
           width: 90,
           align: "left",
           edit: { type: "number" },
-          readonly:true
+          readonly: true
         },
         {
           field: "lockQuantity",
@@ -383,7 +360,7 @@
           align: "left",
           edit: { type: "select" },
           bind: { key: "orderDetailStatusEnum", data: [] },
-          readonly:true
+          readonly: true
         },
         {
           field: "creater",
@@ -424,41 +401,6 @@
       sortName: "id",
       key: "id",
     });
-      // 鍑哄簱寮圭獥鐩稿叧
-    const outboundVisible = ref(false);
-    const selectedOutboundDocument = ref({});  // 瀛樺偍閫変腑鐨勫嚭搴撳崟鏁版嵁
-
-    // 鎵撳紑鍑哄簱寮圭獥锛堜粠鎵╁睍閰嶇疆鐨勬寜閽簨浠惰Е鍙戯級
-    const handleOpenOutboundDialog = (docData) => {
-      selectedOutboundDocument.value = docData;  // 淇濆瓨閫変腑鐨勫崟鎹暟鎹�
-      outboundVisible.value = true;  // 鏄剧ず寮圭獥
-    };
-
-    // 鍑哄簱鎴愬姛鍚庣殑鍥炶皟
-    const handleOutboundSuccess = (docNo) => {
-      ElMessage.success(`鍗曟嵁 ${docNo} 鍑哄簱鎴愬姛`);
-      gridRef.value?.refresh();  // 鍒锋柊琛ㄦ牸鏁版嵁
-    };
-
-    // 鍒濆鍖栨墿灞曢厤缃細涓哄嚭搴撴寜閽坊鍔犱簨浠惰Е鍙戦�昏緫
-    const initExtension = () => {
-      // 鎵惧埌"鍑哄簱"鎸夐挳骞剁粦瀹氭墦寮�寮圭獥鐨勯�昏緫
-      const outboundBtn = extend.buttons.view.find(btn => btn.name === '鍑哄簱');
-      if (outboundBtn) {
-        const originalOnClick = outboundBtn.onClick;
-        outboundBtn.onClick = function() {
-          // 鍏堟墽琛屽師鏈夋牎楠岄�昏緫
-          const selectedRows = this.$refs.table.getSelected();
-          if (selectedRows.length === 1) {
-            // 鏍¢獙閫氳繃鍚庯紝瑙﹀彂涓荤粍浠剁殑鍑哄簱寮圭獥浜嬩欢
-            this.$emit('openOutboundDialog', selectedRows[0]);
-          } else {
-            // 鍘熸湁閫昏緫宸插鐞嗘彁绀猴紝鏃犻渶閲嶅
-            originalOnClick.call(this);
-          }
-        };
-      }
-    };
     return {
       table,
       extend,
@@ -468,11 +410,6 @@
       searchFormOptions,
       columns,
       detail,
-       // 鍑哄簱鐩稿叧
-      outboundVisible,
-      selectedOutboundDocument,
-      handleOpenOutboundDialog,
-      handleOutboundSuccess 
     };
   },
 });
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue"
index 7e8e7dd..2e9884a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue"
@@ -1,225 +1,237 @@
 
 <template>
-    <view-grid
-      ref="grid"
-      :columns="columns"
-      :detail="detail"
-      :editFormFields="editFormFields"
-      :editFormOptions="editFormOptions"
-      :searchFormFields="searchFormFields"
-      :searchFormOptions="searchFormOptions"
-      :table="table"
-      :extend="extend"
-    >
-    </view-grid>
-  </template>
-    <script>
-  import extend from "@/extension/record/stockQuantityChangeRecord.js";
-  import { ref, defineComponent } from "vue";
-  export default defineComponent({
-    setup() {
-      const table = ref({
-        key: "id",
-        footer: "Foots",
-        cnName: "搴撳瓨鍙樺姩淇℃伅璁板綍",
-        name: "stockQuantityChangeRecord",
-        url: "/StockQuantityChangeRecord/",
-        sortName: "id",
-      });
-      const editFormFields = ref({
-        
-      });
-      const editFormOptions = ref([
-        
-      ]);
-      const searchFormFields = ref({
-        palleCode: "",
-        materielCode: "",
-        orderNo: "",
-      });
-      const searchFormOptions = ref([
-        [
-          { title: "鎵樼洏鍙�", field: "palleCode" ,type:"like"},
-          { title: "鐗╂枡缂栧彿", field: "materielCode",type:"like" },
-          { title: "鍗曟嵁缂栧彿", field: "orderNo" ,type:"like"},
-          { title: "鍙樺姩绫诲瀷", field: "changeType" ,type: "selectList",dataKey: "stockChangeType",data: [],},
-        ],
-        [
-          { title: "鎵规鍙�", field: "batchNo" ,type:"like"},
-          { title: "浠诲姟鍙�", field: "taskNum" ,type:"like"},
-          { title: "搴忓垪鍙�", field: "serilNumber" ,type:"like"},
-        ],
-      ]);
-      const columns = ref([
-        {
-          field: "id",
-          title: "Id",
-          type: "int",
-          width: 90,
-          hidden: true,
-          readonly: true,
-          require: true,
-          align: "left",
-        },
-        {
-          field: "stockDetailId",
-          title: "搴撳瓨鏄庣粏ID",
-          type: "string",
-          width: 90,
-          align: "left",
-        },
-        {
-          field: "palleCode",
-          title: "鎵樼洏缂栧彿",
-          type: "string",
-          width: 150,
-          align: "left",
-        },
-        {
-          field: "materielCode",
-          title: "鐗╂枡缂栧彿",
-          type: "string",
-          width: 150,
-          align: "left",
-        },
-        {
-          field: "materielName",
-          title: "鐗╂枡鍚嶇О",
-          type: "decimal",
-          width: 90,
-          align: "left",
-        },
-        {
-          field: "barcode",
-          title: "鏉$爜",
-          type: "string",
-          width: 150,
-          align: "left",
-        },
-        {
-          field: "batchNo",
-          title: "鎵规鍙�",
-          type: "string",
-          width: 90,
-          align: "left",
-        },
-        {
-          field: "serilNumber",
-          title: "搴忓垪鍙�",
-          type: "int",
-          width: 280,
-          align: "left",
-        },
-        {
-          field: "orderNo",
-          title: "鍗曟嵁缂栧彿",
-          type: "string",
-          width: 150,
-          align: "left",
-        },
-        {
-          field: "taskNum",
-          title: "浠诲姟鍙�",
-          type: "string",
-          width: 90,
-          align: "left",
-        },
-        {
-          field: "changeType",
-          title: "鍙樺姩绫诲瀷",
-          type: "int",
-          width: 120,
-          align: "left",
-          bind: { key: "stockChangeType", data: [] },
-        },
-        {
-          field: "changeQuantity",
-          title: "鍙樺姩鏁伴噺",
-          type: "string",
-          width: 100,
-          align: "left",
-        },
-        {
-          field: "beforeQuantity",
-          title: "鍙樺姩鍓嶅簱瀛橀噺",
-          type: "string",
-          width: 100,
-          align: "left",
-        },
-        {
-          field: "afterQuantity",
-          title: "鍙樺姩鍚庡簱瀛橀噺",
-          type: "string",
-          width: 100,
-          align: "left",
-        },
-        {
-          field: "creater",
-          title: "鍒涘缓浜�",
-          type: "string",
-          width: 90,
-          align: "left",
-        },
-        {
-          field: "createDate",
-          title: "鍒涘缓鏃堕棿",
-          type: "datetime",
-          width: 160,
-          align: "left",
-        },
-        {
-          field: "modifier",
-          title: "淇敼浜�",
-          type: "string",
-          width: 100,
-          align: "left",
-        },
-        {
-          field: "modifyDate",
-          title: "淇敼鏃堕棿",
-          type: "datetime",
-          width: 160,
-          align: "left",
-        },
-        {
-          field: "orderId",
-          title: "鍗曟嵁涓婚敭",
-          type: "string",
-          width: 180,
-          align: "left",
-        },
-        {
-          field: "orderDetailId",
-          title: "鍗曟嵁鏄庣粏涓婚敭",
-          type: "string",
-          width: 120,
-          align: "left",
-        },
-        {
-          field: "remark",
-          title: "澶囨敞",
-          type: "string",
-          width: 100,
-          align: "left",
-        },
-      ]);
-      const detail = ref({
-        cnName: "#detailCnName",
-        table: "",
-        columns: [],
-        sortName: "",
-      });
-      return {
-        table,
-        extend,
-        editFormFields,
-        editFormOptions,
-        searchFormFields,
-        searchFormOptions,
-        columns,
-        detail,
-      };
-    },
-  });
-  </script>
+  <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+    :table="table" :extend="extend">
+  </view-grid>
+</template>
+<script>
+import extend from "@/extension/record/stockQuantityChangeRecord.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "搴撳瓨鍙樺姩淇℃伅璁板綍",
+      name: "stockQuantityChangeRecord",
+      url: "/StockQuantityChangeRecord/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+
+    });
+    const editFormOptions = ref([
+
+    ]);
+    const searchFormFields = ref({
+      palleCode: "",
+      materielCode: "",
+      orderNo: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鎵樼洏鍙�", field: "palleCode", type: "like" },
+        { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
+        { title: "鍗曟嵁缂栧彿", field: "orderNo", type: "like" },
+        // { title: "鍙樺姩绫诲瀷", field: "changeType", type: "selectList", dataKey: "stockChangeType", data: [], },
+      ],
+      [
+        { title: "鍘熸潯鐮�", field: "originalSerilNumber", type: "like" },
+        { title: "浠诲姟鍙�", field: "taskNum", type: "like" },
+        { title: "鎵规鍙�", field: "batchNo", type: "like" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "stockDetailId",
+        title: "搴撳瓨鏄庣粏ID",
+        type: "string",
+        width: 90,
+        align: "left",
+      }, {
+        field: "taskNum",
+        title: "浠诲姟鍙�",
+        type: "string",
+        width: 70,
+        align: "left",
+      },
+      {
+        field: "palleCode",
+        title: "鎵樼洏缂栧彿",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "materielCode",
+        title: "鐗╂枡缂栧彿",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      // {
+      //   field: "materielName",
+      //   title: "鐗╂枡鍚嶇О",
+      //   type: "decimal",
+      //   width: 90,
+      //   align: "left",
+      // },
+      {
+        field: "originalSerilNumber",
+        title: "鍘熸潯鐮�",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+      {
+        field: "newSerilNumber",
+        title: "鏂版潯鐮�",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+
+      // {
+      //   field: "serilNumber",
+      //   title: "搴忓垪鍙�",
+      //   type: "int",
+      //   width: 280,
+      //   align: "left",
+      // },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 280,
+        align: "left",
+      },
+      {
+        field: "batchNo",
+        title: "鎵规鍙�",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "orderNo",
+        title: "鍗曟嵁缂栧彿",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+
+      // {
+      //   field: "changeType",
+      //   title: "鍙樺姩绫诲瀷",
+      //   type: "int",
+      //   width: 120,
+      //   align: "left",
+      //   bind: { key: "stockChangeType", data: [] },
+      // },
+      {
+        field: "changeQuantity",
+        title: "鍙樺姩鏁伴噺",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "beforeQuantity",
+        title: "鍙樺姩鍓嶅簱瀛橀噺",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "afterQuantity",
+        title: "鍙樺姩鍚庡簱瀛橀噺",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "orderId",
+        title: "鍗曟嵁涓婚敭",
+        type: "string",
+        width: 180,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "orderDetailId",
+        title: "鍗曟嵁鏄庣粏涓婚敭",
+        type: "string",
+        width: 120,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+        hidden: true,
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
     
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
index 48529e7..6aee2bd 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
@@ -114,14 +114,14 @@
         field: "orderNo",
         title: "鍗曟嵁缂栧彿",
         type: "decimal",
-        width: 90,
+        width: 150,
         align: "left",
       },
       {
         field: "batchNo",
         title: "鎵规鍙�",
         type: "string",
-        width: 90,
+        width: 150,
         align: "left",
       },
       {
@@ -130,6 +130,7 @@
         type: "int",
         width: 120,
         align: "left",
+        hidden: true,
       },
       {
         field: "supplyCode",
@@ -163,7 +164,7 @@
         field: "outboundQuantity",
         title: "鍑哄簱鏁伴噺",
         type: "string",
-        width: 180,
+        width: 120,
         align: "left",
       },
       {
@@ -208,6 +209,7 @@
         type: "string",
         width: 100,
         align: "left",
+        hidden: true,
       },
     ]);
     const detail = ref({
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task.vue"
index e69ad6d..4785cf7 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task.vue"
@@ -1,19 +1,11 @@
 
 <template>
-  <view-grid
-    ref="grid"
-    :columns="columns"
-    :detail="detail"
-    :editFormFields="editFormFields"
-    :editFormOptions="editFormOptions"
-    :searchFormFields="searchFormFields"
-    :searchFormOptions="searchFormOptions"
-    :table="table"
-    :extend="extend"
-  >
+  <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+    :table="table" :extend="extend">
   </view-grid>
 </template>
-    <script>
+<script>
 import extend from "@/extension/taskinfo/task.js";
 import { ref, defineComponent } from "vue";
 export default defineComponent({
@@ -45,17 +37,16 @@
       [
         { title: "浠诲姟鍙�", field: "taskNum", type: "int" },
         { title: "鎵樼洏缂栧彿", field: "palletCode", type: "like" },
-        { title: "鍒涘缓浜�", field: "creater", type: "like" },
+        // { title: "鍒涘缓浜�", field: "creater", type: "like" },
       ],
       [
-        //{ title: "浠诲姟绫诲瀷",field: "taskType",type: "selectList",dataKey: "taskType",data: [],},
-        { title: "浠诲姟鐘舵��",field: "taskStatus",type: "selectList",dataKey: "taskStatusEnum",data: [],},
-        { title: "宸烽亾鍙�", field: "roadway", type: "like" },
+        { title: "浠诲姟绫诲瀷", field: "taskType", type: "selectList", dataKey: "taskType", data: [], },
+        { title: "浠诲姟鐘舵��", field: "taskStatus", type: "selectList", dataKey: "taskStatusEnum", data: [], },
       ],
       [
         { title: "璧峰鍦板潃", field: "sourceAddress", type: "like" },
         { title: "鐩爣鍦板潃", field: "targetAddress", type: "like" },
-        { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+        // { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
       ],
     ]);
     const columns = ref([
@@ -89,6 +80,7 @@
         type: "string",
         width: 120,
         align: "left",
+        hidden: true,
       },
       {
         field: "taskType",
@@ -161,7 +153,7 @@
         type: "datetime",
         width: 160,
         align: "left",
-        hidden:true,
+        hidden: true,
       },
       {
         field: "wMSId",
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue"
index dab85d1..93aa854 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue"
@@ -1,19 +1,11 @@
 
 <template>
-  <view-grid
-    ref="grid"
-    :columns="columns"
-    :detail="detail"
-    :editFormFields="editFormFields"
-    :editFormOptions="editFormOptions"
-    :searchFormFields="searchFormFields"
-    :searchFormOptions="searchFormOptions"
-    :table="table"
-    :extend="extend"
-  >
+  <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+    :table="table" :extend="extend">
   </view-grid>
 </template>
-    <script>
+<script>
 import extend from "@/extension/taskinfo/task_hty.js";
 import { ref, defineComponent } from "vue";
 export default defineComponent({
@@ -42,20 +34,20 @@
       createDate: "",
     });
     const searchFormOptions = ref([
-    [
+      [
         { title: "浠诲姟鍙�", field: "taskNum", type: "int" },
         { title: "鎵樼洏缂栧彿", field: "palletCode", type: "like" },
-        { title: "鍒涘缓浜�", field: "creater", type: "like" },
+        // { title: "鍒涘缓浜�", field: "creater", type: "like" },
       ],
       [
-        //{ title: "浠诲姟绫诲瀷",field: "taskType",type: "selectList",dataKey: "taskType",data: [],},
-        { title: "浠诲姟鐘舵��",field: "taskStatus",type: "selectList",dataKey: "taskStatusEnum",data: [],},
-        { title: "宸烽亾鍙�", field: "roadway", type: "like" },
+        { title: "浠诲姟绫诲瀷", field: "taskType", type: "selectList", dataKey: "taskType", data: [], },
+        { title: "浠诲姟鐘舵��", field: "taskStatus", type: "selectList", dataKey: "taskStatusEnum", data: [], },
+        // { title: "宸烽亾鍙�", field: "roadway", type: "like" },
       ],
       [
         { title: "璧峰鍦板潃", field: "sourceAddress", type: "like" },
         { title: "鐩爣鍦板潃", field: "targetAddress", type: "like" },
-        { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+        // { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
       ],
     ]);
     const columns = ref([
@@ -89,15 +81,16 @@
         type: "string",
         width: 120,
         align: "left",
+        hidden: true,
       },
-      // {
-      //   field: "taskType",
-      //   title: "浠诲姟绫诲瀷",
-      //   type: "int",
-      //   width: 120,
-      //   align: "left",
-      //   bind: { key: "taskType", data: [] },
-      // },
+      {
+        field: "taskType",
+        title: "浠诲姟绫诲瀷",
+        type: "int",
+        width: 120,
+        align: "left",
+        bind: { key: "taskType", data: [] },
+      },
       {
         field: "taskStatus",
         title: "浠诲姟鐘舵��",
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db"
index 1703298..b2b7a4a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm"
index 980ad64..fe34919 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal"
index feb4e45..6d88039 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db"
index c728edd..09d2b95 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm"
index 2ff55fe..71af9a3 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal"
index 9cf8e51..40980eb 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/ESSApiService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/ESSApiService.cs"
index 659a98c..0ee3520 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/ESSApiService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/ESSApiService.cs"
@@ -8,6 +8,8 @@
 using System.Text.Json;
 using System.Threading;
 using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.LogHelper;
 using WIDESEA_DTO.Basic;
 using WIDESEA_IBasicService;
 
@@ -66,6 +68,8 @@
                 var result = await PostAsync<TaskModel, ApiResponse<TasksData>>(url, request);
                 if (result != null && result.Code == 0)
                 {
+                    _logger.LogInformation(result.Serialize());
+
                     return true;
                 }
                 return false;
@@ -76,31 +80,45 @@
                 return false;
             }
         }
- 
+
 
 
         private async Task<TResponse> PostAsync<TRequest, TResponse>(string url, TRequest request)
         {
-
-            string json = JsonConvert.SerializeObject(request, new JsonSerializerSettings
+            TResponse response1 = (TResponse)Activator.CreateInstance(typeof(TResponse));
+            try
             {
-                ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
-            });
-            var content = new StringContent(json, Encoding.UTF8, "application/json");
-            var _client = _httpClientFactory.CreateClient("ESSUrl");
-            _client.DefaultRequestHeaders.Clear();
+                string json = JsonConvert.SerializeObject(request, new JsonSerializerSettings
+                {
+                    ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
+                });
+                var content = new StringContent(json, Encoding.UTF8, "application/json");
+                var _client = _httpClientFactory.CreateClient("ESSUrl");
+                _client.DefaultRequestHeaders.Clear();
 
-            _client.DefaultRequestHeaders.Add("Accept", "application/json");
+                _client.DefaultRequestHeaders.Add("Accept", "application/json");
 
-            using var response = await _client.PostAsync(url, content);
-            string body = await response.Content.ReadAsStringAsync();
-            _logger.LogInformation($"ESSAPI post :  {_client.BaseAddress}  {url}   {body}");
-            if (!response.IsSuccessStatusCode)
-            {
-                throw new HttpRequestException(body);
+                using var response = await _client.PostAsync(url, content);
+                string body = await response.Content.ReadAsStringAsync();
+                _logger.LogInformation($"ESSAPI post :  {_client.BaseAddress}  {url}   {body}");
+                if (!response.IsSuccessStatusCode)
+                {
+                    throw new HttpRequestException(body);
+                }
+
+                response1 = JsonConvert.DeserializeObject<TResponse>(body);
+
+                return response1;
             }
-
-            return JsonConvert.DeserializeObject<TResponse>(body);
+            catch (Exception ex)
+            {
+                Logger.Add(request == null ? "" : JsonConvert.SerializeObject(request), response1 == null ? ex.ToString() : JsonConvert.SerializeObject(response1));
+                throw new Exception(ex.Message);
+            }
+            finally
+            {
+                Logger.Add(request == null ? "" : JsonConvert.SerializeObject(request), response1 == null ? "" : JsonConvert.SerializeObject(response1));
+            }
 
         }
     }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MESOperation/FeedbackMesService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MESOperation/FeedbackMesService.cs"
index 8f2dd52..bc18e9c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MESOperation/FeedbackMesService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MESOperation/FeedbackMesService.cs"
@@ -12,6 +12,7 @@
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.Helper;
 using WIDESEA_Core.HttpContextUser;
+using WIDESEA_Core.LogHelper;
 using WIDESEA_Core.Util;
 using WIDESEA_DTO.Base;
 using WIDESEA_DTO.ReturnMES;
@@ -42,12 +43,13 @@
 
         public WebResponseContent OutboundFeedback(string orderNo)
         {
+            WebResponseContent webResponse = new WebResponseContent();
             try
             {
                 Dt_OutboundOrder outboundOrder = _outboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderNo == orderNo).Includes(x => x.Details).First();
                 if (outboundOrder == null)
                 {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鍑哄簱鍗曚俊鎭�");
+                    return webResponse = WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鍑哄簱鍗曚俊鎭�");
                 }
 
                 List<Dt_MesReturnRecord> returnRecords = BaseDal.QueryData(x => x.OrderNo == orderNo && x.OrderId == outboundOrder.Id && x.ReturnStatus == 2);
@@ -91,12 +93,12 @@
                     MaterialOutboundReturnDTO? returnDTO = BuildOutboundFeedbackData(outboundOrder);
                     if (returnDTO == null)
                     {
-                        return WebResponseContent.Instance.Error($"鏋勫缓鍥炶皟瀵硅薄澶辫触");
+                        return webResponse = WebResponseContent.Instance.Error($"鏋勫缓鍥炶皟瀵硅薄澶辫触");
                     }
 
                     if (returnDTO.Details.Count <= 0)
                     {
-                        return WebResponseContent.Instance.Error($"璇ュ崟鎹棤鏄庣粏鍙洖浼�");
+                        return webResponse = WebResponseContent.Instance.Error($"璇ュ崟鎹棤鏄庣粏鍙洖浼�");
                     }
 
                     string apiUrl = AppSettings.GetValue("MaterialOutboundFeedbackUrl");
@@ -116,18 +118,18 @@
                     Dt_AllocateOrder allocateOrder = _allocateRepository.QueryFirst(x => x.OrderNo == outboundOrder.OrderNo);
                     if (allocateOrder == null)
                     {
-                        return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑璋冩嫧鍗�");
+                        return webResponse = WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑璋冩嫧鍗�");
                     }
 
                     AllocationReturnDTO? returnDTO = BuildAllocationFeedbackData(outboundOrder, allocateOrder.FromWarehouse, allocateOrder.ToWarehouse);
                     if (returnDTO == null)
                     {
-                        return WebResponseContent.Instance.Error($"鏋勫缓鍥炶皟瀵硅薄澶辫触");
+                        return webResponse = WebResponseContent.Instance.Error($"鏋勫缓鍥炶皟瀵硅薄澶辫触");
                     }
 
                     if (returnDTO.Details.Count <= 0)
                     {
-                        return WebResponseContent.Instance.Error($"璇ュ崟鎹棤鏄庣粏鍙洖浼�");
+                        return webResponse = WebResponseContent.Instance.Error($"璇ュ崟鎹棤鏄庣粏鍙洖浼�");
                     }
 
                     string apiUrl = AppSettings.GetValue("AllocationFeedbackUrl"); ;
@@ -141,6 +143,8 @@
                     lineNos = returnDTO.Details.Select(x => x.LineNo).ToList();
                     httpResponseResult = _httpClientHelper.Post<MesResponseDTO>(apiUrl, requestData);
                     httpResponseResult.ApiUrl = apiUrl;
+
+                    Logger.Add(requestData, httpResponseResult.Serialize());
                 }
 
                 bool isSuccess = httpResponseResult.IsSuccess && httpResponseResult.Data.Code == "200";
@@ -210,14 +214,19 @@
                 _unitOfWorkManage.CommitTran();
                 int successCount = returnRecords.Where(x => x.ReturnStatus == 1).Count() + (isSuccess ? 1 : 0);
                 int failCount = returnRecords.Where(x => x.ReturnStatus == 2).Count() + (isSuccess ? 1 : 0);
-                WebResponseContent responseContent = new WebResponseContent();
-                responseContent.Status = true;
-                responseContent.Message = $"鍥炶皟鎴愬姛鏉℃暟锛歿successCount}锛屽洖璋冨け璐ユ潯鏁帮細{failCount}";
-                return responseContent;
+
+                webResponse.Status = true;
+                webResponse.Message = $"鍥炶皟鎴愬姛鏉℃暟锛歿successCount}锛屽洖璋冨け璐ユ潯鏁帮細{failCount}";
+
+                return webResponse;
             }
             catch (Exception ex)
             {
-                return WebResponseContent.Instance.Error(ex.Message);
+                return webResponse = WebResponseContent.Instance.Error(ex.Message);
+            }
+            finally
+            {
+                Logger.Add(orderNo, webResponse.Serialize());
             }
         }
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/CompleteStockTakeDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/CompleteStockTakeDTO.cs"
new file mode 100644
index 0000000..0ea1bed
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/CompleteStockTakeDTO.cs"
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+
+namespace WIDESEA_DTO.Inbound
+{
+    public class CompleteStockTakeDTO
+    {
+        
+        public string orderNo { get; set; }
+
+        public string boxNo { get; set; }
+
+        public string barcode { get; set; }
+
+        public decimal actualQuantity { get; set; }
+
+        public decimal stockQuantity { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderDetailService.cs"
new file mode 100644
index 0000000..3e7ec4e
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderDetailService.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IInboundService
+{
+    public interface ITakeStockOrderDetailService:IService<Dt_TakeStockOrderDetail>
+    {
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderService.cs"
new file mode 100644
index 0000000..74387b8
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderService.cs"
@@ -0,0 +1,24 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IInboundService
+{
+    public interface ITakeStockOrderService : IService<Dt_TakeStockOrder>
+    {
+        WebResponseContent ValidateBoxNo(string orderNo, string boxNo);
+
+        WebResponseContent ValidateBarcode(string boxNo, string barcode);
+
+        WebResponseContent CompleteStockTake([FromBody] CompleteStockTakeDTO completeStockTakeDTO);
+
+        WebResponseContent ReturnBox(string orderNo, string boxNo);
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs"
index 9721aff..f621cae 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs"
@@ -120,6 +120,7 @@
                         StockId = stockInfo == null ? 0 : stockInfo.Id,
                         Barcode = item.Barcode,
                         MaterielCode = item.MaterielCode,
+                        MaterielName = item.MaterielName,
                         BatchNo = item.BatchNo,
                         Unit = item.Unit,
                         InboundOrderRowNo = item.lineNo,
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderDetailService.cs"
new file mode 100644
index 0000000..f5f7395
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderDetailService.cs"
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_InboundService
+{
+    public class TakeStockOrderDetailService : ServiceBase<Dt_TakeStockOrderDetail, IRepository<Dt_TakeStockOrderDetail>>, ITakeStockOrderDetailService
+
+    {
+        public IRepository<Dt_TakeStockOrderDetail> Repository => BaseDal;
+        public TakeStockOrderDetailService(IRepository<Dt_TakeStockOrderDetail> BaseDal) : base(BaseDal)
+        {
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs"
new file mode 100644
index 0000000..d98ba61
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs"
@@ -0,0 +1,252 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+using WIDESEA_Common.OrderEnum;
+using WIDESEA_Core.Helper;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using WIDESEA_Core.Enums;
+using SqlSugar;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Common.StockEnum;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_DTO.ReturnMES;
+using MailKit.Search;
+using static System.Collections.Specialized.BitVector32;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.TaskEnum;
+using WIDESEA_IBasicService;
+
+namespace WIDESEA_InboundService
+{
+    public class TakeStockOrderService : ServiceBase<Dt_TakeStockOrder, IRepository<Dt_TakeStockOrder>>, ITakeStockOrderService
+    {
+        public IRepository<Dt_TakeStockOrder> Repository => BaseDal;
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly IRepository<Dt_TakeStockOrder> _takeStockOrder;
+        private readonly IRepository<Dt_StockInfo> _stockInfoRepository;
+        private readonly IRepository<Dt_TakeStockOrderDetail> _takeStockOrderDetail;
+        private readonly IRepository<Dt_Task> _taskRepository;
+        private readonly ILocationInfoService _locationInfoService;
+        public TakeStockOrderService(IRepository<Dt_TakeStockOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage,IRepository<Dt_TakeStockOrder> takeStockOrder,IRepository<Dt_StockInfo> stockInfoRepository,IRepository<Dt_TakeStockOrderDetail> takeStockOrderDetail,IRepository<Dt_Task> taskRepository,ILocationInfoService locationInfoService) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+            _takeStockOrder = takeStockOrder;
+            _stockInfoRepository = stockInfoRepository;
+            _takeStockOrderDetail = takeStockOrderDetail;
+            _taskRepository = taskRepository;
+            _locationInfoService = locationInfoService;
+        }
+
+        public WebResponseContent ValidateBoxNo(string orderNo, string boxNo)
+        {
+            try
+            {
+                Dt_StockInfo stockInfo = _stockInfoRepository.QueryFirst(x => x.PalletCode == boxNo);
+                if (stockInfo == null) {
+                    return WebResponseContent.Instance.Error("鏈壘鍒拌鎵樼洏搴撳瓨");
+                }
+                if(stockInfo.StockStatus != StockStatusEmun.鐩樼偣鍑哄簱瀹屾垚.ObjToInt())
+                {
+                    return WebResponseContent.Instance.Error("璇ユ墭鐩樺浜庨潪鐩樼偣鐘舵�侊紝璇锋鏌ョ洏鐐逛换鍔�");
+                }
+                Dt_TakeStockOrder takeStockOrder = _takeStockOrder.QueryFirst(x=>x.OrderNo == orderNo);
+                if (takeStockOrder == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈壘鍒拌鐩樼偣鍗曟嵁");
+                }
+                if (takeStockOrder.AllPalletCode.Contains(","))
+                {
+                    var remarkValues = takeStockOrder.AllPalletCode
+                        .Split(',')
+                        .Select(s => s.Trim()) 
+                        .Where(s => !string.IsNullOrWhiteSpace(s)) 
+                        .ToList();
+                    if (remarkValues.Count == 0)
+                    {
+                        return WebResponseContent.Instance.Error("鐩樼偣鍗曠鍙蜂粎鍖呭惈閫楀彿锛屾棤鏈夋晥绠卞彿鏁版嵁");
+                    }
+
+                    bool isMatch = remarkValues.Any(val => val.Equals(boxNo, StringComparison.OrdinalIgnoreCase));
+                    if (!isMatch)
+                    {
+                        return WebResponseContent.Instance.Error($"绠卞彿銆恵boxNo}銆戞湭鍦ㄧ洏鐐瑰崟绠卞彿銆恵takeStockOrder.Remark}銆戜腑鎵惧埌鍖归厤椤�");
+                    }
+                }
+                else
+                {
+                    bool isMatch = takeStockOrder.Remark.Trim().Equals(boxNo, StringComparison.OrdinalIgnoreCase);
+                    if (!isMatch)
+                    {
+                        return WebResponseContent.Instance.Error($"绠卞彿銆恵boxNo}銆戜笌鐩樼偣鍗曠鍙枫�恵takeStockOrder.Remark}銆戜笉鍖归厤");
+                    }
+                }
+
+                return WebResponseContent.Instance.OK();
+            }
+            catch(Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent ValidateBarcode(string boxNo, string barcode)
+        {
+            try
+            {
+                Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == boxNo).Includes(x => x.Details).First();
+                if(stockInfo == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈壘鍒拌鏂欑搴撳瓨淇℃伅");
+                }
+                if(stockInfo.Details == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈壘鍒拌鏂欑搴撳瓨");
+                }
+                List<string> barcodes = stockInfo.Details.Select(x => x.Barcode).ToList();
+
+                bool isMatch = barcodes.Any(val => val.Equals(barcode, StringComparison.OrdinalIgnoreCase));
+                if (!isMatch)
+                {
+                    return WebResponseContent.Instance.Error($"鏉$爜銆恵barcode}銆戞湭鍦ㄣ�恵boxNo}銆戞枡绠辨潯鐮佷腑鎵惧埌鍖归厤椤�");
+                }
+                var stockDetail = stockInfo.Details.FirstOrDefault(x=>x.Barcode == barcode);
+
+                var resultData = new { stockQuantity = stockDetail.StockQuantity };
+
+                return WebResponseContent.Instance.OK(data:resultData);
+            }
+            catch(Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent CompleteStockTake([FromBody] CompleteStockTakeDTO completeStockTakeDTO)
+        {
+            try
+            {
+                Dt_TakeStockOrder takeStockOrder = _takeStockOrder.QueryFirst(x=>x.OrderNo == completeStockTakeDTO.orderNo);
+                if (takeStockOrder == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈壘鍒拌鐩樼偣鍗曟嵁");
+                }
+                Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == completeStockTakeDTO.boxNo).Includes(x=>x.Details).First();
+                if(stockInfo == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈壘鍒拌鎵樼洏搴撳瓨");
+                }
+                Dt_StockInfoDetail stockInfoDetail = stockInfo.Details.FirstOrDefault(x => x.Barcode == completeStockTakeDTO.barcode);
+                if(stockInfoDetail == null)
+                {
+                    return WebResponseContent.Instance.Error("鏉$爜搴撳瓨鏁版嵁鏈壘鍒板尮閰嶆暟鎹�");
+                }
+                Dt_TakeStockOrderDetail takeStockOrderDetail = new Dt_TakeStockOrderDetail()
+                {
+                    TakeStockId = takeStockOrder.Id,
+                    MaterielCode = stockInfoDetail.MaterielCode,
+                    MaterielName = stockInfoDetail.MaterielName??"",
+                    BatchNo = stockInfoDetail.BatchNo,
+                    TakePalletCode = completeStockTakeDTO.boxNo,
+                    TakeDetalStatus = TakeStockDetailStatusEnum.鐩樼偣瀹屾垚.ObjToInt(),
+                    Unit = stockInfoDetail.Unit,
+                    SysQty = completeStockTakeDTO.stockQuantity,
+                    Qty =completeStockTakeDTO.actualQuantity,
+                    Remark = completeStockTakeDTO.stockQuantity-completeStockTakeDTO.actualQuantity>=0 ?"鐩樹簭":"鐩樼泩",
+                    barcode = completeStockTakeDTO.barcode,
+                    WarehouseCode = stockInfoDetail.WarehouseCode??"",
+                    FactoryArea = stockInfoDetail.FactoryArea,
+                    SupplyCode = stockInfoDetail.SupplyCode??"",
+                    TakeStockNo = takeStockOrder.OrderNo,
+
+                };
+                _unitOfWorkManage.BeginTran();
+                _takeStockOrderDetail.AddData(takeStockOrderDetail);
+                _unitOfWorkManage.CommitTran();
+                return WebResponseContent.Instance.OK();
+            } 
+            catch (Exception ex) 
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent ReturnBox(string orderNo, string boxNo)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_TakeStockOrder takeStockOrder = _takeStockOrder.QueryFirst(x=>x.OrderNo == orderNo);
+                if(takeStockOrder == null)
+                {
+                    return content.Error("鏈壘鍒拌鐩樼偣鍗曟嵁");
+                }
+                var stock = _stockInfoRepository.QueryFirst(x => x.PalletCode == boxNo);
+
+                if (stock == null)
+                {
+                    return content.Error($"鏈壘鍒版墭鐩榹boxNo}搴撳瓨淇℃伅涓嶅厑璁稿洖搴�");
+                }
+
+                var task = _taskRepository.QueryFirst(x => x.PalletCode == boxNo);
+                    
+
+                if (task != null)
+                {
+                    return content.Error($"鎵樼洏{boxNo}瀛樺湪浠诲姟鍥炲簱澶辫触!");
+                }
+                if(stock.StockStatus != StockStatusEmun.鐩樼偣鍑哄簱瀹屾垚.ObjToInt())
+                {
+                    return content.Error("璇ユ墭鐩樼姸鎬佷笉瀵�,涓嶅厑璁哥洏鐐瑰叆搴�");
+                }
+                stock.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+
+                takeStockOrder.TakeStockStatus = TakeStockStatusEnum.鐩樼偣瀹屾垚.ObjToInt();
+                // 鍒嗛厤鏂拌揣浣�
+                var newLocation = _locationInfoService.AssignLocation(stock.LocationType);
+
+                var newTask = new Dt_Task()
+                {
+                    CurrentAddress = takeStockOrder.Remark,
+                    Grade = 0,
+                    PalletCode = boxNo,
+                    NextAddress = "",
+                    OrderNo = takeStockOrder.OrderNo,
+                    Roadway = newLocation.RoadwayNo,
+                    SourceAddress = takeStockOrder.Remark,
+                    TargetAddress = newLocation.LocationCode,
+                    TaskStatus = (int)TaskStatusEnum.New,
+                    TaskType = TaskTypeEnum.InInventory.ObjToInt(),
+                    PalletType = stock.PalletType,
+                    WarehouseId = stock.WarehouseId
+                };
+                _unitOfWorkManage.BeginTran();
+                _stockInfoRepository.UpdateData(stock);
+                _takeStockOrder.UpdateData(takeStockOrder);
+                _taskRepository.AddData(newTask);
+                _unitOfWorkManage.CommitTran();
+
+                //var moveResult = await _eSSApiService.MoveContainerAsync(new MoveContainerRequest
+                //{
+                //    slotCode = movestations[station],
+                //    containerCode = palletCode
+                //});
+                return content.OK();
+
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return content.Error(ex.Message);
+            }
+        }
+    }
+    
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderDetail.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderDetail.cs"
index 2c6c80b..487b615 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderDetail.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderDetail.cs"
@@ -1,4 +1,5 @@
-锘縰sing SqlSugar;
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -18,108 +19,126 @@
         /// 涓婚敭
         /// </summary>
         [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        [ExporterHeader(DisplayName = "涓婚敭")]
         public int Id { get; set; }
 
         /// <summary>
         /// 鐩樼偣鍗曚富閿�
         /// </summary>
         [SugarColumn(IsNullable = false, ColumnDescription = "鐩樼偣鍗曚富閿�")]
+        [ExporterHeader(DisplayName = "鐩樼偣鍗曚富閿�")]
         public int TakeStockId { get; set; }
 
         /// <summary>
         /// 鐗╂枡缂栫爜
         /// </summary>
         [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栫爜")]
+        [ExporterHeader(DisplayName = "鐗╂枡缂栫爜")]
         public string MaterielCode { get; set; }
 
         /// <summary>
         /// 鐗╂枡鍚嶇О
         /// </summary>
         [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
+        [ExporterHeader(DisplayName = "鐗╂枡鍚嶇О")]
         public string MaterielName { get; set; }
 
         /// <summary>
         /// 鎵规鍙�
         /// </summary>
         [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵规鍙�")]
+        [ExporterHeader(DisplayName = "鎵规鍙�")]
         public string BatchNo { get; set; }
 
         /// <summary>
         /// 鐗╂枡瑙勬牸
         /// </summary>
         [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡瑙勬牸")]
+        [ExporterHeader(DisplayName = "鐗╂枡瑙勬牸")]
         public string MaterielSpec { get; set; }
 
         /// <summary>
         /// 鍘熶粨浣�
         /// </summary>
         [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍘熶粨浣�")]
+        [ExporterHeader(DisplayName = "鍘熶粨浣�")]
         public string LocationCode { get; set; }
 
         /// <summary>
         /// 鐩樼偣鎵樼洏
         /// </summary>
         [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鐩樼偣鎵樼洏")]
+        [ExporterHeader(DisplayName = "鐩樼偣鎵樼洏")]
         public string TakePalletCode { get; set; }
 
         /// <summary>
         /// 鐩樼偣鏄庣粏鐘舵��
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDescription = "鐩樼偣鏄庣粏鐘舵��")]
+        [ExporterHeader(DisplayName = "鐩樼偣鏄庣粏鐘舵��")]
         public int TakeDetalStatus { get; set; }
 
         /// <summary>
         /// 鍗曚綅
         /// </summary>
         [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍗曚綅")]
+        [ExporterHeader(DisplayName = "鍗曚綅")]
         public string Unit { get; set; }
 
         /// <summary>
         /// 璐﹂潰鏁伴噺
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDescription = "璐﹂潰鏁伴噺")]
+        [ExporterHeader(DisplayName = "璐﹂潰鏁伴噺")]
         public decimal SysQty { get; set; }
 
         /// <summary>
         /// 瀹炵洏鏁伴噺
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDescription = "瀹炵洏鏁伴噺")]
+        [ExporterHeader(DisplayName = "瀹炵洏鏁伴噺")]
         public decimal Qty { get; set; }
 
         /// <summary>
         /// 澶囨敞
         /// </summary>
         [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "澶囨敞")]
+        [ExporterHeader(DisplayName = "澶囨敞")]
         public string Remark { get; set; }
 
         /// <summary>
         /// 鏉$爜
         /// </summary>
         [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鏉$爜")]
+        [ExporterHeader(DisplayName = "鏉$爜")]
         public string barcode { get; set; }
 
         /// <summary>
         /// 鐗╂枡浠撳簱
         /// </summary>
         [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "鐗╂枡浠撳簱")]
+        [ExporterHeader(DisplayName = "鐗╂枡浠撳簱")]
         public string WarehouseCode { get; set; }
 
         /// <summary>
         /// 鍘傚尯
         /// </summary>
         [SugarColumn(IsNullable = true, Length = 10, ColumnDescription = "鍘傚尯")]
+        [ExporterHeader(DisplayName = "鍘傚尯")]
         public string FactoryArea { get; set; }
 
         /// <summary>
         /// 渚涘簲鍟嗙紪鍙�
         /// </summary>
         [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "渚涘簲鍟嗙紪鍙�")]
+        [ExporterHeader(DisplayName = "渚涘簲鍟嗙紪鍙�")]
         public string SupplyCode { get; set; }
 
         /// <summary>
         /// 鐩樼偣鍗曞崟鎹�
         /// </summary>
         [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鐩樼偣鍗曞崟鎹�")]
+        [ExporterHeader(DisplayName = "鐩樼偣鍗曞崟鎹�")]
         public string TakeStockNo { get; set; }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs"
index f725af2..c7cd1e8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs"
@@ -1435,7 +1435,7 @@
                         List<Barcodes> barcodesList = new List<Barcodes>();
                         Barcodes barcodes = new Barcodes
                         {
-                            Barcode = newBarcode,
+                            Barcode = isUnpacked ? newBarcode : stockDetail?.Barcode,
                             Qty = barcodeQuantity,
                             SupplyCode = stockDetail?.SupplyCode ?? "",
                             BatchNo = stockDetail?.BatchNo ?? "",
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs"
index 3e3aea1..5b4bdcb 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs"
@@ -295,6 +295,54 @@
                             result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                         }
                         break;
+                    case "takeStockStatusEnum":
+                        {
+                            List<object> data = new List<object>();
+                            Type type = typeof(TakeStockStatusEnum);
+                            List<int> enums = Enum.GetValues(typeof(TakeStockStatusEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TakeStockStatusEnum).GetField(((TakeStockStatusEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+
+                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+                        }
+                        break;
+                    case "takeStockDetailStatusEnum":
+                        {
+                            List<object> data = new List<object>();
+                            Type type = typeof(TakeStockDetailStatusEnum);
+                            List<int> enums = Enum.GetValues(typeof(TakeStockDetailStatusEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TakeStockDetailStatusEnum).GetField(((TakeStockDetailStatusEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+
+                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+                        }
+                        break;
                 }
                 return result;
             }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index 107197e..fb53ba9 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -94,6 +94,7 @@
         private readonly IRepository<Dt_AllocateMaterialInfo_Hty> _allocateMaterialInfo_Hty;
         private readonly HttpClientHelper _httpClientHelper;
         private readonly IBasicService _basicService;
+        private readonly IRepository<Dt_TakeStockOrder> _takeStockOrder;
         public IRepository<Dt_Task> Repository => BaseDal;
 
         private Dictionary<string, SqlSugar.OrderByType> _taskOrderBy = new()
@@ -113,7 +114,7 @@
 
         public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
 
-        public TaskService(IRepository<Dt_Task> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfo> stockRepository, ILocationInfoService locationInfoService, IInboundOrderService inboundOrderService, ILocationStatusChangeRecordService locationStatusChangeRecordService, IESSApiService eSSApiService, ILogger<TaskService> logger, IStockService stockService, IRecordService recordService, IInboundOrderDetailService inboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutboundOrderDetailService outboundOrderDetailService, IInvokeMESService invokeMESService, IOutStockLockInfoService outStockLockInfoService, IAllocateService allocateService, IRepository<Dt_OutboundBatch> outboundBatchRepository, IRepository<Dt_ReCheckOrder> reCheckOrderRepository, IRepository<Dt_AllocateOrderDetail> allocateOrderDetailRepository, IRepository<Dt_AllocateOrder> allocateOrderRepository, IMaterialUnitService materialUnitService, ITask_HtyService task_HtyService, IRepository<Dt_AllocateMaterialInfo> allocateMaterialInfo, IRepository<Dt_AllocateMaterialInfo_Hty> allocateMaterialInfo_Hty, HttpClientHelper httpClientHelper, IBasicService basicService) : base(BaseDal)
+        public TaskService(IRepository<Dt_Task> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfo> stockRepository, ILocationInfoService locationInfoService, IInboundOrderService inboundOrderService, ILocationStatusChangeRecordService locationStatusChangeRecordService, IESSApiService eSSApiService, ILogger<TaskService> logger, IStockService stockService, IRecordService recordService, IInboundOrderDetailService inboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutboundOrderDetailService outboundOrderDetailService, IInvokeMESService invokeMESService, IOutStockLockInfoService outStockLockInfoService, IAllocateService allocateService, IRepository<Dt_OutboundBatch> outboundBatchRepository, IRepository<Dt_ReCheckOrder> reCheckOrderRepository, IRepository<Dt_AllocateOrderDetail> allocateOrderDetailRepository, IRepository<Dt_AllocateOrder> allocateOrderRepository, IMaterialUnitService materialUnitService, ITask_HtyService task_HtyService, IRepository<Dt_AllocateMaterialInfo> allocateMaterialInfo, IRepository<Dt_AllocateMaterialInfo_Hty> allocateMaterialInfo_Hty, HttpClientHelper httpClientHelper, IBasicService basicService,IRepository<Dt_TakeStockOrder> takeStockOrder) : base(BaseDal)
         {
             _mapper = mapper;
             _unitOfWorkManage = unitOfWorkManage;
@@ -141,6 +142,7 @@
             _allocateMaterialInfo_Hty = allocateMaterialInfo_Hty;
             _httpClientHelper = httpClientHelper;
             _basicService = basicService;
+            _takeStockOrder = takeStockOrder;
         }
 
         public async Task TaskStatusChange(string taskNum, TaskStatusEnum taskStatusEnum)
@@ -591,6 +593,7 @@
 
             _stockService.StockInfoService.Db.UpdateNav(stock).IncludesAllFirstLayer().ExecuteCommand();
 
+            task.TaskStatus = (int)TaskStatusEnum.Finish;
             var result = _task_HtyService.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
             if (!result)
             {
@@ -1849,5 +1852,134 @@
             return TaskCompleted(TaskNum);
         }
 
+        /// <summary>
+        /// 鐩樼偣鍑哄簱瀹屾垚
+        /// </summary>
+        public WebResponseContent OutInventoryTaskCompleted(Dt_Task task)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                task = BaseDal.QueryFirst(x => x.TaskNum == task.TaskNum);
+                if (task == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈壘鍒颁换鍔′俊鎭�");
+                }
+                var SourceAddress = task.SourceAddress;
+                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x=>x.PalletCode == task.PalletCode);
+                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == SourceAddress);
+                if (stockInfo == null) return WebResponseContent.Instance.Error("鏈壘鍒板簱瀛樹俊鎭�");
+                if (locationInfo == null) return WebResponseContent.Instance.Error("鏈壘鍒拌揣浣嶄俊鎭�");
+                //鑾峰彇瀵瑰簲鐩樼偣鍗�
+                Dt_TakeStockOrder takeStockOrder = _takeStockOrder.Db.Queryable<Dt_TakeStockOrder>().Where(x => x.OrderNo == task.OrderNo).Includes(x => x.Details).First();
+                if (takeStockOrder == null)
+                {
+                    return content.Error($"鐩樼偣鍗晎task.OrderNo}涓嶅瓨鍦�");
+                }
+                if (takeStockOrder.TakeStockStatus != TakeStockStatusEnum.鐩樼偣涓�.ObjToInt())
+                {
+                    return content.Error($"鐩樼偣鍗晎task.OrderNo}鐩樼偣宸插畬鎴愭垨鏈紑濮�");
+                }
+                if (stockInfo.StockStatus != StockStatusEmun.鍑哄簱閿佸畾.ObjToInt())
+                {
+                    return content.Error($"{stockInfo.PalletCode}搴撳瓨鐘舵�佷笉姝g‘");
+                }
+                if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
+                {
+                    return content.Error($"{locationInfo.LocationCode}璐т綅鐘舵�佷笉姝g‘");
+                }
+                
+                stockInfo.StockStatus = StockStatusEmun.鐩樼偣鍑哄簱瀹屾垚.ObjToInt();
+                stockInfo.LocationCode = "";
+                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
+                int beforeStatus = locationInfo.LocationStatus;
+                locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+                _unitOfWorkManage.BeginTran();
+                //璐т綅鍙樺姩璁板綍
+                _basicService.LocationInfoService.UpdateData(locationInfo);
+                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, LocationStatusEnum.Free.ObjToInt(),  takeStockOrder?.OrderNo ?? "", task.TaskNum);
+                _stockRepository.UpdateData(stockInfo);
+                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                _unitOfWorkManage.CommitTran();
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+
+        /// <summary>
+        /// 鐩樼偣鍏ュ簱瀹屾垚
+        /// </summary>
+        /// <param name="task"></param>
+        /// <returns></returns>
+        public async Task<WebResponseContent> InInventoryTaskCompleted(Dt_Task task)
+        {
+
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+
+                Dt_LocationInfo locationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+                if (locationInfo == null)
+                {
+                    return content.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
+                }
+                Dt_StockInfo stockInfo = _stockRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).First();
+                if (stockInfo == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅");
+                }
+
+                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
+                {
+                    return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅");
+                }
+                if (locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
+                {
+                    return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘");
+                }
+
+
+                var beforelocationStatus = locationInfo.LocationStatus;
+                locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+                
+
+                stockInfo.LocationCode = locationInfo.LocationCode;
+                stockInfo.PalletCode = task.PalletCode;
+                stockInfo.LocationCode = task.TargetAddress;
+                stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
+
+                _unitOfWorkManage.BeginTran();
+                _locationInfoService.Repository.UpdateData(locationInfo);
+                _stockRepository.UpdateData(stockInfo);
+                var result = _task_HtyService.DeleteAndMoveIntoHty(task, OperateTypeEnum.浜哄伐鍒犻櫎);
+                _unitOfWorkManage.CommitTran();
+
+                if (!result)
+                {
+                    await Db.Deleteable(task).ExecuteCommandAsync();
+                }
+                try
+                {
+                    _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforelocationStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum);
+                }
+                catch (Exception ex)
+                {
+                    _logger.LogInformation($"InEmptyTaskCompleted AddLocationStatusChangeRecord : {ex.Message} ");
+                }
+                return content;
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return await Task.FromResult(WebResponseContent.Instance.Error(ex.Message));
+            }
+        }
     }
 }
+
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
index e85a591..87f4d36 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
@@ -393,7 +393,7 @@
                             TargetAddress = outStation,
                             TaskStatus = TaskStatusEnum.New.ObjToInt(),
                             TaskType = taskType.ObjToInt(),
-                            // TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+                            //TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                             PalletType = stockInfo.PalletType,
                             WarehouseId = stockInfo.WarehouseId,
                         };
@@ -1127,7 +1127,7 @@
                 }
                 //鑾峰彇璐т綅
                 List<string> locStrs = stockInfos.Select(x => x.LocationCode).ToList();
-                List<Dt_LocationInfo> locationInfos = (List<Dt_LocationInfo>)_locationInfoService.Db.Queryable<Dt_LocationInfo>().Where(x => locStrs.Contains(x.LocationCode));
+                List<Dt_LocationInfo> locationInfos =_locationInfoService.Db.Queryable<Dt_LocationInfo>().Where(x => locStrs.Contains(x.LocationCode)).ToList();
                 if (stockInfos.Count != locationInfos.Count)
                 {
                     string? locStr = locStrs.FirstOrDefault(x => !locationInfos.Select(x => x.LocationCode).ToList().Contains(x));
@@ -1138,7 +1138,9 @@
                     WarehouseId = stockInfos.FirstOrDefault().WarehouseId,
                     TakeStockStatus = TakeStockStatusEnum.鐩樼偣涓�.ObjToInt(),
                     OrderNo = CreateCodeByRule(nameof(RuleCodeEnum.PDCodeRule)),
-                    Details = new List<Dt_TakeStockOrderDetail>()
+                    AllPalletCode = string.Join(",", stockInfos.Select(item => item.PalletCode).Where(palletCode => !string.IsNullOrEmpty(palletCode))),
+                    Remark = outStation
+                    
                 };
                 foreach (var item in stockInfos)
                 {
@@ -1172,7 +1174,7 @@
                 _unitOfWorkManage.BeginTran();
                 //鏇存柊搴撳瓨鐘舵��
                 _stockRepository.UpdateData(stockInfos);
-                BaseDal.Db.InsertNav(takeStockOrder);
+                _takeStockOrder.AddData(takeStockOrder);
                 //鏂板缓浠诲姟
                 BaseDal.AddData(tasks);
                 _locationInfoService.UpdateData(locationInfos);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Allocate/AllocateOrderController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Allocate/AllocateOrderController.cs"
index 81a2421..ac3c3e1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Allocate/AllocateOrderController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Allocate/AllocateOrderController.cs"
@@ -71,7 +71,7 @@
                 {
                     return WebResponseContent.Instance.Error($"鏉$爜涓嶈兘涓虹┖");
                 }
-                var materialName = _materialInfoRepository.QueryFirst(x => x.MaterielCode == detailDto.materialCode).MaterielName;
+                var materialName = _materialInfoRepository.QueryFirst(x => x.MaterielCode == detailDto.MaterialCode).MaterielName;
                 if (detailDto.Barcodes != null && detailDto.Barcodes.Any())
                 {
                     foreach (var barcodeDto in detailDto.Barcodes)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderController.cs"
new file mode 100644
index 0000000..3db09d1
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderController.cs"
@@ -0,0 +1,57 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Inbound
+{
+    /// <summary>
+    /// 鐩樼偣鍗�
+    /// </summary>
+    [Route("api/TakeStockOrder")]
+    [ApiController]
+    public class TakeStockOrderController : ApiBaseController<ITakeStockOrderService, Dt_TakeStockOrder>
+    {
+        public TakeStockOrderController(ITakeStockOrderService service) : base(service)
+        {
+        }
+        /// <summary>
+        /// 鏂欑楠岃瘉
+        /// </summary>
+        [HttpPost,HttpGet, Route("ValidateBoxNo"), AllowAnonymous]
+        public WebResponseContent ValidateBoxNo(string orderNo , string boxNo)
+        {
+            return Service.ValidateBoxNo(orderNo,boxNo);
+        }
+
+        /// <summary>
+        /// 鏉$爜楠岃瘉
+        /// </summary>
+        [HttpPost, HttpGet, Route("ValidateBarcode"), AllowAnonymous]
+        public WebResponseContent ValidateBarcode( string boxNo,string barcode)
+        {
+            return Service.ValidateBarcode(boxNo, barcode);
+        }
+
+        /// <summary>
+        /// 鐩樼偣瀹屾垚璁板綍
+        /// </summary>
+        [HttpPost, HttpGet, Route("CompleteStockTake"), AllowAnonymous]
+        public WebResponseContent CompleteStockTake([FromBody] CompleteStockTakeDTO completeStockTakeDTO)
+        {
+            return Service.CompleteStockTake(completeStockTakeDTO);
+        }
+        /// <summary>
+        /// 鐩樼偣鏂欑鍥炲簱
+        /// </summary>
+        [HttpPost, HttpGet, Route("ReturnBox"), AllowAnonymous]
+        public WebResponseContent ReturnBox(string orderNo, string boxNo)
+        {
+            return Service.ReturnBox(orderNo, boxNo);
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderDetailController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderDetailController.cs"
new file mode 100644
index 0000000..b40a957
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderDetailController.cs"
@@ -0,0 +1,16 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Inbound
+{
+    [Route("api/TakeStockOrderDetail")]
+    [ApiController]
+    public class TakeStockOrderDetailController : ApiBaseController<ITakeStockOrderDetailService, Dt_TakeStockOrderDetail>
+    {
+        public TakeStockOrderDetailController(ITakeStockOrderDetailService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_MenuController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_MenuController.cs"
index d6dcb2f..77ab064 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_MenuController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_MenuController.cs"
@@ -39,7 +39,8 @@
         [HttpPost, Route("save")]
         public ActionResult Save([FromBody] Sys_Menu menu)
         {
-            if (App.User.UserId == 1)
+            //瓒呯骇绠$悊鍛樹篃鑳戒慨鏀硅彍鍗�
+            if (App.User.RoleId == 1)
             {
                 return Json(Service.Save(menu));
             }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/InventoryLockJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/InventoryLockJob.cs"
index 495eef0..ec6e218 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/InventoryLockJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/InventoryLockJob.cs"
@@ -22,13 +22,13 @@
         {
 
             // 绗竴姝ワ細鏇存柊ValidDate鐨勫師鐢烻QL锛圫QL Server锛�
-            string updateSql = @"
-    UPDATE s
-    SET s.ValidDate = DATEADD(DAY, m.ValidityDays, s.CreateDate)
-    FROM Dt_StockInfoDetail s
-    INNER JOIN Dt_MaterialExpirationDate m ON SUBSTRING(s.MaterielCode, 1, 6) = m.MaterialCode
-    WHERE s.ValidDate IS NULL";
-            int updateValidDateResult = _db.Ado.ExecuteCommand(updateSql);
+    //        string updateSql = @"
+    //UPDATE s
+    //SET s.ValidDate = DATEADD(DAY, m.ValidityDays, s.CreateDate)
+    //FROM Dt_StockInfoDetail s
+    //INNER JOIN Dt_MaterialExpirationDate m ON SUBSTRING(s.MaterielCode, 1, 6) = m.MaterialCode
+    //WHERE s.ValidDate IS NULL";
+    //        int updateValidDateResult = _db.Ado.ExecuteCommand(updateSql);
 
             // 绗簩姝ワ細鏇存柊杩囨湡鐘舵�佺殑鍘熺敓SQL
             string updateStatusSql = @"
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/QuartzJobMildd.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/QuartzJobMildd.cs"
index e179ff3..09e3e2e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/QuartzJobMildd.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/QuartzJobMildd.cs"
@@ -21,20 +21,20 @@
             {
                 var allQzServices = new List<TasksQz>()
                 {
-                    //new TasksQz()
-                    //{
-                    //     Id = 1,
-                    //     AssemblyName = "WIDESEA_WMSServer",
-                    //     ClassName = "AgvTaskJob",
-                    //     CreateTime = DateTime.Now,
-                    //     IntervalSecond = 3,
-                    //     IsDeleted = false,
-                    //     IsStart = false,
-                    //     JobGroup = "WIDESEA_WMSServer",
-                    //     Name = "AgvTaskJob",
-                    //     TriggerType = 0
-                    //},
-                   
+                    new TasksQz()
+                    {
+                         Id = 1,
+                         AssemblyName = "WIDESEA_WMSServer",
+                         ClassName = "AgvTaskJob",
+                         CreateTime = DateTime.Now,
+                         IntervalSecond = 3,
+                         IsDeleted = false,
+                         IsStart = false,
+                         JobGroup = "WIDESEA_WMSServer",
+                         Name = "AgvTaskJob",
+                         TriggerType = 0
+                    },
+
                 };
                 foreach (var item in allQzServices)
                 {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile2.pubxml" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile2.pubxml"
new file mode 100644
index 0000000..19f43e1
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile2.pubxml"
@@ -0,0 +1,15 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
+<Project>
+  <PropertyGroup>
+    <DeleteExistingFiles>false</DeleteExistingFiles>
+    <ExcludeApp_Data>false</ExcludeApp_Data>
+    <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
+    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
+    <LastUsedPlatform>Any CPU</LastUsedPlatform>
+    <PublishProvider>FileSystem</PublishProvider>
+    <PublishUrl>bin\Release\net6.0\publish\</PublishUrl>
+    <WebPublishMethod>FileSystem</WebPublishMethod>
+    <_TargetId>Folder</_TargetId>
+  </PropertyGroup>
+</Project>
\ No newline at end of file

--
Gitblit v1.9.3