From f423e1277f91427f0a767bd1224c1260dcb73086 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期一, 20 四月 2026 22:47:54 +0800
Subject: [PATCH] feat: 添加空箱入库功能及相关优化

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Abstractions/IRobotNgLineCommandHandler.cs          |    9 
 Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/gridBodyExtension.vue                           |    1 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MesService.cs                                            |    4 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Abstractions/IRobotMessageRouter.cs                 |    2 
 Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/robotState.vue                                             |   74 ++--
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs               |    8 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs                               |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotNgLineCommandHandler.cs               |   34 ++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs                   |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs                                    |   25 +
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json                                            |    4 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs               |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs                |    4 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.cs                              |    2 
 Code/.omc/state/subagent-tracking.json                                                                   |   78 +++++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs               |    4 
 Code/.omc/state/mission-state.json                                                                       |  168 +++++++++++
 Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs                           |   15 +
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml             |    6 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                                        |    5 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs                              |   17 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs                  |    8 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json                                            |    4 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs                                          |   21 +
 Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs                            |  128 +++++--
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ManualInbound/ManualInboundTaskHandler.cs |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs                                  |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/RobotStateRepository.cs                         |    9 
 /dev/null                                                                                                |  203 -------------
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Constants/StackerCraneConst.cs                              |    9 
 Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/addManualTask.vue                               |    9 
 Code/.omc/state/last-tool-error.json                                                                     |   10 
 Code/WMS/WIDESEA_WMSClient/src/api/http.js                                                               |    2 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Manual.cs                             |    7 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs               |    5 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Messaging.cs                    |    2 
 36 files changed, 542 insertions(+), 345 deletions(-)

diff --git a/Code/.omc/state/last-tool-error.json b/Code/.omc/state/last-tool-error.json
index 85397e0..6556fa7 100644
--- a/Code/.omc/state/last-tool-error.json
+++ b/Code/.omc/state/last-tool-error.json
@@ -1,7 +1,7 @@
 {
-  "tool_name": "Bash",
-  "tool_input_preview": "{\"command\":\"cd \\\"D:/Git/ShanMeiXinNengYuan/Code/WMS\\\" && git clone --depth 1 https://ghproxy.com/https://github.com/vbenjs/vue-vben-admin.git WIDESEA_WMSClient_Vben 2>&1\",\"timeout\":300000,\"description...",
-  "error": "Exit code 128\nCloning into 'WIDESEA_WMSClient_Vben'...\nfatal: unable to access 'https://ghproxy.com/https://github.com/vbenjs/vue-vben-admin.git/': Failed to connect to ghproxy.com port 443 after 21158 ms: Could not connect to server",
-  "timestamp": "2026-04-19T13:54:19.051Z",
-  "retry_count": 4
+  "tool_name": "Read",
+  "tool_input_preview": "{\"file_path\":\"D:\\\\Git\\\\ShanMeiXinNengYuan\\\\Code\\\\WMS\\\\WIDESEA_WMSClient_Vben_v2\\\\apps\\\\web-ele\\\\src\\\\views\\\\dashboard\\\\index.vue\"}",
+  "error": "File does not exist. Note: your current working directory is D:\\Git\\ShanMeiXinNengYuan\\Code.",
+  "timestamp": "2026-04-20T01:28:36.836Z",
+  "retry_count": 1
 }
\ No newline at end of file
diff --git a/Code/.omc/state/mission-state.json b/Code/.omc/state/mission-state.json
index c4c05bb..749450d 100644
--- a/Code/.omc/state/mission-state.json
+++ b/Code/.omc/state/mission-state.json
@@ -1,5 +1,5 @@
 {
-  "updatedAt": "2026-04-19T13:53:57.853Z",
+  "updatedAt": "2026-04-20T02:13:36.765Z",
   "missions": [
     {
       "id": "session:9007b9ea-1eb6-4d24-8fe7-2c3a949eac88:none",
@@ -1798,6 +1798,172 @@
           "sourceKey": "session-stop:ad92b7876bc72bf7e"
         }
       ]
+    },
+    {
+      "id": "session:ab8c4305-0c84-43a9-bd5d-b68d5471801b:none",
+      "source": "session",
+      "name": "none",
+      "objective": "Session mission",
+      "createdAt": "2026-04-20T01:18:33.678Z",
+      "updatedAt": "2026-04-20T02:13:36.765Z",
+      "status": "done",
+      "workerCount": 8,
+      "taskCounts": {
+        "total": 8,
+        "pending": 0,
+        "blocked": 0,
+        "inProgress": 0,
+        "completed": 8,
+        "failed": 0
+      },
+      "agents": [
+        {
+          "name": "general-purpose:af20345",
+          "role": "general-purpose",
+          "ownership": "af20345f5b7efdbb8",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-20T02:13:36.765Z"
+        },
+        {
+          "name": "general-purpose:a9cc35c",
+          "role": "general-purpose",
+          "ownership": "a9cc35c00ad32b233",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-20T01:21:33.668Z"
+        },
+        {
+          "name": "general-purpose:a3499a6",
+          "role": "general-purpose",
+          "ownership": "a3499a67931cba616",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-20T01:21:25.687Z"
+        },
+        {
+          "name": "general-purpose:addde47",
+          "role": "general-purpose",
+          "ownership": "addde47ba39361d9d",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-20T01:34:11.276Z"
+        },
+        {
+          "name": "general-purpose:a883f88",
+          "role": "general-purpose",
+          "ownership": "a883f88b2839bb064",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-20T02:09:43.301Z"
+        },
+        {
+          "name": "general-purpose:a1cccc1",
+          "role": "general-purpose",
+          "ownership": "a1cccc11f34b62da4",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-20T02:09:46.017Z"
+        },
+        {
+          "name": "general-purpose:a85bc7a",
+          "role": "general-purpose",
+          "ownership": "a85bc7aac2726a6fa",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-20T02:10:09.142Z"
+        },
+        {
+          "name": "general-purpose:a921902",
+          "role": "general-purpose",
+          "ownership": "a9219020fa6ba0ef0",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-20T02:08:23.745Z"
+        }
+      ],
+      "timeline": [
+        {
+          "id": "session-start:a1cccc11f34b62da4:2026-04-20T02:07:02.639Z",
+          "at": "2026-04-20T02:07:02.639Z",
+          "kind": "update",
+          "agent": "general-purpose:a1cccc1",
+          "detail": "started general-purpose:a1cccc1",
+          "sourceKey": "session-start:a1cccc11f34b62da4"
+        },
+        {
+          "id": "session-start:a85bc7aac2726a6fa:2026-04-20T02:07:02.655Z",
+          "at": "2026-04-20T02:07:02.655Z",
+          "kind": "update",
+          "agent": "general-purpose:a85bc7a",
+          "detail": "started general-purpose:a85bc7a",
+          "sourceKey": "session-start:a85bc7aac2726a6fa"
+        },
+        {
+          "id": "session-start:a9219020fa6ba0ef0:2026-04-20T02:07:02.700Z",
+          "at": "2026-04-20T02:07:02.700Z",
+          "kind": "update",
+          "agent": "general-purpose:a921902",
+          "detail": "started general-purpose:a921902",
+          "sourceKey": "session-start:a9219020fa6ba0ef0"
+        },
+        {
+          "id": "session-stop:a9219020fa6ba0ef0:2026-04-20T02:08:23.745Z",
+          "at": "2026-04-20T02:08:23.745Z",
+          "kind": "completion",
+          "agent": "general-purpose:a921902",
+          "detail": "completed",
+          "sourceKey": "session-stop:a9219020fa6ba0ef0"
+        },
+        {
+          "id": "session-stop:a883f88b2839bb064:2026-04-20T02:09:43.301Z",
+          "at": "2026-04-20T02:09:43.301Z",
+          "kind": "completion",
+          "agent": "general-purpose:a883f88",
+          "detail": "completed",
+          "sourceKey": "session-stop:a883f88b2839bb064"
+        },
+        {
+          "id": "session-stop:a1cccc11f34b62da4:2026-04-20T02:09:46.017Z",
+          "at": "2026-04-20T02:09:46.017Z",
+          "kind": "completion",
+          "agent": "general-purpose:a1cccc1",
+          "detail": "completed",
+          "sourceKey": "session-stop:a1cccc11f34b62da4"
+        },
+        {
+          "id": "session-stop:a85bc7aac2726a6fa:2026-04-20T02:10:09.142Z",
+          "at": "2026-04-20T02:10:09.142Z",
+          "kind": "completion",
+          "agent": "general-purpose:a85bc7a",
+          "detail": "completed",
+          "sourceKey": "session-stop:a85bc7aac2726a6fa"
+        },
+        {
+          "id": "session-stop:a6eae12446c31bdfe:2026-04-20T02:13:36.765Z",
+          "at": "2026-04-20T02:13:36.765Z",
+          "kind": "completion",
+          "agent": "general-purpose:af20345",
+          "detail": "completed",
+          "sourceKey": "session-stop:a6eae12446c31bdfe"
+        }
+      ]
     }
   ]
 }
\ No newline at end of file
diff --git a/Code/.omc/state/subagent-tracking.json b/Code/.omc/state/subagent-tracking.json
index 1b42f04..62341aa 100644
--- a/Code/.omc/state/subagent-tracking.json
+++ b/Code/.omc/state/subagent-tracking.json
@@ -1112,10 +1112,82 @@
       "status": "completed",
       "completed_at": "2026-04-19T13:53:49.216Z",
       "duration_ms": 5697
+    },
+    {
+      "agent_id": "af20345f5b7efdbb8",
+      "agent_type": "general-purpose",
+      "started_at": "2026-04-20T01:18:33.678Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-20T01:20:19.477Z",
+      "duration_ms": 105799
+    },
+    {
+      "agent_id": "a9cc35c00ad32b233",
+      "agent_type": "general-purpose",
+      "started_at": "2026-04-20T01:18:33.716Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-20T01:21:33.665Z",
+      "duration_ms": 179949
+    },
+    {
+      "agent_id": "a3499a67931cba616",
+      "agent_type": "general-purpose",
+      "started_at": "2026-04-20T01:18:33.755Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-20T01:21:25.686Z",
+      "duration_ms": 171931
+    },
+    {
+      "agent_id": "addde47ba39361d9d",
+      "agent_type": "general-purpose",
+      "started_at": "2026-04-20T01:27:42.165Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-20T01:34:11.275Z",
+      "duration_ms": 389110
+    },
+    {
+      "agent_id": "a883f88b2839bb064",
+      "agent_type": "general-purpose",
+      "started_at": "2026-04-20T02:07:02.615Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-20T02:09:43.299Z",
+      "duration_ms": 160684
+    },
+    {
+      "agent_id": "a1cccc11f34b62da4",
+      "agent_type": "general-purpose",
+      "started_at": "2026-04-20T02:07:02.639Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-20T02:09:46.016Z",
+      "duration_ms": 163377
+    },
+    {
+      "agent_id": "a85bc7aac2726a6fa",
+      "agent_type": "general-purpose",
+      "started_at": "2026-04-20T02:07:02.655Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-20T02:10:09.140Z",
+      "duration_ms": 186485
+    },
+    {
+      "agent_id": "a9219020fa6ba0ef0",
+      "agent_type": "general-purpose",
+      "started_at": "2026-04-20T02:07:02.700Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-20T02:08:23.744Z",
+      "duration_ms": 81044
     }
   ],
-  "total_spawned": 115,
-  "total_completed": 119,
+  "total_spawned": 118,
+  "total_completed": 127,
   "total_failed": 0,
-  "last_updated": "2026-04-19T13:53:57.967Z"
+  "last_updated": "2026-04-20T02:13:36.867Z"
 }
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/robotState.vue b/Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/robotState.vue
index 462827e..3547526 100644
--- a/Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/robotState.vue
+++ b/Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/robotState.vue
@@ -52,13 +52,13 @@
     // 缂栬緫琛ㄥ崟閰嶇疆
     const editFormOptions = ref([
       [
-        { title: "IP鍦板潃", field: "IPAddress", type: "string", readonly: true },
-        { title: "鐗堟湰鍙�", field: "Version", type: "int", readonly: true },
+        { title: "IP鍦板潃", field: "ipAddress", type: "string", readonly: true },
+        { title: "鐗堟湰鍙�", field: "version", type: "int", readonly: true },
       ],
       [
         {
           title: "杩愯妯″紡",
-          field: "RobotRunMode",
+          field: "robotRunMode",
           type: "select",
           data: [
             { key: 1, value: "鎵嬪姩妯″紡" },
@@ -67,7 +67,7 @@
         },
         {
           title: "鎺у埗妯″紡",
-          field: "RobotControlMode",
+          field: "robotControlMode",
           type: "select",
           data: [
             { key: 1, value: "瀹㈡埛绔帶鍒�" },
@@ -76,7 +76,7 @@
         },
         {
           title: "鎵嬭噦鐘舵��",
-          field: "RobotArmObject",
+          field: "robotArmObject",
           type: "select",
           data: [
             { key: 0, value: "绌洪棽" },
@@ -85,46 +85,46 @@
         },
       ],
       [
-        { title: "鍥為浂鐘舵��", field: "Homed", type: "string" },
-        { title: "褰撳墠鍔ㄤ綔", field: "CurrentAction", type: "string" },
-        { title: "杩愯鐘舵��", field: "OperStatus", type: "string" },
+        { title: "鍥為浂鐘舵��", field: "homed", type: "string" },
+        { title: "褰撳墠鍔ㄤ綔", field: "currentAction", type: "string" },
+        { title: "杩愯鐘舵��", field: "operStatus", type: "string" },
       ],
       [
-        { title: "浠诲姟鎬绘暟", field: "RobotTaskTotalNum", type: "int" },
-        { title: "褰撳墠鎵规", field: "CurrentBatchIndex", type: "int" },
-        { title: "鎹㈢洏闃舵", field: "ChangePalletPhase", type: "int" },
+        { title: "浠诲姟鎬绘暟", field: "robotTaskTotalNum", type: "int" },
+        { title: "褰撳墠鎵规", field: "currentBatchIndex", type: "int" },
+        { title: "鎹㈢洏闃舵", field: "changePalletPhase", type: "int" },
       ],
       [
         {
           title: "鏄惁鎷嗙洏",
-          field: "IsSplitPallet",
+          field: "isSplitPallet",
           type: "checkbox",
         },
         {
           title: "鏄惁缁勭洏",
-          field: "IsGroupPallet",
+          field: "isGroupPallet",
           type: "checkbox",
         },
         {
           title: "鍋囩數鑺ā寮�",
-          field: "IsInFakeBatteryMode",
+          field: "isInFakeBatteryMode",
           type: "checkbox",
         },
       ],
       [
         {
           title: "鏄惁鎵爜NG",
-          field: "IsScanNG",
+          field: "isScanNG",
           type: "checkbox",
         },
         {
           title: "鐢佃姱鏄惁鍒颁綅",
-          field: "BatteryArrived",
+          field: "batteryArrived",
           type: "checkbox",
         },
         {
           title: "娑堟伅宸茶闃�",
-          field: "IsEventSubscribed",
+          field: "isEventSubscribed",
           type: "checkbox",
         },
       ],
@@ -140,31 +140,31 @@
     // 鎼滅储琛ㄥ崟閰嶇疆
     const searchFormOptions = ref([
       [
-        { title: "IP鍦板潃", field: "IPAddress", type: "string" },
-        { title: "褰撳墠鍔ㄤ綔", field: "CurrentAction", type: "string" },
-        { title: "杩愯鐘舵��", field: "OperStatus", type: "string" },
+        { title: "IP鍦板潃", field: "ipAddress", type: "string" },
+        { title: "褰撳墠鍔ㄤ綔", field: "currentAction", type: "string" },
+        { title: "杩愯鐘舵��", field: "operStatus", type: "string" },
       ],
     ]);
 
     // 鍒楀畾涔�
     const columns = ref([
-      { field: "IPAddress", title: "IP鍦板潃", type: "string", width: 140, align: "left" },
-      { field: "Version", title: "鐗堟湰", type: "int", width: 80, align: "left" },
-      { field: "RobotRunMode", title: "杩愯妯″紡", type: "int", width: 100, bind: { key: "robotRunMode", data: [] }, align: "center" },
-      { field: "RobotControlMode", title: "鎺у埗妯″紡", type: "int", width: 100, bind: { key: "robotControlMode", data: [] }, align: "center" },
-      { field: "RobotArmObject", title: "鎵嬭噦鐘舵��", type: "int", width: 90, bind: { key: "robotArmObject", data: [] }, align: "center" },
-      { field: "Homed", title: "鍥為浂鐘舵��", type: "string", width: 100, align: "center" },
-      { field: "CurrentAction", title: "褰撳墠鍔ㄤ綔", type: "string", width: 100, align: "center" },
-      { field: "OperStatus", title: "杩愯鐘舵��", type: "string", width: 100, align: "center" },
-      { field: "RobotTaskTotalNum", title: "浠诲姟鎬绘暟", type: "int", width: 90, align: "center" },
-      { field: "IsSplitPallet", title: "鎷嗙洏", type: "byte", width: 60, align: "center" },
-      { field: "IsGroupPallet", title: "缁勭洏", type: "byte", width: 60, align: "center" },
-      { field: "IsInFakeBatteryMode", title: "鍋囩數鑺�", type: "byte", width: 70, align: "center" },
-      { field: "CurrentBatchIndex", title: "鎵规", type: "int", width: 60, align: "center" },
-      { field: "ChangePalletPhase", title: "鎹㈢洏闃舵", type: "int", width: 80, align: "center" },
-      { field: "IsScanNG", title: "鎵爜NG", type: "byte", width: 80, align: "center" },
-      { field: "BatteryArrived", title: "鐢佃姱鍒颁綅", type: "byte", width: 80, align: "center" },
-      { field: "IsEventSubscribed", title: "宸茶闃�", type: "byte", width: 70, align: "center" },
+      { field: "ipAddress", title: "IP鍦板潃", type: "string", width: 140, align: "left" },
+      { field: "version", title: "鐗堟湰", type: "int", width: 80, align: "left" },
+      { field: "robotRunMode", title: "杩愯妯″紡", type: "int", width: 100, bind: { key: "robotRunMode", data: [{ key: 1, value: "鎵嬪姩妯″紡" },{ key: 2, value: "鑷姩妯″紡" }] }, align: "center" },
+      { field: "robotControlMode", title: "鎺у埗妯″紡", type: "int", width: 100, bind: { key: "robotControlMode", data: [{ key: 1, value: "瀹㈡埛绔帶鍒�" },{ key: 2, value: "鍏朵粬" }] }, align: "center" },
+      { field: "robotArmObject", title: "鎵嬭噦鐘舵��", type: "int", width: 90, bind: { key: "robotArmObject", data: [{ key: 0, value: "绌洪棽"}, { key: 1, value: "鏈夌墿鏂�" }] }, align: "center" },
+      { field: "homed", title: "鍥為浂鐘舵��", type: "string", width: 100, align: "center" },
+      { field: "currentAction", title: "褰撳墠鍔ㄤ綔", type: "string", width: 100, align: "center" },
+      { field: "operStatus", title: "杩愯鐘舵��", type: "string", width: 100, align: "center" },
+      { field: "robotTaskTotalNum", title: "浠诲姟鎬绘暟", type: "int", width: 90, align: "center" },
+      { field: "isSplitPallet", title: "鎷嗙洏", type: "byte", width: 60, align: "center" },
+      { field: "isGroupPallet", title: "缁勭洏", type: "byte", width: 60, align: "center" },
+      { field: "isInFakeBatteryMode", title: "鍋囩數鑺�", type: "byte", width: 70, align: "center" },
+      { field: "currentBatchIndex", title: "鎵规", type: "int", width: 60, align: "center" },
+      { field: "changePalletPhase", title: "鎹㈢洏闃舵", type: "int", width: 80, align: "center" },
+      { field: "isScanNG", title: "鎵爜NG", type: "byte", width: 80, align: "center" },
+      { field: "batteryArrived", title: "鐢佃姱鍒颁綅", type: "byte", width: 80, align: "center" },
+      { field: "isEventSubscribed", title: "宸茶闃�", type: "byte", width: 70, align: "center" },
     ]);
 
     const detail = ref({});
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Constants/StackerCraneConst.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Constants/StackerCraneConst.cs
index 468f2ae..12e5b7f 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Constants/StackerCraneConst.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Constants/StackerCraneConst.cs
@@ -15,6 +15,15 @@
         public const int EmptyPalletTaskType = 100;
 
         /// <summary>
+        /// 绌烘墭鐩樹换鍔$被鍨�
+        /// </summary>
+        /// <remarks>
+        /// 褰撲换鍔$被鍨嬩负绌烘墭鐩樺嚭搴�/鍏ュ簱鏃讹紝浣跨敤姝ょ壒娈婄被鍨嬪�间唬鏇垮師浠诲姟绫诲瀷銆�
+        /// 鐢ㄤ簬涓庣珯鍙拌矾鐢遍厤缃尮閰嶃��
+        /// </remarks>
+        public const int EmptyInPalletTaskType = 200;
+
+        /// <summary>
         /// 鐏鐘舵�佹甯�
         /// </summary>
         /// <remarks>
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs
index cd86fc7..815fabe 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs
@@ -32,7 +32,7 @@
                 return TaskTypeGroup.OutbondGroup;
             }
             // 灏濊瘯灏嗕换鍔$被鍨嬭浆鎹负TaskInStatusEnum鏋氫妇绫诲瀷锛屽鏋滄垚鍔燂紝杩斿洖InboundGroup
-            else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskTypeStr).ToString(), out result))
+            else if (!int.TryParse(Enum.Parse<TaskInboundTypeEnum>(taskTypeStr).ToString(), out result))
             {
                 return TaskTypeGroup.InboundGroup;
             }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
index 5e259a7..8951739 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
@@ -1,9 +1,4 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+锘縰sing System.ComponentModel;
 
 namespace WIDESEAWCS_Common.TaskEnum
 {
@@ -14,16 +9,19 @@
         /// </summary>
         [Description("鍏ュ簱")]
         Inbound = 200,
+
         /// <summary>
         /// 鐩樼偣鍏ュ簱
         /// </summary>
         [Description("鐩樼偣鍏ュ簱")]
         InInventory = 201,
+
         /// <summary>
         /// 鍒嗘嫞鍏ュ簱
         /// </summary>
         [Description("鍒嗘嫞鍏ュ簱")]
         InPick = 202,
+
         /// <summary>
         /// 璐ㄦ鍏ュ簱
         /// </summary>
@@ -34,7 +32,7 @@
         /// 绌虹鍏ュ簱
         /// </summary>
         [Description("绌虹鍏ュ簱")]
-        InEmpty = 600,
+        InEmpty = 204,
     }
 
     public enum TaskOutboundTypeEnum
@@ -44,16 +42,19 @@
         /// </summary>
         [Description("鍑哄簱")]
         Outbound = 100,
+
         /// <summary>
         /// 鐩樼偣鍑哄簱
         /// </summary>
         [Description("鐩樼偣鍑哄簱")]
         OutInventory = 101,
+
         /// <summary>
         /// 鍒嗘嫞鍑哄簱
         /// </summary>
         [Description("鍒嗘嫞鍑哄簱")]
         OutPick = 102,
+
         /// <summary>
         /// 璐ㄦ鍑哄簱
         /// </summary>
@@ -74,6 +75,7 @@
         /// </summary>
         [Description("搴撳唴绉诲簱")]
         Relocation = 300,
+
         /// <summary>
         /// 搴撳绉诲簱
         /// </summary>
@@ -118,16 +120,19 @@
         /// </summary>
         [Description("棰嗘枡鍑哄簱")]
         Outbound = 100,
+
         /// <summary>
         /// 鐩樼偣鍑哄簱
         /// </summary>
         [Description("鐩樼偣鍑哄簱")]
         OutInventory = 110,
+
         /// <summary>
         /// 鍒嗘嫞鍑哄簱
         /// </summary>
         [Description("鍒嗘嫞鍑哄簱")]
         OutPick = 120,
+
         /// <summary>
         /// 璐ㄦ鍑哄簱
         /// </summary>
@@ -163,16 +168,19 @@
         /// </summary>
         [Description("閲囪喘鍏ュ簱")]
         Inbound = 510,
+
         /// <summary>
         /// 鐩樼偣鍏ュ簱
         /// </summary>
         [Description("鐩樼偣鍏ュ簱")]
         InInventory = 520,
+
         /// <summary>
         /// 鍒嗘嫞鍏ュ簱
         /// </summary>
         [Description("鍒嗘嫞鍏ュ簱")]
         InPick = 530,
+
         /// <summary>
         /// 璐ㄦ鍏ュ簱
         /// </summary>
@@ -202,6 +210,5 @@
         /// </summary>
         [Description("宸烽亾鍐呯Щ搴�")]
         Relocation = 900
-
     }
-}
+}
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml
index 72b0ccc..7213e40 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml
@@ -4,13 +4,13 @@
 -->
 <Project>
   <PropertyGroup>
-    <DeleteExistingFiles>true</DeleteExistingFiles>
+    <DeleteExistingFiles>false</DeleteExistingFiles>
     <ExcludeApp_Data>false</ExcludeApp_Data>
     <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
-    <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>
+    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
     <LastUsedPlatform>Any CPU</LastUsedPlatform>
     <PublishProvider>FileSystem</PublishProvider>
-    <PublishUrl>bin\Debug\net6.0\publish\</PublishUrl>
+    <PublishUrl>E:\IISText\HuanAn\WCS</PublishUrl>
     <WebPublishMethod>FileSystem</WebPublishMethod>
     <_TargetId>Folder</_TargetId>
     <SiteUrlToLaunchAfterPublish />
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
index f2d2bbf..9e558aa 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -32,7 +32,7 @@
   //5.PostgreSQL
   "DBType": "SqlServer",
   //杩炴帴瀛楃涓�
-  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_ShanMei;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
+  "ConnectionString": "Data Source=192.168.60.30;Initial Catalog=WIDESEAWCS_ShanMei;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
   //"ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_ShanMei;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
 
   //璺ㄥ煙
@@ -54,7 +54,7 @@
   "ApiName": "WIDESEAWCS",
   "ExpMinutes": 120,
   "QuartzJobAutoStart": true,
-  "DBSeedEnable": true,
+  "DBSeedEnable": false,
   "QuartzDBSeedEnable": false,
   "LogDeubgEnable": false, //鏄惁璁板綍璋冭瘯鏃ュ織
   "PrintSql": false, //鎵撳嵃SQL璇彞
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/RobotStateRepository.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/RobotStateRepository.cs
index 012d9ad..66e8fe1 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/RobotStateRepository.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/RobotStateRepository.cs
@@ -1,6 +1,7 @@
 using Newtonsoft.Json;
 using SqlSugar;
 using WIDESEAWCS_Core.BaseRepository;
+using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_Model.Models;
 
@@ -49,7 +50,7 @@
 
             // 涔愯閿侊細WHERE IPAddress = @ip AND Version = @expectedVersion锛岀増鏈尮閰嶆墠鏇存柊
             var affectedRows = Db.Updateable<Dt_RobotState>(newState)
-                .Where(x => x.IPAddress == ipAddress && x.Version == expectedVersion)
+                .Where(x => x.IPAddress == ipAddress)
                 .ExecuteCommand();
 
             return affectedRows > 0;
@@ -126,7 +127,11 @@
                 CurrentBatchIndex = state.CurrentBatchIndex,
                 ChangePalletPhase = state.ChangePalletPhase,
                 IsScanNG = state.IsScanNG,
-                BatteryArrived = state.BatteryArrived
+                BatteryArrived = state.BatteryArrived,
+                CellBarcodeJson = state.CellBarcode.ToJson(),
+                LastPickPositionsJson = state.LastPickPositions.ToJson(),
+                CurrentTaskJson = state.CurrentTask.ToJson(),
+                LastPutPositionsJson = state.LastPutPositions.ToJson(),
             };
 
             // 搴忓垪鍖栧鏉傚璞′负 JSON
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs
index ef54770..9eb512b 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs
@@ -149,7 +149,7 @@
     public Dt_Task QueryManualInboundTask(string sourceAddress)
     {
         return BaseDal.QueryFirst(x =>
-            x.TaskType == (int)TaskInboundTypeEnum.Inbound &&
+            (x.TaskType == (int)TaskInboundTypeEnum.Inbound || x.TaskType == (int)TaskInboundTypeEnum.InEmpty) &&
             x.TaskStatus == (int)TaskInStatusEnum.InNew &&
             x.SourceAddress == sourceAddress);
     }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs
index e9cb3cc..c88e03c 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs
@@ -188,7 +188,7 @@
                                     {
                                         // 娌℃湁浠诲姟锛屽悜 WMS 璇锋眰鍑哄簱鎵樼洏浠诲姟
                                         var position = checkPalletPositions.FirstOrDefault(x => x.Code == childDeviceCode);
-                                        QuartzLogHelper.LogInfo(_logger, "Execute锛氭鏌ユ墭鐩樹綅缃� {ChildDeviceCode}锛岃姹俉MS鍑哄簱鎵樼洏浠诲姟", $"妫�鏌ユ墭鐩樹綅缃� {childDeviceCode}锛岃姹俉MS鍑哄簱鎵樼洏浠诲姟", conveyorLine.DeviceCode, childDeviceCode);
+                                        //QuartzLogHelper.LogInfo(_logger, "Execute锛氭鏌ユ墭鐩樹綅缃� {ChildDeviceCode}锛岃姹俉MS鍑哄簱鎵樼洏浠诲姟", $"妫�鏌ユ墭鐩樹綅缃� {childDeviceCode}锛岃姹俉MS鍑哄簱鎵樼洏浠诲姟", conveyorLine.DeviceCode, childDeviceCode);
 
                                         var responseResult = _httpClientHelper.Post<WebResponseContent>("GetOutBoundTrayTaskAsync", new CreateTaskDto()
                                         {
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ManualInbound/ManualInboundTaskHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ManualInbound/ManualInboundTaskHandler.cs
index 8c8886f..f97e8bf 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ManualInbound/ManualInboundTaskHandler.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ManualInbound/ManualInboundTaskHandler.cs
@@ -50,6 +50,8 @@
                 conveyorLine.SetValue(ConveyorLineDBNameNew.Source, short.Parse(task.SourceAddress ?? "0"), childDeviceCode);
                 // 鍐欏叆鐩爣鍦板潃
                 conveyorLine.SetValue(ConveyorLineDBNameNew.Target, short.Parse(task.NextAddress ?? "0"), childDeviceCode);
+                // 鍐欏叆鎵樼洏鍙�
+                conveyorLine.SetValue(ConveyorLineDBNameNew.Barcode, task.PalletCode, childDeviceCode);
 
                 // 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴闃舵
                 var updateResult = _taskService.UpdateTaskStatusToNext(task);
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Abstractions/IRobotMessageRouter.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Abstractions/IRobotMessageRouter.cs
index d5fe523..195a0aa 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Abstractions/IRobotMessageRouter.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Abstractions/IRobotMessageRouter.cs
@@ -16,6 +16,6 @@
         /// <param name="client">TCP 瀹㈡埛绔繛鎺�</param>
         /// <param name="state">鏈哄櫒浜哄綋鍓嶇姸鎬�</param>
         /// <returns>鍝嶅簲娑堟伅锛屽鏋滄棤闇�鍥炲鍒欒繑鍥� null</returns>
-        Task<string?> HandleMessageReceivedAsync(string message, bool isJson, TcpClient client, RobotSocketState state);
+        Task<string?> HandleMessageReceivedAsync(string message, bool isJson, TcpClient client);
     }
 }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Abstractions/IRobotNgLineCommandHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Abstractions/IRobotNgLineCommandHandler.cs
new file mode 100644
index 0000000..c3e1650
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Abstractions/IRobotNgLineCommandHandler.cs
@@ -0,0 +1,9 @@
+锘縰sing WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_Tasks.Workflow.Abstractions
+{
+    public interface IRobotNgLineCommandHandler
+    {
+        Task<bool> HandleAsync(string message, RobotSocketState state);
+    }
+}
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs
index 9bcf06b..e67abf1 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs
@@ -88,8 +88,14 @@
         /// <param name="client">TCP 瀹㈡埛绔繛鎺�</param>
         /// <param name="state">鏈哄櫒浜哄綋鍓嶇姸鎬�</param>
         /// <returns>鍝嶅簲娑堟伅锛屽鏋滄棤闇�鍥炲鍒欒繑鍥� null</returns>
-        public async Task<string?> HandleMessageReceivedAsync(string message, bool isJson, TcpClient client, RobotSocketState state)
+        public async Task<string?> HandleMessageReceivedAsync(string message, bool isJson, TcpClient client)
         {
+            var state = _stateManager.GetState(client.Client.RemoteEndPoint.ToString());
+            if(state.OperStatus == message)
+            {
+                // 澶勭悊鎴愬姛鍚庯紝灏嗗師娑堟伅鍥炲啓鍒板鎴风锛堜繚鎸佸師鏈夎涓猴級
+                await _socketClientGateway.SendMessageAsync(client, message);
+            }
             // 璁板綍鎺ユ敹鍒扮殑娑堟伅鏃ュ織
             _logger.LogInformation($"鎺ユ敹鍒板鎴风銆恵state.RobotCrane?.DeviceName}銆戝彂閫佹秷鎭�恵message}銆�");
             QuartzLogger.Info($"鎺ユ敹鍒板鎴风娑堟伅銆恵message}銆�", state.RobotCrane?.DeviceName);
@@ -110,9 +116,12 @@
             // 绠�鍗曞懡浠ゅ寘鎷細homing銆乭omed銆乺unning銆乸ausing銆乺unmode銆乧ontrolmode 绛�
             if (await _simpleCommandHandler.HandleAsync(messageLower, state))
             {
-                // 澶勭悊鎴愬姛鍚庯紝灏嗗師娑堟伅鍥炲啓鍒板鎴风锛堜繚鎸佸師鏈夎涓猴級
-                await _socketClientGateway.SendMessageAsync(client, message);
-                QuartzLogger.Info($"鍙戦�佹秷鎭細銆恵message}銆�", state.RobotCrane?.DeviceName);
+                if(messageLower != "batteryarrived")
+                {
+                    // 澶勭悊鎴愬姛鍚庯紝灏嗗師娑堟伅鍥炲啓鍒板鎴风锛堜繚鎸佸師鏈夎涓猴級
+                    await _socketClientGateway.SendMessageAsync(client, message);
+                    QuartzLogger.Info($"鍙戦�佹秷鎭細銆恵message}銆�", state.RobotCrane?.DeviceName);
+                }
 
                 // 瀹夊叏鏇存柊鐘舵�佸埌鏁版嵁搴�
                 _stateManager.TryUpdateStateSafely(state.IPAddress, state);
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
index e7edcb1..104a1bb 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
@@ -632,7 +632,7 @@
             //    }
             //}
 
-            return false;
+            return true;
         }
 
         /// <summary>
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotNgLineCommandHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotNgLineCommandHandler.cs
new file mode 100644
index 0000000..f836d83
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotNgLineCommandHandler.cs
@@ -0,0 +1,34 @@
+锘縰sing WIDESEAWCS_Model.Models;
+using WIDESEAWCS_Tasks.Workflow.Abstractions;
+
+namespace WIDESEAWCS_Tasks.Workflow
+{
+    public class RobotNgLineCommandHandler : IRobotNgLineCommandHandler
+    {
+        public Task<bool> HandleAsync(string message, RobotSocketState state)
+        {
+            // 浣跨敤 switch 琛ㄨ揪寮忚繘琛屾ā寮忓尮閰嶏紝鎻愰珮鍙鎬у拰鎬ц兘
+            switch (message)
+            {
+                case "PutNGFinished1":
+
+                    return Task.FromResult(true);
+
+                case "PutNGFinished2":
+
+                    return Task.FromResult(true);
+
+                case "PickNGFinished1":
+
+                    return Task.FromResult(true);
+
+                case "PickNGFinished2":
+
+                    return Task.FromResult(true);
+
+                default:
+                    return Task.FromResult(true);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs
index 10c82be..d7aa124 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs
@@ -126,7 +126,7 @@
                 var parts = message.Split(',');
 
                 // 妫�鏌ユ秷鎭牸寮忔槸鍚︽湁鏁堬細鑷冲皯瑕佹湁鍛戒护鍓嶇紑锛屼笖鐘舵�佷腑鏈夊綋鍓嶄换鍔�
-                if (parts.Length < 1 || state.CurrentTask == null)
+                if (parts.Length < 1)
                 {
                     return;
                 }
@@ -143,7 +143,7 @@
                     .ToArray();
 
                 // 浠庢暟鎹簱閲嶆柊鏌ヨ褰撳墠浠诲姟锛堢‘淇濊幏鍙栨渶鏂扮姸鎬侊級
-                var task = await _robotTaskService.Repository.QueryFirstAsync(x => x.RobotTaskId == state.CurrentTask.RobotTaskId);
+                var task = await _robotTaskService.Repository.QueryFirstAsync(x => x.RobotTaskState == TaskRobotStatusEnum.RobotExecuting.GetHashCode() && x.RobotRoadway == state.RobotCrane.DeviceName);
 
                 if (task != null)
                 {
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs
index f623791..767805f 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs
@@ -125,6 +125,11 @@
                     state.BatteryArrived = true;
                     return true;
 
+                // 鏄惁鐢佃姱鍒颁綅
+                case "batteryarrivedno":
+                    state.BatteryArrived = false;
+                    return true;
+
                 // ==================== 鍏ㄩ儴瀹屾垚鍛戒护 ====================
 
                 // 鍏ㄩ儴鍙栬揣瀹屾垚
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
index 0ac900b..2f516f6 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
@@ -112,7 +112,7 @@
             // 1. 杩愯妯″紡涓鸿嚜鍔紙2锛�
             // 2. 鎺у埗妯″紡涓哄鎴风鎺у埗锛�1锛�
             // 3. 杩愯鐘舵�佹槸 Running
-            if (latestState.RobotRunMode == 2 /*&& latestState.RobotControlMode == 1*/ && latestState.OperStatus == "Running" && (latestState.Homed == "Homed" || latestState.Homed.IsNullOrEmpty()))
+            if (latestState.RobotRunMode == 2 /*&& latestState.RobotControlMode == 1*/ /*&& latestState.OperStatus == "Running"*/ && (latestState.Homed == "Homed" || latestState.Homed.IsNullOrEmpty()))
             {
                 // ========== 鍙栬揣瀹屾垚鍚庣殑鏀捐揣澶勭悊 ==========
                 // 鏉′欢锛�
@@ -137,8 +137,8 @@
                 // - 浠诲姟鐘舵�佷负 RobotPutFinish 鎴栦笉鏄� RobotExecuting
                 else if ((latestState.CurrentAction == "PutFinished" || latestState.CurrentAction == "AllPutFinished" || latestState.CurrentAction.IsNullOrEmpty())
                     && (latestState.RobotArmObject.IsNullOrEmpty() || latestState.RobotArmObject == 0)
-                    && (task.RobotTaskState == TaskRobotStatusEnum.RobotPutFinish.GetHashCode()
-                    || task.RobotTaskState != TaskRobotStatusEnum.RobotExecuting.GetHashCode()))
+                    && (task.RobotTaskState == TaskRobotStatusEnum.RobotPutFinish.GetHashCode() || task.RobotTaskState != TaskRobotStatusEnum.RobotExecuting.GetHashCode())
+                    && latestState.BatteryArrived)
                 {
                     _logger.LogInformation("ExecuteAsync锛氭弧瓒冲彇璐ф潯浠讹紝寮�濮嬩笅鍙戝彇璐т换鍔★紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
                     QuartzLogger.Info($"ExecuteAsync锛氭弧瓒冲彇璐ф潯浠讹紝寮�濮嬩笅鍙戝彇璐т换鍔�", latestState.RobotCrane?.DeviceName ?? ipAddress);
@@ -312,7 +312,7 @@
         private async Task HandlePutFinishedStateAsync(Dt_RobotTask task, string ipAddress)
         {
             // 鑾峰彇鏈�鏂扮姸鎬�
-            var stateForUpdate = _stateManager.GetState(ipAddress);
+            RobotSocketState? stateForUpdate = _stateManager.GetState(ipAddress);
             if (stateForUpdate == null)
             {
                 _logger.LogWarning("HandlePutFinishedStateAsync锛氳幏鍙栫姸鎬佸け璐ワ紝IP: {IpAddress}", ipAddress);
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Messaging.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Messaging.cs
index 6a5fca3..62c05dd 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Messaging.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Messaging.cs
@@ -84,7 +84,7 @@
                             {
                                 // 鍒ゆ柇鏄惁涓� JSON 鏍煎紡
                                 bool isJsonFormat = TryParseJsonSilent(message);
-                                _ = MessageReceived.Invoke(message, isJsonFormat, client, robotCrane);
+                                _ = MessageReceived.Invoke(message, isJsonFormat, client);
                             }
                             catch { }
                         }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.cs
index 723464b..d23fe10 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.cs
@@ -148,7 +148,7 @@
         /// 褰撴湇鍔″櫒鎺ユ敹鍒版秷鎭椂瑙﹀彂銆�
         /// 鍙傛暟锛氭秷鎭唴瀹广�佹槸鍚� JSON 鏍煎紡銆乀CP 瀹㈡埛绔�佹満鍣ㄤ汉鐘舵��
         /// </remarks>
-        public event Func<string, bool, TcpClient, RobotSocketState, Task<string?>>? MessageReceived;
+        public event Func<string, bool, TcpClient, Task<string?>>? MessageReceived;
 
         /// <summary>
         /// 鏈哄櫒浜鸿繛鎺ユ柇寮�浜嬩欢
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs
index b3a4cff..3fdd873 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs
@@ -205,6 +205,10 @@
             {
                 taskType = StackerCraneConst.EmptyPalletTaskType;
             }
+            else if(task.TaskType == (int)TaskInboundTypeEnum.InEmpty)
+            {
+                taskType = StackerCraneConst.EmptyInPalletTaskType;
+            }
             else
                 taskType = task.TaskType;
 
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
index 3e48c96..bcb57da 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
@@ -109,7 +109,7 @@
             {
                 // 娌℃湁涓婁竴浠诲姟绫诲瀷锛屾煡璇㈡櫘閫氫换鍔�
                 candidateTask = _taskService.QueryStackerCraneTask(deviceCode);
-                QuartzLogHelper.LogDebug(_logger, "SelectTask锛氭煡璇㈡櫘閫氫换鍔★紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", $"鏌ヨ鏅�氫换鍔★紝璁惧: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum);
+                //QuartzLogHelper.LogDebug(_logger, "SelectTask锛氭煡璇㈡櫘閫氫换鍔★紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", $"鏌ヨ鏅�氫换鍔★紝璁惧: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum);
             }
             else if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
             {
@@ -117,19 +117,19 @@
                 candidateTask = _taskService.QueryStackerCraneInTask(deviceCode);
                 // 濡傛灉娌℃湁鍏ュ簱浠诲姟锛屽啀鏌ヤ竴涓嬪嚭搴撲换鍔�
                 candidateTask ??= _taskService.QueryStackerCraneOutTask(deviceCode);
-                QuartzLogHelper.LogDebug(_logger, "SelectTask锛氬嚭搴撳悗浼樺厛鏌ュ叆搴擄紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", $"鍑哄簱鍚庝紭鍏堟煡鍏ュ簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum);
+                //QuartzLogHelper.LogDebug(_logger, "SelectTask锛氬嚭搴撳悗浼樺厛鏌ュ叆搴擄紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", $"鍑哄簱鍚庝紭鍏堟煡鍏ュ簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum);
             }
             else
             {
                 // 涓婁竴浠诲姟鏄叆搴擄紙闈炲嚭搴擄級锛屼紭鍏堟煡鍑哄簱浠诲姟
                 candidateTask = _taskService.QueryStackerCraneOutTask(deviceCode);
-                QuartzLogHelper.LogDebug(_logger, "SelectTask锛氬叆搴撳悗浼樺厛鏌ュ嚭搴擄紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", $"鍏ュ簱鍚庝紭鍏堟煡鍑哄簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum);
+                //QuartzLogHelper.LogDebug(_logger, "SelectTask锛氬叆搴撳悗浼樺厛鏌ュ嚭搴擄紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", $"鍏ュ簱鍚庝紭鍏堟煡鍑哄簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum);
             }
 
             // 濡傛灉娌℃湁鍊欓�変换鍔★紝杩斿洖 null
             if (candidateTask == null)
             {
-                QuartzLogHelper.LogDebug(_logger, "SelectTask锛氭病鏈夊�欓�変换鍔★紝璁惧: {DeviceCode}", $"娌℃湁鍊欓�変换鍔★紝璁惧: {deviceCode}", deviceCode, deviceCode);
+                //QuartzLogHelper.LogDebug(_logger, "SelectTask锛氭病鏈夊�欓�変换鍔★紝璁惧: {DeviceCode}", $"娌℃湁鍊欓�変换鍔★紝璁惧: {deviceCode}", deviceCode, deviceCode);
                 return null;
             }
 
diff --git a/Code/WMS/WIDESEA_WMSClient/src/api/http.js b/Code/WMS/WIDESEA_WMSClient/src/api/http.js
index 0a82b23..30892ab 100644
--- a/Code/WMS/WIDESEA_WMSClient/src/api/http.js
+++ b/Code/WMS/WIDESEA_WMSClient/src/api/http.js
@@ -12,7 +12,7 @@
 let loadingInstance;
 let loadingStatus = false;
 if (process.env.NODE_ENV == 'development') {
-    axios.defaults.baseURL = window.webConfig.webApiBaseUrl;
+    axios.defaults.baseURL = 'http://127.0.0.1:9291/';
 }
 else if (process.env.NODE_ENV == 'debug') {
     axios.defaults.baseURL = window.webConfig.webApiBaseUrl;
diff --git a/Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/addManualTask.vue b/Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/addManualTask.vue
index 980044b..23327d3 100644
--- a/Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/addManualTask.vue
+++ b/Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/addManualTask.vue
@@ -1,16 +1,11 @@
 <template>
   <div>
-    <vol-box
-      v-model="showBox"
-      :lazy="true"
-      width="500px"
-      :padding="15"
-      title="鎵嬪姩鍒涘缓浠诲姟"
-    >
+    <vol-box v-model="showBox" :lazy="true" width="500px" :padding="15" title="鎵嬪姩鍒涘缓浠诲姟">
       <el-form :model="formData" ref="form" label-width="100px">
         <el-form-item label="浠诲姟绫诲瀷" prop="taskType" required>
           <el-select v-model="formData.taskType" placeholder="璇烽�夋嫨浠诲姟绫诲瀷">
             <el-option label="鍏ュ簱" value="鍏ュ簱"></el-option>
+            <el-option label="绌虹鍏ュ簱" value="绌虹鍏ュ簱"></el-option>
             <el-option label="鍑哄簱" value="鍑哄簱"></el-option>
             <el-option label="绉诲簱" value="绉诲簱"></el-option>
           </el-select>
diff --git a/Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/gridBodyExtension.vue b/Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/gridBodyExtension.vue
index 61a1d1c..25c9793 100644
--- a/Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/gridBodyExtension.vue
+++ b/Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/gridBodyExtension.vue
@@ -6,6 +6,7 @@
         <el-form-item label="浠诲姟绫诲瀷" prop="taskType" required>
           <el-select v-model="manualFormData.taskType" placeholder="璇烽�夋嫨浠诲姟绫诲瀷">
             <el-option label="鍏ュ簱" value="鍏ュ簱"></el-option>
+            <el-option label="绌虹鍏ュ簱" value="绌虹鍏ュ簱"></el-option>
             <el-option label="鍑哄簱" value="鍑哄簱"></el-option>
             <el-option label="绉诲簱" value="绉诲簱"></el-option>
           </el-select>
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/.env.development b/Code/WMS/WIDESEA_WMSClient_Vben/.env.development
deleted file mode 100644
index 0b322fb..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/.env.development
+++ /dev/null
@@ -1 +0,0 @@
-VITE_API_BASE_URL=http://localhost:9291
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/index.html b/Code/WMS/WIDESEA_WMSClient_Vben/index.html
deleted file mode 100644
index d4c7c50..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-  <head>
-    <meta charset="UTF-8" />
-    <link rel="icon" type="image/svg+xml" href="/favicon.ico" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>WMS绠$悊绯荤粺</title>
-  </head>
-  <body>
-    <div id="app"></div>
-    <script type="module" src="/src/main.ts"></script>
-  </body>
-</html>
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/package-lock.json b/Code/WMS/WIDESEA_WMSClient_Vben/package-lock.json
deleted file mode 100644
index 99c69ac..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/package-lock.json
+++ /dev/null
@@ -1,1929 +0,0 @@
-{
-  "name": "widesea-wms-client-vben",
-  "version": "1.0.0",
-  "lockfileVersion": 3,
-  "requires": true,
-  "packages": {
-    "": {
-      "name": "widesea-wms-client-vben",
-      "version": "1.0.0",
-      "dependencies": {
-        "@element-plus/icons-vue": "^2.3.1",
-        "axios": "^1.6.7",
-        "element-plus": "^2.5.6",
-        "pinia": "^2.1.7",
-        "vue": "^3.4.21",
-        "vue-router": "^4.3.0"
-      },
-      "devDependencies": {
-        "@vitejs/plugin-vue": "^5.0.4",
-        "typescript": "^5.4.2",
-        "vite": "^5.1.6",
-        "vue-tsc": "^2.0.6"
-      }
-    },
-    "node_modules/@babel/helper-string-parser": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
-      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.28.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
-      "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/parser": {
-      "version": "7.29.2",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz",
-      "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.29.0"
-      },
-      "bin": {
-        "parser": "bin/babel-parser.js"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@babel/types": {
-      "version": "7.29.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
-      "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-string-parser": "^7.27.1",
-        "@babel/helper-validator-identifier": "^7.28.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@ctrl/tinycolor": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz",
-      "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@element-plus/icons-vue": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz",
-      "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==",
-      "license": "MIT",
-      "peerDependencies": {
-        "vue": "^3.2.0"
-      }
-    },
-    "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
-      "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "aix"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-arm": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
-      "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
-      "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
-      "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
-      "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/darwin-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
-      "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
-      "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
-      "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-arm": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
-      "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
-      "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-ia32": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
-      "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-loong64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
-      "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
-      "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
-      "cpu": [
-        "mips64el"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
-      "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
-      "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-s390x": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
-      "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
-      "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
-      "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
-      "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/sunos-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
-      "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
-      "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-ia32": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
-      "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
-      "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@floating-ui/core": {
-      "version": "1.7.5",
-      "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz",
-      "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@floating-ui/utils": "^0.2.11"
-      }
-    },
-    "node_modules/@floating-ui/dom": {
-      "version": "1.7.6",
-      "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz",
-      "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@floating-ui/core": "^1.7.5",
-        "@floating-ui/utils": "^0.2.11"
-      }
-    },
-    "node_modules/@floating-ui/utils": {
-      "version": "0.2.11",
-      "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz",
-      "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==",
-      "license": "MIT"
-    },
-    "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.5.5",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
-      "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
-      "license": "MIT"
-    },
-    "node_modules/@popperjs/core": {
-      "name": "@sxzz/popperjs-es",
-      "version": "2.11.8",
-      "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz",
-      "integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==",
-      "license": "MIT",
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/popperjs"
-      }
-    },
-    "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz",
-      "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz",
-      "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz",
-      "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz",
-      "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-arm64": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz",
-      "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-x64": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz",
-      "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz",
-      "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz",
-      "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz",
-      "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz",
-      "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-loong64-gnu": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz",
-      "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-loong64-musl": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz",
-      "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-ppc64-gnu": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz",
-      "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-ppc64-musl": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz",
-      "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz",
-      "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-riscv64-musl": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz",
-      "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz",
-      "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz",
-      "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz",
-      "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-openbsd-x64": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz",
-      "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-openharmony-arm64": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz",
-      "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "openharmony"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz",
-      "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz",
-      "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-x64-gnu": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz",
-      "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz",
-      "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@types/estree": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
-      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/lodash": {
-      "version": "4.17.24",
-      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz",
-      "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==",
-      "license": "MIT"
-    },
-    "node_modules/@types/lodash-es": {
-      "version": "4.17.12",
-      "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
-      "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@types/lodash": "*"
-      }
-    },
-    "node_modules/@types/web-bluetooth": {
-      "version": "0.0.20",
-      "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
-      "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==",
-      "license": "MIT"
-    },
-    "node_modules/@vitejs/plugin-vue": {
-      "version": "5.2.4",
-      "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
-      "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.0.0 || >=20.0.0"
-      },
-      "peerDependencies": {
-        "vite": "^5.0.0 || ^6.0.0",
-        "vue": "^3.2.25"
-      }
-    },
-    "node_modules/@volar/language-core": {
-      "version": "2.4.15",
-      "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz",
-      "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@volar/source-map": "2.4.15"
-      }
-    },
-    "node_modules/@volar/source-map": {
-      "version": "2.4.15",
-      "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz",
-      "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@volar/typescript": {
-      "version": "2.4.15",
-      "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz",
-      "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@volar/language-core": "2.4.15",
-        "path-browserify": "^1.0.1",
-        "vscode-uri": "^3.0.8"
-      }
-    },
-    "node_modules/@vue/compiler-core": {
-      "version": "3.5.32",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.32.tgz",
-      "integrity": "sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/parser": "^7.29.2",
-        "@vue/shared": "3.5.32",
-        "entities": "^7.0.1",
-        "estree-walker": "^2.0.2",
-        "source-map-js": "^1.2.1"
-      }
-    },
-    "node_modules/@vue/compiler-dom": {
-      "version": "3.5.32",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.32.tgz",
-      "integrity": "sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==",
-      "license": "MIT",
-      "dependencies": {
-        "@vue/compiler-core": "3.5.32",
-        "@vue/shared": "3.5.32"
-      }
-    },
-    "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.32",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.32.tgz",
-      "integrity": "sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/parser": "^7.29.2",
-        "@vue/compiler-core": "3.5.32",
-        "@vue/compiler-dom": "3.5.32",
-        "@vue/compiler-ssr": "3.5.32",
-        "@vue/shared": "3.5.32",
-        "estree-walker": "^2.0.2",
-        "magic-string": "^0.30.21",
-        "postcss": "^8.5.8",
-        "source-map-js": "^1.2.1"
-      }
-    },
-    "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.32",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.32.tgz",
-      "integrity": "sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==",
-      "license": "MIT",
-      "dependencies": {
-        "@vue/compiler-dom": "3.5.32",
-        "@vue/shared": "3.5.32"
-      }
-    },
-    "node_modules/@vue/compiler-vue2": {
-      "version": "2.7.16",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz",
-      "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "de-indent": "^1.0.2",
-        "he": "^1.2.0"
-      }
-    },
-    "node_modules/@vue/devtools-api": {
-      "version": "6.6.4",
-      "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
-      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
-      "license": "MIT"
-    },
-    "node_modules/@vue/language-core": {
-      "version": "2.2.12",
-      "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz",
-      "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@volar/language-core": "2.4.15",
-        "@vue/compiler-dom": "^3.5.0",
-        "@vue/compiler-vue2": "^2.7.16",
-        "@vue/shared": "^3.5.0",
-        "alien-signals": "^1.0.3",
-        "minimatch": "^9.0.3",
-        "muggle-string": "^0.4.1",
-        "path-browserify": "^1.0.1"
-      },
-      "peerDependencies": {
-        "typescript": "*"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@vue/reactivity": {
-      "version": "3.5.32",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.32.tgz",
-      "integrity": "sha512-/ORasxSGvZ6MN5gc+uE364SxFdJ0+WqVG0CENXaGW58TOCdrAW76WWaplDtECeS1qphvtBZtR+3/o1g1zL4xPQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@vue/shared": "3.5.32"
-      }
-    },
-    "node_modules/@vue/runtime-core": {
-      "version": "3.5.32",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.32.tgz",
-      "integrity": "sha512-pDrXCejn4UpFDFmMd27AcJEbHaLemaE5o4pbb7sLk79SRIhc6/t34BQA7SGNgYtbMnvbF/HHOftYBgFJtUoJUQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@vue/reactivity": "3.5.32",
-        "@vue/shared": "3.5.32"
-      }
-    },
-    "node_modules/@vue/runtime-dom": {
-      "version": "3.5.32",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.32.tgz",
-      "integrity": "sha512-1CDVv7tv/IV13V8Nip1k/aaObVbWqRlVCVezTwx3K07p7Vxossp5JU1dcPNhJk3w347gonIUT9jQOGutyJrSVQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@vue/reactivity": "3.5.32",
-        "@vue/runtime-core": "3.5.32",
-        "@vue/shared": "3.5.32",
-        "csstype": "^3.2.3"
-      }
-    },
-    "node_modules/@vue/server-renderer": {
-      "version": "3.5.32",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.32.tgz",
-      "integrity": "sha512-IOjm2+JQwRFS7W28HNuJeXQle9KdZbODFY7hFGVtnnghF51ta20EWAZJHX+zLGtsHhaU6uC9BGPV52KVpYryMQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@vue/compiler-ssr": "3.5.32",
-        "@vue/shared": "3.5.32"
-      },
-      "peerDependencies": {
-        "vue": "3.5.32"
-      }
-    },
-    "node_modules/@vue/shared": {
-      "version": "3.5.32",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.32.tgz",
-      "integrity": "sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==",
-      "license": "MIT"
-    },
-    "node_modules/@vueuse/core": {
-      "version": "12.0.0",
-      "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.0.0.tgz",
-      "integrity": "sha512-C12RukhXiJCbx4MGhjmd/gH52TjJsc3G0E0kQj/kb19H3Nt6n1CA4DRWuTdWWcaFRdlTe0npWDS942mvacvNBw==",
-      "license": "MIT",
-      "dependencies": {
-        "@types/web-bluetooth": "^0.0.20",
-        "@vueuse/metadata": "12.0.0",
-        "@vueuse/shared": "12.0.0",
-        "vue": "^3.5.13"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      }
-    },
-    "node_modules/@vueuse/metadata": {
-      "version": "12.0.0",
-      "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.0.0.tgz",
-      "integrity": "sha512-Yzimd1D3sjxTDOlF05HekU5aSGdKjxhuhRFHA7gDWLn57PRbBIh+SF5NmjhJ0WRgF3my7T8LBucyxdFJjIfRJQ==",
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      }
-    },
-    "node_modules/@vueuse/shared": {
-      "version": "12.0.0",
-      "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.0.0.tgz",
-      "integrity": "sha512-3i6qtcq2PIio5i/vVYidkkcgvmTjCqrf26u+Fd4LhnbBmIT6FN8y6q/GJERp8lfcB9zVEfjdV0Br0443qZuJpw==",
-      "license": "MIT",
-      "dependencies": {
-        "vue": "^3.5.13"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      }
-    },
-    "node_modules/alien-signals": {
-      "version": "1.0.13",
-      "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz",
-      "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/async-validator": {
-      "version": "4.2.5",
-      "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
-      "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
-      "license": "MIT"
-    },
-    "node_modules/asynckit": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
-      "license": "MIT"
-    },
-    "node_modules/axios": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
-      "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
-      "license": "MIT",
-      "dependencies": {
-        "follow-redirects": "^1.15.11",
-        "form-data": "^4.0.5",
-        "proxy-from-env": "^2.1.0"
-      }
-    },
-    "node_modules/balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/brace-expansion": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz",
-      "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/call-bind-apply-helpers": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
-      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "function-bind": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/combined-stream": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
-      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-      "license": "MIT",
-      "dependencies": {
-        "delayed-stream": "~1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/csstype": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
-      "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
-      "license": "MIT"
-    },
-    "node_modules/dayjs": {
-      "version": "1.11.20",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz",
-      "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==",
-      "license": "MIT"
-    },
-    "node_modules/de-indent": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
-      "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/dunder-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
-      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "gopd": "^1.2.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/element-plus": {
-      "version": "2.13.7",
-      "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.13.7.tgz",
-      "integrity": "sha512-XdHATFZOyzVFL1DaHQ90IOJQSg9UnSAV+bhDW+YB5UoZ0Hxs50mwqjqfwXkuwpSag+VXXizVcErBR6Movo5daw==",
-      "license": "MIT",
-      "dependencies": {
-        "@ctrl/tinycolor": "^4.2.0",
-        "@element-plus/icons-vue": "^2.3.2",
-        "@floating-ui/dom": "^1.0.1",
-        "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
-        "@types/lodash": "^4.17.20",
-        "@types/lodash-es": "^4.17.12",
-        "@vueuse/core": "12.0.0",
-        "async-validator": "^4.2.5",
-        "dayjs": "^1.11.19",
-        "lodash": "^4.17.23",
-        "lodash-es": "^4.17.23",
-        "lodash-unified": "^1.0.3",
-        "memoize-one": "^6.0.0",
-        "normalize-wheel-es": "^1.2.0",
-        "vue-component-type-helpers": "^3.2.4"
-      },
-      "peerDependencies": {
-        "vue": "^3.3.0"
-      }
-    },
-    "node_modules/entities": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
-      "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
-    "node_modules/es-define-property": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
-      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-errors": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
-      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-object-atoms": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
-      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-set-tostringtag": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
-      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.6",
-        "has-tostringtag": "^1.0.2",
-        "hasown": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/esbuild": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
-      "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
-      "dev": true,
-      "hasInstallScript": true,
-      "license": "MIT",
-      "bin": {
-        "esbuild": "bin/esbuild"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.21.5",
-        "@esbuild/android-arm": "0.21.5",
-        "@esbuild/android-arm64": "0.21.5",
-        "@esbuild/android-x64": "0.21.5",
-        "@esbuild/darwin-arm64": "0.21.5",
-        "@esbuild/darwin-x64": "0.21.5",
-        "@esbuild/freebsd-arm64": "0.21.5",
-        "@esbuild/freebsd-x64": "0.21.5",
-        "@esbuild/linux-arm": "0.21.5",
-        "@esbuild/linux-arm64": "0.21.5",
-        "@esbuild/linux-ia32": "0.21.5",
-        "@esbuild/linux-loong64": "0.21.5",
-        "@esbuild/linux-mips64el": "0.21.5",
-        "@esbuild/linux-ppc64": "0.21.5",
-        "@esbuild/linux-riscv64": "0.21.5",
-        "@esbuild/linux-s390x": "0.21.5",
-        "@esbuild/linux-x64": "0.21.5",
-        "@esbuild/netbsd-x64": "0.21.5",
-        "@esbuild/openbsd-x64": "0.21.5",
-        "@esbuild/sunos-x64": "0.21.5",
-        "@esbuild/win32-arm64": "0.21.5",
-        "@esbuild/win32-ia32": "0.21.5",
-        "@esbuild/win32-x64": "0.21.5"
-      }
-    },
-    "node_modules/estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-      "license": "MIT"
-    },
-    "node_modules/follow-redirects": {
-      "version": "1.16.0",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
-      "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://github.com/sponsors/RubenVerborgh"
-        }
-      ],
-      "license": "MIT",
-      "engines": {
-        "node": ">=4.0"
-      },
-      "peerDependenciesMeta": {
-        "debug": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/form-data": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
-      "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
-      "license": "MIT",
-      "dependencies": {
-        "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.8",
-        "es-set-tostringtag": "^2.1.0",
-        "hasown": "^2.0.2",
-        "mime-types": "^2.1.12"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/fsevents": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
-      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-      "dev": true,
-      "hasInstallScript": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
-    "node_modules/function-bind": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-intrinsic": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
-      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.2",
-        "es-define-property": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.1.1",
-        "function-bind": "^1.1.2",
-        "get-proto": "^1.0.1",
-        "gopd": "^1.2.0",
-        "has-symbols": "^1.1.0",
-        "hasown": "^2.0.2",
-        "math-intrinsics": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
-      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
-      "license": "MIT",
-      "dependencies": {
-        "dunder-proto": "^1.0.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/gopd": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
-      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-symbols": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
-      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-tostringtag": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
-      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
-      "license": "MIT",
-      "dependencies": {
-        "has-symbols": "^1.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/hasown": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
-      "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
-      "license": "MIT",
-      "dependencies": {
-        "function-bind": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/he": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
-      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "he": "bin/he"
-      }
-    },
-    "node_modules/lodash": {
-      "version": "4.18.1",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
-      "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
-      "license": "MIT"
-    },
-    "node_modules/lodash-es": {
-      "version": "4.18.1",
-      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
-      "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
-      "license": "MIT"
-    },
-    "node_modules/lodash-unified": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz",
-      "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
-      "license": "MIT",
-      "peerDependencies": {
-        "@types/lodash-es": "*",
-        "lodash": "*",
-        "lodash-es": "*"
-      }
-    },
-    "node_modules/magic-string": {
-      "version": "0.30.21",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
-      "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.5.5"
-      }
-    },
-    "node_modules/math-intrinsics": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
-      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/memoize-one": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
-      "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
-      "license": "MIT"
-    },
-    "node_modules/mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mime-types": {
-      "version": "2.1.35",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "license": "MIT",
-      "dependencies": {
-        "mime-db": "1.52.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/minimatch": {
-      "version": "9.0.9",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
-      "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/muggle-string": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
-      "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/nanoid": {
-      "version": "3.3.11",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
-      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "license": "MIT",
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
-      "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-      }
-    },
-    "node_modules/normalize-wheel-es": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
-      "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==",
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/path-browserify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
-      "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/picocolors": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
-      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
-      "license": "ISC"
-    },
-    "node_modules/pinia": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz",
-      "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==",
-      "license": "MIT",
-      "dependencies": {
-        "@vue/devtools-api": "^6.6.3",
-        "vue-demi": "^0.14.10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/posva"
-      },
-      "peerDependencies": {
-        "typescript": ">=4.4.4",
-        "vue": "^2.7.0 || ^3.5.11"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/postcss": {
-      "version": "8.5.10",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz",
-      "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/postcss"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "nanoid": "^3.3.11",
-        "picocolors": "^1.1.1",
-        "source-map-js": "^1.2.1"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      }
-    },
-    "node_modules/proxy-from-env": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
-      "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/rollup": {
-      "version": "4.60.2",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz",
-      "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree": "1.0.8"
-      },
-      "bin": {
-        "rollup": "dist/bin/rollup"
-      },
-      "engines": {
-        "node": ">=18.0.0",
-        "npm": ">=8.0.0"
-      },
-      "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.60.2",
-        "@rollup/rollup-android-arm64": "4.60.2",
-        "@rollup/rollup-darwin-arm64": "4.60.2",
-        "@rollup/rollup-darwin-x64": "4.60.2",
-        "@rollup/rollup-freebsd-arm64": "4.60.2",
-        "@rollup/rollup-freebsd-x64": "4.60.2",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.60.2",
-        "@rollup/rollup-linux-arm-musleabihf": "4.60.2",
-        "@rollup/rollup-linux-arm64-gnu": "4.60.2",
-        "@rollup/rollup-linux-arm64-musl": "4.60.2",
-        "@rollup/rollup-linux-loong64-gnu": "4.60.2",
-        "@rollup/rollup-linux-loong64-musl": "4.60.2",
-        "@rollup/rollup-linux-ppc64-gnu": "4.60.2",
-        "@rollup/rollup-linux-ppc64-musl": "4.60.2",
-        "@rollup/rollup-linux-riscv64-gnu": "4.60.2",
-        "@rollup/rollup-linux-riscv64-musl": "4.60.2",
-        "@rollup/rollup-linux-s390x-gnu": "4.60.2",
-        "@rollup/rollup-linux-x64-gnu": "4.60.2",
-        "@rollup/rollup-linux-x64-musl": "4.60.2",
-        "@rollup/rollup-openbsd-x64": "4.60.2",
-        "@rollup/rollup-openharmony-arm64": "4.60.2",
-        "@rollup/rollup-win32-arm64-msvc": "4.60.2",
-        "@rollup/rollup-win32-ia32-msvc": "4.60.2",
-        "@rollup/rollup-win32-x64-gnu": "4.60.2",
-        "@rollup/rollup-win32-x64-msvc": "4.60.2",
-        "fsevents": "~2.3.2"
-      }
-    },
-    "node_modules/source-map-js": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
-      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
-      "license": "BSD-3-Clause",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/typescript": {
-      "version": "5.9.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
-      "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
-      "devOptional": true,
-      "license": "Apache-2.0",
-      "bin": {
-        "tsc": "bin/tsc",
-        "tsserver": "bin/tsserver"
-      },
-      "engines": {
-        "node": ">=14.17"
-      }
-    },
-    "node_modules/vite": {
-      "version": "5.4.21",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
-      "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "esbuild": "^0.21.3",
-        "postcss": "^8.4.43",
-        "rollup": "^4.20.0"
-      },
-      "bin": {
-        "vite": "bin/vite.js"
-      },
-      "engines": {
-        "node": "^18.0.0 || >=20.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/vitejs/vite?sponsor=1"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.3"
-      },
-      "peerDependencies": {
-        "@types/node": "^18.0.0 || >=20.0.0",
-        "less": "*",
-        "lightningcss": "^1.21.0",
-        "sass": "*",
-        "sass-embedded": "*",
-        "stylus": "*",
-        "sugarss": "*",
-        "terser": "^5.4.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/node": {
-          "optional": true
-        },
-        "less": {
-          "optional": true
-        },
-        "lightningcss": {
-          "optional": true
-        },
-        "sass": {
-          "optional": true
-        },
-        "sass-embedded": {
-          "optional": true
-        },
-        "stylus": {
-          "optional": true
-        },
-        "sugarss": {
-          "optional": true
-        },
-        "terser": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vscode-uri": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
-      "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/vue": {
-      "version": "3.5.32",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.32.tgz",
-      "integrity": "sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==",
-      "license": "MIT",
-      "dependencies": {
-        "@vue/compiler-dom": "3.5.32",
-        "@vue/compiler-sfc": "3.5.32",
-        "@vue/runtime-dom": "3.5.32",
-        "@vue/server-renderer": "3.5.32",
-        "@vue/shared": "3.5.32"
-      },
-      "peerDependencies": {
-        "typescript": "*"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vue-component-type-helpers": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-3.2.7.tgz",
-      "integrity": "sha512-+gPp5YGmhfsj1IN+xUo7y0fb4clfnOiiUA39y07yW1VzCRjzVgwLbtmdWlghh7mXrPsEaYc7rrIir/HT6C8vYQ==",
-      "license": "MIT"
-    },
-    "node_modules/vue-demi": {
-      "version": "0.14.10",
-      "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
-      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
-      "hasInstallScript": true,
-      "license": "MIT",
-      "bin": {
-        "vue-demi-fix": "bin/vue-demi-fix.js",
-        "vue-demi-switch": "bin/vue-demi-switch.js"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      },
-      "peerDependencies": {
-        "@vue/composition-api": "^1.0.0-rc.1",
-        "vue": "^3.0.0-0 || ^2.6.0"
-      },
-      "peerDependenciesMeta": {
-        "@vue/composition-api": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vue-router": {
-      "version": "4.6.4",
-      "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz",
-      "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==",
-      "license": "MIT",
-      "dependencies": {
-        "@vue/devtools-api": "^6.6.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/posva"
-      },
-      "peerDependencies": {
-        "vue": "^3.5.0"
-      }
-    },
-    "node_modules/vue-tsc": {
-      "version": "2.2.12",
-      "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz",
-      "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@volar/typescript": "2.4.15",
-        "@vue/language-core": "2.2.12"
-      },
-      "bin": {
-        "vue-tsc": "bin/vue-tsc.js"
-      },
-      "peerDependencies": {
-        "typescript": ">=5.0.0"
-      }
-    }
-  }
-}
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/package.json b/Code/WMS/WIDESEA_WMSClient_Vben/package.json
deleted file mode 100644
index 9dc9179..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/package.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "name": "widesea-wms-client-vben",
-  "version": "1.0.0",
-  "private": true,
-  "type": "module",
-  "scripts": {
-    "dev": "vite",
-    "build": "vite build",
-    "preview": "vite preview"
-  },
-  "dependencies": {
-    "@element-plus/icons-vue": "^2.3.1",
-    "axios": "^1.6.7",
-    "element-plus": "^2.5.6",
-    "pinia": "^2.1.7",
-    "vue": "^3.4.21",
-    "vue-router": "^4.3.0"
-  },
-  "devDependencies": {
-    "@vitejs/plugin-vue": "^5.0.4",
-    "typescript": "^5.4.2",
-    "vite": "^5.1.6",
-    "vue-tsc": "^2.0.6"
-  }
-}
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/pnpm-lock.yaml b/Code/WMS/WIDESEA_WMSClient_Vben/pnpm-lock.yaml
deleted file mode 100644
index 35beac5..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/pnpm-lock.yaml
+++ /dev/null
@@ -1,1297 +0,0 @@
-lockfileVersion: '9.0'
-
-settings:
-  autoInstallPeers: true
-  excludeLinksFromLockfile: false
-
-importers:
-
-  .:
-    dependencies:
-      '@element-plus/icons-vue':
-        specifier: ^2.3.1
-        version: 2.3.2(vue@3.5.32(typescript@5.9.3))
-      axios:
-        specifier: ^1.6.7
-        version: 1.15.0
-      element-plus:
-        specifier: ^2.5.6
-        version: 2.13.7(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3))
-      pinia:
-        specifier: ^2.1.7
-        version: 2.3.1(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3))
-      vue:
-        specifier: ^3.4.21
-        version: 3.5.32(typescript@5.9.3)
-      vue-router:
-        specifier: ^4.3.0
-        version: 4.6.4(vue@3.5.32(typescript@5.9.3))
-    devDependencies:
-      '@vitejs/plugin-vue':
-        specifier: ^5.0.4
-        version: 5.2.4(vite@5.4.21)(vue@3.5.32(typescript@5.9.3))
-      typescript:
-        specifier: ^5.4.2
-        version: 5.9.3
-      vite:
-        specifier: ^5.1.6
-        version: 5.4.21
-      vue-tsc:
-        specifier: ^2.0.6
-        version: 2.2.12(typescript@5.9.3)
-
-packages:
-
-  '@babel/helper-string-parser@7.27.1':
-    resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-validator-identifier@7.28.5':
-    resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/parser@7.29.2':
-    resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
-    engines: {node: '>=6.0.0'}
-    hasBin: true
-
-  '@babel/types@7.29.0':
-    resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
-    engines: {node: '>=6.9.0'}
-
-  '@ctrl/tinycolor@4.2.0':
-    resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==}
-    engines: {node: '>=14'}
-
-  '@element-plus/icons-vue@2.3.2':
-    resolution: {integrity: sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==}
-    peerDependencies:
-      vue: ^3.2.0
-
-  '@esbuild/aix-ppc64@0.21.5':
-    resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [aix]
-
-  '@esbuild/android-arm64@0.21.5':
-    resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [android]
-
-  '@esbuild/android-arm@0.21.5':
-    resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [android]
-
-  '@esbuild/android-x64@0.21.5':
-    resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [android]
-
-  '@esbuild/darwin-arm64@0.21.5':
-    resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@esbuild/darwin-x64@0.21.5':
-    resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [darwin]
-
-  '@esbuild/freebsd-arm64@0.21.5':
-    resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [freebsd]
-
-  '@esbuild/freebsd-x64@0.21.5':
-    resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@esbuild/linux-arm64@0.21.5':
-    resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@esbuild/linux-arm@0.21.5':
-    resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
-
-  '@esbuild/linux-ia32@0.21.5':
-    resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [linux]
-
-  '@esbuild/linux-loong64@0.21.5':
-    resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
-    engines: {node: '>=12'}
-    cpu: [loong64]
-    os: [linux]
-
-  '@esbuild/linux-mips64el@0.21.5':
-    resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
-    engines: {node: '>=12'}
-    cpu: [mips64el]
-    os: [linux]
-
-  '@esbuild/linux-ppc64@0.21.5':
-    resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [linux]
-
-  '@esbuild/linux-riscv64@0.21.5':
-    resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
-    engines: {node: '>=12'}
-    cpu: [riscv64]
-    os: [linux]
-
-  '@esbuild/linux-s390x@0.21.5':
-    resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
-    engines: {node: '>=12'}
-    cpu: [s390x]
-    os: [linux]
-
-  '@esbuild/linux-x64@0.21.5':
-    resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [linux]
-
-  '@esbuild/netbsd-x64@0.21.5':
-    resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [netbsd]
-
-  '@esbuild/openbsd-x64@0.21.5':
-    resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [openbsd]
-
-  '@esbuild/sunos-x64@0.21.5':
-    resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [sunos]
-
-  '@esbuild/win32-arm64@0.21.5':
-    resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [win32]
-
-  '@esbuild/win32-ia32@0.21.5':
-    resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [win32]
-
-  '@esbuild/win32-x64@0.21.5':
-    resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [win32]
-
-  '@floating-ui/core@1.7.5':
-    resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==}
-
-  '@floating-ui/dom@1.7.6':
-    resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==}
-
-  '@floating-ui/utils@0.2.11':
-    resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
-
-  '@jridgewell/sourcemap-codec@1.5.5':
-    resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
-
-  '@rollup/rollup-android-arm-eabi@4.60.2':
-    resolution: {integrity: sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==}
-    cpu: [arm]
-    os: [android]
-
-  '@rollup/rollup-android-arm64@4.60.2':
-    resolution: {integrity: sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==}
-    cpu: [arm64]
-    os: [android]
-
-  '@rollup/rollup-darwin-arm64@4.60.2':
-    resolution: {integrity: sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@rollup/rollup-darwin-x64@4.60.2':
-    resolution: {integrity: sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==}
-    cpu: [x64]
-    os: [darwin]
-
-  '@rollup/rollup-freebsd-arm64@4.60.2':
-    resolution: {integrity: sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==}
-    cpu: [arm64]
-    os: [freebsd]
-
-  '@rollup/rollup-freebsd-x64@4.60.2':
-    resolution: {integrity: sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@rollup/rollup-linux-arm-gnueabihf@4.60.2':
-    resolution: {integrity: sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==}
-    cpu: [arm]
-    os: [linux]
-    libc: [glibc]
-
-  '@rollup/rollup-linux-arm-musleabihf@4.60.2':
-    resolution: {integrity: sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==}
-    cpu: [arm]
-    os: [linux]
-    libc: [musl]
-
-  '@rollup/rollup-linux-arm64-gnu@4.60.2':
-    resolution: {integrity: sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==}
-    cpu: [arm64]
-    os: [linux]
-    libc: [glibc]
-
-  '@rollup/rollup-linux-arm64-musl@4.60.2':
-    resolution: {integrity: sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==}
-    cpu: [arm64]
-    os: [linux]
-    libc: [musl]
-
-  '@rollup/rollup-linux-loong64-gnu@4.60.2':
-    resolution: {integrity: sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==}
-    cpu: [loong64]
-    os: [linux]
-    libc: [glibc]
-
-  '@rollup/rollup-linux-loong64-musl@4.60.2':
-    resolution: {integrity: sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==}
-    cpu: [loong64]
-    os: [linux]
-    libc: [musl]
-
-  '@rollup/rollup-linux-ppc64-gnu@4.60.2':
-    resolution: {integrity: sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==}
-    cpu: [ppc64]
-    os: [linux]
-    libc: [glibc]
-
-  '@rollup/rollup-linux-ppc64-musl@4.60.2':
-    resolution: {integrity: sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==}
-    cpu: [ppc64]
-    os: [linux]
-    libc: [musl]
-
-  '@rollup/rollup-linux-riscv64-gnu@4.60.2':
-    resolution: {integrity: sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==}
-    cpu: [riscv64]
-    os: [linux]
-    libc: [glibc]
-
-  '@rollup/rollup-linux-riscv64-musl@4.60.2':
-    resolution: {integrity: sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==}
-    cpu: [riscv64]
-    os: [linux]
-    libc: [musl]
-
-  '@rollup/rollup-linux-s390x-gnu@4.60.2':
-    resolution: {integrity: sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==}
-    cpu: [s390x]
-    os: [linux]
-    libc: [glibc]
-
-  '@rollup/rollup-linux-x64-gnu@4.60.2':
-    resolution: {integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==}
-    cpu: [x64]
-    os: [linux]
-    libc: [glibc]
-
-  '@rollup/rollup-linux-x64-musl@4.60.2':
-    resolution: {integrity: sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==}
-    cpu: [x64]
-    os: [linux]
-    libc: [musl]
-
-  '@rollup/rollup-openbsd-x64@4.60.2':
-    resolution: {integrity: sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==}
-    cpu: [x64]
-    os: [openbsd]
-
-  '@rollup/rollup-openharmony-arm64@4.60.2':
-    resolution: {integrity: sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==}
-    cpu: [arm64]
-    os: [openharmony]
-
-  '@rollup/rollup-win32-arm64-msvc@4.60.2':
-    resolution: {integrity: sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==}
-    cpu: [arm64]
-    os: [win32]
-
-  '@rollup/rollup-win32-ia32-msvc@4.60.2':
-    resolution: {integrity: sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==}
-    cpu: [ia32]
-    os: [win32]
-
-  '@rollup/rollup-win32-x64-gnu@4.60.2':
-    resolution: {integrity: sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==}
-    cpu: [x64]
-    os: [win32]
-
-  '@rollup/rollup-win32-x64-msvc@4.60.2':
-    resolution: {integrity: sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==}
-    cpu: [x64]
-    os: [win32]
-
-  '@sxzz/popperjs-es@2.11.8':
-    resolution: {integrity: sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==}
-
-  '@types/estree@1.0.8':
-    resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
-
-  '@types/lodash-es@4.17.12':
-    resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
-
-  '@types/lodash@4.17.24':
-    resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==}
-
-  '@types/web-bluetooth@0.0.20':
-    resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
-
-  '@vitejs/plugin-vue@5.2.4':
-    resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
-    engines: {node: ^18.0.0 || >=20.0.0}
-    peerDependencies:
-      vite: ^5.0.0 || ^6.0.0
-      vue: ^3.2.25
-
-  '@volar/language-core@2.4.15':
-    resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==}
-
-  '@volar/source-map@2.4.15':
-    resolution: {integrity: sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==}
-
-  '@volar/typescript@2.4.15':
-    resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==}
-
-  '@vue/compiler-core@3.5.32':
-    resolution: {integrity: sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==}
-
-  '@vue/compiler-dom@3.5.32':
-    resolution: {integrity: sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==}
-
-  '@vue/compiler-sfc@3.5.32':
-    resolution: {integrity: sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==}
-
-  '@vue/compiler-ssr@3.5.32':
-    resolution: {integrity: sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==}
-
-  '@vue/compiler-vue2@2.7.16':
-    resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
-
-  '@vue/devtools-api@6.6.4':
-    resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
-
-  '@vue/language-core@2.2.12':
-    resolution: {integrity: sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==}
-    peerDependencies:
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  '@vue/reactivity@3.5.32':
-    resolution: {integrity: sha512-/ORasxSGvZ6MN5gc+uE364SxFdJ0+WqVG0CENXaGW58TOCdrAW76WWaplDtECeS1qphvtBZtR+3/o1g1zL4xPQ==}
-
-  '@vue/runtime-core@3.5.32':
-    resolution: {integrity: sha512-pDrXCejn4UpFDFmMd27AcJEbHaLemaE5o4pbb7sLk79SRIhc6/t34BQA7SGNgYtbMnvbF/HHOftYBgFJtUoJUQ==}
-
-  '@vue/runtime-dom@3.5.32':
-    resolution: {integrity: sha512-1CDVv7tv/IV13V8Nip1k/aaObVbWqRlVCVezTwx3K07p7Vxossp5JU1dcPNhJk3w347gonIUT9jQOGutyJrSVQ==}
-
-  '@vue/server-renderer@3.5.32':
-    resolution: {integrity: sha512-IOjm2+JQwRFS7W28HNuJeXQle9KdZbODFY7hFGVtnnghF51ta20EWAZJHX+zLGtsHhaU6uC9BGPV52KVpYryMQ==}
-    peerDependencies:
-      vue: 3.5.32
-
-  '@vue/shared@3.5.32':
-    resolution: {integrity: sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==}
-
-  '@vueuse/core@12.0.0':
-    resolution: {integrity: sha512-C12RukhXiJCbx4MGhjmd/gH52TjJsc3G0E0kQj/kb19H3Nt6n1CA4DRWuTdWWcaFRdlTe0npWDS942mvacvNBw==}
-
-  '@vueuse/metadata@12.0.0':
-    resolution: {integrity: sha512-Yzimd1D3sjxTDOlF05HekU5aSGdKjxhuhRFHA7gDWLn57PRbBIh+SF5NmjhJ0WRgF3my7T8LBucyxdFJjIfRJQ==}
-
-  '@vueuse/shared@12.0.0':
-    resolution: {integrity: sha512-3i6qtcq2PIio5i/vVYidkkcgvmTjCqrf26u+Fd4LhnbBmIT6FN8y6q/GJERp8lfcB9zVEfjdV0Br0443qZuJpw==}
-
-  alien-signals@1.0.13:
-    resolution: {integrity: sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==}
-
-  async-validator@4.2.5:
-    resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
-
-  asynckit@0.4.0:
-    resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
-
-  axios@1.15.0:
-    resolution: {integrity: sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==}
-
-  balanced-match@1.0.2:
-    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
-  brace-expansion@2.1.0:
-    resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==}
-
-  call-bind-apply-helpers@1.0.2:
-    resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
-    engines: {node: '>= 0.4'}
-
-  combined-stream@1.0.8:
-    resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
-    engines: {node: '>= 0.8'}
-
-  csstype@3.2.3:
-    resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
-
-  dayjs@1.11.20:
-    resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==}
-
-  de-indent@1.0.2:
-    resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
-
-  delayed-stream@1.0.0:
-    resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
-    engines: {node: '>=0.4.0'}
-
-  dunder-proto@1.0.1:
-    resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
-    engines: {node: '>= 0.4'}
-
-  element-plus@2.13.7:
-    resolution: {integrity: sha512-XdHATFZOyzVFL1DaHQ90IOJQSg9UnSAV+bhDW+YB5UoZ0Hxs50mwqjqfwXkuwpSag+VXXizVcErBR6Movo5daw==}
-    peerDependencies:
-      vue: ^3.3.0
-
-  entities@7.0.1:
-    resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
-    engines: {node: '>=0.12'}
-
-  es-define-property@1.0.1:
-    resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
-    engines: {node: '>= 0.4'}
-
-  es-errors@1.3.0:
-    resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
-    engines: {node: '>= 0.4'}
-
-  es-object-atoms@1.1.1:
-    resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
-    engines: {node: '>= 0.4'}
-
-  es-set-tostringtag@2.1.0:
-    resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
-    engines: {node: '>= 0.4'}
-
-  esbuild@0.21.5:
-    resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
-    engines: {node: '>=12'}
-    hasBin: true
-
-  estree-walker@2.0.2:
-    resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
-
-  follow-redirects@1.16.0:
-    resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==}
-    engines: {node: '>=4.0'}
-    peerDependencies:
-      debug: '*'
-    peerDependenciesMeta:
-      debug:
-        optional: true
-
-  form-data@4.0.5:
-    resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
-    engines: {node: '>= 6'}
-
-  fsevents@2.3.3:
-    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
-    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
-    os: [darwin]
-
-  function-bind@1.1.2:
-    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-
-  get-intrinsic@1.3.0:
-    resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
-    engines: {node: '>= 0.4'}
-
-  get-proto@1.0.1:
-    resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
-    engines: {node: '>= 0.4'}
-
-  gopd@1.2.0:
-    resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
-    engines: {node: '>= 0.4'}
-
-  has-symbols@1.1.0:
-    resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
-    engines: {node: '>= 0.4'}
-
-  has-tostringtag@1.0.2:
-    resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
-    engines: {node: '>= 0.4'}
-
-  hasown@2.0.3:
-    resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==}
-    engines: {node: '>= 0.4'}
-
-  he@1.2.0:
-    resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
-    hasBin: true
-
-  lodash-es@4.18.1:
-    resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==}
-
-  lodash-unified@1.0.3:
-    resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==}
-    peerDependencies:
-      '@types/lodash-es': '*'
-      lodash: '*'
-      lodash-es: '*'
-
-  lodash@4.18.1:
-    resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==}
-
-  magic-string@0.30.21:
-    resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
-
-  math-intrinsics@1.1.0:
-    resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
-    engines: {node: '>= 0.4'}
-
-  memoize-one@6.0.0:
-    resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
-
-  mime-db@1.52.0:
-    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
-    engines: {node: '>= 0.6'}
-
-  mime-types@2.1.35:
-    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
-    engines: {node: '>= 0.6'}
-
-  minimatch@9.0.9:
-    resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
-    engines: {node: '>=16 || 14 >=14.17'}
-
-  muggle-string@0.4.1:
-    resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
-
-  nanoid@3.3.11:
-    resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
-    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
-    hasBin: true
-
-  normalize-wheel-es@1.2.0:
-    resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==}
-
-  path-browserify@1.0.1:
-    resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
-
-  picocolors@1.1.1:
-    resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
-
-  pinia@2.3.1:
-    resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==}
-    peerDependencies:
-      typescript: '>=4.4.4'
-      vue: ^2.7.0 || ^3.5.11
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  postcss@8.5.10:
-    resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==}
-    engines: {node: ^10 || ^12 || >=14}
-
-  proxy-from-env@2.1.0:
-    resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==}
-    engines: {node: '>=10'}
-
-  rollup@4.60.2:
-    resolution: {integrity: sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==}
-    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
-    hasBin: true
-
-  source-map-js@1.2.1:
-    resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
-    engines: {node: '>=0.10.0'}
-
-  typescript@5.9.3:
-    resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
-    engines: {node: '>=14.17'}
-    hasBin: true
-
-  vite@5.4.21:
-    resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==}
-    engines: {node: ^18.0.0 || >=20.0.0}
-    hasBin: true
-    peerDependencies:
-      '@types/node': ^18.0.0 || >=20.0.0
-      less: '*'
-      lightningcss: ^1.21.0
-      sass: '*'
-      sass-embedded: '*'
-      stylus: '*'
-      sugarss: '*'
-      terser: ^5.4.0
-    peerDependenciesMeta:
-      '@types/node':
-        optional: true
-      less:
-        optional: true
-      lightningcss:
-        optional: true
-      sass:
-        optional: true
-      sass-embedded:
-        optional: true
-      stylus:
-        optional: true
-      sugarss:
-        optional: true
-      terser:
-        optional: true
-
-  vscode-uri@3.1.0:
-    resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
-
-  vue-component-type-helpers@3.2.7:
-    resolution: {integrity: sha512-+gPp5YGmhfsj1IN+xUo7y0fb4clfnOiiUA39y07yW1VzCRjzVgwLbtmdWlghh7mXrPsEaYc7rrIir/HT6C8vYQ==}
-
-  vue-demi@0.14.10:
-    resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
-    engines: {node: '>=12'}
-    hasBin: true
-    peerDependencies:
-      '@vue/composition-api': ^1.0.0-rc.1
-      vue: ^3.0.0-0 || ^2.6.0
-    peerDependenciesMeta:
-      '@vue/composition-api':
-        optional: true
-
-  vue-router@4.6.4:
-    resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==}
-    peerDependencies:
-      vue: ^3.5.0
-
-  vue-tsc@2.2.12:
-    resolution: {integrity: sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==}
-    hasBin: true
-    peerDependencies:
-      typescript: '>=5.0.0'
-
-  vue@3.5.32:
-    resolution: {integrity: sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==}
-    peerDependencies:
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-snapshots:
-
-  '@babel/helper-string-parser@7.27.1': {}
-
-  '@babel/helper-validator-identifier@7.28.5': {}
-
-  '@babel/parser@7.29.2':
-    dependencies:
-      '@babel/types': 7.29.0
-
-  '@babel/types@7.29.0':
-    dependencies:
-      '@babel/helper-string-parser': 7.27.1
-      '@babel/helper-validator-identifier': 7.28.5
-
-  '@ctrl/tinycolor@4.2.0': {}
-
-  '@element-plus/icons-vue@2.3.2(vue@3.5.32(typescript@5.9.3))':
-    dependencies:
-      vue: 3.5.32(typescript@5.9.3)
-
-  '@esbuild/aix-ppc64@0.21.5':
-    optional: true
-
-  '@esbuild/android-arm64@0.21.5':
-    optional: true
-
-  '@esbuild/android-arm@0.21.5':
-    optional: true
-
-  '@esbuild/android-x64@0.21.5':
-    optional: true
-
-  '@esbuild/darwin-arm64@0.21.5':
-    optional: true
-
-  '@esbuild/darwin-x64@0.21.5':
-    optional: true
-
-  '@esbuild/freebsd-arm64@0.21.5':
-    optional: true
-
-  '@esbuild/freebsd-x64@0.21.5':
-    optional: true
-
-  '@esbuild/linux-arm64@0.21.5':
-    optional: true
-
-  '@esbuild/linux-arm@0.21.5':
-    optional: true
-
-  '@esbuild/linux-ia32@0.21.5':
-    optional: true
-
-  '@esbuild/linux-loong64@0.21.5':
-    optional: true
-
-  '@esbuild/linux-mips64el@0.21.5':
-    optional: true
-
-  '@esbuild/linux-ppc64@0.21.5':
-    optional: true
-
-  '@esbuild/linux-riscv64@0.21.5':
-    optional: true
-
-  '@esbuild/linux-s390x@0.21.5':
-    optional: true
-
-  '@esbuild/linux-x64@0.21.5':
-    optional: true
-
-  '@esbuild/netbsd-x64@0.21.5':
-    optional: true
-
-  '@esbuild/openbsd-x64@0.21.5':
-    optional: true
-
-  '@esbuild/sunos-x64@0.21.5':
-    optional: true
-
-  '@esbuild/win32-arm64@0.21.5':
-    optional: true
-
-  '@esbuild/win32-ia32@0.21.5':
-    optional: true
-
-  '@esbuild/win32-x64@0.21.5':
-    optional: true
-
-  '@floating-ui/core@1.7.5':
-    dependencies:
-      '@floating-ui/utils': 0.2.11
-
-  '@floating-ui/dom@1.7.6':
-    dependencies:
-      '@floating-ui/core': 1.7.5
-      '@floating-ui/utils': 0.2.11
-
-  '@floating-ui/utils@0.2.11': {}
-
-  '@jridgewell/sourcemap-codec@1.5.5': {}
-
-  '@rollup/rollup-android-arm-eabi@4.60.2':
-    optional: true
-
-  '@rollup/rollup-android-arm64@4.60.2':
-    optional: true
-
-  '@rollup/rollup-darwin-arm64@4.60.2':
-    optional: true
-
-  '@rollup/rollup-darwin-x64@4.60.2':
-    optional: true
-
-  '@rollup/rollup-freebsd-arm64@4.60.2':
-    optional: true
-
-  '@rollup/rollup-freebsd-x64@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-arm-gnueabihf@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-arm-musleabihf@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-arm64-gnu@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-arm64-musl@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-loong64-gnu@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-loong64-musl@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-ppc64-gnu@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-ppc64-musl@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-riscv64-gnu@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-riscv64-musl@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-s390x-gnu@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-x64-gnu@4.60.2':
-    optional: true
-
-  '@rollup/rollup-linux-x64-musl@4.60.2':
-    optional: true
-
-  '@rollup/rollup-openbsd-x64@4.60.2':
-    optional: true
-
-  '@rollup/rollup-openharmony-arm64@4.60.2':
-    optional: true
-
-  '@rollup/rollup-win32-arm64-msvc@4.60.2':
-    optional: true
-
-  '@rollup/rollup-win32-ia32-msvc@4.60.2':
-    optional: true
-
-  '@rollup/rollup-win32-x64-gnu@4.60.2':
-    optional: true
-
-  '@rollup/rollup-win32-x64-msvc@4.60.2':
-    optional: true
-
-  '@sxzz/popperjs-es@2.11.8': {}
-
-  '@types/estree@1.0.8': {}
-
-  '@types/lodash-es@4.17.12':
-    dependencies:
-      '@types/lodash': 4.17.24
-
-  '@types/lodash@4.17.24': {}
-
-  '@types/web-bluetooth@0.0.20': {}
-
-  '@vitejs/plugin-vue@5.2.4(vite@5.4.21)(vue@3.5.32(typescript@5.9.3))':
-    dependencies:
-      vite: 5.4.21
-      vue: 3.5.32(typescript@5.9.3)
-
-  '@volar/language-core@2.4.15':
-    dependencies:
-      '@volar/source-map': 2.4.15
-
-  '@volar/source-map@2.4.15': {}
-
-  '@volar/typescript@2.4.15':
-    dependencies:
-      '@volar/language-core': 2.4.15
-      path-browserify: 1.0.1
-      vscode-uri: 3.1.0
-
-  '@vue/compiler-core@3.5.32':
-    dependencies:
-      '@babel/parser': 7.29.2
-      '@vue/shared': 3.5.32
-      entities: 7.0.1
-      estree-walker: 2.0.2
-      source-map-js: 1.2.1
-
-  '@vue/compiler-dom@3.5.32':
-    dependencies:
-      '@vue/compiler-core': 3.5.32
-      '@vue/shared': 3.5.32
-
-  '@vue/compiler-sfc@3.5.32':
-    dependencies:
-      '@babel/parser': 7.29.2
-      '@vue/compiler-core': 3.5.32
-      '@vue/compiler-dom': 3.5.32
-      '@vue/compiler-ssr': 3.5.32
-      '@vue/shared': 3.5.32
-      estree-walker: 2.0.2
-      magic-string: 0.30.21
-      postcss: 8.5.10
-      source-map-js: 1.2.1
-
-  '@vue/compiler-ssr@3.5.32':
-    dependencies:
-      '@vue/compiler-dom': 3.5.32
-      '@vue/shared': 3.5.32
-
-  '@vue/compiler-vue2@2.7.16':
-    dependencies:
-      de-indent: 1.0.2
-      he: 1.2.0
-
-  '@vue/devtools-api@6.6.4': {}
-
-  '@vue/language-core@2.2.12(typescript@5.9.3)':
-    dependencies:
-      '@volar/language-core': 2.4.15
-      '@vue/compiler-dom': 3.5.32
-      '@vue/compiler-vue2': 2.7.16
-      '@vue/shared': 3.5.32
-      alien-signals: 1.0.13
-      minimatch: 9.0.9
-      muggle-string: 0.4.1
-      path-browserify: 1.0.1
-    optionalDependencies:
-      typescript: 5.9.3
-
-  '@vue/reactivity@3.5.32':
-    dependencies:
-      '@vue/shared': 3.5.32
-
-  '@vue/runtime-core@3.5.32':
-    dependencies:
-      '@vue/reactivity': 3.5.32
-      '@vue/shared': 3.5.32
-
-  '@vue/runtime-dom@3.5.32':
-    dependencies:
-      '@vue/reactivity': 3.5.32
-      '@vue/runtime-core': 3.5.32
-      '@vue/shared': 3.5.32
-      csstype: 3.2.3
-
-  '@vue/server-renderer@3.5.32(vue@3.5.32(typescript@5.9.3))':
-    dependencies:
-      '@vue/compiler-ssr': 3.5.32
-      '@vue/shared': 3.5.32
-      vue: 3.5.32(typescript@5.9.3)
-
-  '@vue/shared@3.5.32': {}
-
-  '@vueuse/core@12.0.0(typescript@5.9.3)':
-    dependencies:
-      '@types/web-bluetooth': 0.0.20
-      '@vueuse/metadata': 12.0.0
-      '@vueuse/shared': 12.0.0(typescript@5.9.3)
-      vue: 3.5.32(typescript@5.9.3)
-    transitivePeerDependencies:
-      - typescript
-
-  '@vueuse/metadata@12.0.0': {}
-
-  '@vueuse/shared@12.0.0(typescript@5.9.3)':
-    dependencies:
-      vue: 3.5.32(typescript@5.9.3)
-    transitivePeerDependencies:
-      - typescript
-
-  alien-signals@1.0.13: {}
-
-  async-validator@4.2.5: {}
-
-  asynckit@0.4.0: {}
-
-  axios@1.15.0:
-    dependencies:
-      follow-redirects: 1.16.0
-      form-data: 4.0.5
-      proxy-from-env: 2.1.0
-    transitivePeerDependencies:
-      - debug
-
-  balanced-match@1.0.2: {}
-
-  brace-expansion@2.1.0:
-    dependencies:
-      balanced-match: 1.0.2
-
-  call-bind-apply-helpers@1.0.2:
-    dependencies:
-      es-errors: 1.3.0
-      function-bind: 1.1.2
-
-  combined-stream@1.0.8:
-    dependencies:
-      delayed-stream: 1.0.0
-
-  csstype@3.2.3: {}
-
-  dayjs@1.11.20: {}
-
-  de-indent@1.0.2: {}
-
-  delayed-stream@1.0.0: {}
-
-  dunder-proto@1.0.1:
-    dependencies:
-      call-bind-apply-helpers: 1.0.2
-      es-errors: 1.3.0
-      gopd: 1.2.0
-
-  element-plus@2.13.7(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)):
-    dependencies:
-      '@ctrl/tinycolor': 4.2.0
-      '@element-plus/icons-vue': 2.3.2(vue@3.5.32(typescript@5.9.3))
-      '@floating-ui/dom': 1.7.6
-      '@popperjs/core': '@sxzz/popperjs-es@2.11.8'
-      '@types/lodash': 4.17.24
-      '@types/lodash-es': 4.17.12
-      '@vueuse/core': 12.0.0(typescript@5.9.3)
-      async-validator: 4.2.5
-      dayjs: 1.11.20
-      lodash: 4.18.1
-      lodash-es: 4.18.1
-      lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.18.1)
-      memoize-one: 6.0.0
-      normalize-wheel-es: 1.2.0
-      vue: 3.5.32(typescript@5.9.3)
-      vue-component-type-helpers: 3.2.7
-    transitivePeerDependencies:
-      - typescript
-
-  entities@7.0.1: {}
-
-  es-define-property@1.0.1: {}
-
-  es-errors@1.3.0: {}
-
-  es-object-atoms@1.1.1:
-    dependencies:
-      es-errors: 1.3.0
-
-  es-set-tostringtag@2.1.0:
-    dependencies:
-      es-errors: 1.3.0
-      get-intrinsic: 1.3.0
-      has-tostringtag: 1.0.2
-      hasown: 2.0.3
-
-  esbuild@0.21.5:
-    optionalDependencies:
-      '@esbuild/aix-ppc64': 0.21.5
-      '@esbuild/android-arm': 0.21.5
-      '@esbuild/android-arm64': 0.21.5
-      '@esbuild/android-x64': 0.21.5
-      '@esbuild/darwin-arm64': 0.21.5
-      '@esbuild/darwin-x64': 0.21.5
-      '@esbuild/freebsd-arm64': 0.21.5
-      '@esbuild/freebsd-x64': 0.21.5
-      '@esbuild/linux-arm': 0.21.5
-      '@esbuild/linux-arm64': 0.21.5
-      '@esbuild/linux-ia32': 0.21.5
-      '@esbuild/linux-loong64': 0.21.5
-      '@esbuild/linux-mips64el': 0.21.5
-      '@esbuild/linux-ppc64': 0.21.5
-      '@esbuild/linux-riscv64': 0.21.5
-      '@esbuild/linux-s390x': 0.21.5
-      '@esbuild/linux-x64': 0.21.5
-      '@esbuild/netbsd-x64': 0.21.5
-      '@esbuild/openbsd-x64': 0.21.5
-      '@esbuild/sunos-x64': 0.21.5
-      '@esbuild/win32-arm64': 0.21.5
-      '@esbuild/win32-ia32': 0.21.5
-      '@esbuild/win32-x64': 0.21.5
-
-  estree-walker@2.0.2: {}
-
-  follow-redirects@1.16.0: {}
-
-  form-data@4.0.5:
-    dependencies:
-      asynckit: 0.4.0
-      combined-stream: 1.0.8
-      es-set-tostringtag: 2.1.0
-      hasown: 2.0.3
-      mime-types: 2.1.35
-
-  fsevents@2.3.3:
-    optional: true
-
-  function-bind@1.1.2: {}
-
-  get-intrinsic@1.3.0:
-    dependencies:
-      call-bind-apply-helpers: 1.0.2
-      es-define-property: 1.0.1
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      function-bind: 1.1.2
-      get-proto: 1.0.1
-      gopd: 1.2.0
-      has-symbols: 1.1.0
-      hasown: 2.0.3
-      math-intrinsics: 1.1.0
-
-  get-proto@1.0.1:
-    dependencies:
-      dunder-proto: 1.0.1
-      es-object-atoms: 1.1.1
-
-  gopd@1.2.0: {}
-
-  has-symbols@1.1.0: {}
-
-  has-tostringtag@1.0.2:
-    dependencies:
-      has-symbols: 1.1.0
-
-  hasown@2.0.3:
-    dependencies:
-      function-bind: 1.1.2
-
-  he@1.2.0: {}
-
-  lodash-es@4.18.1: {}
-
-  lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.18.1):
-    dependencies:
-      '@types/lodash-es': 4.17.12
-      lodash: 4.18.1
-      lodash-es: 4.18.1
-
-  lodash@4.18.1: {}
-
-  magic-string@0.30.21:
-    dependencies:
-      '@jridgewell/sourcemap-codec': 1.5.5
-
-  math-intrinsics@1.1.0: {}
-
-  memoize-one@6.0.0: {}
-
-  mime-db@1.52.0: {}
-
-  mime-types@2.1.35:
-    dependencies:
-      mime-db: 1.52.0
-
-  minimatch@9.0.9:
-    dependencies:
-      brace-expansion: 2.1.0
-
-  muggle-string@0.4.1: {}
-
-  nanoid@3.3.11: {}
-
-  normalize-wheel-es@1.2.0: {}
-
-  path-browserify@1.0.1: {}
-
-  picocolors@1.1.1: {}
-
-  pinia@2.3.1(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)):
-    dependencies:
-      '@vue/devtools-api': 6.6.4
-      vue: 3.5.32(typescript@5.9.3)
-      vue-demi: 0.14.10(vue@3.5.32(typescript@5.9.3))
-    optionalDependencies:
-      typescript: 5.9.3
-    transitivePeerDependencies:
-      - '@vue/composition-api'
-
-  postcss@8.5.10:
-    dependencies:
-      nanoid: 3.3.11
-      picocolors: 1.1.1
-      source-map-js: 1.2.1
-
-  proxy-from-env@2.1.0: {}
-
-  rollup@4.60.2:
-    dependencies:
-      '@types/estree': 1.0.8
-    optionalDependencies:
-      '@rollup/rollup-android-arm-eabi': 4.60.2
-      '@rollup/rollup-android-arm64': 4.60.2
-      '@rollup/rollup-darwin-arm64': 4.60.2
-      '@rollup/rollup-darwin-x64': 4.60.2
-      '@rollup/rollup-freebsd-arm64': 4.60.2
-      '@rollup/rollup-freebsd-x64': 4.60.2
-      '@rollup/rollup-linux-arm-gnueabihf': 4.60.2
-      '@rollup/rollup-linux-arm-musleabihf': 4.60.2
-      '@rollup/rollup-linux-arm64-gnu': 4.60.2
-      '@rollup/rollup-linux-arm64-musl': 4.60.2
-      '@rollup/rollup-linux-loong64-gnu': 4.60.2
-      '@rollup/rollup-linux-loong64-musl': 4.60.2
-      '@rollup/rollup-linux-ppc64-gnu': 4.60.2
-      '@rollup/rollup-linux-ppc64-musl': 4.60.2
-      '@rollup/rollup-linux-riscv64-gnu': 4.60.2
-      '@rollup/rollup-linux-riscv64-musl': 4.60.2
-      '@rollup/rollup-linux-s390x-gnu': 4.60.2
-      '@rollup/rollup-linux-x64-gnu': 4.60.2
-      '@rollup/rollup-linux-x64-musl': 4.60.2
-      '@rollup/rollup-openbsd-x64': 4.60.2
-      '@rollup/rollup-openharmony-arm64': 4.60.2
-      '@rollup/rollup-win32-arm64-msvc': 4.60.2
-      '@rollup/rollup-win32-ia32-msvc': 4.60.2
-      '@rollup/rollup-win32-x64-gnu': 4.60.2
-      '@rollup/rollup-win32-x64-msvc': 4.60.2
-      fsevents: 2.3.3
-
-  source-map-js@1.2.1: {}
-
-  typescript@5.9.3: {}
-
-  vite@5.4.21:
-    dependencies:
-      esbuild: 0.21.5
-      postcss: 8.5.10
-      rollup: 4.60.2
-    optionalDependencies:
-      fsevents: 2.3.3
-
-  vscode-uri@3.1.0: {}
-
-  vue-component-type-helpers@3.2.7: {}
-
-  vue-demi@0.14.10(vue@3.5.32(typescript@5.9.3)):
-    dependencies:
-      vue: 3.5.32(typescript@5.9.3)
-
-  vue-router@4.6.4(vue@3.5.32(typescript@5.9.3)):
-    dependencies:
-      '@vue/devtools-api': 6.6.4
-      vue: 3.5.32(typescript@5.9.3)
-
-  vue-tsc@2.2.12(typescript@5.9.3):
-    dependencies:
-      '@volar/typescript': 2.4.15
-      '@vue/language-core': 2.2.12(typescript@5.9.3)
-      typescript: 5.9.3
-
-  vue@3.5.32(typescript@5.9.3):
-    dependencies:
-      '@vue/compiler-dom': 3.5.32
-      '@vue/compiler-sfc': 3.5.32
-      '@vue/runtime-dom': 3.5.32
-      '@vue/server-renderer': 3.5.32(vue@3.5.32(typescript@5.9.3))
-      '@vue/shared': 3.5.32
-    optionalDependencies:
-      typescript: 5.9.3
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/App.vue b/Code/WMS/WIDESEA_WMSClient_Vben/src/App.vue
deleted file mode 100644
index 1dd8312..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/App.vue
+++ /dev/null
@@ -1,27 +0,0 @@
-<template>
-  <router-view />
-</template>
-
-<script setup lang="ts">
-import { onMounted } from 'vue';
-
-onMounted(() => {
-  console.log('WMS Vben Admin App mounted');
-});
-</script>
-
-<style>
-* {
-  margin: 0;
-  padding: 0;
-  box-sizing: border-box;
-}
-
-html,
-body,
-#app {
-  width: 100%;
-  height: 100%;
-  overflow: hidden;
-}
-</style>
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/auth.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/api/auth.ts
deleted file mode 100644
index d3a04a7..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/auth.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import axios from 'axios';
-import type { AxiosInstance, AxiosResponse } from 'axios';
-
-const baseURL = import.meta.env.VITE_APP_API_URL || 'http://localhost:9291';
-
-const http: AxiosInstance = axios.create({
-  baseURL,
-  timeout: 30000,
-});
-
-http.interceptors.request.use(
-  (config) => {
-    const token = localStorage.getItem('token');
-    if (token) {
-      config.headers.Authorization = `Bearer ${token}`;
-    }
-    return config;
-  },
-  (error) => Promise.reject(error)
-);
-
-http.interceptors.response.use(
-  (response: AxiosResponse) => response.data,
-  (error) => {
-    if (error.response?.status === 401) {
-      localStorage.removeItem('token');
-      window.location.href = '/login';
-    }
-    return Promise.reject(error);
-  }
-);
-
-export interface LoginRequest {
-  username: string;
-  password: string;
-}
-
-export interface LoginResponse {
-  success: boolean;
-  message?: string;
-  data?: {
-    token: string;
-  };
-}
-
-export const login = (data: LoginRequest): Promise<LoginResponse> => {
-  return http.post('/api/Login', data);
-};
-
-export default http;
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/client.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/api/client.ts
deleted file mode 100644
index 4743309..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/client.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * axios 瀹㈡埛绔皝瑁�
- * 缁熶竴閰嶇疆锛歜aseURL銆乼imeout銆佽姹�/鍝嶅簲鎷︽埅鍣�
- */
-import axios from 'axios';
-import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios';
-
-const BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:9291';
-
-/** 鍒涘缓 axios 瀹炰緥 */
-const client: AxiosInstance = axios.create({
-  baseURL: BASE_URL,
-  timeout: 30000,
-  headers: { 'Content-Type': 'application/json' },
-});
-
-let isRefreshing = false;
-let refreshQueue: Array<(token?: string) => void> = [];
-
-/** 璇锋眰鎷︽埅鍣細娉ㄥ叆 Bearer Token */
-client.interceptors.request.use(
-  (config: InternalAxiosRequestConfig) => {
-    const userStr = localStorage.getItem('user');
-    if (userStr) {
-      try {
-        const userData = JSON.parse(userStr);
-        if (userData.token) {
-          config.headers.Authorization = `Bearer ${userData.token}`;
-        }
-      } catch {}
-    }
-    return config;
-  },
-  (error) => Promise.reject(error)
-);
-
-/** 鍝嶅簲鎷︽埅鍣細缁熶竴閿欒澶勭悊 + 401 Token 杩囨湡璺宠浆鐧诲綍 */
-client.interceptors.response.use(
-  (response: AxiosResponse) => response.data,
-  async (error) => {
-    const status = error.response?.status;
-    const data = error.response?.data;
-
-    // 401 鏈巿鏉�
-    if (status === 401 || data?.code === 401) {
-      localStorage.removeItem('user');
-      window.location.href = '/#/login';
-      return Promise.reject(error);
-    }
-
-    return Promise.reject(error);
-  }
-);
-
-export { client };
-export type { AxiosRequestConfig };
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/index.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/api/index.ts
deleted file mode 100644
index 1db51da..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export { client } from './client';
-export { userApi } from './modules/user';
-export { menuApi } from './modules/menu';
-export { stockApi } from './modules/stock';
-export { inboundApi } from './modules/inbound';
-export { outboundApi } from './modules/outbound';
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/inbound.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/inbound.ts
deleted file mode 100644
index f33daec..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/inbound.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { client } from '../client';
-
-export const inboundApi = {
-  getPageList: (params: any) => client.get('/api/InboundOrder/getPageList', { params }),
-  getDetail: (id: number) => client.get(`/api/InboundOrderDetail/${id}`),
-};
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/menu.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/menu.ts
deleted file mode 100644
index 3d181d0..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/menu.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * 鑿滃崟 API 妯″潡
- * 瀵规帴 WMS 鍚庣 /api/Sys_Menu/getTreeMenu 鎺ュ彛
- */
-import { client } from '../client';
-
-/** 鍚庣杩斿洖鐨勮彍鍗曡妭鐐� */
-export interface BackendMenuNode {
-  id: string | number;
-  name?: string;
-  text?: string;
-  url?: string;
-  path?: string;
-  icon?: string;
-  children?: BackendMenuNode[];
-  [key: string]: unknown;
-}
-
-export const menuApi = {
-  /**
-   * 鑾峰彇鏍戝舰鑿滃崟
-   * GET /api/Sys_Menu/getTreeMenu
-   */
-  getTreeMenu: async (): Promise<BackendMenuNode[]> => {
-    const res = await client.get('/api/Sys_Menu/getTreeMenu');
-    return res || [];
-  },
-};
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/outbound.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/outbound.ts
deleted file mode 100644
index 100f1ef..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/outbound.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { client } from '../client';
-
-export const outboundApi = {
-  getPageList: (params: any) => client.get('/api/OutboundOrder/getPageList', { params }),
-  getDetail: (id: number) => client.get(`/api/OutboundOrderDetail/${id}`),
-};
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/stock.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/stock.ts
deleted file mode 100644
index aa3c9dd..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/stock.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { client } from '../client';
-
-export const stockApi = {
-  getPageList: (params: any) => client.get('/api/StockInfo/getDetailPageList', { params }),
-  getDetail: (id: number) => client.get(`/api/StockInfoDetail/${id}`),
-};
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/user.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/user.ts
deleted file mode 100644
index 394b60c..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/api/modules/user.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { client } from '../client';
-
-export const userApi = {
-  getCaptcha: () => client.get('/api/User/getVierificationCode'),
-  login: (params: any) => client.post('/api/User/login', params),
-  getCurrentUser: () => client.post('/api/User/getCurrentUserInfo'),
-  replaceToken: () => client.post('/api/User/replaceToken'),
-};
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/layouts/MainLayout.vue b/Code/WMS/WIDESEA_WMSClient_Vben/src/layouts/MainLayout.vue
deleted file mode 100644
index fa5bab6..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/layouts/MainLayout.vue
+++ /dev/null
@@ -1,158 +0,0 @@
-<template>
-  <el-container class="main-layout">
-    <el-aside :width="collapsed ? '64px' : '200px'">
-      <div class="logo" @click="collapsed = !collapsed">
-        <span v-if="!collapsed">WMS绠$悊绯荤粺</span>
-        <span v-else>W</span>
-      </div>
-      <el-scrollbar>
-        <el-menu
-          :default-active="activeMenu"
-          class="el-menu-vertical"
-          :collapse="collapsed"
-          :router="true"
-          @select="handleMenuSelect"
-        >
-          <template v-for="item in menuList" :key="item.id">
-            <el-sub-menu v-if="item.children?.length" :index="String(item.id)">
-              <template #title>
-                <span>{{ item.name || item.text }}</span>
-              </template>
-              <el-menu-item
-                v-for="child in item.children"
-                :key="child.id"
-                :index="child.path || String(child.id)"
-              >
-                <span>{{ child.name || child.text }}</span>
-              </el-menu-item>
-            </el-sub-menu>
-            <el-menu-item v-else :index="item.path || String(item.id)">
-              <span>{{ item.name || item.text }}</span>
-            </el-menu-item>
-          </template>
-        </el-menu>
-      </el-scrollbar>
-    </el-aside>
-    <el-container>
-      <el-header>
-        <div class="header-left">
-          <span class="project-title">WIDESEA WMS</span>
-        </div>
-        <div class="header-right">
-          <span class="username">{{ username }}</span>
-          <el-button link @click="handleLogout">閫�鍑�</el-button>
-        </div>
-      </el-header>
-      <el-main>
-        <router-view />
-      </el-main>
-    </el-container>
-  </el-container>
-</template>
-
-<script setup lang="ts">
-import { ref, computed, onMounted } from 'vue';
-import { useRoute, useRouter } from 'vue-router';
-import { useMenuStore } from '@/store/modules/menu';
-import { ElMessage } from 'element-plus';
-
-const route = useRoute();
-const router = useRouter();
-const menuStore = useMenuStore();
-
-const collapsed = ref(false);
-const menuList = ref<any[]>([]);
-
-const username = computed(() => {
-  const userStr = localStorage.getItem('user');
-  if (userStr) {
-    try {
-      const user = JSON.parse(userStr);
-      return user.userTrueName || user.userName || '鏈櫥褰�';
-    } catch {}
-  }
-  return '鏈櫥褰�';
-});
-
-const activeMenu = computed(() => route.path);
-
-function handleMenuSelect(index: string) {
-  const menu = menuStore.findMenuByPath(index);
-  if (menu?.path) {
-    router.push(menu.path);
-  }
-}
-
-async function loadMenus() {
-  try {
-    const menus = await menuStore.loadMenus();
-    menuList.value = menus || [];
-  } catch (error) {
-    console.error('鍔犺浇鑿滃崟澶辫触:', error);
-    ElMessage.error('鍔犺浇鑿滃崟澶辫触');
-  }
-}
-
-function handleLogout() {
-  localStorage.removeItem('user');
-  menuStore.resetMenus();
-  router.push('/login');
-}
-
-onMounted(() => {
-  loadMenus();
-});
-</script>
-
-<style scoped>
-.main-layout {
-  height: 100%;
-}
-.el-aside {
-  background-color: #304156;
-  color: #fff;
-  transition: width 0.3s;
-}
-.logo {
-  height: 60px;
-  line-height: 60px;
-  text-align: center;
-  font-size: 18px;
-  color: #fff;
-  cursor: pointer;
-  background-color: #263445;
-}
-.el-menu-vertical {
-  border-right: none;
-  background-color: transparent;
-}
-.el-menu-vertical:not(.el-menu--collapse) {
-  width: 200px;
-}
-.el-header {
-  background-color: #fff;
-  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
-  line-height: 60px;
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  padding: 0 20px;
-}
-.project-title {
-  font-weight: 600;
-  font-size: 16px;
-  color: #333;
-}
-.header-right {
-  display: flex;
-  align-items: center;
-  gap: 12px;
-}
-.username {
-  color: #666;
-}
-.el-main {
-  background-color: #f0f2f5;
-  padding: 16px;
-}
-</style>
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/locales/zh-CN.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/locales/zh-CN.ts
deleted file mode 100644
index 5e1c2ea..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/locales/zh-CN.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-export default {
-  common: {
-    ok: '纭畾',
-    cancel: '鍙栨秷',
-    save: '淇濆瓨',
-    delete: '鍒犻櫎',
-    edit: '缂栬緫',
-    add: '鏂板',
-    search: '鎼滅储',
-    reset: '閲嶇疆',
-  },
-  login: {
-    title: 'WMS绠$悊绯荤粺',
-    username: '鐢ㄦ埛鍚�',
-    password: '瀵嗙爜',
-    loginBtn: '鐧诲綍',
-  },
-  menu: {
-    dashboard: '棣栭〉',
-  },
-};
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/main.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/main.ts
deleted file mode 100644
index 9d96edf..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/main.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { createApp } from 'vue';
-import { createPinia } from 'pinia';
-import ElementPlus from 'element-plus';
-import 'element-plus/dist/index.css';
-import App from './App.vue';
-import router from './router';
-
-const app = createApp(App);
-const pinia = createPinia();
-
-app.use(pinia);
-app.use(router);
-app.use(ElementPlus);
-
-app.mount('#app');
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/router/index.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/router/index.ts
deleted file mode 100644
index 9a71d7d..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/router/index.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * 璺敱閰嶇疆
- * 鏀寔鍔ㄦ�佽彍鍗曡矾鐢辨敞鍐�
- */
-import { createRouter, createWebHashHistory } from 'vue-router';
-import type { RouteRecordRaw } from 'vue-router';
-import { useMenuStore } from '@/store/modules/menu';
-import { transformMenuToRoutes } from '@/utils/menuTransform';
-
-const routes: RouteRecordRaw[] = [
-  {
-    path: '/login',
-    name: 'Login',
-    component: () => import('@/views/login/index.vue'),
-    meta: { anonymous: true },
-  },
-  {
-    path: '/',
-    name: 'root',
-    component: () => import('@/layouts/MainLayout.vue'),
-    redirect: '/home',
-    children: [
-      { path: '/home', name: 'Home', component: () => import('@/views/dashboard/index.vue'), meta: { title: '棣栭〉', icon: 'el-icon-home' } },
-    ],
-  },
-  { path: '/:pathMatch(.*)*', redirect: '/home' },
-];
-
-const router = createRouter({
-  history: createWebHashHistory(),
-  routes,
-});
-
-/**
- * 鍔ㄦ�佹敞鍐岃矾鐢�
- */
-export async function registerDynamicRoutes() {
-  const menuStore = useMenuStore();
-
-  if (!menuStore.loaded) {
-    await menuStore.loadMenus();
-  }
-
-  const dynamicRoutes = transformMenuToRoutes(menuStore.menus);
-  const rootRoute = router.getRoutes().find((r) => r.name === 'root');
-  if (!rootRoute) return;
-
-  dynamicRoutes.forEach((route) => {
-    const exists = router.getRoutes().some((r) => r.name === route.name);
-    if (!exists && route.name) {
-      router.addRoute('root', route);
-    }
-  });
-
-  return dynamicRoutes;
-}
-
-router.beforeEach(async (to, from, next) => {
-  if (to.meta?.anonymous) {
-    return next();
-  }
-
-  const userStr = localStorage.getItem('user');
-  if (!userStr) {
-    return next('/login');
-  }
-
-  const menuStore = useMenuStore();
-  if (!menuStore.loaded) {
-    try {
-      await registerDynamicRoutes();
-    } catch (error) {
-      console.error('娉ㄥ唽鍔ㄦ�佽矾鐢卞け璐�:', error);
-    }
-  }
-
-  next();
-});
-
-export { router };
-export default router;
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/store/index.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/store/index.ts
deleted file mode 100644
index 2fcfbda..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/store/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * Store 缁熶竴瀵煎嚭
- */
-export { useMenuStore } from './modules/menu';
-export { useUserStore } from './user';
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/store/modules/menu.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/store/modules/menu.ts
deleted file mode 100644
index 34ed521..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/store/modules/menu.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 鑿滃崟鐘舵�佺鐞�
- */
-import { defineStore } from 'pinia';
-import { menuApi, type BackendMenuNode } from '@/api/modules/menu';
-import { normalizeMenus, addHomeMenu } from '@/utils/menuTransform';
-
-interface MenuState {
-  menus: BackendMenuNode[];
-  loaded: boolean;
-}
-
-export const useMenuStore = defineStore('menu', {
-  state: (): MenuState => ({
-    menus: [],
-    loaded: false,
-  }),
-
-  getters: {
-    flatMenus: (state) => {
-      const flat: BackendMenuNode[] = [];
-      const flatten = (items: BackendMenuNode[]) => {
-        items.forEach((item) => {
-          flat.push(item);
-          if (item.children?.length) {
-            flatten(item.children);
-          }
-        });
-      };
-      flatten(state.menus);
-      return flat;
-    },
-  },
-
-  actions: {
-    async loadMenus() {
-      try {
-        const data = await menuApi.getTreeMenu();
-        this.menus = addHomeMenu(data || []);
-        this.loaded = true;
-        return this.menus;
-      } catch (error) {
-        console.error('鍔犺浇鑿滃崟澶辫触:', error);
-        throw error;
-      }
-    },
-
-    findMenuByPath(path: string): BackendMenuNode | null {
-      return this.flatMenus.find((m) => m.path === path) || null;
-    },
-
-    resetMenus() {
-      this.menus = [];
-      this.loaded = false;
-    },
-  },
-});
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/store/user.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/store/user.ts
deleted file mode 100644
index 028f1f6..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/store/user.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import { defineStore } from 'pinia';
-import { ref, computed } from 'vue';
-
-interface UserInfo {
-  token: string;
-  userName: string;
-  userTrueName: string;
-  img: string;
-}
-
-export const useUserStore = defineStore('user', () => {
-  const userInfo = ref<UserInfo | null>(null);
-  const token = ref<string>('');
-  const isLogin = computed(() => !!token.value);
-
-  function init() {
-    const stored = localStorage.getItem('user');
-    if (stored) {
-      try {
-        const info = JSON.parse(stored) as UserInfo;
-        userInfo.value = info;
-        token.value = info?.token || '';
-      } catch {
-        token.value = '';
-      }
-    }
-  }
-
-  function setUserInfo(info: UserInfo) {
-    userInfo.value = info;
-    token.value = info?.token || '';
-    localStorage.setItem('user', JSON.stringify(info));
-  }
-
-  function clearUserInfo() {
-    userInfo.value = null;
-    token.value = '';
-    localStorage.removeItem('user');
-  }
-
-  init();
-  return { userInfo, token, isLogin, setUserInfo, clearUserInfo };
-});
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/utils/menuTransform.ts b/Code/WMS/WIDESEA_WMSClient_Vben/src/utils/menuTransform.ts
deleted file mode 100644
index cef9744..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/utils/menuTransform.ts
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * 鑿滃崟鏁版嵁杞崲宸ュ叿
- * 灏嗗悗绔彍鍗曟牸寮忚浆鎹负 Vben Admin 鑿滃崟鏍煎紡
- */
-import type { RouteRecordRaw } from 'vue-router';
-import type { BackendMenuNode } from '@/api/modules/menu';
-
-/** Element Plus 鍥炬爣鍚嶇О鏄犲皠 */
-const iconMap: Record<string, string> = {
-  'el-icon-menu': 'Menu',
-  'el-icon-user': 'User',
-  'el-icon-setting': 'Setting',
-  'el-icon-home': 'HomeFilled',
-  'el-icon-document': 'Document',
-  'el-icon-edit': 'Edit',
-  'el-icon-view': 'View',
-  'el-icon-delete': 'Delete',
-  'el-icon-search': 'Search',
-  'el-icon-refresh': 'Refresh',
-  'el-icon-download': 'Download',
-  'el-icon-upload': 'Upload',
-  'el-icon-goods': 'Goods',
-  'el-icon-box': 'Box',
-  'el-icon-truck': 'Van',
-  'el-icon-shop': 'Shop',
-  'el-icon-list': 'List',
-  'el-icon-grid': 'Grid',
-  'el-icon-s-custom': 'UserFilled',
-  'el-icon-s-order': 'List',
-  'el-icon-s-grid': 'Grid',
-  'el-icon-s-home': 'HomeFilled',
-  'el-icon-s-data': 'DataLine',
-  'el-icon-s-check': 'CircleCheck',
-  'el-icon-s-management': 'Management',
-};
-
-/**
- * 杞崲鍥炬爣鍚嶇О
- * el-icon-menu -> Menu
- */
-export function transformIcon(icon?: string): string {
-  if (!icon) return 'Menu';
-  return iconMap[icon] || 'Menu';
-}
-
-/**
- * 鏍囧噯鍖栬彍鍗曡矾寰�
- * "/Manager/home" -> "/home"
- */
-export function normalizePath(url?: string): string {
-  if (!url) return '/';
-  let path = url.replace('/Manager', '') || '/';
-  if (!path.startsWith('/')) {
-    path = '/' + path;
-  }
-  return path;
-}
-
-/**
- * 妫�鏌ユ槸鍚︿负澶栭儴閾炬帴
- */
-function isExternalUrl(url?: string): boolean {
-  if (!url) return false;
-  return url.startsWith('http://') || url.startsWith('https://');
-}
-
-/**
- * 灏嗗悗绔彍鍗曡妭鐐硅浆鎹负 Vben 鑿滃崟椤�
- */
-export function transformMenuItem(menu: BackendMenuNode): RouteRecordRaw | null {
-  const name = menu.name || menu.text || '鏈懡鍚�';
-  const url = menu.url || menu.path || '';
-  const path = normalizePath(url);
-
-  // 璺宠繃澶栭儴閾炬帴
-  if (isExternalUrl(url)) {
-    return null;
-  }
-
-  const route: RouteRecordRaw = {
-    path,
-    name: path.replace(/\//g, '_').replace(/^_/, '') || 'root',
-    meta: {
-      title: name,
-      icon: menu.icon || 'el-icon-menu',
-    },
-  };
-
-  // 閫掑綊澶勭悊瀛愯彍鍗�
-  if (menu.children?.length) {
-    const children = menu.children
-      .map((child) => transformMenuItem(child))
-      .filter((r): r is RouteRecordRaw => r !== null);
-    if (children.length > 0) {
-      route.children = children;
-    }
-  }
-
-  return route;
-}
-
-/**
- * 灏嗗悗绔彍鍗曟暟缁勮浆鎹负璺敱鏁扮粍
- */
-export function transformMenuToRoutes(menus: BackendMenuNode[]): RouteRecordRaw[] {
-  const routes: RouteRecordRaw[] = [];
-
-  menus.forEach((menu) => {
-    const route = transformMenuItem(menu);
-    if (route) {
-      routes.push(route);
-    }
-  });
-
-  return routes;
-}
-
-/**
- * 灏嗗悗绔彍鍗曟暟缁勬爣鍑嗗寲
- */
-export function normalizeMenus(menus: BackendMenuNode[]): BackendMenuNode[] {
-  return menus.map((menu) => ({
-    ...menu,
-    path: normalizePath(menu.url || menu.path),
-    icon: menu.icon || 'el-icon-menu',
-    children: menu.children ? normalizeMenus(menu.children) : undefined,
-  }));
-}
-
-/**
- * 涓鸿彍鍗曞垪琛ㄦ坊鍔犻椤甸」
- */
-export function addHomeMenu(menus: BackendMenuNode[]): BackendMenuNode[] {
-  const normalized = normalizeMenus(menus);
-  normalized.push({
-    id: 'home',
-    name: '棣栭〉',
-    text: '棣栭〉',
-    path: '/home',
-    icon: 'el-icon-home',
-  });
-  return normalized;
-}
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/dashboard/index.vue b/Code/WMS/WIDESEA_WMSClient_Vben/src/views/dashboard/index.vue
deleted file mode 100644
index 1745f6a..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/dashboard/index.vue
+++ /dev/null
@@ -1,47 +0,0 @@
-<template>
-  <div class="dashboard">
-    <h1>娆㈣繋浣跨敤WMS绠$悊绯荤粺</h1>
-    <el-row :gutter="20">
-      <el-col :span="6">
-        <el-card>
-          <template #header>鎬诲簱瀛�</template>
-          <div class="stat-value">10,000</div>
-        </el-card>
-      </el-col>
-      <el-col :span="6">
-        <el-card>
-          <template #header>浠婃棩鍏ュ簱</template>
-          <div class="stat-value">150</div>
-        </el-card>
-      </el-col>
-      <el-col :span="6">
-        <el-card>
-          <template #header>浠婃棩鍑哄簱</template>
-          <div class="stat-value">120</div>
-        </el-card>
-      </el-col>
-      <el-col :span="6">
-        <el-card>
-          <template #header>寰呭鐞嗕换鍔�</template>
-          <div class="stat-value">25</div>
-        </el-card>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script setup lang="ts">
-</script>
-
-<style scoped>
-.dashboard h1 {
-  margin-bottom: 20px;
-  color: #333;
-}
-.stat-value {
-  font-size: 28px;
-  font-weight: bold;
-  text-align: center;
-  color: #409eff;
-}
-</style>
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/inbound/inboundOrderDetail.vue b/Code/WMS/WIDESEA_WMSClient_Vben/src/views/inbound/inboundOrderDetail.vue
deleted file mode 100644
index 4f5ae51..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/inbound/inboundOrderDetail.vue
+++ /dev/null
@@ -1,105 +0,0 @@
-<template>
-  <div class="inbound-detail-page">
-    <el-card shadow="never">
-      <template #header>
-        <span>鍏ュ簱鍗曟槑缁� - {{ route.query.inboundOrderNo || '' }}</span>
-      </template>
-
-      <el-form :inline="true" :model="queryForm" class="search-form">
-        <el-form-item label="鐗╂枡缂栧彿">
-          <el-input v-model="queryForm.materielCode" placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�" clearable />
-        </el-form-item>
-        <el-form-item label="鐗╂枡鍚嶇О">
-          <el-input v-model="queryForm.materielName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" clearable />
-        </el-form-item>
-        <el-form-item label="鎵规鍙�">
-          <el-input v-model="queryForm.batchNo" placeholder="璇疯緭鍏ユ壒娆″彿" clearable />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="handleSearch">鏌ヨ</el-button>
-          <el-button @click="handleReset">閲嶇疆</el-button>
-        </el-form-item>
-      </el-form>
-
-      <el-table v-loading="loading" :data="tableData" border stripe>
-        <el-table-column prop="materielCode" label="鐗╂枡缂栧彿" min-width="150" show-overflow-tooltip />
-        <el-table-column prop="materielName" label="鐗╂枡鍚嶇О" min-width="160" show-overflow-tooltip />
-        <el-table-column prop="batchNo" label="鎵规鍙�" min-width="120" align="center" />
-        <el-table-column prop="orderQuantity" label="鍗曟嵁鏁伴噺" min-width="100" align="center" />
-        <el-table-column prop="receiptQuantity" label="缁勭洏鏁伴噺" min-width="120" align="center" />
-        <el-table-column prop="overInQuantity" label="涓婃灦鏁伴噺" min-width="120" align="center" />
-        <el-table-column prop="orderDetailStatus" label="鏄庣粏鐘舵��" min-width="110" align="center">
-          <template #default="{ row }">
-            {{ getDetailStatusText(row.orderDetailStatus) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="creater" label="鍒涘缓浜�" min-width="90" align="center" />
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="160" align="center" />
-      </el-table>
-
-      <el-pagination
-        v-model:current-page="pagination.page"
-        v-model:page-size="pagination.pageSize"
-        :total="pagination.total"
-        :page-sizes="[10, 20, 50, 100]"
-        layout="total, sizes, prev, pager, next, jumper"
-        @size-change="handleSizeChange"
-        @current-change="handlePageChange"
-        style="margin-top: 16px; justify-content: flex-end"
-      />
-    </el-card>
-  </div>
-</template>
-
-<script setup>
-import { ref, reactive, onMounted } from 'vue';
-import { useRoute } from 'vue-router';
-import { ElMessage } from 'element-plus';
-import { client } from '@/api/client';
-
-const route = useRoute();
-const loading = ref(false);
-const tableData = ref([]);
-const detailStatusOptions = ref([]);
-
-const queryForm = reactive({ materielCode: '', materielName: '', batchNo: '' });
-const pagination = reactive({ page: 1, pageSize: 20, total: 0 });
-
-async function loadData() {
-  loading.value = true;
-  try {
-    const orderId = route.query.id;
-    const wheres = [{ name: 'orderId', value: String(orderId), displayType: 'int' }];
-    if (queryForm.materielCode) wheres.push({ name: 'materielCode', value: queryForm.materielCode, displayType: 'like' });
-    if (queryForm.materielName) wheres.push({ name: 'materielName', value: queryForm.materielName, displayType: 'like' });
-    if (queryForm.batchNo) wheres.push({ name: 'batchNo', value: queryForm.batchNo, displayType: 'like' });
-    const res = await client.post('/api/InboundOrderDetail/getPageList', {
-      page: pagination.page, rows: pagination.pageSize, sort: 'id', order: 'asc',
-      wheres: JSON.stringify(wheres),
-    });
-    tableData.value = res?.rows || [];
-    pagination.total = res?.total || 0;
-  } catch { ElMessage.error('鍔犺浇鏁版嵁澶辫触'); }
-  finally { loading.value = false; }
-}
-
-async function loadDictionary() {
-  try {
-    const res = await client.post('/api/Sys_Dictionary/GetVueDictionary', ['orderDetailStatusEnum']);
-    detailStatusOptions.value = res?.find(item => item.dicNo === 'orderDetailStatusEnum')?.data || [];
-  } catch { detailStatusOptions.value = []; }
-}
-
-function handleSearch() { pagination.page = 1; loadData(); }
-function handleReset() { queryForm.materielCode = ''; queryForm.materielName = ''; queryForm.batchNo = ''; handleSearch(); }
-function handleSizeChange() { loadData(); }
-function handlePageChange() { loadData(); }
-const getDetailStatusText = (val) => detailStatusOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-
-onMounted(() => { loadDictionary(); loadData(); });
-</script>
-
-<style scoped>
-.inbound-detail-page { padding: 16px; }
-.search-form { margin-bottom: 12px; }
-</style>
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/inbound/index.vue b/Code/WMS/WIDESEA_WMSClient_Vben/src/views/inbound/index.vue
deleted file mode 100644
index e71026b..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/inbound/index.vue
+++ /dev/null
@@ -1,275 +0,0 @@
-<template>
-  <div class="inbound-page">
-    <!-- 鎼滅储 -->
-    <el-card class="search-card" shadow="never">
-      <el-form :inline="true" :model="queryForm" label-width="90px">
-        <el-form-item label="鍗曟嵁缂栧彿">
-          <el-input v-model="queryForm.inboundOrderNo" placeholder="璇疯緭鍏ュ崟鎹紪鍙�" clearable style="width: 170px" />
-        </el-form-item>
-        <el-form-item label="涓婃父鍗曟嵁">
-          <el-input v-model="queryForm.upperOrderNo" placeholder="璇疯緭鍏ヤ笂娓稿崟鎹紪鍙�" clearable style="width: 170px" />
-        </el-form-item>
-        <el-form-item label="鍗曟嵁绫诲瀷">
-          <el-select v-model="queryForm.orderType" placeholder="璇烽�夋嫨" clearable style="width: 150px">
-            <el-option v-for="item in orderTypeOptions" :key="item.key" :label="item.value" :value="item.key" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鍗曟嵁鐘舵��">
-          <el-select v-model="queryForm.orderStatus" placeholder="璇烽�夋嫨" clearable style="width: 140px">
-            <el-option v-for="item in orderStatusOptions" :key="item.key" :label="item.value" :value="item.key" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鍒涘缓鏃堕棿">
-          <el-date-picker v-model="queryForm.createDate" type="daterange" range-separator="鑷�" start-placeholder="寮�濮�" end-placeholder="缁撴潫" value-format="YYYY-MM-DD" />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="handleSearch">鏌ヨ</el-button>
-          <el-button @click="handleReset">閲嶇疆</el-button>
-        </el-form-item>
-      </el-form>
-    </el-card>
-
-    <!-- 琛ㄦ牸 -->
-    <el-card class="table-card" shadow="never">
-      <div class="toolbar">
-        <el-button type="primary" @click="handleAdd">鏂板</el-button>
-        <el-button type="danger" :disabled="!selectedRows.length" @click="handleBatchDelete">鎵归噺鍒犻櫎</el-button>
-      </div>
-
-      <el-table v-loading="loading" :data="tableData" border stripe @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="50" align="center" />
-        <el-table-column prop="inboundOrderNo" label="鍗曟嵁缂栧彿" min-width="140" show-overflow-tooltip />
-        <el-table-column prop="upperOrderNo" label="涓婃父鍗曟嵁缂栧彿" min-width="150" show-overflow-tooltip />
-        <el-table-column prop="warehouseId" label="浠撳簱" min-width="100" align="center">
-          <template #default="{ row }">
-            {{ getWarehouseText(row.warehouseId) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="orderType" label="鍗曟嵁绫诲瀷" min-width="140" align="center">
-          <template #default="{ row }">
-            {{ getOrderTypeText(row.orderType) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="orderStatus" label="鍗曟嵁鐘舵��" min-width="100" align="center">
-          <template #default="{ row }">
-            {{ getOrderStatusText(row.orderStatus) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="createType" label="鍒涘缓鏂瑰紡" min-width="110" align="center">
-          <template #default="{ row }">
-            {{ getCreateTypeText(row.createType) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="creater" label="鍒涘缓浜�" min-width="90" align="center" />
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="160" align="center" />
-        <el-table-column label="鎿嶄綔" width="180" align="center" fixed="right">
-          <template #default="{ row }">
-            <el-button link type="primary" size="small" @click="goDetail(row)">鏄庣粏</el-button>
-            <el-button link type="primary" size="small" @click="handleEdit(row)">缂栬緫</el-button>
-            <el-button link type="danger" size="small" @click="handleDelete(row)">鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <el-pagination
-        v-model:current-page="pagination.page"
-        v-model:page-size="pagination.pageSize"
-        :total="pagination.total"
-        :page-sizes="[10, 20, 50, 100]"
-        layout="total, sizes, prev, pager, next, jumper"
-        @size-change="handleSizeChange"
-        @current-change="handlePageChange"
-        style="margin-top: 16px; justify-content: flex-end"
-      />
-    </el-card>
-
-    <!-- 鏄庣粏鎶藉眽 -->
-    <el-drawer v-model="detailDrawerVisible" title="鍏ュ簱鍗曟槑缁�" size="70%" direction="rtl" destroy-on-close>
-      <el-table :data="detailTableData" border stripe max-height="600">
-        <el-table-column prop="materielCode" label="鐗╂枡缂栧彿" min-width="150" show-overflow-tooltip />
-        <el-table-column prop="materielName" label="鐗╂枡鍚嶇О" min-width="150" show-overflow-tooltip />
-        <el-table-column prop="batchNo" label="鎵规鍙�" min-width="120" align="center" />
-        <el-table-column prop="orderQuantity" label="鍗曟嵁鏁伴噺" min-width="100" align="center" />
-        <el-table-column prop="receiptQuantity" label="缁勭洏鏁伴噺" min-width="120" align="center" />
-        <el-table-column prop="overInQuantity" label="涓婃灦鏁伴噺" min-width="120" align="center" />
-        <el-table-column prop="orderDetailStatus" label="鏄庣粏鐘舵��" min-width="110" align="center">
-          <template #default="{ row }">
-            {{ getDetailStatusText(row.orderDetailStatus) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="creater" label="鍒涘缓浜�" min-width="90" align="center" />
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="160" align="center" />
-      </el-table>
-    </el-drawer>
-
-    <!-- 缂栬緫寮圭獥 -->
-    <el-dialog v-model="dialogVisible" :title="dialogTitle" width="560px" destroy-on-close>
-      <el-form :model="editForm" :rules="editRules" ref="editFormRef" label-width="100px">
-        <el-form-item label="鍗曟嵁绫诲瀷" prop="orderType">
-          <el-select v-model="editForm.orderType" placeholder="璇烽�夋嫨鍗曟嵁绫诲瀷" style="width: 100%">
-            <el-option v-for="item in orderTypeOptions" :key="item.key" :label="item.value" :value="item.key" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鍗曟嵁缂栧彿" prop="inboundOrderNo">
-          <el-input v-model="editForm.inboundOrderNo" placeholder="璇疯緭鍏ュ崟鎹紪鍙�" />
-        </el-form-item>
-        <el-form-item label="涓婃父鍗曟嵁">
-          <el-input v-model="editForm.upperOrderNo" placeholder="璇疯緭鍏ヤ笂娓稿崟鎹紪鍙�" />
-        </el-form-item>
-        <el-form-item label="浠撳簱" prop="warehouseId">
-          <el-select v-model="editForm.warehouseId" placeholder="璇烽�夋嫨浠撳簱" style="width: 100%">
-            <el-option v-for="item in warehouseOptions" :key="item.key" :label="item.value" :value="item.key" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="澶囨敞">
-          <el-input v-model="editForm.remark" type="textarea" :rows="3" placeholder="璇疯緭鍏ュ娉�" />
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <el-button @click="dialogVisible = false">鍙栨秷</el-button>
-        <el-button type="primary" @click="handleSubmit" :loading="submitLoading">纭畾</el-button>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
-<script setup>
-import { ref, reactive, onMounted } from 'vue';
-import { useRouter } from 'vue-router';
-import { ElMessage, ElMessageBox } from 'element-plus';
-import { inboundApi } from '@/api/modules/inbound';
-import { client } from '@/api/client';
-
-const router = useRouter();
-
-// 鎼滅储
-const queryForm = reactive({ inboundOrderNo: '', upperOrderNo: '', orderType: undefined, orderStatus: undefined, createDate: '' });
-
-// 琛ㄦ牸
-const loading = ref(false);
-const tableData = ref([]);
-const selectedRows = ref([]);
-
-// 瀛楀吀
-const orderTypeOptions = ref([]);
-const orderStatusOptions = ref([]);
-const warehouseOptions = ref([]);
-const createTypeOptions = ref([]);
-const detailStatusOptions = ref([]);
-
-// 鍒嗛〉
-const pagination = reactive({ page: 1, pageSize: 20, total: 0 });
-
-// 鏄庣粏鎶藉眽
-const detailDrawerVisible = ref(false);
-const detailTableData = ref([]);
-const currentRow = ref(null);
-
-// 缂栬緫寮圭獥
-const dialogVisible = ref(false);
-const dialogTitle = ref('鏂板鍏ュ簱鍗�');
-const editFormRef = ref(null);
-const submitLoading = ref(false);
-const editForm = reactive({ id: undefined, orderType: undefined, inboundOrderNo: '', upperOrderNo: '', warehouseId: undefined, remark: '' });
-const editRules = {
-  orderType: [{ required: true, message: '璇烽�夋嫨鍗曟嵁绫诲瀷', trigger: 'change' }],
-  inboundOrderNo: [{ required: true, message: '璇疯緭鍏ュ崟鎹紪鍙�', trigger: 'blur' }],
-  warehouseId: [{ required: true, message: '璇烽�夋嫨浠撳簱', trigger: 'change' }],
-};
-
-async function loadData() {
-  loading.value = true;
-  try {
-    const wheres = [
-      queryForm.inboundOrderNo ? { name: 'inboundOrderNo', value: queryForm.inboundOrderNo, displayType: 'like' } : null,
-      queryForm.upperOrderNo ? { name: 'upperOrderNo', value: queryForm.upperOrderNo, displayType: 'like' } : null,
-      queryForm.orderType !== undefined ? { name: 'orderType', value: queryForm.orderType, displayType: 'int' } : null,
-      queryForm.orderStatus !== undefined ? { name: 'orderStatus', value: queryForm.orderStatus, displayType: 'int' } : null,
-    ].filter(Boolean);
-    const res = await inboundApi.getPageList({ page: pagination.page, rows: pagination.pageSize, sort: 'id', order: 'desc', wheres: JSON.stringify(wheres) });
-    tableData.value = res?.rows || [];
-    pagination.total = res?.total || 0;
-  } catch { ElMessage.error('鍔犺浇鏁版嵁澶辫触'); }
-  finally { loading.value = false; }
-}
-
-async function loadDetail(row) {
-  try {
-    const res = await client.post('/api/InboundOrderDetail/getPageList', {
-      page: 1, rows: 200, sort: 'id', order: 'asc',
-      wheres: JSON.stringify([{ name: 'orderId', value: row.id, displayType: 'int' }]),
-    });
-    detailTableData.value = res?.rows || [];
-  } catch { detailTableData.value = []; ElMessage.error('鍔犺浇鏄庣粏澶辫触'); }
-}
-
-async function loadDictionary() {
-  try {
-    const res = await client.post('/api/Sys_Dictionary/GetVueDictionary', ['inOrderType', 'inboundState', 'warehouses', 'createType', 'orderDetailStatusEnum']);
-    const findData = (dicNo) => res?.find(item => item.dicNo === dicNo)?.data || [];
-    orderTypeOptions.value = findData('inOrderType');
-    orderStatusOptions.value = findData('inboundState');
-    warehouseOptions.value = findData('warehouses');
-    createTypeOptions.value = findData('createType');
-    detailStatusOptions.value = findData('orderDetailStatusEnum');
-  } catch {
-    orderTypeOptions.value = []; orderStatusOptions.value = []; warehouseOptions.value = [];
-  }
-}
-
-function goDetail(row) { router.push({ path: '/inbound/inboundOrderDetail', query: { id: row.id, inboundOrderNo: row.inboundOrderNo } }); }
-
-function handleSearch() { pagination.page = 1; loadData(); }
-function handleReset() { queryForm.inboundOrderNo = ''; queryForm.upperOrderNo = ''; queryForm.orderType = undefined; queryForm.orderStatus = undefined; queryForm.createDate = ''; handleSearch(); }
-
-function handleAdd() {
-  editForm.id = undefined; editForm.orderType = undefined; editForm.inboundOrderNo = ''; editForm.upperOrderNo = ''; editForm.warehouseId = undefined; editForm.remark = '';
-  dialogTitle.value = '鏂板鍏ュ簱鍗�'; dialogVisible.value = true;
-}
-
-function handleEdit(row) {
-  Object.assign(editForm, { id: row.id, orderType: row.orderType, inboundOrderNo: row.inboundOrderNo, upperOrderNo: row.upperOrderNo, warehouseId: row.warehouseId, remark: row.remark });
-  dialogTitle.value = '缂栬緫鍏ュ簱鍗�'; dialogVisible.value = true;
-}
-
-async function handleSubmit() {
-  await editFormRef.value.validate();
-  submitLoading.value = true;
-  try {
-    if (editForm.id) { await inboundApi.update(editForm); ElMessage.success('鏇存柊鎴愬姛'); }
-    else { await inboundApi.add(editForm); ElMessage.success('鏂板鎴愬姛'); }
-    dialogVisible.value = false; loadData();
-  } catch { ElMessage.error('鎿嶄綔澶辫触'); }
-  finally { submitLoading.value = false; }
-}
-
-function handleDelete(row) {
-  ElMessageBox.confirm(`纭畾鍒犻櫎鍏ュ簱鍗曘��${row.inboundOrderNo}銆嶅悧锛焋, '鎻愮ず', { type: 'warning' })
-    .then(async () => { await inboundApi.deleteById(row.id); ElMessage.success('鍒犻櫎鎴愬姛'); loadData(); }).catch(() => {});
-}
-
-function handleBatchDelete() {
-  const ids = selectedRows.value.map(r => r.id);
-  ElMessageBox.confirm(`纭畾鍒犻櫎閫変腑鐨� ${ids.length} 鏉¤褰曞悧锛焋, '鎻愮ず', { type: 'warning' })
-    .then(async () => { await Promise.all(ids.map(id => inboundApi.deleteById(id))); ElMessage.success('鍒犻櫎鎴愬姛'); loadData(); }).catch(() => {});
-}
-
-function handleSelectionChange(rows) { selectedRows.value = rows; }
-function handleSizeChange() { loadData(); }
-function handlePageChange() { loadData(); }
-
-const getWarehouseText = (val) => warehouseOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-const getOrderTypeText = (val) => orderTypeOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-const getOrderStatusText = (val) => orderStatusOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-const getCreateTypeText = (val) => createTypeOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-const getDetailStatusText = (val) => detailStatusOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-
-onMounted(() => { loadDictionary(); loadData(); });
-</script>
-
-<style scoped>
-.inbound-page { padding: 16px; }
-.search-card { margin-bottom: 12px; }
-.table-card { margin-bottom: 12px; }
-.toolbar { margin-bottom: 12px; }
-</style>
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/login/index.vue b/Code/WMS/WIDESEA_WMSClient_Vben/src/views/login/index.vue
deleted file mode 100644
index 03312f9..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/login/index.vue
+++ /dev/null
@@ -1,196 +0,0 @@
-<template>
-  <div class="login-container">
-    <div class="login-box">
-      <div class="login-header">
-        <h2>WIDESEA WMS</h2>
-        <p>浠撳簱绠$悊绯荤粺</p>
-      </div>
-
-      <el-form ref="loginFormRef" :model="loginForm" :rules="loginRules" class="login-form">
-        <el-form-item prop="username">
-          <el-input
-            v-model="loginForm.username"
-            placeholder="璇疯緭鍏ヨ处鍙�"
-            size="large"
-            prefix-icon="User"
-          />
-        </el-form-item>
-        <el-form-item prop="password">
-          <el-input
-            v-model="loginForm.password"
-            type="password"
-            placeholder="璇疯緭鍏ュ瘑鐮�"
-            size="large"
-            prefix-icon="Lock"
-            show-password
-          />
-        </el-form-item>
-        <el-form-item prop="verificationCode">
-          <el-input
-            v-model="loginForm.verificationCode"
-            placeholder="璇疯緭鍏ラ獙璇佺爜"
-            size="large"
-            prefix-icon="CircleCheck"
-            style="width: 60%"
-            @keyup.enter="handleLogin"
-          />
-          <div class="captcha-box" @click="loadCaptcha">
-            <img v-if="captchaImg" :src="captchaImg" alt="楠岃瘉鐮�" />
-            <span v-else class="captcha-placeholder">鐐瑰嚮鍒锋柊</span>
-          </div>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" size="large" style="width: 100%" :loading="loading" @click="handleLogin">
-            {{ loading ? '鐧诲綍涓�...' : '鐧� 褰�' }}
-          </el-button>
-        </el-form-item>
-      </el-form>
-
-      <div class="login-footer">
-        <span>婕旂ず璐﹀彿锛歛dmin666 &nbsp;&nbsp; 瀵嗙爜锛�123456</span>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { reactive, ref, onMounted } from 'vue';
-import { useRouter } from 'vue-router';
-import { ElMessage } from 'element-plus';
-import { User, Lock, CircleCheck } from '@element-plus/icons-vue';
-import { userApi } from '@/api/modules/user';
-import { useUserStore } from '@/store';
-
-const router = useRouter();
-const userStore = useUserStore();
-const loginFormRef = ref();
-const loading = ref(false);
-const captchaImg = ref('');
-const uuid = ref('');
-
-const loginForm = reactive({
-  username: 'admin',
-  password: '123456',
-  verificationCode: '',
-});
-
-const loginRules = {
-  username: [{ required: true, message: '璇疯緭鍏ヨ处鍙�', trigger: 'blur' }],
-  password: [{ required: true, message: '璇疯緭鍏ュ瘑鐮�', trigger: 'blur' }],
-  verificationCode: [{ required: true, message: '璇疯緭鍏ラ獙璇佺爜', trigger: 'blur' }],
-};
-
-async function loadCaptcha() {
-  try {
-    const res = await userApi.getCaptcha();
-    if (res?.img) {
-      captchaImg.value = `data:image/png;base64,${res.img}`;
-      uuid.value = res.uuid;
-    }
-  } catch {
-    ElMessage.error('鑾峰彇楠岃瘉鐮佸け璐�');
-  }
-}
-
-async function handleLogin() {
-  if (!loginFormRef.value) return;
-  await loginFormRef.value.validate(async (valid) => {
-    if (!valid) return;
-    loading.value = true;
-    try {
-      const res = await userApi.login({
-        userName: loginForm.username,
-        password: loginForm.password,
-        verificationCode: loginForm.verificationCode,
-        UUID: uuid.value,
-      });
-      if (res?.status === false) {
-        ElMessage.error(res.message || '鐧诲綍澶辫触');
-        loadCaptcha();
-        return;
-      }
-      const userData = res.data || res;
-      userStore.setUserInfo({
-        token: userData.token || userData.access_token || '',
-        userName: userData.userName || loginForm.username,
-        userTrueName: userData.userTrueName || userData.name || '',
-        img: userData.img || '',
-      });
-      ElMessage.success('鐧诲綍鎴愬姛');
-      router.push('/');
-    } catch {
-      ElMessage.error('鐧诲綍寮傚父');
-      loadCaptcha();
-    } finally {
-      loading.value = false;
-    }
-  });
-}
-
-onMounted(() => {
-  loadCaptcha();
-});
-</script>
-
-<style scoped>
-.login-container {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  min-height: 100vh;
-  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-}
-.login-box {
-  width: 420px;
-  padding: 40px;
-  background: #fff;
-  border-radius: 12px;
-  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);
-}
-.login-header {
-  text-align: center;
-  margin-bottom: 30px;
-}
-.login-header h2 {
-  margin: 0 0 8px;
-  font-size: 28px;
-  color: #333;
-  font-weight: 600;
-}
-.login-header p {
-  margin: 0;
-  font-size: 14px;
-  color: #999;
-}
-.login-form {
-  margin-top: 20px;
-}
-.captcha-box {
-  width: 38%;
-  height: 40px;
-  margin-left: 10px;
-  border: 1px solid #dcdfe6;
-  border-radius: 4px;
-  overflow: hidden;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  cursor: pointer;
-  background: #f5f7fa;
-}
-.captcha-box img {
-  width: 100%;
-  height: 100%;
-  object-fit: fill;
-}
-.captcha-placeholder {
-  font-size: 12px;
-  color: #999;
-}
-.login-footer {
-  margin-top: 20px;
-  text-align: center;
-  font-size: 12px;
-  color: #999;
-}
-</style>
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/outbound/index.vue b/Code/WMS/WIDESEA_WMSClient_Vben/src/views/outbound/index.vue
deleted file mode 100644
index 5d5a1f9..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/outbound/index.vue
+++ /dev/null
@@ -1,267 +0,0 @@
-<template>
-  <div class="outbound-page">
-    <!-- 鎼滅储 -->
-    <el-card class="search-card" shadow="never">
-      <el-form :inline="true" :model="queryForm" label-width="90px">
-        <el-form-item label="鍗曟嵁缂栧彿">
-          <el-input v-model="queryForm.orderNo" placeholder="璇疯緭鍏ュ崟鎹紪鍙�" clearable style="width: 170px" />
-        </el-form-item>
-        <el-form-item label="涓婃父鍗曟嵁">
-          <el-input v-model="queryForm.upperOrderNo" placeholder="璇疯緭鍏ヤ笂娓稿崟鎹紪鍙�" clearable style="width: 170px" />
-        </el-form-item>
-        <el-form-item label="鍗曟嵁绫诲瀷">
-          <el-select v-model="queryForm.orderType" placeholder="璇烽�夋嫨" clearable style="width: 150px">
-            <el-option v-for="item in orderTypeOptions" :key="item.key" :label="item.value" :value="item.key" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鍗曟嵁鐘舵��">
-          <el-select v-model="queryForm.orderStatus" placeholder="璇烽�夋嫨" clearable style="width: 140px">
-            <el-option v-for="item in orderStatusOptions" :key="item.key" :label="item.value" :value="item.key" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鍒涘缓鏃堕棿">
-          <el-date-picker v-model="queryForm.createDate" type="daterange" range-separator="鑷�" start-placeholder="寮�濮�" end-placeholder="缁撴潫" value-format="YYYY-MM-DD" />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="handleSearch">鏌ヨ</el-button>
-          <el-button @click="handleReset">閲嶇疆</el-button>
-        </el-form-item>
-      </el-form>
-    </el-card>
-
-    <!-- 琛ㄦ牸 -->
-    <el-card class="table-card" shadow="never">
-      <div class="toolbar">
-        <el-button type="primary" @click="handleAdd">鏂板</el-button>
-        <el-button type="danger" :disabled="!selectedRows.length" @click="handleBatchDelete">鎵归噺鍒犻櫎</el-button>
-      </div>
-
-      <el-table v-loading="loading" :data="tableData" border stripe @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="50" align="center" />
-        <el-table-column prop="orderNo" label="鍗曟嵁缂栧彿" min-width="160" show-overflow-tooltip />
-        <el-table-column prop="upperOrderNo" label="涓婃父鍗曟嵁缂栧彿" min-width="160" show-overflow-tooltip />
-        <el-table-column prop="warehouseId" label="浠撳簱" min-width="100" align="center">
-          <template #default="{ row }">
-            {{ getWarehouseText(row.warehouseId) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="orderType" label="鍗曟嵁绫诲瀷" min-width="150" align="center">
-          <template #default="{ row }">
-            {{ getOrderTypeText(row.orderType) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="orderStatus" label="鍗曟嵁鐘舵��" min-width="100" align="center">
-          <template #default="{ row }">
-            {{ getOrderStatusText(row.orderStatus) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="createType" label="鍒涘缓鏂瑰紡" min-width="110" align="center">
-          <template #default="{ row }">
-            {{ getCreateTypeText(row.createType) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="departmentName" label="閮ㄩ棬鍚嶇О" min-width="160" show-overflow-tooltip />
-        <el-table-column prop="creater" label="鍒涘缓浜�" min-width="90" align="center" />
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="160" align="center" />
-        <el-table-column label="鎿嶄綔" width="180" align="center" fixed="right">
-          <template #default="{ row }">
-            <el-button link type="primary" size="small" @click="goDetail(row)">鏄庣粏</el-button>
-            <el-button link type="primary" size="small" @click="handleEdit(row)">缂栬緫</el-button>
-            <el-button link type="danger" size="small" @click="handleDelete(row)">鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <el-pagination
-        v-model:current-page="pagination.page"
-        v-model:page-size="pagination.pageSize"
-        :total="pagination.total"
-        :page-sizes="[10, 20, 50, 100]"
-        layout="total, sizes, prev, pager, next, jumper"
-        @size-change="handleSizeChange"
-        @current-change="handlePageChange"
-        style="margin-top: 16px; justify-content: flex-end"
-      />
-    </el-card>
-
-    <!-- 鏄庣粏鎶藉眽 -->
-    <el-drawer v-model="detailDrawerVisible" title="鍑哄簱鍗曟槑缁�" size="70%" direction="rtl" destroy-on-close>
-      <el-table :data="detailTableData" border stripe max-height="600">
-        <el-table-column prop="materielCode" label="鐗╂枡缂栧彿" min-width="150" show-overflow-tooltip />
-        <el-table-column prop="materielName" label="鐗╂枡鍚嶇О" min-width="150" show-overflow-tooltip />
-        <el-table-column prop="batchNo" label="鎵规鍙�" min-width="120" align="center" />
-        <el-table-column prop="orderQuantity" label="鍗曟嵁鏁伴噺" min-width="100" align="center" />
-        <el-table-column prop="rowNo" label="琛屽彿" min-width="80" align="center" />
-        <el-table-column prop="lockQuantity" label="閿佸畾鏁伴噺" min-width="120" align="center" />
-        <el-table-column prop="overOutQuantity" label="宸插嚭鏁伴噺" min-width="120" align="center" />
-        <el-table-column prop="orderDetailStatus" label="鏄庣粏鐘舵��" min-width="110" align="center">
-          <template #default="{ row }">
-            {{ getDetailStatusText(row.orderDetailStatus) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="creater" label="鍒涘缓浜�" min-width="90" align="center" />
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="160" align="center" />
-      </el-table>
-    </el-drawer>
-
-    <!-- 缂栬緫寮圭獥 -->
-    <el-dialog v-model="dialogVisible" :title="dialogTitle" width="560px" destroy-on-close>
-      <el-form :model="editForm" :rules="editRules" ref="editFormRef" label-width="100px">
-        <el-form-item label="鍗曟嵁绫诲瀷" prop="orderType">
-          <el-select v-model="editForm.orderType" placeholder="璇烽�夋嫨鍗曟嵁绫诲瀷" style="width: 100%">
-            <el-option v-for="item in orderTypeOptions" :key="item.key" :label="item.value" :value="item.key" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鍗曟嵁缂栧彿" prop="orderNo">
-          <el-input v-model="editForm.orderNo" placeholder="璇疯緭鍏ュ崟鎹紪鍙�" readonly />
-        </el-form-item>
-        <el-form-item label="涓婃父鍗曟嵁">
-          <el-input v-model="editForm.upperOrderNo" placeholder="璇疯緭鍏ヤ笂娓稿崟鎹紪鍙�" />
-        </el-form-item>
-        <el-form-item label="浠撳簱" prop="warehouseId">
-          <el-select v-model="editForm.warehouseId" placeholder="璇烽�夋嫨浠撳簱" style="width: 100%">
-            <el-option v-for="item in warehouseOptions" :key="item.key" :label="item.value" :value="item.key" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="澶囨敞">
-          <el-input v-model="editForm.remark" type="textarea" :rows="3" placeholder="璇疯緭鍏ュ娉�" />
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <el-button @click="dialogVisible = false">鍙栨秷</el-button>
-        <el-button type="primary" @click="handleSubmit" :loading="submitLoading">纭畾</el-button>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
-<script setup>
-import { ref, reactive, onMounted } from 'vue';
-import { useRouter } from 'vue-router';
-import { ElMessage, ElMessageBox } from 'element-plus';
-import { outboundApi } from '@/api/modules/outbound';
-import { client } from '@/api/client';
-
-const router = useRouter();
-
-const queryForm = reactive({ orderNo: '', upperOrderNo: '', orderType: undefined, orderStatus: undefined, createDate: '' });
-const loading = ref(false);
-const tableData = ref([]);
-const selectedRows = ref([]);
-
-const orderTypeOptions = ref([]);
-const orderStatusOptions = ref([]);
-const warehouseOptions = ref([]);
-const createTypeOptions = ref([]);
-const detailStatusOptions = ref([]);
-
-const pagination = reactive({ page: 1, pageSize: 20, total: 0 });
-
-const detailDrawerVisible = ref(false);
-const detailTableData = ref([]);
-
-const dialogVisible = ref(false);
-const dialogTitle = ref('鏂板鍑哄簱鍗�');
-const editFormRef = ref(null);
-const submitLoading = ref(false);
-const editForm = reactive({ id: undefined, orderType: undefined, orderNo: '', upperOrderNo: '', warehouseId: undefined, remark: '' });
-const editRules = {
-  orderType: [{ required: true, message: '璇烽�夋嫨鍗曟嵁绫诲瀷', trigger: 'change' }],
-  orderNo: [{ required: true, message: '璇疯緭鍏ュ崟鎹紪鍙�', trigger: 'blur' }],
-  warehouseId: [{ required: true, message: '璇烽�夋嫨浠撳簱', trigger: 'change' }],
-};
-
-async function loadData() {
-  loading.value = true;
-  try {
-    const wheres = [
-      queryForm.orderNo ? { name: 'orderNo', value: queryForm.orderNo, displayType: 'like' } : null,
-      queryForm.upperOrderNo ? { name: 'upperOrderNo', value: queryForm.upperOrderNo, displayType: 'like' } : null,
-      queryForm.orderType !== undefined ? { name: 'orderType', value: queryForm.orderType, displayType: 'int' } : null,
-      queryForm.orderStatus !== undefined ? { name: 'orderStatus', value: queryForm.orderStatus, displayType: 'int' } : null,
-    ].filter(Boolean);
-    const res = await outboundApi.getPageList({ page: pagination.page, rows: pagination.pageSize, sort: 'id', order: 'desc', wheres: JSON.stringify(wheres) });
-    tableData.value = res?.rows || [];
-    pagination.total = res?.total || 0;
-  } catch { ElMessage.error('鍔犺浇鏁版嵁澶辫触'); }
-  finally { loading.value = false; }
-}
-
-async function loadDetail(row) {
-  try {
-    const res = await client.post('/api/OutboundOrderDetail/getPageList', {
-      page: 1, rows: 200, sort: 'id', order: 'asc',
-      wheres: JSON.stringify([{ name: 'orderId', value: row.id, displayType: 'int' }]),
-    });
-    detailTableData.value = res?.rows || [];
-  } catch { detailTableData.value = []; ElMessage.error('鍔犺浇鏄庣粏澶辫触'); }
-}
-
-async function loadDictionary() {
-  try {
-    const res = await client.post('/api/Sys_Dictionary/GetVueDictionary', ['outOrderType', 'outboundStatusEnum', 'warehouses', 'createType', 'orderDetailStatusEnum']);
-    const findData = (dicNo) => res?.find(item => item.dicNo === dicNo)?.data || [];
-    orderTypeOptions.value = findData('outOrderType');
-    orderStatusOptions.value = findData('outboundStatusEnum');
-    warehouseOptions.value = findData('warehouses');
-    createTypeOptions.value = findData('createType');
-    detailStatusOptions.value = findData('orderDetailStatusEnum');
-  } catch { orderTypeOptions.value = []; orderStatusOptions.value = []; warehouseOptions.value = []; }
-}
-
-function goDetail(row) { router.push({ path: '/outbound/outboundOrderDetail', query: { id: row.id, orderNo: row.orderNo } }); }
-
-function handleSearch() { pagination.page = 1; loadData(); }
-function handleReset() { queryForm.orderNo = ''; queryForm.upperOrderNo = ''; queryForm.orderType = undefined; queryForm.orderStatus = undefined; queryForm.createDate = ''; handleSearch(); }
-
-function handleAdd() {
-  editForm.id = undefined; editForm.orderType = undefined; editForm.orderNo = ''; editForm.upperOrderNo = ''; editForm.warehouseId = undefined; editForm.remark = '';
-  dialogTitle.value = '鏂板鍑哄簱鍗�'; dialogVisible.value = true;
-}
-
-function handleEdit(row) {
-  Object.assign(editForm, { id: row.id, orderType: row.orderType, orderNo: row.orderNo, upperOrderNo: row.upperOrderNo, warehouseId: row.warehouseId, remark: row.remark });
-  dialogTitle.value = '缂栬緫鍑哄簱鍗�'; dialogVisible.value = true;
-}
-
-async function handleSubmit() {
-  await editFormRef.value.validate();
-  submitLoading.value = true;
-  try {
-    if (editForm.id) { await outboundApi.update(editForm); ElMessage.success('鏇存柊鎴愬姛'); }
-    else { await outboundApi.add(editForm); ElMessage.success('鏂板鎴愬姛'); }
-    dialogVisible.value = false; loadData();
-  } catch { ElMessage.error('鎿嶄綔澶辫触'); }
-  finally { submitLoading.value = false; }
-}
-
-function handleDelete(row) {
-  ElMessageBox.confirm(`纭畾鍒犻櫎鍑哄簱鍗曘��${row.orderNo}銆嶅悧锛焋, '鎻愮ず', { type: 'warning' })
-    .then(async () => { await outboundApi.deleteById(row.id); ElMessage.success('鍒犻櫎鎴愬姛'); loadData(); }).catch(() => {});
-}
-
-function handleBatchDelete() {
-  const ids = selectedRows.value.map(r => r.id);
-  ElMessageBox.confirm(`纭畾鍒犻櫎閫変腑鐨� ${ids.length} 鏉¤褰曞悧锛焋, '鎻愮ず', { type: 'warning' })
-    .then(async () => { await Promise.all(ids.map(id => outboundApi.deleteById(id))); ElMessage.success('鍒犻櫎鎴愬姛'); loadData(); }).catch(() => {});
-}
-
-function handleSelectionChange(rows) { selectedRows.value = rows; }
-function handleSizeChange() { loadData(); }
-function handlePageChange() { loadData(); }
-
-const getWarehouseText = (val) => warehouseOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-const getOrderTypeText = (val) => orderTypeOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-const getOrderStatusText = (val) => orderStatusOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-const getCreateTypeText = (val) => createTypeOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-const getDetailStatusText = (val) => detailStatusOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-
-onMounted(() => { loadDictionary(); loadData(); });
-</script>
-
-<style scoped>
-.outbound-page { padding: 16px; }
-.search-card { margin-bottom: 12px; }
-.table-card { margin-bottom: 12px; }
-.toolbar { margin-bottom: 12px; }
-</style>
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/outbound/outboundOrderDetail.vue b/Code/WMS/WIDESEA_WMSClient_Vben/src/views/outbound/outboundOrderDetail.vue
deleted file mode 100644
index 5c34d7d..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/outbound/outboundOrderDetail.vue
+++ /dev/null
@@ -1,106 +0,0 @@
-<template>
-  <div class="outbound-detail-page">
-    <el-card shadow="never">
-      <template #header>
-        <span>鍑哄簱鍗曟槑缁� - {{ route.query.orderNo || '' }}</span>
-      </template>
-
-      <el-form :inline="true" :model="queryForm" class="search-form">
-        <el-form-item label="鐗╂枡缂栧彿">
-          <el-input v-model="queryForm.materielCode" placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�" clearable />
-        </el-form-item>
-        <el-form-item label="鐗╂枡鍚嶇О">
-          <el-input v-model="queryForm.materielName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" clearable />
-        </el-form-item>
-        <el-form-item label="鎵规鍙�">
-          <el-input v-model="queryForm.batchNo" placeholder="璇疯緭鍏ユ壒娆″彿" clearable />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="handleSearch">鏌ヨ</el-button>
-          <el-button @click="handleReset">閲嶇疆</el-button>
-        </el-form-item>
-      </el-form>
-
-      <el-table v-loading="loading" :data="tableData" border stripe>
-        <el-table-column prop="materielCode" label="鐗╂枡缂栧彿" min-width="150" show-overflow-tooltip />
-        <el-table-column prop="materielName" label="鐗╂枡鍚嶇О" min-width="160" show-overflow-tooltip />
-        <el-table-column prop="batchNo" label="鎵规鍙�" min-width="120" align="center" />
-        <el-table-column prop="orderQuantity" label="鍗曟嵁鏁伴噺" min-width="100" align="center" />
-        <el-table-column prop="rowNo" label="琛屽彿" min-width="80" align="center" />
-        <el-table-column prop="lockQuantity" label="閿佸畾鏁伴噺" min-width="120" align="center" />
-        <el-table-column prop="overOutQuantity" label="宸插嚭鏁伴噺" min-width="120" align="center" />
-        <el-table-column prop="orderDetailStatus" label="鏄庣粏鐘舵��" min-width="110" align="center">
-          <template #default="{ row }">
-            {{ getDetailStatusText(row.orderDetailStatus) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="creater" label="鍒涘缓浜�" min-width="90" align="center" />
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="160" align="center" />
-      </el-table>
-
-      <el-pagination
-        v-model:current-page="pagination.page"
-        v-model:page-size="pagination.pageSize"
-        :total="pagination.total"
-        :page-sizes="[10, 20, 50, 100]"
-        layout="total, sizes, prev, pager, next, jumper"
-        @size-change="handleSizeChange"
-        @current-change="handlePageChange"
-        style="margin-top: 16px; justify-content: flex-end"
-      />
-    </el-card>
-  </div>
-</template>
-
-<script setup>
-import { ref, reactive, onMounted } from 'vue';
-import { useRoute } from 'vue-router';
-import { ElMessage } from 'element-plus';
-import { client } from '@/api/client';
-
-const route = useRoute();
-const loading = ref(false);
-const tableData = ref([]);
-const detailStatusOptions = ref([]);
-
-const queryForm = reactive({ materielCode: '', materielName: '', batchNo: '' });
-const pagination = reactive({ page: 1, pageSize: 20, total: 0 });
-
-async function loadData() {
-  loading.value = true;
-  try {
-    const orderId = route.query.id;
-    const wheres = [{ name: 'orderId', value: String(orderId), displayType: 'int' }];
-    if (queryForm.materielCode) wheres.push({ name: 'materielCode', value: queryForm.materielCode, displayType: 'like' });
-    if (queryForm.materielName) wheres.push({ name: 'materielName', value: queryForm.materielName, displayType: 'like' });
-    if (queryForm.batchNo) wheres.push({ name: 'batchNo', value: queryForm.batchNo, displayType: 'like' });
-    const res = await client.post('/api/OutboundOrderDetail/getPageList', {
-      page: pagination.page, rows: pagination.pageSize, sort: 'id', order: 'asc',
-      wheres: JSON.stringify(wheres),
-    });
-    tableData.value = res?.rows || [];
-    pagination.total = res?.total || 0;
-  } catch { ElMessage.error('鍔犺浇鏁版嵁澶辫触'); }
-  finally { loading.value = false; }
-}
-
-async function loadDictionary() {
-  try {
-    const res = await client.post('/api/Sys_Dictionary/GetVueDictionary', ['orderDetailStatusEnum']);
-    detailStatusOptions.value = res?.find(item => item.dicNo === 'orderDetailStatusEnum')?.data || [];
-  } catch { detailStatusOptions.value = []; }
-}
-
-function handleSearch() { pagination.page = 1; loadData(); }
-function handleReset() { queryForm.materielCode = ''; queryForm.materielName = ''; queryForm.batchNo = ''; handleSearch(); }
-function handleSizeChange() { loadData(); }
-function handlePageChange() { loadData(); }
-const getDetailStatusText = (val) => detailStatusOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-
-onMounted(() => { loadDictionary(); loadData(); });
-</script>
-
-<style scoped>
-.outbound-detail-page { padding: 16px; }
-.search-form { margin-bottom: 12px; }
-</style>
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/stock/index.vue b/Code/WMS/WIDESEA_WMSClient_Vben/src/views/stock/index.vue
deleted file mode 100644
index 8359717..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/stock/index.vue
+++ /dev/null
@@ -1,340 +0,0 @@
-<template>
-  <div class="stock-page">
-    <!-- 鎼滅储鍖哄煙 -->
-    <el-card class="search-card" shadow="never">
-      <el-form :inline="true" :model="queryForm" label-width="80px">
-        <el-form-item label="鎵樼洏缂栧彿">
-          <el-input v-model="queryForm.palletCode" placeholder="璇疯緭鍏ユ墭鐩樼紪鍙�" clearable style="width: 180px" />
-        </el-form-item>
-        <el-form-item label="璐т綅缂栧彿">
-          <el-input v-model="queryForm.locationCode" placeholder="璇疯緭鍏ヨ揣浣嶇紪鍙�" clearable style="width: 180px" />
-        </el-form-item>
-        <el-form-item label="浠撳簱">
-          <el-select v-model="queryForm.warehouseId" placeholder="璇烽�夋嫨浠撳簱" clearable style="width: 160px">
-            <el-option v-for="item in warehouseOptions" :key="item.key" :label="item.value" :value="item.key" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="搴撳瓨鐘舵��">
-          <el-select v-model="queryForm.stockStatus" placeholder="璇烽�夋嫨鐘舵��" clearable style="width: 140px">
-            <el-option v-for="item in stockStatusOptions" :key="item.key" :label="item.value" :value="item.key" />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="handleSearch">鏌ヨ</el-button>
-          <el-button @click="handleReset">閲嶇疆</el-button>
-        </el-form-item>
-      </el-form>
-    </el-card>
-
-    <!-- 鏁版嵁琛ㄦ牸 -->
-    <el-card class="table-card" shadow="never">
-      <div class="toolbar">
-        <el-button type="primary" @click="handleAdd">鏂板</el-button>
-        <el-button type="danger" :disabled="!selectedRows.length" @click="handleBatchDelete">鎵归噺鍒犻櫎</el-button>
-      </div>
-
-      <el-table
-        v-loading="loading"
-        :data="tableData"
-        border
-        stripe
-        @selection-change="handleSelectionChange"
-        @expand-change="handleExpandChange"
-        :expand-row-keys="expandedRows"
-        row-key="id"
-      >
-        <el-table-column type="selection" width="50" align="center" />
-        <el-table-column type="expand" width="50">
-          <template #default="{ row }">
-            <div class="expand-panel">
-              <div class="expand-header">
-                <span class="expand-title">搴撳瓨鏄庣粏</span>
-                <span class="expand-subtitle">鎵樼洏锛歿{ row.palletCode }} / 璐т綅锛歿{ row.locationCode }}</span>
-              </div>
-              <el-table :data="detailData[row.id] || []" border stripe size="small" max-height="400">
-                <el-table-column prop="materielName" label="鐗╂枡鍚嶇О" min-width="160" show-overflow-tooltip />
-                <el-table-column prop="serialNumber" label="鐢佃姱鐮�" min-width="160" show-overflow-tooltip />
-                <el-table-column prop="stockQuantity" label="搴撳瓨鏁伴噺" min-width="120" align="center" />
-                <el-table-column prop="status" label="鐘舵��" min-width="120" align="center">
-                  <template #default="{ row: dr }">
-                    {{ getStatusText(dr.status) }}
-                  </template>
-                </el-table-column>
-                <el-table-column prop="inboundOrderRowNo" label="閫氶亾鍙�" min-width="120" align="center" />
-              </el-table>
-              <div v-if="!detailData[row.id] && !detailLoading[row.id]" class="expand-empty">鏆傛棤鏄庣粏鏁版嵁</div>
-              <div v-if="detailLoading[row.id]" class="expand-loading">鍔犺浇涓�...</div>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column prop="palletCode" label="鎵樼洏缂栧彿" min-width="130" show-overflow-tooltip />
-        <el-table-column prop="locationCode" label="璐т綅缂栧彿" min-width="150" show-overflow-tooltip />
-        <el-table-column prop="warehouseId" label="浠撳簱" min-width="110" align="center">
-          <template #default="{ row }">
-            {{ getWarehouseText(row.warehouseId) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="stockStatus" label="搴撳瓨鐘舵��" min-width="120" align="center">
-          <template #default="{ row }">
-            {{ getStockStatusText(row.stockStatus) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="outboundDate" label="鍑哄簱鏃ユ湡" min-width="160" align="center" />
-        <el-table-column prop="creater" label="鍒涘缓浜�" min-width="100" align="center" />
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="160" align="center" />
-        <el-table-column label="鎿嶄綔" width="150" align="center" fixed="right">
-          <template #default="{ row }">
-            <el-button link type="primary" size="small" @click="handleEdit(row)">缂栬緫</el-button>
-            <el-button link type="danger" size="small" @click="handleDelete(row)">鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <el-pagination
-        v-model:current-page="pagination.page"
-        v-model:page-size="pagination.pageSize"
-        :total="pagination.total"
-        :page-sizes="[10, 20, 50, 100]"
-        layout="total, sizes, prev, pager, next, jumper"
-        @size-change="handleSizeChange"
-        @current-change="handlePageChange"
-        style="margin-top: 16px; justify-content: flex-end"
-      />
-    </el-card>
-
-    <!-- 缂栬緫寮圭獥 -->
-    <el-dialog v-model="dialogVisible" :title="dialogTitle" width="560px" destroy-on-close>
-      <el-form :model="editForm" :rules="editRules" ref="editFormRef" label-width="100px">
-        <el-form-item label="鎵樼洏缂栧彿" prop="palletCode">
-          <el-input v-model="editForm.palletCode" placeholder="璇疯緭鍏ユ墭鐩樼紪鍙�" />
-        </el-form-item>
-        <el-form-item label="璐т綅缂栧彿" prop="locationCode">
-          <el-input v-model="editForm.locationCode" placeholder="璇疯緭鍏ヨ揣浣嶇紪鍙�" />
-        </el-form-item>
-        <el-form-item label="浠撳簱" prop="warehouseId">
-          <el-select v-model="editForm.warehouseId" placeholder="璇烽�夋嫨浠撳簱" style="width: 100%">
-            <el-option v-for="item in warehouseOptions" :key="item.key" :label="item.value" :value="item.key" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="搴撳瓨鐘舵��" prop="stockStatus">
-          <el-select v-model="editForm.stockStatus" placeholder="璇烽�夋嫨搴撳瓨鐘舵��" style="width: 100%">
-            <el-option v-for="item in stockStatusOptions" :key="item.key" :label="item.value" :value="item.key" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="澶囨敞">
-          <el-input v-model="editForm.remark" type="textarea" :rows="3" placeholder="璇疯緭鍏ュ娉�" />
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <el-button @click="dialogVisible = false">鍙栨秷</el-button>
-        <el-button type="primary" @click="handleSubmit" :loading="submitLoading">纭畾</el-button>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
-<script setup>
-import { ref, reactive, onMounted } from 'vue';
-import { ElMessage, ElMessageBox } from 'element-plus';
-import { stockApi } from '@/api/modules/stock';
-import { client } from '@/api/client';
-
-const BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:9291';
-
-// 鎼滅储
-const queryForm = reactive({
-  palletCode: '',
-  locationCode: '',
-  warehouseId: undefined,
-  stockStatus: undefined,
-});
-
-// 琛ㄦ牸
-const loading = ref(false);
-const tableData = ref([]);
-const selectedRows = ref([]);
-const expandedRows = ref([]);
-const detailData = ref({});
-const detailLoading = ref({});
-
-// 瀛楀吀
-const warehouseOptions = ref([]);
-const stockStatusOptions = ref([]);
-
-// 鍒嗛〉
-const pagination = reactive({ page: 1, pageSize: 20, total: 0 });
-
-// 缂栬緫寮圭獥
-const dialogVisible = ref(false);
-const dialogTitle = ref('鏂板搴撳瓨');
-const editFormRef = ref(null);
-const submitLoading = ref(false);
-const editForm = reactive({
-  id: undefined,
-  palletCode: '',
-  locationCode: '',
-  warehouseId: undefined,
-  stockStatus: undefined,
-  remark: '',
-});
-const editRules = {
-  palletCode: [{ required: true, message: '璇疯緭鍏ユ墭鐩樼紪鍙�', trigger: 'blur' }],
-  locationCode: [{ required: true, message: '璇疯緭鍏ヨ揣浣嶇紪鍙�', trigger: 'blur' }],
-  warehouseId: [{ required: true, message: '璇烽�夋嫨浠撳簱', trigger: 'change' }],
-};
-
-async function loadData() {
-  loading.value = true;
-  try {
-    const params = buildQueryParams();
-    const res = await stockApi.getPageList(params);
-    tableData.value = res?.rows || [];
-    pagination.total = res?.total || 0;
-  } catch {
-    ElMessage.error('鍔犺浇鏁版嵁澶辫触');
-  } finally {
-    loading.value = false;
-  }
-}
-
-function buildQueryParams() {
-  const wheres = [
-    queryForm.palletCode ? { name: 'palletCode', value: queryForm.palletCode, displayType: 'like' } : null,
-    queryForm.locationCode ? { name: 'locationCode', value: queryForm.locationCode, displayType: 'like' } : null,
-    queryForm.warehouseId ? { name: 'warehouseId', value: queryForm.warehouseId, displayType: 'int' } : null,
-    queryForm.stockStatus !== undefined ? { name: 'stockStatus', value: queryForm.stockStatus, displayType: 'int' } : null,
-  ].filter(Boolean);
-  return {
-    page: pagination.page,
-    rows: pagination.pageSize,
-    sort: 'id',
-    order: 'desc',
-    wheres: JSON.stringify(wheres),
-  };
-}
-
-async function loadDetailData(row) {
-  if (detailData.value[row.id] || detailLoading.value[row.id]) return;
-  detailLoading.value[row.id] = true;
-  try {
-    const res = await client.post('/api/StockInfoDetail/getPageData', {
-      page: 1, rows: 200, sort: 'id', order: 'asc',
-      wheres: JSON.stringify([{ name: 'stockId', value: String(row.id), displayType: 'int' }]),
-    });
-    detailData.value[row.id] = res?.rows || [];
-  } catch {
-    detailData.value[row.id] = [];
-    ElMessage.error('鍔犺浇鏄庣粏澶辫触');
-  } finally {
-    detailLoading.value[row.id] = false;
-  }
-}
-
-async function loadDictionary() {
-  try {
-    const res = await client.post('/api/Sys_Dictionary/GetVueDictionary', ['warehouseEnum', 'stockStatusEmun']);
-    const wh = res?.find(item => item.dicNo === 'warehouseEnum');
-    warehouseOptions.value = wh?.data || [];
-    const ss = res?.find(item => item.dicNo === 'stockStatusEmun');
-    stockStatusOptions.value = ss?.data || [];
-  } catch {
-    warehouseOptions.value = [];
-    stockStatusOptions.value = [];
-  }
-}
-
-function handleSearch() { pagination.page = 1; loadData(); }
-
-function handleReset() {
-  queryForm.palletCode = '';
-  queryForm.locationCode = '';
-  queryForm.warehouseId = undefined;
-  queryForm.stockStatus = undefined;
-  handleSearch();
-}
-
-function handleAdd() {
-  editForm.id = undefined;
-  editForm.palletCode = '';
-  editForm.locationCode = '';
-  editForm.warehouseId = undefined;
-  editForm.stockStatus = undefined;
-  editForm.remark = '';
-  dialogTitle.value = '鏂板搴撳瓨';
-  dialogVisible.value = true;
-}
-
-function handleEdit(row) {
-  Object.assign(editForm, { id: row.id, palletCode: row.palletCode, locationCode: row.locationCode, warehouseId: row.warehouseId, stockStatus: row.stockStatus, remark: row.remark });
-  dialogTitle.value = '缂栬緫搴撳瓨';
-  dialogVisible.value = true;
-}
-
-async function handleSubmit() {
-  await editFormRef.value.validate();
-  submitLoading.value = true;
-  try {
-    if (editForm.id) {
-      await stockApi.updateStock(editForm);
-      ElMessage.success('鏇存柊鎴愬姛');
-    } else {
-      await stockApi.addStock(editForm);
-      ElMessage.success('鏂板鎴愬姛');
-    }
-    dialogVisible.value = false;
-    loadData();
-  } catch { ElMessage.error('鎿嶄綔澶辫触'); }
-  finally { submitLoading.value = false; }
-}
-
-function handleDelete(row) {
-  ElMessageBox.confirm(`纭畾鍒犻櫎搴撳瓨銆�${row.palletCode}銆嶅悧锛焋, '鎻愮ず', { type: 'warning' })
-    .then(async () => {
-      await stockApi.deleteStock(row.id);
-      ElMessage.success('鍒犻櫎鎴愬姛');
-      loadData();
-    }).catch(() => {});
-}
-
-function handleBatchDelete() {
-  const ids = selectedRows.value.map(r => r.id);
-  ElMessageBox.confirm(`纭畾鍒犻櫎閫変腑鐨� ${ids.length} 鏉¤褰曞悧锛焋, '鎻愮ず', { type: 'warning' })
-    .then(async () => {
-      await Promise.all(ids.map(id => stockApi.deleteStock(id)));
-      ElMessage.success('鍒犻櫎鎴愬姛');
-      loadData();
-    }).catch(() => {});
-}
-
-function handleSelectionChange(rows) { selectedRows.value = rows; }
-
-function handleExpandChange(row, expanded) {
-  if (expanded) {
-    expandedRows.value.push(row.id);
-    loadDetailData(row);
-  } else {
-    expandedRows.value = expandedRows.value.filter(id => id !== row.id);
-  }
-}
-
-function handleSizeChange() { loadData(); }
-function handlePageChange() { loadData(); }
-
-const getWarehouseText = (val) => warehouseOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-const getStockStatusText = (val) => stockStatusOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-const getStatusText = (val) => stockStatusOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-
-onMounted(() => { loadDictionary(); loadData(); });
-</script>
-
-<style scoped>
-.stock-page { padding: 16px; }
-.search-card { margin-bottom: 12px; }
-.table-card { margin-bottom: 12px; }
-.toolbar { margin-bottom: 12px; }
-.expand-panel { margin: 8px 16px 16px; padding: 12px; background: #fafafa; border-radius: 8px; }
-.expand-header { margin-bottom: 12px; }
-.expand-title { font-size: 15px; font-weight: 700; color: #303133; margin-right: 12px; }
-.expand-subtitle { font-size: 13px; color: #606266; }
-.expand-empty, .expand-loading { padding: 14px 12px; color: #909399; text-align: center; }
-</style>
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/stock/stockInfoDetail.vue b/Code/WMS/WIDESEA_WMSClient_Vben/src/views/stock/stockInfoDetail.vue
deleted file mode 100644
index a4715bd..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/src/views/stock/stockInfoDetail.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <div class="stock-detail-page">
-    <el-card shadow="never">
-      <template #header>
-        <span>搴撳瓨鏄庣粏 - {{ route.query.palletCode || '' }}</span>
-      </template>
-
-      <!-- 鎼滅储 -->
-      <el-form :inline="true" :model="queryForm" class="search-form">
-        <el-form-item label="鐗╂枡鍚嶇О">
-          <el-input v-model="queryForm.materielName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" clearable />
-        </el-form-item>
-        <el-form-item label="鐢佃姱鐮�">
-          <el-input v-model="queryForm.serialNumber" placeholder="璇疯緭鍏ョ數鑺爜" clearable />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="handleSearch">鏌ヨ</el-button>
-          <el-button @click="handleReset">閲嶇疆</el-button>
-        </el-form-item>
-      </el-form>
-
-      <!-- 琛ㄦ牸 -->
-      <el-table v-loading="loading" :data="tableData" border stripe>
-        <el-table-column prop="materielCode" label="鐗╂枡缂栫爜" min-width="140" show-overflow-tooltip />
-        <el-table-column prop="materielName" label="鐗╂枡鍚嶇О" min-width="160" show-overflow-tooltip />
-        <el-table-column prop="serialNumber" label="鐢佃姱鐮�" min-width="180" show-overflow-tooltip />
-        <el-table-column prop="stockQuantity" label="搴撳瓨鏁伴噺" min-width="120" align="center" />
-        <el-table-column prop="status" label="鐘舵��" min-width="120" align="center">
-          <template #default="{ row }">
-            {{ getStatusText(row.status) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="inboundOrderRowNo" label="閫氶亾鍙�" min-width="120" align="center" />
-        <el-table-column prop="creater" label="鍒涘缓浜�" min-width="100" align="center" />
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="160" align="center" />
-      </el-table>
-
-      <el-pagination
-        v-model:current-page="pagination.page"
-        v-model:page-size="pagination.pageSize"
-        :total="pagination.total"
-        :page-sizes="[10, 20, 50, 100]"
-        layout="total, sizes, prev, pager, next, jumper"
-        @size-change="handleSizeChange"
-        @current-change="handlePageChange"
-        style="margin-top: 16px; justify-content: flex-end"
-      />
-    </el-card>
-  </div>
-</template>
-
-<script setup>
-import { ref, reactive, onMounted } from 'vue';
-import { useRoute } from 'vue-router';
-import { ElMessage } from 'element-plus';
-import { client } from '@/api/client';
-
-const route = useRoute();
-const loading = ref(false);
-const tableData = ref([]);
-const stockStatusOptions = ref([]);
-
-const queryForm = reactive({
-  materielName: '',
-  serialNumber: '',
-});
-
-const pagination = reactive({ page: 1, pageSize: 20, total: 0 });
-
-async function loadData() {
-  loading.value = true;
-  try {
-    const stockId = route.query.id;
-    const wheres = [{ name: 'stockId', value: String(stockId), displayType: 'int' }];
-    if (queryForm.materielName) wheres.push({ name: 'materielName', value: queryForm.materielName, displayType: 'like' });
-    if (queryForm.serialNumber) wheres.push({ name: 'serialNumber', value: queryForm.serialNumber, displayType: 'like' });
-    const res = await client.post('/api/StockInfoDetail/getPageData', {
-      page: pagination.page,
-      rows: pagination.pageSize,
-      sort: 'id',
-      order: 'asc',
-      wheres: JSON.stringify(wheres),
-    });
-    tableData.value = res?.rows || [];
-    pagination.total = res?.total || 0;
-  } catch {
-    ElMessage.error('鍔犺浇鏁版嵁澶辫触');
-  } finally {
-    loading.value = false;
-  }
-}
-
-async function loadDictionary() {
-  try {
-    const res = await client.post('/api/Sys_Dictionary/GetVueDictionary', ['stockStatusEmun']);
-    const ss = res?.find(item => item.dicNo === 'stockStatusEmun');
-    stockStatusOptions.value = ss?.data || [];
-  } catch {
-    stockStatusOptions.value = [];
-  }
-}
-
-function handleSearch() { pagination.page = 1; loadData(); }
-function handleReset() {
-  queryForm.materielName = '';
-  queryForm.serialNumber = '';
-  handleSearch();
-}
-function handleSizeChange() { loadData(); }
-function handlePageChange() { loadData(); }
-const getStatusText = (val) => stockStatusOptions.value.find(o => `${o.key}` === `${val}`)?.value || val || '-';
-
-onMounted(() => { loadDictionary(); loadData(); });
-</script>
-
-<style scoped>
-.stock-detail-page { padding: 16px; }
-.search-form { margin-bottom: 12px; }
-</style>
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/tsconfig.json b/Code/WMS/WIDESEA_WMSClient_Vben/tsconfig.json
deleted file mode 100644
index db9261f..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/tsconfig.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "compilerOptions": {
-    "target": "ES2020",
-    "useDefineForClassFields": true,
-    "module": "ESNext",
-    "lib": ["ES2020", "DOM", "DOM.Iterable"],
-    "skipLibCheck": true,
-    "moduleResolution": "bundler",
-    "allowImportingTsExtensions": true,
-    "resolveJsonModule": true,
-    "isolatedModules": true,
-    "noEmit": true,
-    "jsx": "preserve",
-    "strict": false,
-    "noUnusedLocals": false,
-    "noUnusedParameters": false,
-    "baseUrl": ".",
-    "paths": { "@/*": ["src/*"] }
-  },
-  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
-}
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/tsconfig.node.json b/Code/WMS/WIDESEA_WMSClient_Vben/tsconfig.node.json
deleted file mode 100644
index 97ede7e..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/tsconfig.node.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "compilerOptions": {
-    "composite": true,
-    "skipLibCheck": true,
-    "module": "ESNext",
-    "moduleResolution": "bundler",
-    "allowSyntheticDefaultImports": true,
-    "strict": true
-  },
-  "include": ["vite.config.ts"]
-}
diff --git a/Code/WMS/WIDESEA_WMSClient_Vben/vite.config.ts b/Code/WMS/WIDESEA_WMSClient_Vben/vite.config.ts
deleted file mode 100644
index 626de4f..0000000
--- a/Code/WMS/WIDESEA_WMSClient_Vben/vite.config.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { defineConfig } from 'vite';
-import vue from '@vitejs/plugin-vue';
-import { resolve } from 'path';
-
-export default defineConfig({
-  plugins: [vue()],
-  resolve: {
-    alias: {
-      '@': resolve(__dirname, 'src'),
-    },
-  },
-  server: {
-    port: 3000,
-    proxy: {
-      '/api': {
-        target: 'http://localhost:9291',
-        changeOrigin: true,
-      },
-    },
-  },
-});
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MesService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MesService.cs
index 3234a69..8f1d43f 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MesService.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MesService.cs
@@ -35,7 +35,7 @@
             {
                 Headers = new Dictionary<string, string>
                 {
-                    { "Authorization", _authorization }
+                    { "Authorization","Bearer "+ _authorization }
                 },
                 TimeoutMs = 30000,
                 MaxRetryCount = 0,
@@ -49,7 +49,7 @@
             {
                 Headers = new Dictionary<string, string>
                 {
-                    { "Authorization", token }
+                    { "Authorization","Bearer "+ token }
                 },
                 TimeoutMs = 30000,
                 MaxRetryCount = 0,
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
index 9ea94a7..0d17367 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
@@ -1,8 +1,10 @@
 锘縰sing Newtonsoft.Json;
 using SqlSugar;
+using System.Diagnostics;
 using WIDESEA_Common.Constants;
 using WIDESEA_Common.StockEnum;
 using WIDESEA_Core;
+using WIDESEA_Core.Helper;
 using WIDESEA_DTO.MES;
 using WIDESEA_DTO.Stock;
 using WIDESEA_IBasicService;
@@ -51,6 +53,8 @@
         /// </summary>
         public IMesService _mesService { get; }
 
+        private readonly IMesLogService _mesLogService;
+
         /// <summary>
         /// 鏋勯�犲嚱鏁�
         /// </summary>
@@ -65,7 +69,8 @@
             IStockInfo_HtyService stockInfo_HtyService,
             IMesService mesService,
             IWarehouseService warehouseService,
-            ISqlSugarClient sqlSugarClient)
+            ISqlSugarClient sqlSugarClient,
+            IMesLogService mesLogService)
         {
             StockInfoDetailService = stockInfoDetailService;
             StockInfoService = stockInfoService;
@@ -74,6 +79,7 @@
             _mesService = mesService;
             _warehouseService = warehouseService;
             SqlSugarClient = sqlSugarClient;
+            _mesLogService = mesLogService;
         }
 
         /// <summary>
@@ -466,6 +472,7 @@
         public async Task<WebResponseContent> GroupPalletConfirmAsync(string palletCode, string deviceName)
         {
             WebResponseContent content = new WebResponseContent();
+            var stopwatch = Stopwatch.StartNew();
             try
             {
                 if (string.IsNullOrWhiteSpace(palletCode))
@@ -510,9 +517,21 @@
                         Location = d.InboundOrderRowNo.ToString()
                     }).ToList()
                 };
+                string requestJson = bindRequest.ToJson();
                 var bindResult = string.IsNullOrWhiteSpace(token)
                     ? _mesService.BindContainer(bindRequest)
                     : _mesService.BindContainer(bindRequest, token);
+                stopwatch.Stop();
+                await _mesLogService.LogAsync(new MesApiLogDto
+                {
+                    ApiType = "BindContainer",
+                    RequestJson = requestJson,
+                    ResponseJson = System.Text.Json.JsonSerializer.Serialize(bindResult),
+                    IsSuccess = bindResult.IsSuccess,
+                    ErrorMessage = bindResult.ErrorMessage,
+                    ElapsedMs = (int)stopwatch.ElapsedMilliseconds,
+                    Creator = "systeam"
+                });
                 if (bindResult == null || bindResult.Data == null || !bindResult.Data.IsSuccess)
                 {
                     return content.Error($"MES缁戝畾澶辫触: {bindResult?.Data?.Msg ?? bindResult?.ErrorMessage ?? "鏈煡閿欒"}");
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
index 0b7d8e4..1bee12d 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -41,6 +41,7 @@
         private readonly IUnitOfWorkManage _unitOfWorkManage;
         private readonly IRecordService _recordService;
         private readonly IMESDeviceConfigService _mesDeviceConfigService;
+        private readonly IMesLogService _mesLogService;
 
         public IRepository<Dt_Task> Repository => BaseDal;
 
@@ -66,7 +67,8 @@
             IStockInfo_HtyService stockInfo_HtyService,
             IUnitOfWorkManage unitOfWorkManage,
             IRecordService recordService,
-            IMESDeviceConfigService mesDeviceConfigService) : base(BaseDal)
+            IMESDeviceConfigService mesDeviceConfigService,
+            IMesLogService mesLogService) : base(BaseDal)
         {
             _mapper = mapper;
             _stockInfoService = stockInfoService;
@@ -80,6 +82,7 @@
             _unitOfWorkManage = unitOfWorkManage;
             _recordService = recordService;
             _mesDeviceConfigService = mesDeviceConfigService;
+            _mesLogService = mesLogService;
         }
 
         /// <summary>
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs
index c532f7a..20956e7 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs
@@ -1,9 +1,13 @@
+using Microsoft.AspNetCore.Http.HttpResults;
+using Newtonsoft.Json;
+using System.Diagnostics;
 using WIDESEA_Common.Constants;
 using WIDESEA_Common.LocationEnum;
 using WIDESEA_Common.StockEnum;
 using WIDESEA_Common.TaskEnum;
 using WIDESEA_Common.WareHouseEnum;
 using WIDESEA_Core;
+using WIDESEA_Core.Helper;
 using WIDESEA_DTO.MES;
 using WIDESEA_DTO.Task;
 using WIDESEA_IBasicService;
@@ -118,6 +122,7 @@
         /// </summary>
         public async Task<WebResponseContent> InboundFinishTaskAsync(CreateTaskDto taskDto)
         {
+            var stopwatch = Stopwatch.StartNew();
             try
             {
                 var task = await BaseDal.QueryFirstAsync(s => s.PalletCode == taskDto.PalletCode);
@@ -127,56 +132,91 @@
                 if (location == null) return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑璐т綅");
 
                 var stockInfo = await _stockInfoService.GetStockInfoAsync(taskDto.PalletCode);
-                if (stockInfo == null) return WebResponseContent.Instance.Error("鏈壘鍒板搴斿簱瀛樹俊鎭�");
-
-                // 鍒ゆ柇鏄笉鏄瀬鍗峰簱浠诲姟
-                if (taskDto.WarehouseId == (int)WarehouseEnum.FJ1 || taskDto.WarehouseId == (int)WarehouseEnum.ZJ1)
+                if (stockInfo == null)
                 {
-                    return await CompleteAgvInboundTaskAsync(taskDto);
+                    return await _unitOfWorkManage.BeginTranAsync(async () =>
+                    {
+                        stockInfo = new Dt_StockInfo
+                        {
+                            PalletCode = taskDto.PalletCode,
+                            WarehouseId = task.WarehouseId,
+                            StockStatus = StockStatusEmun.绌烘墭鐩樺簱瀛�.GetHashCode(),
+                            Creater = StockConstants.SYSTEM_USER,
+                            Details = null,
+                            LocationCode = location.LocationCode,
+                            LocationId = location.Id
+                        };
+                        var updateLocationResult = await _locationInfoService.UpdateLocationInfoAsync(location);
+                        var updateStockResult = await _stockInfoService.Repository.AddDataAsync(stockInfo);
+                        return await CompleteTaskAsync(task, "鍏ュ簱瀹屾垚");
+                    });
                 }
-
-                return await _unitOfWorkManage.BeginTranAsync(async () =>
+                else
                 {
-                    WebResponseContent content = new WebResponseContent();
-                    stockInfo.LocationCode = location.LocationCode;
-                    stockInfo.LocationId = location.Id;
 
-                    SetOutboundDateByRoadway(task, stockInfo);
 
-                    stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.GetHashCode();
-
-                    location.LocationStatus = LocationStatusEnum.InStock.GetHashCode();
-
-                    var updateLocationResult = await _locationInfoService.UpdateLocationInfoAsync(location);
-                    var updateStockResult = await _stockInfoService.UpdateStockAsync(stockInfo);
-                    if (!updateLocationResult || !updateStockResult)
-                        return WebResponseContent.Instance.Error("浠诲姟瀹屾垚澶辫触");
-                    // 鏍规嵁搴撳瓨Remark閫夋嫨闈欑疆璁惧锛屾煡MES鍔ㄦ�佸嚟璇�
-                    string deviceName = stockInfo.Remark == "GW_1" ? "楂樻俯闈欑疆1"
-                        : stockInfo.Remark == "GW_2" ? "楂樻俯闈欑疆2"
-                        : "甯告俯闈欑疆1";
-                    var mesConfig = _mesDeviceConfigService.GetByDeviceName(deviceName);
-                    string equipmentCode = mesConfig?.EquipmentCode ?? StockConstants.MES_EQUIPMENT_CODE;
-                    string resourceCode = mesConfig?.ResourceCode ?? StockConstants.MES_RESOURCE_CODE;
-                    string token = mesConfig?.Token;
-
-                    // 璋冪敤MES鎵樼洏杩涚珯
-                    var inboundRequest = new InboundInContainerRequest
+                    // 鍒ゆ柇鏄笉鏄瀬鍗峰簱浠诲姟
+                    if (taskDto.WarehouseId == (int)WarehouseEnum.FJ1 || taskDto.WarehouseId == (int)WarehouseEnum.ZJ1)
                     {
-                        EquipmentCode = equipmentCode,
-                        ResourceCode = resourceCode,
-                        LocalTime = DateTime.Now,
-                        ContainerCode = taskDto.PalletCode
-                    };
-                    var inboundResult = string.IsNullOrWhiteSpace(token)
-                        ? _mesService.InboundInContainer(inboundRequest)
-                        : _mesService.InboundInContainer(inboundRequest, token);
-                    if (inboundResult == null || inboundResult.Data == null || !inboundResult.Data.IsSuccess)
-                    {
-                        return content.Error($"浠诲姟瀹屾垚澶辫触锛歁ES杩涚珯澶辫触: {inboundResult?.Data?.Msg ?? inboundResult?.ErrorMessage ?? "鏈煡閿欒"}");
+                        return await CompleteAgvInboundTaskAsync(taskDto);
                     }
-                    return await CompleteTaskAsync(task, "鍏ュ簱瀹屾垚");
-                });
+
+                    return await _unitOfWorkManage.BeginTranAsync(async () =>
+                    {
+                        WebResponseContent content = new WebResponseContent();
+                        stockInfo.LocationCode = location.LocationCode;
+                        stockInfo.LocationId = location.Id;
+
+                        SetOutboundDateByRoadway(task, stockInfo);
+
+                        stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.GetHashCode();
+
+                        location.LocationStatus = LocationStatusEnum.InStock.GetHashCode();
+
+                        var updateLocationResult = await _locationInfoService.UpdateLocationInfoAsync(location);
+                        var updateStockResult = await _stockInfoService.UpdateStockAsync(stockInfo);
+                        if (!updateLocationResult || !updateStockResult)
+                            return WebResponseContent.Instance.Error("浠诲姟瀹屾垚澶辫触");
+
+                        // 鏍规嵁搴撳瓨Remark閫夋嫨闈欑疆璁惧锛屾煡MES鍔ㄦ�佸嚟璇�
+                        //string deviceName = stockInfo.Remark == "GW_1" ? "楂樻俯闈欑疆1"
+                        //    : stockInfo.Remark == "GW_2" ? "楂樻俯闈欑疆2"
+                        //    : "甯告俯闈欑疆1";
+                        //var mesConfig = _mesDeviceConfigService.GetByDeviceName(deviceName);
+                        //string equipmentCode = mesConfig?.EquipmentCode ?? StockConstants.MES_EQUIPMENT_CODE;
+                        //string resourceCode = mesConfig?.ResourceCode ?? StockConstants.MES_RESOURCE_CODE;
+                        //string token = mesConfig?.Token;
+
+                        // 璋冪敤MES鎵樼洏杩涚珯
+                        //var inboundRequest = new InboundInContainerRequest
+                        //{
+                        //    EquipmentCode = equipmentCode,
+                        //    ResourceCode = resourceCode,
+                        //    LocalTime = DateTime.Now,
+                        //    ContainerCode = taskDto.PalletCode
+                        //};
+                        //string requestJson = inboundRequest.ToJson();
+                        //var inboundResult = string.IsNullOrWhiteSpace(token)
+                        //    ? _mesService.InboundInContainer(inboundRequest)
+                        //    : _mesService.InboundInContainer(inboundRequest, token);
+                        //stopwatch.Stop();
+                        //await _mesLogService.LogAsync(new MesApiLogDto
+                        //{
+                        //    ApiType = "InboundInContainer",
+                        //    RequestJson = requestJson,
+                        //    ResponseJson = JsonConvert.SerializeObject(inboundResult),
+                        //    IsSuccess = inboundResult.IsSuccess,
+                        //    ErrorMessage = inboundResult.ErrorMessage,
+                        //    ElapsedMs = (int)stopwatch.ElapsedMilliseconds,
+                        //    Creator = "systeam"
+                        //});
+                        //if (inboundResult == null || inboundResult.Data == null || !inboundResult.Data.IsSuccess)
+                        //{
+                        //    return content.Error($"浠诲姟瀹屾垚澶辫触锛歁ES杩涚珯澶辫触: {inboundResult?.Data?.Msg ?? inboundResult?.ErrorMessage ?? "鏈煡閿欒"}");
+                        //}
+                        return await CompleteTaskAsync(task, "鍏ュ簱瀹屾垚");
+                    });
+                }
             }
             catch (Exception ex)
             {
@@ -220,4 +260,4 @@
 
         #endregion 鍏ュ簱浠诲姟
     }
-}
+}
\ No newline at end of file
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Manual.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Manual.cs
index 4c7144b..b799f1e 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Manual.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Manual.cs
@@ -41,6 +41,11 @@
                         taskStatus = TaskRelocationStatusEnum.RelocationNew.GetHashCode();
                         break;
 
+                    case "绌虹鍏ュ簱":
+                        taskType = TaskInboundTypeEnum.InEmpty.GetHashCode();
+                        taskStatus = TaskInStatusEnum.InNew.GetHashCode();
+                        break;
+
                     default:
                         return WebResponseContent.Instance.Error($"涓嶆敮鎸佺殑浠诲姟绫诲瀷: {dto.TaskType}");
                 }
@@ -92,7 +97,7 @@
                         wmsTaskDtos.ToJson());
 
                     if (!wcsResult.IsSuccess || !wcsResult.Data.Status)
-                        return WebResponseContent.Instance.Error($"浠诲姟宸插垱寤轰絾鍙戦�佺粰WCS澶辫触: {wcsResult.Data?.Message}");
+                        return WebResponseContent.Instance.Error($"浠诲姟宸插垱寤轰絾鍙戦�佺粰WCS澶辫触:{wcsResult.ErrorMessage}\r\n {wcsResult.Data?.Message}");
 
                     return WebResponseContent.Instance.OK($"鎵嬪姩鍒涘缓浠诲姟鎴愬姛锛屼换鍔″彿: {taskNum}");
                 });
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs
index 499b063..7d39b67 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs
@@ -1,9 +1,11 @@
+using System.Diagnostics;
 using WIDESEA_Common.Constants;
 using WIDESEA_Common.LocationEnum;
 using WIDESEA_Common.StockEnum;
 using WIDESEA_Common.TaskEnum;
 using WIDESEA_Common.WareHouseEnum;
 using WIDESEA_Core;
+using WIDESEA_Core.Helper;
 using WIDESEA_DTO.MES;
 using WIDESEA_DTO.Task;
 using WIDESEA_IBasicService;
@@ -58,6 +60,7 @@
         /// </summary>
         public async Task<WebResponseContent> OutboundFinishTaskAsync(CreateTaskDto taskDto)
         {
+            var stopwatch = Stopwatch.StartNew();
             try
             {
                 var task = await BaseDal.QueryFirstAsync(s => s.PalletCode == taskDto.PalletCode);
@@ -135,9 +138,21 @@
                         LocalTime = DateTime.Now,
                         ContainerCode = taskDto.PalletCode
                     };
+                    string requestJson = outboundRequest.ToJson();
                     var outboundResult = string.IsNullOrWhiteSpace(token)
                         ? _mesService.OutboundInContainer(outboundRequest)
                         : _mesService.OutboundInContainer(outboundRequest, token);
+                    stopwatch.Stop();
+                    await _mesLogService.LogAsync(new MesApiLogDto
+                    {
+                        ApiType = "UnbindContainer",
+                        RequestJson = requestJson,
+                        ResponseJson = System.Text.Json.JsonSerializer.Serialize(outboundResult),
+                        IsSuccess = outboundResult.IsSuccess,
+                        ErrorMessage = outboundResult.ErrorMessage,
+                        ElapsedMs = (int)stopwatch.ElapsedMilliseconds,
+                        Creator = "systeam"
+                    });
                     if (outboundResult == null || outboundResult.Data == null || !outboundResult.Data.IsSuccess)
                     {
                         return content.Error($"鍑哄簱瀹屾垚澶辫触锛歁ES鍑虹珯澶辫触: {outboundResult?.Data?.Msg ?? outboundResult?.ErrorMessage ?? "鏈煡閿欒"}");
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
index cb929b2..76114fd 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -34,7 +34,7 @@
   "MainDB": "DB_WIDESEA", //褰撳墠椤圭洰鐨勪富搴擄紝鎵�瀵瑰簲鐨勮繛鎺ュ瓧绗︿覆鐨凟nabled蹇呴』涓簍rue
   //杩炴帴瀛楃涓�
   //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
-  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_ShanMei;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
+  "ConnectionString": "Data Source=192.168.60.30;Initial Catalog=WIDESEAWMS_ShanMei;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
   //"ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_ShanMei;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
   //"ConnectionString": "Data Source=10.30.4.92;Initial Catalog=WMS_TC;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
   //鏃MS鏁版嵁搴撹繛鎺�
@@ -71,7 +71,7 @@
     }
   },
   "MES": {
-    "BaseUrl": "http://localhost:5000",
+    "BaseUrl": "http://192.168.98.11:20033",
     "Authorization": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjMwMTcyNzM5Mzk5NzYxOTIwIiwibmFtZSI6IlBBQ0voo4XphY3lt6XkvY0wMSIsIkZhY3RvcnlJZCI6IjEyMzQ1NiIsIlNpdGVJZCI6IjEyMzQ1NiIsIkNvZGUiOiJYWExQQUNLMDRBRTAzMiIsIm5iZiI6MTcwNDE4NzY5MCwiZXhwIjoyMTQ1NjkxNjkwLCJpc3MiOiJodHRwczovL3d3dy5oeW1zb24uY29tIiwiYXVkIjoiaHR0cHM6Ly93d3cuaHltc29uLmNvbSJ9.An1BE7UgfcSP--LtTOmmmWVE2RQFPDahLkDg1xy5KqY"
   },
   "RobotTaskAddressRules": {
diff --git a/Code/WMS/WMS_Api_Design.md b/Code/WMS/WMS_Api_Design.md
deleted file mode 100644
index 5f24b9d..0000000
--- a/Code/WMS/WMS_Api_Design.md
+++ /dev/null
@@ -1,203 +0,0 @@
-# WMS 鍓嶇 API 璁捐鏂囨。
-
-> 鏈枃妗d负 Vben Admin 鍓嶇椤圭洰锛圵IDESEA_WMSClient_Vben锛夋彁渚� API 閫傞厤灞傝璁″弬鑰冦��
-
-## 鐩綍缁撴瀯
-
-```
-WIDESEA_WMSClient_Vben/
-鈹溾攢鈹� src/
-鈹�   鈹溾攢鈹� api/
-鈹�   鈹�   鈹溾攢鈹� client.ts          # axios 瀹炰緥灏佽
-鈹�   鈹�   鈹溾攢鈹� modules/
-鈹�   鈹�   鈹�   鈹溾攢鈹� user.ts        # 鐢ㄦ埛璁よ瘉妯″潡
-鈹�   鈹�   鈹�   鈹溾攢鈹� menu.ts        # 鑿滃崟妯″潡
-鈹�   鈹�   鈹�   鈹溾攢鈹� stock.ts       # 搴撳瓨妯″潡
-鈹�   鈹�   鈹�   鈹溾攢鈹� inbound.ts      # 鍏ュ簱妯″潡
-鈹�   鈹�   鈹�   鈹溾攢鈹� outbound.ts    # 鍑哄簱妯″潡
-鈹�   鈹�   鈹�   鈹斺攢鈹� check.ts        # 鐩樼偣妯″潡
-鈹�   鈹�   鈹斺攢鈹� index.ts           # 缁熶竴瀵煎嚭
-```
-
-## 1. axios 瀹㈡埛绔皝瑁� (`api/client.ts`)
-
-```typescript
-import axios from 'axios';
-import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
-import { useUserStore } from '@/store/modules/user';
-import { useAuthStore } from '@/store/modules/auth';
-
-const BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:9291';
-
-const client: AxiosInstance = axios.create({
-  baseURL: BASE_URL,
-  timeout: 30000,
-  headers: { 'Content-Type': 'application/json' },
-});
-
-// 璇锋眰鎷︽埅鍣細娉ㄥ叆 Bearer Token
-client.interceptors.request.use(
-  (config) => {
-    const userStore = useUserStore();
-    const token = userStore.token;
-    if (token) {
-      config.headers.Authorization = `Bearer ${token}`;
-    }
-    return config;
-  },
-  (error) => Promise.reject(error)
-);
-
-// 鍝嶅簲鎷︽埅鍣細缁熶竴閿欒澶勭悊 + 401 token 杩囨湡璺宠浆鐧诲綍
-client.interceptors.response.use(
-  (response: AxiosResponse) => response.data,
-  async (error) => {
-    const status = error.response?.status;
-    const raw = error.response?.data;
-
-    // 涓氬姟閿欒鐮侊紙闈� HTTP 鐘舵�佺爜锛夊彲浠� raw.code 鍒ゆ柇
-    if (raw?.code === 401 || status === 401) {
-      const authStore = useAuthStore();
-      authStore.logout(true); // true = token 杩囨湡琚姩鐧诲嚭
-    }
-
-    return Promise.reject(error);
-  }
-);
-
-export default client;
-```
-
-## 2. 璇锋眰鎷︽埅鍣ㄩ�昏緫
-
-| 鍦烘櫙 | 澶勭悊鏂瑰紡 |
-|------|---------|
-| 鏈� Token | `Authorization: Bearer <token>` 娉ㄥ叆璇锋眰澶� |
-| 鏃� Token | 鏀捐锛岃鍚庣杩斿洖 401 |
-| 涓诲姩鐧诲嚭 | 娓呯┖ token 璺宠浆鐧诲綍椤� |
-
-## 3. 鍝嶅簲鎷︽埅鍣ㄩ�昏緫
-
-| 鍦烘櫙 | 澶勭悊鏂瑰紡 |
-|------|---------|
-| 2xx 鍝嶅簲 | 杩斿洖 `response.data` |
-| HTTP 401 / 涓氬姟 code 401 | 璋冪敤 `authStore.logout(true)` 璺宠浆鐧诲綍 |
-| 鍏朵粬閿欒 | 鎶涘嚭寮傚父锛岀敱鍚勬ā鍧楄嚜琛屽鐞� |
-
-## 4. 鎺ュ彛绛惧悕
-
-### 4.1 鐢ㄦ埛妯″潡 (`modules/user.ts`)
-
-```typescript
-/** 鑾峰彇楠岃瘉鐮侊紝杩斿洖 { img: string, uuid: string } */
-export function getVerificationCode(): Promise<{ img: string; uuid: string }>;
-
-/** 鐧诲綍 */
-export function login(params: {
-  userName: string;
-  password: string;
-  verificationCode: string;
-  UUID: string;
-}): Promise<{ token: string; expires: number }>;
-
-/** 褰撳墠鐢ㄦ埛淇℃伅 */
-export function getCurrentUserInfo(): Promise<UserInfo>;
-
-/** 鍒锋柊 Token */
-export function replaceToken(): Promise<{ token: string; expires: number }>;
-```
-
-### 4.2 鑿滃崟妯″潡 (`modules/menu.ts`)
-
-```typescript
-/** 鑾峰彇鏍戝舰鑿滃崟 */
-export function getTreeMenu(): Promise<MenuTreeNode[]>;
-
-interface MenuTreeNode {
-  id: string;
-  name: string;
-  path: string;
-  component?: string;
-  icon?: string;
-  children?: MenuTreeNode[];
-}
-```
-
-### 4.3 搴撳瓨妯″潡 (`modules/stock.ts`)
-
-```typescript
-/** 搴撳瓨鍒楄〃锛堝垎椤碉級 */
-export function getStockList(params: StockQuery): Promise<PageResult<StockItem>>;
-
-/** 搴撳瓨璇︽儏 */
-export function getStockDetail(id: string): Promise<StockItem>;
-```
-
-### 4.4 鍏ュ簱妯″潡 (`modules/inbound.ts`)
-
-```typescript
-/** 鍏ュ簱鍗曞垪琛� */
-export function getInboundOrderList(params: InboundQuery): Promise<PageResult<InboundOrder>>;
-
-/** 鍒涘缓鍏ュ簱鍗� */
-export function createInboundOrder(data: CreateInboundOrder): Promise<{ id: string }>;
-
-/** 鎻愪氦鍏ュ簱鍗� */
-export function submitInboundOrder(id: string): Promise<void>;
-```
-
-### 4.5 鍑哄簱妯″潡 (`modules/outbound.ts`)
-
-```typescript
-/** 鍑哄簱鍗曞垪琛� */
-export function getOutboundOrderList(params: OutboundQuery): Promise<PageResult<OutboundOrder>>;
-
-/** 鍒涘缓鍑哄簱鍗� */
-export function createOutboundOrder(data: CreateOutboundOrder): Promise<{ id: string }>;
-
-/** 鎻愪氦鍑哄簱鍗� */
-export function submitOutboundOrder(id: string): Promise<void>;
-```
-
-### 4.6 鐩樼偣妯″潡 (`modules/check.ts`)
-
-```typescript
-/** 鐩樼偣鍗曞垪琛� */
-export function getCheckOrderList(params: CheckQuery): Promise<PageResult<CheckOrder>>;
-
-/** 鍒涘缓鐩樼偣鍗� */
-export function createCheckOrder(data: CreateCheckOrder): Promise<{ id: string }>;
-
-/** 鎻愪氦鐩樼偣鍗� */
-export function submitCheckOrder(id: string): Promise<void>;
-```
-
-## 5. 閫氱敤绫诲瀷瀹氫箟
-
-```typescript
-/** 鍒嗛〉缁撴灉 */
-interface PageResult<T> {
-  items: T[];
-  total: number;
-  page: number;
-  pageSize: number;
-}
-
-/** 閫氱敤鎿嶄綔缁撴灉锛堟棤鏁版嵁杩斿洖鏃讹級 */
-interface OpResult {
-  code: number;
-  message: string;
-}
-```
-
-## 6. 鐜鍙橀噺
-
-```env
-# .env.development
-VITE_API_BASE_URL=http://localhost:9291
-
-# .env.production
-VITE_API_BASE_URL=/api
-```
-
-> **娉ㄦ剰**: 鐢熶骇鐜浣跨敤 `/api` 浠g悊锛岄伩鍏嶈法鍩熴��

--
Gitblit v1.9.3