From ae9517420d848e215a9eb807270d5ef6fbe92ae9 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期一, 09 二月 2026 09:43:44 +0800
Subject: [PATCH] 添加 CreateTaskDto 和任务创建存根
---
Code/WMS/WIDESEA_WMS_Frontend/package-lock.json | 4654 +++++++++++++++++++++++++++++
Code/WMS/WIDESEA_WMS_Frontend/src/views/outbound/order/index.vue | 148
Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json | 77
Code/WMS/WIDESEA_WMS_Frontend/GUIDE.md | 435 ++
Code/WMS/WIDESEA_WMS_Frontend/src/router/index.ts | 12
Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/CodeChunks.db | 0
Code/WMS/WIDESEA_WMS_Frontend/src/views/check/order/index.vue | 145
Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/SemanticSymbols.db | 0
Code/WMS/WIDESEA_WMS_Frontend/src/views/basic/warehouse/index.vue | 217 +
Code/WMS/WIDESEA_WMS_Frontend/src/views/inbound/order/index.vue | 150
Code/WMS/WIDESEA_WMS_Frontend/src/router/routes.ts | 218 +
Code/WMS/WIDESEA_WMS_Frontend/src/views/login/index.vue | 133
Code/WMS/WIDESEA_WMS_Frontend/src/views/system/user/index.vue | 216 +
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/CreateTaskDto.cs | 53
Code/WMS/WIDESEA_WMS_Frontend/src/api/system/index.ts | 135
Code/WMS/WIDESEA_WMS_Frontend/src/stores/app.ts | 28
Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 44
Code/WMS/WIDESEA_WMS_Frontend/vite.config.ts | 55
Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs | 17
Code/WMS/WIDESEA_WMS_Frontend/src/views/system/role/index.vue | 190 +
Code/WMS/WIDESEA_WMS_Frontend/src/utils/request.ts | 130
Code/WMS/WIDESEA_WMS_Frontend/index.html | 13
Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/SemanticSymbols.db | 0
Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/CreateTaskDto.cs | 63
Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.backup.json | 98
Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs | 11
Code/WMS/WIDESEA_WMS_Frontend/src/utils/auth.ts | 53
Code/WMS/WIDESEA_WMS_Frontend/src/utils/common.ts | 57
Code/WMS/WIDESEA_WMSServer/.vscode/settings.json | 3
Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs | 3
Code/WMS/WIDESEA_WMS_Frontend/src/types/api.ts | 39
Code/WMS/WIDESEA_WMS_Frontend/src/views/basic/location/index.vue | 230 +
Code/WMS/WIDESEA_WMS_Frontend/src/views/dashboard/index.vue | 93
Code/WMS/WIDESEA_WMS_Frontend/src/views/error/404.vue | 32
Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/CodeChunks.db | 0
Code/WMS/WIDESEA_WMS_Frontend/src/views/task/info/index.vue | 134
Code/WMS/WIDESEA_WMS_Frontend/.gitignore | 28
Code/WMS/WIDESEA_WMS_Frontend/package.json | 39
Code/WMS/WIDESEA_WMS_Frontend/src/assets/styles/index.css | 15
Code/WMS/WIDESEA_WMS_Frontend/src/views/system/menu/index.vue | 186 +
Code/WMS/WIDESEA_WMS_Frontend/src/types/common.ts | 111
Code/WMS/WIDESEA_WMS_Frontend/src/views/basic/materiel/index.vue | 229 +
Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json | 92
Code/WMS/WIDESEA_WMS_Frontend/tsconfig.node.json | 10
Code/WMS/WIDESEA_WMS_Frontend/src/api/basic/index.ts | 139
Code/WMS/WIDESEA_WMS_Frontend/tsconfig.json | 31
Code/WMS/WIDESEA_WMS_Frontend/README.md | 114
Code/WMS/WIDESEA_WMS_Frontend/src/layouts/BasicLayout.vue | 337 ++
Code/WMS/WIDESEA_WMS_Frontend/src/main.ts | 16
Code/WMS/WIDESEA_WMS_Frontend/src/stores/auth.ts | 79
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs | 15
Code/WMS/WIDESEA_WMS_Frontend/src/views/stock/info/index.vue | 108
Code/WMS/WIDESEA_WMS_Frontend/src/router/guard.ts | 29
Code/WMS/WIDESEA_WMS_Frontend/src/api/auth.ts | 45
Code/WMS/WIDESEA_WMS_Frontend/src/App.vue | 14
Code/WMS/WIDESEA_WMS_Frontend/src/types/user.ts | 57
56 files changed, 9,500 insertions(+), 80 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/CodeChunks.db b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/CodeChunks.db
index a887584..07558c8 100644
--- a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/CodeChunks.db
+++ b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/CodeChunks.db
Binary files differ
diff --git a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/SemanticSymbols.db b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/SemanticSymbols.db
index 43eeb4a..8d634af 100644
--- a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/SemanticSymbols.db
+++ b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/SemanticSymbols.db
Binary files differ
diff --git a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json
index 36ce03f..f2b698f 100644
--- a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json
+++ b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json
@@ -7,12 +7,16 @@
"RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\robotjob\\robotjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
- "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
- "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
+ "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_dto\\taskinfo\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\taskinfo\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
- "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_tasks\\socketserver\\tcpsocketserver.messaging.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\socketserver\\tcpsocketserver.messaging.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_dto\\stock\\stockdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\stock\\stockdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\taskinfo\\dt_robottask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -34,7 +38,7 @@
"DocumentGroups": [
{
"DockedWidth": 200,
- "SelectedChildIndex": 7,
+ "SelectedChildIndex": 9,
"Children": [
{
"$type": "Bookmark",
@@ -51,42 +55,67 @@
{
"$type": "Document",
"DocumentIndex": 1,
- "Title": "appsettings.json",
- "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
- "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
- "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
- "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
- "ViewState": "AgIAACEAAAAAAAAAAAAAADoAAAABAAAAAAAAAA==",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
- "WhenOpened": "2026-02-05T09:49:23.094Z"
+ "Title": "CreateTaskDto.cs",
+ "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\TaskInfo\\CreateTaskDto.cs",
+ "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\TaskInfo\\CreateTaskDto.cs",
+ "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\TaskInfo\\CreateTaskDto.cs",
+ "RelativeToolTip": "WIDESEAWCS_DTO\\TaskInfo\\CreateTaskDto.cs",
+ "ViewState": "AgIAABUAAAAAAAAAAAAAwCwAAAArAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2026-02-06T08:09:57.387Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 2,
+ "Title": "CommonStackerCraneJob.cs",
+ "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+ "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+ "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+ "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+ "ViewState": "AgIAACUAAAAAAAAAAAAAwDoAAAAqAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2026-02-06T06:29:00.256Z"
},
{
"$type": "Document",
"DocumentIndex": 3,
+ "Title": "StockDTO.cs",
+ "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\Stock\\StockDTO.cs",
+ "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\Stock\\StockDTO.cs",
+ "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\Stock\\StockDTO.cs",
+ "RelativeToolTip": "WIDESEAWCS_DTO\\Stock\\StockDTO.cs",
+ "ViewState": "AgIAABwAAAAAAAAAAAA0wCkAAAAOAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2026-02-06T02:48:18.997Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 4,
"Title": "Dt_RobotTask.cs",
"DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_RobotTask.cs",
"RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_RobotTask.cs",
"ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_RobotTask.cs",
"RelativeToolTip": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_RobotTask.cs",
- "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAqAAAAAAAAAA==",
+ "ViewState": "AgIAAEsAAAAAAAAAAAAiwA8AAAARAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2026-02-05T06:59:50.829Z"
},
{
"$type": "Document",
- "DocumentIndex": 4,
+ "DocumentIndex": 5,
"Title": "RobotTaskService.cs",
"DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\RobotTaskService.cs",
"RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\RobotTaskService.cs",
"ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\RobotTaskService.cs",
"RelativeToolTip": "WIDESEAWCS_TaskInfoService\\RobotTaskService.cs",
- "ViewState": "AgIAADYAAAAAAAAAAAA+wEkAAAB+AAAAAAAAAA==",
+ "ViewState": "AgIAADgAAAAAAAAAAAAUwEkAAAB+AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2026-02-05T06:22:00.192Z"
},
{
"$type": "Document",
- "DocumentIndex": 5,
+ "DocumentIndex": 6,
"Title": "IRobotTaskService.cs",
"DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\IRobotTaskService.cs",
"RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\IRobotTaskService.cs",
@@ -104,22 +133,10 @@
"RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RobotJob\\RobotJob.cs",
"ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RobotJob\\RobotJob.cs",
"RelativeToolTip": "WIDESEAWCS_Tasks\\RobotJob\\RobotJob.cs",
- "ViewState": "AgIAAHYAAAAAAAAAAAAMwJQAAABAAAAAAAAAAA==",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAhAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2026-02-05T05:38:04.031Z",
"EditorCaption": ""
- },
- {
- "$type": "Document",
- "DocumentIndex": 2,
- "Title": "TcpSocketServer.Messaging.cs",
- "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Messaging.cs",
- "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Messaging.cs",
- "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Messaging.cs",
- "RelativeToolTip": "WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Messaging.cs",
- "ViewState": "AgIAABEAAAAAAAAAAADwvzYAAAAYAAAAAAAAAA==",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2026-02-05T01:11:51.439Z"
}
]
}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/CreateTaskDto.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/CreateTaskDto.cs
new file mode 100644
index 0000000..22aa2a7
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/CreateTaskDto.cs
@@ -0,0 +1,53 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Text.Json.Serialization;
+using System.Threading.Tasks;
+using WIDESEAWCS_Common.TaskEnum;
+
+namespace WIDESEAWCS_DTO.TaskInfo
+{
+ /// <summary>
+ /// 鍒涘缓浠诲姟Dto
+ /// </summary>
+ public class CreateTaskDto
+ {
+ /// <summary>
+ /// 鎵樼洏缂栫爜
+ /// </summary>
+ public string PalletCode { get; set; }
+
+ /// <summary>
+ /// 婧愬湴鍧�
+ /// </summary>
+ public string SourceAddress { get; set; }
+
+ /// <summary>
+ /// 鐩爣鍦板潃
+ /// </summary>
+ public string TargetAddress { get; set; }
+
+ /// <summary>
+ /// 宸烽亾
+ /// </summary>
+ public string Roadway { get; set; }
+
+ /// <summary>
+ /// 浠撳簱ID
+ /// </summary>
+ public int WarehouseId { get; set; }
+
+ /// <summary>
+ /// 鎵樼洏绫诲瀷
+ /// </summary>
+ public int PalletType { get; set; }
+
+ /// <summary>
+ /// 浠诲姟绫诲瀷
+ /// 娉ㄦ剰锛氬墠绔�氬父浼犳暟瀛楋紝鍚庣浼氳嚜鍔ㄦ槧灏勪负鏋氫妇
+ /// </summary>
+ public int TaskType { get; set; }
+ }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
index ddb4821..1030119 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
@@ -3,6 +3,7 @@
using System.Net.Sockets;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.Stock;
+using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
@@ -210,7 +211,7 @@
case "allpickfinished":
state.CurrentAction = "AllPickFinished";
- if(state.CurrentTask?.RobotTaskType == 2|| state.CurrentTask?.RobotTaskType == 3)
+ if (state.CurrentTask?.RobotTaskType == 2 || state.CurrentTask?.RobotTaskType == 3)
{
// TODO 鏈烘鎵嬪彇璐у畬鎴愶紝鍒ゆ柇鏄惁鎹㈢洏銆佹媶鐩樹换鍔★紝鍒涘缓绌烘墭鐩樺洖搴撲换鍔�
}
@@ -218,9 +219,19 @@
case "allputfinished":
state.CurrentAction = "AllPutFinished";
- if (state.CurrentTask?.RobotTaskType == 1 )
+ if (state.CurrentTask?.RobotTaskType == 1)
{
// TODO 鏈烘鎵嬪彇璐у畬鎴愶紝鍒ゆ柇鏄惁缁勭洏浠诲姟锛屽垱寤虹粍鐩樺叆搴撲换鍔�
+ CreateTaskDto taskDto = new CreateTaskDto()
+ {
+ PalletCode = state.CurrentTask?.RobotTargetAddressPalletCode ?? string.Empty,
+ SourceAddress = state.CurrentTask?.RobotTargetAddress ?? string.Empty,
+ TargetAddress = state.CurrentTask?.RobotTargetAddress ?? string.Empty,
+ Roadway = state.CurrentTask?.RobotRoadway == "1" ? "GWSC001" : state.CurrentTask?.RobotRoadway == "2" ? "HCSC001" : "SC001" ?? string.Empty,
+ WarehouseId = state.CurrentTask?.RobotRoadway == "1" ? 1 : state.CurrentTask?.RobotRoadway == "2" ? 2 : 3,
+ PalletType = 1,
+ TaskType = 4
+ };
}
return true;
diff --git a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/CodeChunks.db b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/CodeChunks.db
index 720c276..de9ed6f 100644
--- a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/CodeChunks.db
+++ b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/CodeChunks.db
Binary files differ
diff --git a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/SemanticSymbols.db b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/SemanticSymbols.db
index 290e2d4..9a06436 100644
--- a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/SemanticSymbols.db
+++ b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/SemanticSymbols.db
Binary files differ
diff --git a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.backup.json b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.backup.json
index eef46cc..d9fda16 100644
--- a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.backup.json
+++ b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.backup.json
@@ -3,6 +3,22 @@
"WorkspaceRootPath": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\",
"Documents": [
{
+ "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_core\\basecontroller\\apibasecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\basecontroller\\apibasecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_dto\\task\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\task\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|solutionrelative:widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
"AbsoluteMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_stockservice\\stockserivce.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|solutionrelative:widesea_stockservice\\stockserivce.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
@@ -22,7 +38,7 @@
"DocumentGroups": [
{
"DockedWidth": 200,
- "SelectedChildIndex": 4,
+ "SelectedChildIndex": 3,
"Children": [
{
"$type": "Bookmark",
@@ -33,43 +49,93 @@
"Name": "ST:0:0:{40ea2e6b-2121-4bb8-a43e-c83c04b51041}"
},
{
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
+ },
+ {
"$type": "Document",
- "DocumentIndex": 2,
- "Title": "StockDTO.cs",
- "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockDTO.cs",
- "RelativeDocumentMoniker": "WIDESEA_DTO\\Stock\\StockDTO.cs",
- "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockDTO.cs",
- "RelativeToolTip": "WIDESEA_DTO\\Stock\\StockDTO.cs",
- "ViewState": "AgIAAAcAAAAAAAAAAAA9wBkAAAAWAAAAAAAAAA==",
+ "DocumentIndex": 0,
+ "Title": "ApiBaseController.cs",
+ "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseController\\ApiBaseController.cs",
+ "RelativeDocumentMoniker": "WIDESEA_Core\\BaseController\\ApiBaseController.cs",
+ "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseController\\ApiBaseController.cs",
+ "RelativeToolTip": "WIDESEA_Core\\BaseController\\ApiBaseController.cs",
+ "ViewState": "AgIAABEAAAAAAAAAAADwvx8AAAA7AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2026-02-06T02:56:51.397Z",
+ "WhenOpened": "2026-02-08T08:20:56.818Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
+ "Title": "CreateTaskDto.cs",
+ "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\CreateTaskDto.cs",
+ "RelativeDocumentMoniker": "WIDESEA_DTO\\Task\\CreateTaskDto.cs",
+ "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\CreateTaskDto.cs",
+ "RelativeToolTip": "WIDESEA_DTO\\Task\\CreateTaskDto.cs",
+ "ViewState": "AgIAAA0AAAAAAAAAAAAqwBoAAAArAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2026-02-06T07:58:13.932Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 3,
+ "Title": "ITaskService.cs",
+ "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
+ "RelativeDocumentMoniker": "WIDESEA_ITaskInfoService\\ITaskService.cs",
+ "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
+ "RelativeToolTip": "WIDESEA_ITaskInfoService\\ITaskService.cs",
+ "ViewState": "AgIAABIAAAAAAAAAAAAAACkAAABFAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2026-02-06T07:00:19.697Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 2,
+ "Title": "TaskService.cs",
+ "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
+ "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
+ "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
+ "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
+ "ViewState": "AgIAADUAAAAAAAAAAAAQwEMAAAA6AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2026-02-06T06:34:59.734Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 6,
+ "Title": "StockDTO.cs",
+ "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockDTO.cs",
+ "RelativeDocumentMoniker": "WIDESEA_DTO\\Stock\\StockDTO.cs",
+ "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockDTO.cs",
+ "RelativeToolTip": "WIDESEA_DTO\\Stock\\StockDTO.cs",
+ "ViewState": "AgIAABsAAAAAAAAAAAA1wBYAAABBAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2026-02-06T02:56:51.397Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 5,
"Title": "IStockService.cs",
"DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStockService\\IStockService.cs",
"RelativeDocumentMoniker": "WIDESEA_IStockService\\IStockService.cs",
"ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStockService\\IStockService.cs",
"RelativeToolTip": "WIDESEA_IStockService\\IStockService.cs",
- "ViewState": "AgIAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAAAAA==",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAABsAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2026-02-06T02:13:53.794Z",
- "EditorCaption": ""
+ "WhenOpened": "2026-02-06T02:13:53.794Z"
},
{
"$type": "Document",
- "DocumentIndex": 0,
+ "DocumentIndex": 4,
"Title": "StockSerivce.cs",
"DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockSerivce.cs",
"RelativeDocumentMoniker": "WIDESEA_StockService\\StockSerivce.cs",
"ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockSerivce.cs",
"RelativeToolTip": "WIDESEA_StockService\\StockSerivce.cs",
- "ViewState": "AgIAAFEAAAAAAAAAAAAQwFoAAAAAAAAAAAAAAA==",
+ "ViewState": "AgIAADoAAAAAAAAAAAAQwEoAAAAOAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2026-02-06T01:53:49.077Z",
- "EditorCaption": ""
+ "WhenOpened": "2026-02-06T01:53:49.077Z"
}
]
}
diff --git a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json
index 401f092..3699469 100644
--- a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json
+++ b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json
@@ -3,16 +3,32 @@
"WorkspaceRootPath": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\",
"Documents": [
{
+ "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_core\\basecontroller\\apibasecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\basecontroller\\apibasecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_dto\\task\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\task\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|solutionrelative:widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
"AbsoluteMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_stockservice\\stockserivce.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|solutionrelative:widesea_stockservice\\stockserivce.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
- "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_dto\\stock\\stockdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\stock\\stockdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
- },
- {
"AbsoluteMoniker": "D:0:0:{49716D78-720D-475D-948C-0FC6C5F079E5}|WIDESEA_IStockService\\WIDESEA_IStockService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_istockservice\\istockservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{49716D78-720D-475D-948C-0FC6C5F079E5}|WIDESEA_IStockService\\WIDESEA_IStockService.csproj|solutionrelative:widesea_istockservice\\istockservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_dto\\stock\\stockdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\stock\\stockdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
@@ -22,7 +38,7 @@
"DocumentGroups": [
{
"DockedWidth": 200,
- "SelectedChildIndex": 4,
+ "SelectedChildIndex": 2,
"Children": [
{
"$type": "Bookmark",
@@ -34,20 +50,68 @@
},
{
"$type": "Document",
+ "DocumentIndex": 0,
+ "Title": "ApiBaseController.cs",
+ "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseController\\ApiBaseController.cs",
+ "RelativeDocumentMoniker": "WIDESEA_Core\\BaseController\\ApiBaseController.cs",
+ "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseController\\ApiBaseController.cs",
+ "RelativeToolTip": "WIDESEA_Core\\BaseController\\ApiBaseController.cs",
+ "ViewState": "AgIAABEAAAAAAAAAAADwvyAAAAAIAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2026-02-08T08:20:56.818Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
"DocumentIndex": 1,
+ "Title": "CreateTaskDto.cs",
+ "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\CreateTaskDto.cs",
+ "RelativeDocumentMoniker": "WIDESEA_DTO\\Task\\CreateTaskDto.cs",
+ "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\CreateTaskDto.cs",
+ "RelativeToolTip": "WIDESEA_DTO\\Task\\CreateTaskDto.cs",
+ "ViewState": "AgIAAA0AAAAAAAAAAAAqwBoAAAArAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2026-02-06T07:58:13.932Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 3,
+ "Title": "ITaskService.cs",
+ "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
+ "RelativeDocumentMoniker": "WIDESEA_ITaskInfoService\\ITaskService.cs",
+ "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
+ "RelativeToolTip": "WIDESEA_ITaskInfoService\\ITaskService.cs",
+ "ViewState": "AgIAABIAAAAAAAAAAAAAACkAAABFAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2026-02-06T07:00:19.697Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 2,
+ "Title": "TaskService.cs",
+ "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
+ "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
+ "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
+ "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
+ "ViewState": "AgIAADUAAAAAAAAAAAAQwEMAAAA6AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2026-02-06T06:34:59.734Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 6,
"Title": "StockDTO.cs",
"DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockDTO.cs",
"RelativeDocumentMoniker": "WIDESEA_DTO\\Stock\\StockDTO.cs",
"ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockDTO.cs",
"RelativeToolTip": "WIDESEA_DTO\\Stock\\StockDTO.cs",
- "ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAABBAAAAAAAAAA==",
+ "ViewState": "AgIAABsAAAAAAAAAAAA1wBYAAABBAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2026-02-06T02:56:51.397Z",
- "EditorCaption": ""
+ "WhenOpened": "2026-02-06T02:56:51.397Z"
},
{
"$type": "Document",
- "DocumentIndex": 2,
+ "DocumentIndex": 5,
"Title": "IStockService.cs",
"DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStockService\\IStockService.cs",
"RelativeDocumentMoniker": "WIDESEA_IStockService\\IStockService.cs",
@@ -55,21 +119,19 @@
"RelativeToolTip": "WIDESEA_IStockService\\IStockService.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABsAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2026-02-06T02:13:53.794Z",
- "EditorCaption": ""
+ "WhenOpened": "2026-02-06T02:13:53.794Z"
},
{
"$type": "Document",
- "DocumentIndex": 0,
+ "DocumentIndex": 4,
"Title": "StockSerivce.cs",
"DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockSerivce.cs",
"RelativeDocumentMoniker": "WIDESEA_StockService\\StockSerivce.cs",
"ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockSerivce.cs",
"RelativeToolTip": "WIDESEA_StockService\\StockSerivce.cs",
- "ViewState": "AgIAAO8AAAAAAAAAAAAIwB8AAAAgAAAAAAAAAA==",
+ "ViewState": "AgIAADoAAAAAAAAAAAAQwEoAAAAOAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2026-02-06T01:53:49.077Z",
- "EditorCaption": ""
+ "WhenOpened": "2026-02-06T01:53:49.077Z"
}
]
}
diff --git a/Code/WMS/WIDESEA_WMSServer/.vscode/settings.json b/Code/WMS/WIDESEA_WMSServer/.vscode/settings.json
new file mode 100644
index 0000000..23f1cb8
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSServer/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "workbench.editor.openPositioning": "left"
+}
\ No newline at end of file
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/CreateTaskDto.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/CreateTaskDto.cs
new file mode 100644
index 0000000..e67f3d5
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/CreateTaskDto.cs
@@ -0,0 +1,63 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Text.Json.Serialization;
+using System.Threading.Tasks;
+using WIDESEA_Common.TaskEnum;
+
+namespace WIDESEA_DTO.Task
+{
+ /// <summary>
+ /// 鍒涘缓浠诲姟Dto
+ /// </summary>
+ public class CreateTaskDto
+ {
+ /// <summary>
+ /// 鎵樼洏缂栫爜
+ /// </summary>
+ [JsonPropertyName("palletCode")]
+ [Required(ErrorMessage = "鎵樼洏缂栫爜涓嶈兘涓虹┖")]
+ public string PalletCode { get; set; }
+
+ /// <summary>
+ /// 婧愬湴鍧�
+ /// </summary>
+ [JsonPropertyName("sourceAddress")]
+ public string SourceAddress { get; set; }
+
+ /// <summary>
+ /// 鐩爣鍦板潃
+ /// </summary>
+ [JsonPropertyName("targetAddress")]
+ public string TargetAddress { get; set; }
+
+ /// <summary>
+ /// 宸烽亾
+ /// </summary>
+ [JsonPropertyName("roadway")]
+ public string Roadway { get; set; }
+
+ /// <summary>
+ /// 浠撳簱ID
+ /// </summary>
+ [JsonPropertyName("warehouseId")]
+ [Required(ErrorMessage = "浠撳簱ID涓嶈兘涓虹┖")]
+ public int WarehouseId { get; set; }
+
+ /// <summary>
+ /// 鎵樼洏绫诲瀷
+ /// </summary>
+ [JsonPropertyName("palletType")]
+ public int PalletType { get; set; }
+
+ /// <summary>
+ /// 浠诲姟绫诲瀷
+ /// 娉ㄦ剰锛氬墠绔�氬父浼犳暟瀛楋紝鍚庣浼氳嚜鍔ㄦ槧灏勪负鏋氫妇
+ /// </summary>
+ [JsonPropertyName("taskType")]
+ [Required(ErrorMessage = "浠诲姟绫诲瀷涓嶈兘涓虹┖")]
+ public TaskTypeEnum TaskType { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
index 82805a3..ec7168b 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -23,6 +23,7 @@
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.TaskEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
@@ -37,5 +38,7 @@
public interface ITaskService : IService<Dt_Task>
{
IRepository<Dt_Task> Repository { get; }
+
+ Task<Dt_Task?> CreateTaskInboundAsync(CreateTaskDto taskDto);
}
}
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
index db183dd..638f58c 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
@@ -74,23 +74,6 @@
Details = details
};
- //Dt_Task dt_Task = new Dt_Task()
- //{
- // TaskNum = 0,
- // PalletCode = stock.PalletNo,
- // PalletType = 1,
- // Roadway = "1",
- // TaskType = TaskTypeEnum.Inbound.GetHashCode(),
- // TaskStatus = TaskStatusEnum.New.GetHashCode(),
- // SourceAddress = stock.LineNo,
- // TargetAddress = "缁勭洏鍖�",
- // CurrentAddress = stock.LineNo,
- // NextAddress = "缁勭洏鍖�",
- // WarehouseId = 1,
- // Grade = 1,
- // Creater = "system",
- //};
-
return StockInfoService.Repository.AddData(entity, x => x.Details);
}
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
index 408a9cb..48ec9bb 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -20,6 +20,7 @@
using WIDESEA_Common.TaskEnum;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Task;
using WIDESEA_IBasicService;
using WIDESEA_IInboundService;
using WIDESEA_IOutboundService;
@@ -53,5 +54,48 @@
_unitOfWorkManage = unitOfWorkManage;
}
+ /// <summary>
+ /// 鍒涘缓浠诲姟锛堢粍鐩樺叆搴撲换鍔°�佺┖鎵樼洏鍥炲簱浠诲姟锛�
+ /// </summary>
+ /// <param name="palletCode">鎵樼洏鍙�</param>
+ /// <param name="sourceAddress">璧峰鍦板潃</param>
+ /// <param name="targetAddress">鐩爣鍦板潃</param>
+ /// <param name="roadway">宸烽亾鍙�</param>
+ /// <param name="warehouseId">浠撳簱涓婚敭</param>
+ /// <param name="palletType">鎵樼洏绫诲瀷</param>
+ /// <param name="taskType">浠诲姟绫诲瀷</param>
+ /// <returns>鏄惁鎴愬姛</returns>
+ public async Task<Dt_Task?> CreateTaskInboundAsync(CreateTaskDto taskDto)
+ {
+ if (string.IsNullOrWhiteSpace(taskDto.PalletCode) || string.IsNullOrWhiteSpace(taskDto.SourceAddress) || string.IsNullOrWhiteSpace(taskDto.TargetAddress) || string.IsNullOrWhiteSpace(taskDto.Roadway))
+ {
+ return null;
+ }
+
+ if (taskDto.TaskType != TaskTypeEnum.Inbound || taskDto.TaskType != TaskTypeEnum.InEmpty)
+ {
+ return null;
+ }
+
+ var task = new Dt_Task
+ {
+ TaskNum = 0,
+ PalletCode = taskDto.PalletCode,
+ PalletType = taskDto.PalletType,
+ Roadway = taskDto.Roadway,
+ TaskType = taskDto.TaskType.GetHashCode(),
+ TaskStatus = TaskStatusEnum.New.GetHashCode(),
+ SourceAddress = taskDto.SourceAddress,
+ TargetAddress = taskDto.TargetAddress,
+ CurrentAddress = taskDto.SourceAddress,
+ NextAddress = taskDto.TargetAddress,
+ WarehouseId = taskDto.WarehouseId,
+ Grade = 1,
+ Creater = "system"
+ };
+
+ return await Repository.AddDataAsync(task) > 0 ? task : null;
+ }
+
}
}
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
index dcc27d0..350f7ee 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -22,5 +22,16 @@
{
}
+ /// <summary>
+ /// 鍒涘缓鍏ュ簱浠诲姟
+ /// </summary>
+ /// <param name="taskDto"></param>
+ /// <returns></returns>
+ public WebResponseContent CreateTaskInboundAsync(CreateTaskDto taskDto)
+ {
+ WebResponseContent content = new WebResponseContent();
+ content.Data = Service.CreateTaskInboundAsync(taskDto);
+ return content;
+ }
}
}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/.gitignore b/Code/WMS/WIDESEA_WMS_Frontend/.gitignore
new file mode 100644
index 0000000..d1c7d12
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/.gitignore
@@ -0,0 +1,28 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+# Auto-generated
+src/auto-imports.d.ts
+src/components.d.ts
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/GUIDE.md b/Code/WMS/WIDESEA_WMS_Frontend/GUIDE.md
new file mode 100644
index 0000000..bf8696e
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/GUIDE.md
@@ -0,0 +1,435 @@
+# WIDESEA WMS 鍓嶇椤圭洰 - 蹇�熷紑濮嬫寚鍗�
+
+## 椤圭洰姒傝堪
+
+鏈」鐩槸鍩轰簬 Vue 3 + TypeScript + Ant Design Vue 寮�鍙戠殑 WIDESEA WMS 浠撳簱绠$悊绯荤粺鍓嶇锛屽凡瀹屾垚涓庡悗绔� API 鐨勯�傞厤銆�
+
+## 鎶�鏈爤
+
+- **妗嗘灦**: Vue 3.4 (Composition API)
+- **璇█**: TypeScript 5.3
+- **鏋勫缓宸ュ叿**: Vite 5.0
+- **UI 缁勪欢搴�**: Ant Design Vue 4.1
+- **璺敱**: Vue Router 4.2
+- **鐘舵�佺鐞�**: Pinia 2.1
+- **HTTP 瀹㈡埛绔�**: Axios 1.6
+- **鏃ユ湡澶勭悊**: Day.js 1.11
+- **宸ュ叿搴�**: Lodash-es 4.17
+
+## 椤圭洰缁撴瀯
+
+```
+WIDESEA_WMS_Frontend/
+鈹溾攢鈹� src/
+鈹� 鈹溾攢鈹� api/ # API 鎺ュ彛瀹氫箟
+鈹� 鈹� 鈹溾攢鈹� auth.ts # 璁よ瘉鐩稿叧 API
+鈹� 鈹� 鈹溾攢鈹� system/ # 绯荤粺绠$悊 API
+鈹� 鈹� 鈹斺攢鈹� basic/ # 鍩虹淇℃伅 API
+鈹� 鈹溾攢鈹� assets/ # 闈欐�佽祫婧�
+鈹� 鈹� 鈹斺攢鈹� styles/ # 鏍峰紡鏂囦欢
+鈹� 鈹溾攢鈹� layouts/ # 甯冨眬缁勪欢
+鈹� 鈹� 鈹斺攢鈹� BasicLayout.vue # 鍩虹甯冨眬
+鈹� 鈹溾攢鈹� router/ # 璺敱閰嶇疆
+鈹� 鈹� 鈹溾攢鈹� index.ts # 璺敱涓绘枃浠�
+鈹� 鈹� 鈹溾攢鈹� routes.ts # 璺敱瀹氫箟
+鈹� 鈹� 鈹斺攢鈹� guard.ts # 璺敱瀹堝崼
+鈹� 鈹溾攢鈹� stores/ # Pinia 鐘舵�佺鐞�
+鈹� 鈹� 鈹溾攢鈹� auth.ts # 璁よ瘉鐘舵��
+鈹� 鈹� 鈹斺攢鈹� app.ts # 搴旂敤鐘舵��
+鈹� 鈹溾攢鈹� types/ # TypeScript 绫诲瀷瀹氫箟
+鈹� 鈹� 鈹溾攢鈹� api.ts # API 绫诲瀷
+鈹� 鈹� 鈹溾攢鈹� user.ts # 鐢ㄦ埛绫诲瀷
+鈹� 鈹� 鈹斺攢鈹� common.ts # 閫氱敤绫诲瀷
+鈹� 鈹溾攢鈹� utils/ # 宸ュ叿鍑芥暟
+鈹� 鈹� 鈹溾攢鈹� request.ts # Axios 灏佽
+鈹� 鈹� 鈹溾攢鈹� auth.ts # 璁よ瘉宸ュ叿
+鈹� 鈹� 鈹斺攢鈹� common.ts # 閫氱敤宸ュ叿
+鈹� 鈹溾攢鈹� views/ # 椤甸潰缁勪欢
+鈹� 鈹� 鈹溾攢鈹� login/ # 鐧诲綍椤�
+鈹� 鈹� 鈹溾攢鈹� dashboard/ # 棣栭〉
+鈹� 鈹� 鈹溾攢鈹� system/ # 绯荤粺绠$悊
+鈹� 鈹� 鈹� 鈹溾攢鈹� user/ # 鐢ㄦ埛绠$悊
+鈹� 鈹� 鈹� 鈹溾攢鈹� role/ # 瑙掕壊绠$悊
+鈹� 鈹� 鈹� 鈹斺攢鈹� menu/ # 鑿滃崟绠$悊
+鈹� 鈹� 鈹溾攢鈹� basic/ # 鍩虹淇℃伅
+鈹� 鈹� 鈹� 鈹溾攢鈹� warehouse/ # 浠撳簱绠$悊
+鈹� 鈹� 鈹� 鈹溾攢鈹� location/ # 璐т綅绠$悊
+鈹� 鈹� 鈹� 鈹斺攢鈹� materiel/ # 鐗╂枡绠$悊
+鈹� 鈹� 鈹溾攢鈹� inbound/ # 鍏ュ簱绠$悊
+鈹� 鈹� 鈹� 鈹斺攢鈹� order/ # 鍏ュ簱鍗曠鐞�
+鈹� 鈹� 鈹溾攢鈹� outbound/ # 鍑哄簱绠$悊
+鈹� 鈹� 鈹� 鈹斺攢鈹� order/ # 鍑哄簱鍗曠鐞�
+鈹� 鈹� 鈹溾攢鈹� stock/ # 搴撳瓨绠$悊
+鈹� 鈹� 鈹� 鈹斺攢鈹� info/ # 搴撳瓨淇℃伅
+鈹� 鈹� 鈹溾攢鈹� check/ # 鐩樼偣绠$悊
+鈹� 鈹� 鈹� 鈹斺攢鈹� order/ # 鐩樼偣鍗曠鐞�
+鈹� 鈹� 鈹溾攢鈹� task/ # 浠诲姟绠$悊
+鈹� 鈹� 鈹� 鈹斺攢鈹� info/ # 浠诲姟淇℃伅
+鈹� 鈹� 鈹斺攢鈹� error/ # 閿欒椤甸潰
+鈹� 鈹� 鈹斺攢鈹� 404.vue # 404 椤甸潰
+鈹� 鈹溾攢鈹� App.vue # 鏍圭粍浠�
+鈹� 鈹斺攢鈹� main.ts # 鍏ュ彛鏂囦欢
+鈹溾攢鈹� index.html # HTML 妯℃澘
+鈹溾攢鈹� package.json # 椤圭洰閰嶇疆
+鈹溾攢鈹� tsconfig.json # TypeScript 閰嶇疆
+鈹溾攢鈹� vite.config.ts # Vite 閰嶇疆
+鈹斺攢鈹� README.md # 椤圭洰璇存槑
+
+## 瀹夎渚濊禆
+
+```bash
+cd WIDESEA_WMS_Frontend
+npm install
+```
+
+## 鍚姩寮�鍙戞湇鍔″櫒
+
+```bash
+npm run dev
+```
+
+璁块棶: http://localhost:3000
+
+## 鏋勫缓鐢熶骇鐗堟湰
+
+```bash
+npm run build
+```
+
+鏋勫缓浜х墿灏嗙敓鎴愬湪 `dist` 鐩綍銆�
+
+## 棰勮鐢熶骇鏋勫缓
+
+```bash
+npm run preview
+```
+
+## 鍚庣 API 閰嶇疆
+
+鍚庣 API 鍦板潃閰嶇疆鍦� `vite.config.ts` 涓細
+
+```typescript
+server: {
+ proxy: {
+ '/api': {
+ target: 'http://localhost:9291', // 鍚庣 API 鍦板潃
+ changeOrigin: true,
+ },
+ },
+}
+```
+
+**閲嶈**: 鍚姩鍓嶇涔嬪墠锛岃纭繚鍚庣鏈嶅姟宸茬粡鍚姩鍦� `http://localhost:9291`銆�
+
+## 鐧诲綍鍔熻兘
+
+### 鐧诲綍娴佺▼
+
+1. 璁块棶 http://localhost:3000锛岃嚜鍔ㄨ烦杞埌鐧诲綍椤�
+2. 杈撳叆鐢ㄦ埛鍚嶅拰瀵嗙爜
+3. 鐐瑰嚮鐧诲綍鎸夐挳
+4. 鐧诲綍鎴愬姛鍚庯紝Token 瀛樺偍鍦� localStorage
+5. 鑷姩璺宠浆鍒伴椤�
+
+### 璁よ瘉鏈哄埗
+
+- **Token 瀛樺偍**: localStorage (key: `token`)
+- **Token 鏈夋晥鏈�**: 120 鍒嗛挓
+- **Token 鍒锋柊**: 褰撳搷搴斿ご鍖呭惈 `widesea_exp: 1` 鏃惰嚜鍔ㄥ埛鏂�
+- **璇锋眰澶�**: `Authorization: Bearer {token}`
+- **鏈璇佸鐞�**: 401 閿欒鑷姩璺宠浆鐧诲綍椤�
+
+### 娴嬭瘯璐﹀彿
+
+璇蜂娇鐢ㄥ悗绔暟鎹簱涓殑鐢ㄦ埛璐﹀彿杩涜鐧诲綍娴嬭瘯銆�
+
+## 鍔熻兘妯″潡
+
+### 1. 绯荤粺绠$悊
+
+#### 鐢ㄦ埛绠$悊 (`/system/user`)
+- 鐢ㄦ埛鍒楄〃鏌ヨ锛堝垎椤点�佹悳绱級
+- 鏂板鐢ㄦ埛
+- 缂栬緫鐢ㄦ埛
+- 鍒犻櫎鐢ㄦ埛
+- API: `/api/User/GetPageData`, `/api/User/Add`, `/api/User/Update`, `/api/User/Del`
+
+#### 瑙掕壊绠$悊 (`/system/role`)
+- 瑙掕壊鍒楄〃鏌ヨ
+- 鏂板瑙掕壊
+- 缂栬緫瑙掕壊
+- 鍒犻櫎瑙掕壊
+- API: `/api/Role/GetPageData`, `/api/Role/Add`, `/api/Role/Update`, `/api/Role/Del`
+
+#### 鑿滃崟绠$悊 (`/system/menu`)
+- 鑿滃崟鍒楄〃鏌ヨ锛堟爲褰㈢粨鏋勶級
+- 鏂板鑿滃崟
+- 缂栬緫鑿滃崟
+- 鍒犻櫎鑿滃崟
+- API: `/api/Menu/GetPageData`, `/api/Menu/Add`, `/api/Menu/Update`, `/api/Menu/Del`
+
+### 2. 鍩虹淇℃伅
+
+#### 浠撳簱绠$悊 (`/basic/warehouse`)
+- 浠撳簱鍒楄〃鏌ヨ锛堝垎椤点�佹悳绱級
+- 鏂板浠撳簱
+- 缂栬緫浠撳簱
+- 鍒犻櫎浠撳簱
+- API: `/api/Warehouse/GetPageData`, `/api/Warehouse/Add`, `/api/Warehouse/Update`, `/api/Warehouse/Del`
+
+#### 璐т綅绠$悊 (`/basic/location`)
+- 璐т綅鍒楄〃鏌ヨ锛堝垎椤点�佹悳绱級
+- 鏂板璐т綅
+- 缂栬緫璐т綅
+- 鍒犻櫎璐т綅
+- 璐т綅鐘舵�佹樉绀猴紙绌洪棽/鍗犵敤锛�
+- API: `/api/LocationInfo/GetPageData`, `/api/LocationInfo/Add`, `/api/LocationInfo/Update`, `/api/LocationInfo/Del`
+
+#### 鐗╂枡绠$悊 (`/basic/materiel`)
+- 鐗╂枡鍒楄〃鏌ヨ锛堝垎椤点�佹悳绱級
+- 鏂板鐗╂枡
+- 缂栬緫鐗╂枡
+- 鍒犻櫎鐗╂枡
+- API: `/api/MaterielInfo/GetPageData`, `/api/MaterielInfo/Add`, `/api/MaterielInfo/Update`, `/api/MaterielInfo/Del`
+
+### 3. 鍏ュ簱绠$悊
+
+#### 鍏ュ簱鍗曠鐞� (`/inbound/order`)
+- 鍏ュ簱鍗曞垪琛ㄦ煡璇紙鍒嗛〉銆佹悳绱級
+- 鏂板鍏ュ簱鍗�
+- 鏌ョ湅鍏ュ簱鍗曡鎯�
+- 缂栬緫鍏ュ簱鍗�
+- 鍒犻櫎鍏ュ簱鍗�
+- 璁㈠崟鐘舵�佹樉绀猴紙寰呭鐞�/澶勭悊涓�/宸插畬鎴�/宸插彇娑堬級
+- API: `/api/InboundOrder/GetPageData`, `/api/InboundOrder/Add`, `/api/InboundOrder/Update`, `/api/InboundOrder/Del`
+
+### 4. 鍑哄簱绠$悊
+
+#### 鍑哄簱鍗曠鐞� (`/outbound/order`)
+- 鍑哄簱鍗曞垪琛ㄦ煡璇紙鍒嗛〉銆佹悳绱級
+- 鏂板鍑哄簱鍗�
+- 鏌ョ湅鍑哄簱鍗曡鎯�
+- 缂栬緫鍑哄簱鍗�
+- 鍒犻櫎鍑哄簱鍗�
+- 璁㈠崟鐘舵�佹樉绀猴紙寰呭鐞�/澶勭悊涓�/宸插畬鎴�/宸插彇娑堬級
+- API: `/api/OutboundOrder/GetPageData`, `/api/OutboundOrder/Add`, `/api/OutboundOrder/Update`, `/api/OutboundOrder/Del`
+
+### 5. 搴撳瓨绠$悊
+
+#### 搴撳瓨淇℃伅 (`/stock/info`)
+- 搴撳瓨鍒楄〃鏌ヨ锛堝垎椤点�佹悳绱級
+- 鏌ョ湅搴撳瓨鏄庣粏
+- 瀵煎嚭搴撳瓨鏁版嵁
+- 鏄剧ず鎬绘暟閲忋�佸彲鐢ㄦ暟閲忋�侀攣瀹氭暟閲�
+- API: `/api/StockInfo/GetPageData`, `/api/StockInfoDetail/GetDetailPage`
+
+### 6. 鐩樼偣绠$悊
+
+#### 鐩樼偣鍗曠鐞� (`/check/order`)
+- 鐩樼偣鍗曞垪琛ㄦ煡璇紙鍒嗛〉銆佹悳绱級
+- 鏂板鐩樼偣鍗�
+- 鏌ョ湅鐩樼偣鍗曡鎯�
+- 缂栬緫鐩樼偣鍗�
+- 鍒犻櫎鐩樼偣鍗�
+- 鐩樼偣鐘舵�佹樉绀猴紙寰呯洏鐐�/鐩樼偣涓�/宸插畬鎴愶級
+- API: `/api/CheckOrder/GetPageData`, `/api/CheckOrder/Add`, `/api/CheckOrder/Update`, `/api/CheckOrder/Del`
+
+### 7. 浠诲姟绠$悊
+
+#### 浠诲姟淇℃伅 (`/task/info`)
+- 浠诲姟鍒楄〃鏌ヨ锛堝垎椤点�佹悳绱級
+- 浠诲姟鐘舵�佺瓫閫�
+- 鏌ョ湅浠诲姟璇︽儏
+- 浠诲姟鐘舵�佹樉绀猴紙寰呭鐞�/澶勭悊涓�/宸插畬鎴�/宸插彇娑堬級
+- API: `/api/Task/GetPageData`
+
+## API 璇锋眰鏍煎紡
+
+### 鍒嗛〉璇锋眰
+
+```typescript
+{
+ page: 1, // 褰撳墠椤电爜
+ rows: 20, // 姣忛〉鏉℃暟
+ sort: 'CreateDate', // 鎺掑簭瀛楁
+ order: 'desc', // 鎺掑簭鏂瑰紡 (asc/desc)
+ wheres: [ // 鏌ヨ鏉′欢锛堝彲閫夛級
+ {
+ name: 'UserName', // 瀛楁鍚�
+ value: 'admin', // 瀛楁鍊�
+ displayType: 'like' // 鏌ヨ绫诲瀷 (like/equal/notEqual/greaterThan/lessThan/in/notIn)
+ }
+ ]
+}
+```
+
+### 鍝嶅簲鏍煎紡
+
+```typescript
+{
+ status: true, // 鎴愬姛/澶辫触
+ message: '', // 娑堟伅
+ data: { // 鏁版嵁
+ rows: [], // 鏁版嵁鍒楄〃
+ total: 0, // 鎬绘潯鏁�
+ page: 1, // 褰撳墠椤�
+ records: 20 // 姣忛〉鏉℃暟
+ }
+}
+```
+
+## 寮�鍙戞寚鍗�
+
+### 娣诲姞鏂伴〉闈�
+
+1. 鍦� `src/views` 涓嬪垱寤洪〉闈㈢粍浠�
+2. 鍦� `src/router/routes.ts` 涓坊鍔犺矾鐢遍厤缃�
+3. 鍦� `src/api` 涓坊鍔� API 鎺ュ彛瀹氫箟
+4. 鍦� `src/types` 涓坊鍔犵被鍨嬪畾涔夛紙濡傞渶瑕侊級
+
+### 娣诲姞鏂� API
+
+鍦� `src/api` 鐩綍涓嬪垱寤烘垨缂栬緫 API 鏂囦欢锛�
+
+```typescript
+import request from '../utils/request';
+import type { ApiResponse, PageRequest, PageResponse } from '../types/api';
+
+export function getList(data: PageRequest) {
+ return request<ApiResponse<PageResponse<YourType>>>({
+ url: '/YourController/GetPageData',
+ method: 'post',
+ data,
+ });
+}
+
+export function add(data: Partial<YourType>) {
+ return request<ApiResponse<boolean>>({
+ url: '/YourController/Add',
+ method: 'post',
+ data,
+ });
+}
+```
+
+### 鐘舵�佺鐞�
+
+浣跨敤 Pinia 杩涜鐘舵�佺鐞嗭紝宸插垱寤虹殑 Store锛�
+
+- `useAuthStore`: 璁よ瘉鐘舵�侊紙鐧诲綍銆佺櫥鍑恒�佺敤鎴蜂俊鎭級
+- `useAppStore`: 搴旂敤鐘舵�侊紙渚ц竟鏍忔姌鍙犮�佸姞杞界姸鎬侊級
+
+鍒涘缓鏂� Store锛�
+
+```typescript
+import { defineStore } from 'pinia';
+import { ref } from 'vue';
+
+export const useYourStore = defineStore('your-store', () => {
+ const data = ref<any>(null);
+
+ function setData(value: any) {
+ data.value = value;
+ }
+
+ return {
+ data,
+ setData,
+ };
+});
+```
+
+## 甯歌闂
+
+### 1. 鐧诲綍鍚� Token 鏈敓鏁�
+
+妫�鏌ワ細
+- 鍚庣鏄惁姝g‘杩斿洖 Token
+- Token 鏄惁瀛樺偍鍦� localStorage
+- 璇锋眰澶存槸鍚﹀寘鍚� `Authorization: Bearer {token}`
+
+### 2. API 璇锋眰 404
+
+妫�鏌ワ細
+- 鍚庣鏈嶅姟鏄惁鍚姩
+- API 璺緞鏄惁姝g‘
+- Vite 浠g悊閰嶇疆鏄惁姝g‘
+
+### 3. 璺ㄥ煙闂
+
+宸插湪 `vite.config.ts` 涓厤缃唬鐞嗭紝寮�鍙戠幆澧冧笉浼氭湁璺ㄥ煙闂銆傜敓浜х幆澧冮渶瑕佸悗绔厤缃� CORS銆�
+
+### 4. Token 杩囨湡澶勭悊
+
+绯荤粺浼氳嚜鍔ㄥ鐞� Token 杩囨湡锛�
+- 401 閿欒鑷姩璺宠浆鐧诲綍椤�
+- Token 鍗冲皢杩囨湡鏃惰嚜鍔ㄥ埛鏂帮紙鍝嶅簲澶� `widesea_exp: 1`锛�
+
+## 閮ㄧ讲
+
+### 寮�鍙戠幆澧�
+
+```bash
+npm run dev
+```
+
+### 鐢熶骇鐜
+
+1. 鏋勫缓椤圭洰锛�
+```bash
+npm run build
+```
+
+2. 灏� `dist` 鐩綍閮ㄧ讲鍒� Web 鏈嶅姟鍣紙Nginx銆丄pache 绛夛級
+
+3. 閰嶇疆 Nginx 鍙嶅悜浠g悊锛堢ず渚嬶級锛�
+
+```nginx
+server {
+ listen 80;
+ server_name your-domain.com;
+
+ location / {
+ root /path/to/dist;
+ try_files $uri $uri/ /index.html;
+ }
+
+ location /api {
+ proxy_pass http://localhost:9291;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ }
+}
+```
+
+## 鍚庣画鎵╁睍
+
+### 寰呭畬鍠勫姛鑳�
+
+1. **鍏ュ簱/鍑哄簱鍗曟槑缁�**: 娣诲姞鏄庣粏琛ㄦ牸鍜岀紪杈戝姛鑳�
+2. **鏉冮檺鎺у埗**: 鍩轰簬瑙掕壊鐨勮彍鍗曞拰鎸夐挳鏉冮檺鎺у埗
+3. **鏁版嵁瀵煎嚭**: Excel 瀵煎嚭鍔熻兘
+4. **鏁版嵁瀵煎叆**: Excel 鎵归噺瀵煎叆鍔熻兘
+5. **鎶ヨ〃缁熻**: 鍚勭被涓氬姟鎶ヨ〃鍜屽浘琛�
+6. **娑堟伅閫氱煡**: WebSocket 瀹炴椂娑堟伅鎺ㄩ��
+7. **鎿嶄綔鏃ュ織**: 鐢ㄦ埛鎿嶄綔鏃ュ織璁板綍鍜屾煡璇�
+8. **鏁版嵁瀛楀吀**: 瀛楀吀绠$悊鍜屽瓧鍏搁」绠$悊
+9. **鏂囦欢涓婁紶**: 鍥剧墖鍜屾枃浠朵笂浼犲姛鑳�
+10. **鎵撳嵃鍔熻兘**: 鍗曟嵁鎵撳嵃鍔熻兘
+
+### 鎬ц兘浼樺寲
+
+1. 璺敱鎳掑姞杞斤紙宸插疄鐜帮級
+2. 缁勪欢鎳掑姞杞�
+3. 鍥剧墖鎳掑姞杞�
+4. 铏氭嫙婊氬姩锛堝ぇ鏁版嵁閲忚〃鏍硷級
+5. 璇锋眰闃叉姈鍜岃妭娴�
+6. 缂撳瓨浼樺寲
+
+## 鎶�鏈敮鎸�
+
+濡傛湁闂锛岃鑱旂郴寮�鍙戝洟闃熸垨鏌ョ湅鍚庣 API 鏂囨。銆�
+
+## 璁稿彲璇�
+
+MIT
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/README.md b/Code/WMS/WIDESEA_WMS_Frontend/README.md
new file mode 100644
index 0000000..28dcec2
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/README.md
@@ -0,0 +1,114 @@
+# WIDESEA WMS 鍓嶇绯荤粺
+
+鍩轰簬 Vue 3 + TypeScript + Ant Design Vue 鐨勪粨搴撶鐞嗙郴缁熷墠绔��
+
+## 鎶�鏈爤
+
+- Vue 3.4
+- TypeScript 5.3
+- Vite 5.0
+- Ant Design Vue 4.1
+- Vue Router 4.2
+- Pinia 2.1
+- Axios 1.6
+
+## 鍔熻兘妯″潡
+
+### 绯荤粺绠$悊
+- 鐢ㄦ埛绠$悊
+- 瑙掕壊绠$悊
+- 鑿滃崟绠$悊
+- 瀛楀吀绠$悊
+- 鏃ュ織绠$悊
+- 绉熸埛绠$悊
+
+### 鍩虹淇℃伅
+- 浠撳簱绠$悊
+- 璐т綅绠$悊
+- 鐗╂枡绠$悊
+- 鐗╂枡缂栫爜绠$悊
+- 鎵樼洏缂栫爜绠$悊
+
+### 鍏ュ簱绠$悊
+- 鍏ュ簱鍗曠鐞�
+- 鍏ュ簱鍗曟槑缁�
+- 閲囪喘鍗曠鐞�
+- 鏀惰揣鍗曠鐞�
+
+### 鍑哄簱绠$悊
+- 鍑哄簱鍗曠鐞�
+- 鍑哄簱鍗曟槑缁�
+- 鍑哄簱閿佸畾淇℃伅
+
+### 搴撳瓨绠$悊
+- 搴撳瓨淇℃伅
+- 搴撳瓨鏄庣粏
+- 搴撳瓨瑙嗗浘
+
+### 鐩樼偣绠$悊
+- 鐩樼偣鍗曠鐞�
+- 鐩樼偣缁撴灉
+
+### 浠诲姟绠$悊
+- 浠诲姟淇℃伅
+- 浠诲姟鍘嗗彶
+
+## 寮�鍙�
+
+```bash
+# 瀹夎渚濊禆
+npm install
+
+# 鍚姩寮�鍙戞湇鍔″櫒
+npm run dev
+
+# 鏋勫缓鐢熶骇鐗堟湰
+npm run build
+
+# 棰勮鐢熶骇鏋勫缓
+npm run preview
+```
+
+## 閰嶇疆
+
+鍚庣 API 鍦板潃閰嶇疆鍦� `vite.config.ts` 涓細
+
+```typescript
+server: {
+ proxy: {
+ '/api': {
+ target: 'http://localhost:9291',
+ changeOrigin: true,
+ },
+ },
+}
+```
+
+## 鐩綍缁撴瀯
+
+```
+src/
+鈹溾攢鈹� api/ # API 鎺ュ彛
+鈹溾攢鈹� assets/ # 闈欐�佽祫婧�
+鈹溾攢鈹� components/ # 鍏叡缁勪欢
+鈹溾攢鈹� layouts/ # 甯冨眬缁勪欢
+鈹溾攢鈹� router/ # 璺敱閰嶇疆
+鈹溾攢鈹� stores/ # Pinia 鐘舵�佺鐞�
+鈹溾攢鈹� types/ # TypeScript 绫诲瀷瀹氫箟
+鈹溾攢鈹� utils/ # 宸ュ叿鍑芥暟
+鈹溾攢鈹� views/ # 椤甸潰缁勪欢
+鈹溾攢鈹� App.vue # 鏍圭粍浠�
+鈹斺攢鈹� main.ts # 鍏ュ彛鏂囦欢
+```
+
+## 璁よ瘉鏈哄埗
+
+绯荤粺浣跨敤 JWT Token 杩涜璁よ瘉锛�
+- Token 瀛樺偍鍦� localStorage
+- 璇锋眰澶磋嚜鍔ㄦ坊鍔� Authorization: Bearer {token}
+- Token 杩囨湡鑷姩鍒锋柊
+- 鏈璇佽嚜鍔ㄨ烦杞櫥褰曢〉
+
+## 璁稿彲璇�
+
+MIT
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/index.html b/Code/WMS/WIDESEA_WMS_Frontend/index.html
new file mode 100644
index 0000000..72508ff
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/index.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+ <head>
+ <meta charset="UTF-8" />
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>WIDESEA WMS - 浠撳簱绠$悊绯荤粺</title>
+ </head>
+ <body>
+ <div id="app"></div>
+ <script type="module" src="/src/main.ts"></script>
+ </body>
+</html>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/package-lock.json b/Code/WMS/WIDESEA_WMS_Frontend/package-lock.json
new file mode 100644
index 0000000..988bad4
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/package-lock.json
@@ -0,0 +1,4654 @@
+{
+ "name": "widesea-wms-frontend",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "widesea-wms-frontend",
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@ant-design/icons-vue": "^7.0.1",
+ "ant-design-vue": "^4.1.0",
+ "axios": "^1.6.2",
+ "dayjs": "^1.11.10",
+ "lodash-es": "^4.17.21",
+ "nprogress": "^0.2.0",
+ "pinia": "^2.1.7",
+ "vue": "^3.4.0",
+ "vue-router": "^4.2.5"
+ },
+ "devDependencies": {
+ "@types/lodash-es": "^4.17.12",
+ "@types/node": "^20.10.5",
+ "@types/nprogress": "^0.2.3",
+ "@vitejs/plugin-vue": "^5.0.0",
+ "@vitejs/plugin-vue-jsx": "^3.1.0",
+ "eslint": "^8.56.0",
+ "prettier": "^3.1.1",
+ "typescript": "^5.3.3",
+ "unplugin-auto-import": "^0.17.2",
+ "unplugin-vue-components": "^0.26.0",
+ "vite": "^5.0.8",
+ "vue-tsc": "^1.8.27"
+ }
+ },
+ "node_modules/@ant-design/colors": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz",
+ "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@ctrl/tinycolor": "^3.4.0"
+ }
+ },
+ "node_modules/@ant-design/icons-svg": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz",
+ "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==",
+ "license": "MIT"
+ },
+ "node_modules/@ant-design/icons-vue": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz",
+ "integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@ant-design/colors": "^6.0.0",
+ "@ant-design/icons-svg": "^4.2.1"
+ },
+ "peerDependencies": {
+ "vue": ">=3.0.3"
+ }
+ },
+ "node_modules/@antfu/utils": {
+ "version": "0.7.10",
+ "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz",
+ "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helpers": "^7.28.6",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.27.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
+ "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.27.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz",
+ "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-member-expression-to-functions": "^7.28.5",
+ "@babel/helper-optimise-call-expression": "^7.27.1",
+ "@babel/helper-replace-supers": "^7.28.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+ "@babel/traverse": "^7.28.6",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-member-expression-to-functions": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz",
+ "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.28.5",
+ "@babel/types": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-optimise-call-expression": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
+ "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-replace-supers": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz",
+ "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-member-expression-to-functions": "^7.28.5",
+ "@babel/helper-optimise-call-expression": "^7.27.1",
+ "@babel/traverse": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
+ "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "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/helper-validator-option": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
+ "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
+ "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.0"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
+ "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
+ "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-typescript": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz",
+ "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+ "@babel/plugin-syntax-typescript": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
+ "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.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": "3.6.1",
+ "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
+ "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
+ "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
+ "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==",
+ "license": "MIT"
+ },
+ "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/@eslint-community/eslint-utils": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
+ "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
+ "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
+ "deprecated": "Use @eslint/config-array instead",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.3",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "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/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
+ "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz",
+ "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz",
+ "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz",
+ "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz",
+ "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz",
+ "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz",
+ "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz",
+ "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz",
+ "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz",
+ "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz",
+ "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz",
+ "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz",
+ "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz",
+ "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz",
+ "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz",
+ "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz",
+ "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz",
+ "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz",
+ "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz",
+ "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz",
+ "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz",
+ "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz",
+ "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz",
+ "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz",
+ "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz",
+ "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@simonwep/pickr": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.8.2.tgz",
+ "integrity": "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-js": "^3.15.1",
+ "nanopop": "^2.1.0"
+ }
+ },
+ "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.23",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "20.19.33",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz",
+ "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@types/nprogress": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.3.tgz",
+ "integrity": "sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "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/@vitejs/plugin-vue-jsx": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz",
+ "integrity": "sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.23.3",
+ "@babel/plugin-transform-typescript": "^7.23.3",
+ "@vue/babel-plugin-jsx": "^1.1.5"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.0.0 || ^5.0.0",
+ "vue": "^3.0.0"
+ }
+ },
+ "node_modules/@volar/language-core": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz",
+ "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/source-map": "1.11.1"
+ }
+ },
+ "node_modules/@volar/source-map": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz",
+ "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "muggle-string": "^0.3.1"
+ }
+ },
+ "node_modules/@volar/typescript": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz",
+ "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-core": "1.11.1",
+ "path-browserify": "^1.0.1"
+ }
+ },
+ "node_modules/@vue/babel-helper-vue-transform-on": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz",
+ "integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vue/babel-plugin-jsx": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz",
+ "integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/template": "^7.27.2",
+ "@babel/traverse": "^7.28.0",
+ "@babel/types": "^7.28.2",
+ "@vue/babel-helper-vue-transform-on": "1.5.0",
+ "@vue/babel-plugin-resolve-type": "1.5.0",
+ "@vue/shared": "^3.5.18"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vue/babel-plugin-resolve-type": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz",
+ "integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/parser": "^7.28.0",
+ "@vue/compiler-sfc": "^3.5.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.27.tgz",
+ "integrity": "sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.5",
+ "@vue/shared": "3.5.27",
+ "entities": "^7.0.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz",
+ "integrity": "sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-core": "3.5.27",
+ "@vue/shared": "3.5.27"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz",
+ "integrity": "sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.5",
+ "@vue/compiler-core": "3.5.27",
+ "@vue/compiler-dom": "3.5.27",
+ "@vue/compiler-ssr": "3.5.27",
+ "@vue/shared": "3.5.27",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.21",
+ "postcss": "^8.5.6",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz",
+ "integrity": "sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.27",
+ "@vue/shared": "3.5.27"
+ }
+ },
+ "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": "1.8.27",
+ "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz",
+ "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-core": "~1.11.1",
+ "@volar/source-map": "~1.11.1",
+ "@vue/compiler-dom": "^3.3.0",
+ "@vue/shared": "^3.3.0",
+ "computeds": "^0.0.1",
+ "minimatch": "^9.0.3",
+ "muggle-string": "^0.3.1",
+ "path-browserify": "^1.0.1",
+ "vue-template-compiler": "^2.7.14"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vue/language-core/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@vue/language-core/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.27.tgz",
+ "integrity": "sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/shared": "3.5.27"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.27.tgz",
+ "integrity": "sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.27",
+ "@vue/shared": "3.5.27"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.27.tgz",
+ "integrity": "sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.27",
+ "@vue/runtime-core": "3.5.27",
+ "@vue/shared": "3.5.27",
+ "csstype": "^3.2.3"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.27.tgz",
+ "integrity": "sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-ssr": "3.5.27",
+ "@vue/shared": "3.5.27"
+ },
+ "peerDependencies": {
+ "vue": "3.5.27"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.27.tgz",
+ "integrity": "sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==",
+ "license": "MIT"
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/ant-design-vue": {
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-4.2.6.tgz",
+ "integrity": "sha512-t7eX13Yj3i9+i5g9lqFyYneoIb3OzTvQjq9Tts1i+eiOd3Eva/6GagxBSXM1fOCjqemIu0FYVE1ByZ/38epR3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@ant-design/colors": "^6.0.0",
+ "@ant-design/icons-vue": "^7.0.0",
+ "@babel/runtime": "^7.10.5",
+ "@ctrl/tinycolor": "^3.5.0",
+ "@emotion/hash": "^0.9.0",
+ "@emotion/unitless": "^0.8.0",
+ "@simonwep/pickr": "~1.8.0",
+ "array-tree-filter": "^2.1.0",
+ "async-validator": "^4.0.0",
+ "csstype": "^3.1.1",
+ "dayjs": "^1.10.5",
+ "dom-align": "^1.12.1",
+ "dom-scroll-into-view": "^2.0.0",
+ "lodash": "^4.17.21",
+ "lodash-es": "^4.17.15",
+ "resize-observer-polyfill": "^1.5.1",
+ "scroll-into-view-if-needed": "^2.2.25",
+ "shallow-equal": "^1.0.0",
+ "stylis": "^4.1.3",
+ "throttle-debounce": "^5.0.0",
+ "vue-types": "^3.0.0",
+ "warning": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12.22.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ant-design-vue"
+ },
+ "peerDependencies": {
+ "vue": ">=3.2.0"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/anymatch/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/array-tree-filter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz",
+ "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==",
+ "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.13.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.4.tgz",
+ "integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.4",
+ "proxy-from-env": "^1.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/baseline-browser-mapping": {
+ "version": "2.9.19",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
+ "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.js"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "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/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001769",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz",
+ "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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/compute-scroll-into-view": {
+ "version": "1.0.20",
+ "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz",
+ "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==",
+ "license": "MIT"
+ },
+ "node_modules/computeds": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz",
+ "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/confbox": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
+ "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/core-js": {
+ "version": "3.48.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz",
+ "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 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.19",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz",
+ "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==",
+ "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/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "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/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dom-align": {
+ "version": "1.12.4",
+ "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz",
+ "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==",
+ "license": "MIT"
+ },
+ "node_modules/dom-scroll-into-view": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz",
+ "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==",
+ "license": "MIT"
+ },
+ "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/electron-to-chromium": {
+ "version": "1.5.286",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz",
+ "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "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/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
+ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.57.1",
+ "@humanwhocodes/config-array": "^0.13.0",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "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/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/exsolve": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz",
+ "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
+ "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
+ "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/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "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/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "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/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "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/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz",
+ "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/local-pkg": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz",
+ "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mlly": "^1.7.3",
+ "pkg-types": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
+ "license": "MIT"
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "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/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/micromatch/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "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": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mlly": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz",
+ "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "pathe": "^2.0.3",
+ "pkg-types": "^1.3.1",
+ "ufo": "^1.6.1"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/muggle-string": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz",
+ "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==",
+ "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/nanopop": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/nanopop/-/nanopop-2.4.2.tgz",
+ "integrity": "sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==",
+ "license": "MIT"
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nprogress": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz",
+ "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==",
+ "license": "MIT"
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "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/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "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/pkg-types": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz",
+ "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "confbox": "^0.1.8",
+ "mlly": "^1.7.4",
+ "pathe": "^2.0.1"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "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/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz",
+ "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/quansync": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz",
+ "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/antfu"
+ },
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/resize-observer-polyfill": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==",
+ "license": "MIT"
+ },
+ "node_modules/resolve": {
+ "version": "1.22.11",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
+ "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz",
+ "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==",
+ "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.57.1",
+ "@rollup/rollup-android-arm64": "4.57.1",
+ "@rollup/rollup-darwin-arm64": "4.57.1",
+ "@rollup/rollup-darwin-x64": "4.57.1",
+ "@rollup/rollup-freebsd-arm64": "4.57.1",
+ "@rollup/rollup-freebsd-x64": "4.57.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.57.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.57.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.57.1",
+ "@rollup/rollup-linux-arm64-musl": "4.57.1",
+ "@rollup/rollup-linux-loong64-gnu": "4.57.1",
+ "@rollup/rollup-linux-loong64-musl": "4.57.1",
+ "@rollup/rollup-linux-ppc64-gnu": "4.57.1",
+ "@rollup/rollup-linux-ppc64-musl": "4.57.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.57.1",
+ "@rollup/rollup-linux-riscv64-musl": "4.57.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.57.1",
+ "@rollup/rollup-linux-x64-gnu": "4.57.1",
+ "@rollup/rollup-linux-x64-musl": "4.57.1",
+ "@rollup/rollup-openbsd-x64": "4.57.1",
+ "@rollup/rollup-openharmony-arm64": "4.57.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.57.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.57.1",
+ "@rollup/rollup-win32-x64-gnu": "4.57.1",
+ "@rollup/rollup-win32-x64-msvc": "4.57.1",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/scroll-into-view-if-needed": {
+ "version": "2.2.31",
+ "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz",
+ "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==",
+ "license": "MIT",
+ "dependencies": {
+ "compute-scroll-into-view": "^1.0.20"
+ }
+ },
+ "node_modules/scule": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz",
+ "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/shallow-equal": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz",
+ "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==",
+ "license": "MIT"
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-literal": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz",
+ "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^9.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/strip-literal/node_modules/js-tokens": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
+ "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/stylis": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz",
+ "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==",
+ "license": "MIT"
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/throttle-debounce": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz",
+ "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.22"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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/ufo": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz",
+ "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/unimport": {
+ "version": "3.14.6",
+ "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.14.6.tgz",
+ "integrity": "sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.1.4",
+ "acorn": "^8.14.0",
+ "escape-string-regexp": "^5.0.0",
+ "estree-walker": "^3.0.3",
+ "fast-glob": "^3.3.3",
+ "local-pkg": "^1.0.0",
+ "magic-string": "^0.30.17",
+ "mlly": "^1.7.4",
+ "pathe": "^2.0.1",
+ "picomatch": "^4.0.2",
+ "pkg-types": "^1.3.0",
+ "scule": "^1.3.0",
+ "strip-literal": "^2.1.1",
+ "unplugin": "^1.16.1"
+ }
+ },
+ "node_modules/unimport/node_modules/confbox": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz",
+ "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/unimport/node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/unimport/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/unimport/node_modules/local-pkg": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz",
+ "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mlly": "^1.7.4",
+ "pkg-types": "^2.3.0",
+ "quansync": "^0.2.11"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/unimport/node_modules/local-pkg/node_modules/pkg-types": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz",
+ "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "confbox": "^0.2.2",
+ "exsolve": "^1.0.7",
+ "pathe": "^2.0.3"
+ }
+ },
+ "node_modules/unplugin": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz",
+ "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "webpack-virtual-modules": "^0.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/unplugin-auto-import": {
+ "version": "0.17.8",
+ "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.17.8.tgz",
+ "integrity": "sha512-CHryj6HzJ+n4ASjzwHruD8arhbdl+UXvhuAIlHDs15Y/IMecG3wrf7FVg4pVH/DIysbq/n0phIjNHAjl7TG7Iw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@antfu/utils": "^0.7.10",
+ "@rollup/pluginutils": "^5.1.0",
+ "fast-glob": "^3.3.2",
+ "local-pkg": "^0.5.0",
+ "magic-string": "^0.30.10",
+ "minimatch": "^9.0.4",
+ "unimport": "^3.7.2",
+ "unplugin": "^1.11.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@nuxt/kit": "^3.2.2",
+ "@vueuse/core": "*"
+ },
+ "peerDependenciesMeta": {
+ "@nuxt/kit": {
+ "optional": true
+ },
+ "@vueuse/core": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/unplugin-auto-import/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/unplugin-auto-import/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/unplugin-vue-components": {
+ "version": "0.26.0",
+ "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.26.0.tgz",
+ "integrity": "sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@antfu/utils": "^0.7.6",
+ "@rollup/pluginutils": "^5.0.4",
+ "chokidar": "^3.5.3",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.1",
+ "local-pkg": "^0.4.3",
+ "magic-string": "^0.30.3",
+ "minimatch": "^9.0.3",
+ "resolve": "^1.22.4",
+ "unplugin": "^1.4.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@babel/parser": "^7.15.8",
+ "@nuxt/kit": "^3.2.2",
+ "vue": "2 || 3"
+ },
+ "peerDependenciesMeta": {
+ "@babel/parser": {
+ "optional": true
+ },
+ "@nuxt/kit": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/unplugin-vue-components/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/unplugin-vue-components/node_modules/local-pkg": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz",
+ "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/unplugin-vue-components/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "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/vue": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.27.tgz",
+ "integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.27",
+ "@vue/compiler-sfc": "3.5.27",
+ "@vue/runtime-dom": "3.5.27",
+ "@vue/server-renderer": "3.5.27",
+ "@vue/shared": "3.5.27"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "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-template-compiler": {
+ "version": "2.7.16",
+ "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
+ "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "de-indent": "^1.0.2",
+ "he": "^1.2.0"
+ }
+ },
+ "node_modules/vue-tsc": {
+ "version": "1.8.27",
+ "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz",
+ "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/typescript": "~1.11.1",
+ "@vue/language-core": "1.8.27",
+ "semver": "^7.5.4"
+ },
+ "bin": {
+ "vue-tsc": "bin/vue-tsc.js"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ }
+ },
+ "node_modules/vue-tsc/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/vue-types": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/vue-types/-/vue-types-3.0.2.tgz",
+ "integrity": "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "3.0.1"
+ },
+ "engines": {
+ "node": ">=10.15.0"
+ },
+ "peerDependencies": {
+ "vue": "^3.0.0"
+ }
+ },
+ "node_modules/warning": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+ "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "node_modules/webpack-virtual-modules": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+ "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/package.json b/Code/WMS/WIDESEA_WMS_Frontend/package.json
new file mode 100644
index 0000000..6058e0d
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "widesea-wms-frontend",
+ "version": "1.0.0",
+ "description": "WIDESEA WMS 浠撳簱绠$悊绯荤粺鍓嶇",
+ "author": "WIDESEA",
+ "license": "MIT",
+ "scripts": {
+ "dev": "vite",
+ "build": "vue-tsc && vite build",
+ "preview": "vite preview",
+ "lint": "eslint . --ext .vue,.js,.ts,.jsx,.tsx --fix",
+ "format": "prettier --write ."
+ },
+ "dependencies": {
+ "vue": "^3.4.0",
+ "vue-router": "^4.2.5",
+ "pinia": "^2.1.7",
+ "axios": "^1.6.2",
+ "ant-design-vue": "^4.1.0",
+ "@ant-design/icons-vue": "^7.0.1",
+ "dayjs": "^1.11.10",
+ "lodash-es": "^4.17.21",
+ "nprogress": "^0.2.0"
+ },
+ "devDependencies": {
+ "@types/node": "^20.10.5",
+ "@types/nprogress": "^0.2.3",
+ "@types/lodash-es": "^4.17.12",
+ "@vitejs/plugin-vue": "^5.0.0",
+ "@vitejs/plugin-vue-jsx": "^3.1.0",
+ "typescript": "^5.3.3",
+ "vite": "^5.0.8",
+ "vue-tsc": "^1.8.27",
+ "eslint": "^8.56.0",
+ "prettier": "^3.1.1",
+ "unplugin-auto-import": "^0.17.2",
+ "unplugin-vue-components": "^0.26.0"
+ }
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/App.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/App.vue
new file mode 100644
index 0000000..f7f206a
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/App.vue
@@ -0,0 +1,14 @@
+<template>
+ <router-view />
+</template>
+
+<script setup lang="ts">
+// App root component
+</script>
+
+<style>
+#app {
+ width: 100%;
+ height: 100%;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/api/auth.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/api/auth.ts
new file mode 100644
index 0000000..d21b542
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/api/auth.ts
@@ -0,0 +1,45 @@
+import request from '../utils/request';
+import type { ApiResponse, LoginParams, LoginResult, UserInfo } from '../types/user';
+
+/**
+ * 鐧诲綍
+ */
+export function login(data: LoginParams) {
+ return request<ApiResponse<LoginResult>>({
+ url: '/User/login',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鑾峰彇褰撳墠鐢ㄦ埛淇℃伅
+ */
+export function getCurrentUserInfo() {
+ return request<ApiResponse<UserInfo>>({
+ url: '/User/getCurrentUserInfo',
+ method: 'post',
+ });
+}
+
+/**
+ * 鍒锋柊 Token
+ */
+export function replaceToken(token: string) {
+ return request<ApiResponse<string>>({
+ url: '/User/replaceToken',
+ method: 'post',
+ data: { token },
+ });
+}
+
+/**
+ * 淇敼瀵嗙爜
+ */
+export function modifyPassword(data: { oldPassword: string; newPassword: string }) {
+ return request<ApiResponse<boolean>>({
+ url: '/User/modifyPwd',
+ method: 'post',
+ data,
+ });
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/api/basic/index.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/api/basic/index.ts
new file mode 100644
index 0000000..a5e6d04
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/api/basic/index.ts
@@ -0,0 +1,139 @@
+import request from '../../utils/request';
+import type { ApiResponse, PageRequest, PageResponse } from '../../types/api';
+import type {
+ WarehouseInfo,
+ LocationInfo,
+ MaterielInfo,
+} from '../../types/common';
+
+/**
+ * 鑾峰彇浠撳簱鍒楄〃
+ */
+export function getWarehouseList(data: PageRequest) {
+ return request<ApiResponse<PageResponse<WarehouseInfo>>>({
+ url: '/Warehouse/GetPageData',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 娣诲姞浠撳簱
+ */
+export function addWarehouse(data: Partial<WarehouseInfo>) {
+ return request<ApiResponse<boolean>>({
+ url: '/Warehouse/Add',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鏇存柊浠撳簱
+ */
+export function updateWarehouse(data: Partial<WarehouseInfo>) {
+ return request<ApiResponse<boolean>>({
+ url: '/Warehouse/Update',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鍒犻櫎浠撳簱
+ */
+export function deleteWarehouse(ids: string[]) {
+ return request<ApiResponse<boolean>>({
+ url: '/Warehouse/Del',
+ method: 'post',
+ data: ids,
+ });
+}
+
+/**
+ * 鑾峰彇璐т綅鍒楄〃
+ */
+export function getLocationList(data: PageRequest) {
+ return request<ApiResponse<PageResponse<LocationInfo>>>({
+ url: '/LocationInfo/GetPageData',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 娣诲姞璐т綅
+ */
+export function addLocation(data: Partial<LocationInfo>) {
+ return request<ApiResponse<boolean>>({
+ url: '/LocationInfo/Add',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鏇存柊璐т綅
+ */
+export function updateLocation(data: Partial<LocationInfo>) {
+ return request<ApiResponse<boolean>>({
+ url: '/LocationInfo/Update',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鍒犻櫎璐т綅
+ */
+export function deleteLocation(ids: string[]) {
+ return request<ApiResponse<boolean>>({
+ url: '/LocationInfo/Del',
+ method: 'post',
+ data: ids,
+ });
+}
+
+/**
+ * 鑾峰彇鐗╂枡鍒楄〃
+ */
+export function getMaterielList(data: PageRequest) {
+ return request<ApiResponse<PageResponse<MaterielInfo>>>({
+ url: '/MaterielInfo/GetPageData',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 娣诲姞鐗╂枡
+ */
+export function addMateriel(data: Partial<MaterielInfo>) {
+ return request<ApiResponse<boolean>>({
+ url: '/MaterielInfo/Add',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鏇存柊鐗╂枡
+ */
+export function updateMateriel(data: Partial<MaterielInfo>) {
+ return request<ApiResponse<boolean>>({
+ url: '/MaterielInfo/Update',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鍒犻櫎鐗╂枡
+ */
+export function deleteMateriel(ids: string[]) {
+ return request<ApiResponse<boolean>>({
+ url: '/MaterielInfo/Del',
+ method: 'post',
+ data: ids,
+ });
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/api/system/index.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/api/system/index.ts
new file mode 100644
index 0000000..9b86dd9
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/api/system/index.ts
@@ -0,0 +1,135 @@
+import request from '../../utils/request';
+import type { ApiResponse, PageRequest, PageResponse } from '../../types/api';
+import type { UserInfo, RoleInfo, MenuInfo } from '../../types/user';
+
+/**
+ * 鑾峰彇鐢ㄦ埛鍒楄〃
+ */
+export function getUserList(data: PageRequest) {
+ return request<ApiResponse<PageResponse<UserInfo>>>({
+ url: '/User/GetPageData',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 娣诲姞鐢ㄦ埛
+ */
+export function addUser(data: Partial<UserInfo>) {
+ return request<ApiResponse<boolean>>({
+ url: '/User/Add',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鏇存柊鐢ㄦ埛
+ */
+export function updateUser(data: Partial<UserInfo>) {
+ return request<ApiResponse<boolean>>({
+ url: '/User/Update',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鍒犻櫎鐢ㄦ埛
+ */
+export function deleteUser(ids: string[]) {
+ return request<ApiResponse<boolean>>({
+ url: '/User/Del',
+ method: 'post',
+ data: ids,
+ });
+}
+
+/**
+ * 鑾峰彇瑙掕壊鍒楄〃
+ */
+export function getRoleList(data: PageRequest) {
+ return request<ApiResponse<PageResponse<RoleInfo>>>({
+ url: '/Role/GetPageData',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 娣诲姞瑙掕壊
+ */
+export function addRole(data: Partial<RoleInfo>) {
+ return request<ApiResponse<boolean>>({
+ url: '/Role/Add',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鏇存柊瑙掕壊
+ */
+export function updateRole(data: Partial<RoleInfo>) {
+ return request<ApiResponse<boolean>>({
+ url: '/Role/Update',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鍒犻櫎瑙掕壊
+ */
+export function deleteRole(ids: string[]) {
+ return request<ApiResponse<boolean>>({
+ url: '/Role/Del',
+ method: 'post',
+ data: ids,
+ });
+}
+
+/**
+ * 鑾峰彇鑿滃崟鍒楄〃
+ */
+export function getMenuList(data: PageRequest) {
+ return request<ApiResponse<PageResponse<MenuInfo>>>({
+ url: '/Menu/GetPageData',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 娣诲姞鑿滃崟
+ */
+export function addMenu(data: Partial<MenuInfo>) {
+ return request<ApiResponse<boolean>>({
+ url: '/Menu/Add',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鏇存柊鑿滃崟
+ */
+export function updateMenu(data: Partial<MenuInfo>) {
+ return request<ApiResponse<boolean>>({
+ url: '/Menu/Update',
+ method: 'post',
+ data,
+ });
+}
+
+/**
+ * 鍒犻櫎鑿滃崟
+ */
+export function deleteMenu(ids: string[]) {
+ return request<ApiResponse<boolean>>({
+ url: '/Menu/Del',
+ method: 'post',
+ data: ids,
+ });
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/assets/styles/index.css b/Code/WMS/WIDESEA_WMS_Frontend/src/assets/styles/index.css
new file mode 100644
index 0000000..4614f9d
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/assets/styles/index.css
@@ -0,0 +1,15 @@
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+html,
+body,
+#app {
+ width: 100%;
+ height: 100%;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
+ 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
+ 'Noto Color Emoji';
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/layouts/BasicLayout.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/layouts/BasicLayout.vue
new file mode 100644
index 0000000..0a5ba9d
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/layouts/BasicLayout.vue
@@ -0,0 +1,337 @@
+<template>
+ <a-layout class="basic-layout">
+ <a-layout-sider v-model:collapsed="collapsed" :trigger="null" collapsible>
+ <div class="logo">
+ <h1>{{ collapsed ? 'WMS' : 'WIDESEA WMS' }}</h1>
+ </div>
+ <a-menu
+ v-model:selectedKeys="selectedKeys"
+ v-model:openKeys="openKeys"
+ theme="dark"
+ mode="inline"
+ :items="menuItems"
+ @click="handleMenuClick"
+ />
+ </a-layout-sider>
+ <a-layout>
+ <a-layout-header class="header">
+ <menu-unfold-outlined
+ v-if="collapsed"
+ class="trigger"
+ @click="() => (collapsed = !collapsed)"
+ />
+ <menu-fold-outlined v-else class="trigger" @click="() => (collapsed = !collapsed)" />
+ <div class="header-right">
+ <a-dropdown>
+ <a class="ant-dropdown-link" @click.prevent>
+ <user-outlined />
+ <span class="username">{{ userInfo?.UserTrueName || userInfo?.UserName }}</span>
+ <down-outlined />
+ </a>
+ <template #overlay>
+ <a-menu>
+ <a-menu-item key="profile">
+ <user-outlined />
+ 涓汉淇℃伅
+ </a-menu-item>
+ <a-menu-item key="password">
+ <lock-outlined />
+ 淇敼瀵嗙爜
+ </a-menu-item>
+ <a-menu-divider />
+ <a-menu-item key="logout" @click="handleLogout">
+ <logout-outlined />
+ 閫�鍑虹櫥褰�
+ </a-menu-item>
+ </a-menu>
+ </template>
+ </a-dropdown>
+ </div>
+ </a-layout-header>
+ <a-layout-content class="content">
+ <router-view />
+ </a-layout-content>
+ </a-layout>
+ </a-layout>
+</template>
+
+<script setup lang="ts">
+import { ref, computed, watch, h } from 'vue';
+import { useRouter, useRoute } from 'vue-router';
+import { useAuthStore } from '../stores/auth';
+import {
+ MenuUnfoldOutlined,
+ MenuFoldOutlined,
+ UserOutlined,
+ DownOutlined,
+ LockOutlined,
+ LogoutOutlined,
+ HomeOutlined,
+ SettingOutlined,
+ TeamOutlined,
+ MenuOutlined,
+ DatabaseOutlined,
+ ShopOutlined,
+ AppstoreOutlined,
+ InboxOutlined,
+ ImportOutlined,
+ ExportOutlined,
+ FileTextOutlined,
+ ContainerOutlined,
+ UnorderedListOutlined,
+ AuditOutlined,
+ CarryOutOutlined,
+} from '@ant-design/icons-vue';
+import { Modal } from 'ant-design-vue';
+
+const router = useRouter();
+const route = useRoute();
+const authStore = useAuthStore();
+
+const collapsed = ref(false);
+const selectedKeys = ref<string[]>([]);
+const openKeys = ref<string[]>([]);
+
+const userInfo = computed(() => authStore.userInfo);
+
+// 鍥炬爣鏄犲皠
+const iconMap: Record<string, any> = {
+ HomeOutlined,
+ SettingOutlined,
+ UserOutlined,
+ TeamOutlined,
+ MenuOutlined,
+ DatabaseOutlined,
+ ShopOutlined,
+ AppstoreOutlined,
+ InboxOutlined,
+ ImportOutlined,
+ ExportOutlined,
+ FileTextOutlined,
+ ContainerOutlined,
+ UnorderedListOutlined,
+ AuditOutlined,
+ CarryOutOutlined,
+};
+
+// 鑿滃崟椤�
+const menuItems = computed(() => {
+ return [
+ {
+ key: '/dashboard',
+ icon: () => h(HomeOutlined),
+ label: '棣栭〉',
+ title: '棣栭〉',
+ },
+ {
+ key: '/system',
+ icon: () => h(SettingOutlined),
+ label: '绯荤粺绠$悊',
+ title: '绯荤粺绠$悊',
+ children: [
+ {
+ key: '/system/user',
+ icon: () => h(UserOutlined),
+ label: '鐢ㄦ埛绠$悊',
+ title: '鐢ㄦ埛绠$悊',
+ },
+ {
+ key: '/system/role',
+ icon: () => h(TeamOutlined),
+ label: '瑙掕壊绠$悊',
+ title: '瑙掕壊绠$悊',
+ },
+ {
+ key: '/system/menu',
+ icon: () => h(MenuOutlined),
+ label: '鑿滃崟绠$悊',
+ title: '鑿滃崟绠$悊',
+ },
+ ],
+ },
+ {
+ key: '/basic',
+ icon: () => h(DatabaseOutlined),
+ label: '鍩虹淇℃伅',
+ title: '鍩虹淇℃伅',
+ children: [
+ {
+ key: '/basic/warehouse',
+ icon: () => h(ShopOutlined),
+ label: '浠撳簱绠$悊',
+ title: '浠撳簱绠$悊',
+ },
+ {
+ key: '/basic/location',
+ icon: () => h(AppstoreOutlined),
+ label: '璐т綅绠$悊',
+ title: '璐т綅绠$悊',
+ },
+ {
+ key: '/basic/materiel',
+ icon: () => h(InboxOutlined),
+ label: '鐗╂枡绠$悊',
+ title: '鐗╂枡绠$悊',
+ },
+ ],
+ },
+ {
+ key: '/inbound',
+ icon: () => h(ImportOutlined),
+ label: '鍏ュ簱绠$悊',
+ title: '鍏ュ簱绠$悊',
+ children: [
+ {
+ key: '/inbound/order',
+ icon: () => h(FileTextOutlined),
+ label: '鍏ュ簱鍗曠鐞�',
+ title: '鍏ュ簱鍗曠鐞�',
+ },
+ ],
+ },
+ {
+ key: '/outbound',
+ icon: () => h(ExportOutlined),
+ label: '鍑哄簱绠$悊',
+ title: '鍑哄簱绠$悊',
+ children: [
+ {
+ key: '/outbound/order',
+ icon: () => h(FileTextOutlined),
+ label: '鍑哄簱鍗曠鐞�',
+ title: '鍑哄簱鍗曠鐞�',
+ },
+ ],
+ },
+ {
+ key: '/stock',
+ icon: () => h(ContainerOutlined),
+ label: '搴撳瓨绠$悊',
+ title: '搴撳瓨绠$悊',
+ children: [
+ {
+ key: '/stock/info',
+ icon: () => h(UnorderedListOutlined),
+ label: '搴撳瓨淇℃伅',
+ title: '搴撳瓨淇℃伅',
+ },
+ ],
+ },
+ {
+ key: '/check',
+ icon: () => h(AuditOutlined),
+ label: '鐩樼偣绠$悊',
+ title: '鐩樼偣绠$悊',
+ children: [
+ {
+ key: '/check/order',
+ icon: () => h(FileTextOutlined),
+ label: '鐩樼偣鍗曠鐞�',
+ title: '鐩樼偣鍗曠鐞�',
+ },
+ ],
+ },
+ {
+ key: '/task',
+ icon: () => h(CarryOutOutlined),
+ label: '浠诲姟绠$悊',
+ title: '浠诲姟绠$悊',
+ children: [
+ {
+ key: '/task/info',
+ icon: () => h(UnorderedListOutlined),
+ label: '浠诲姟淇℃伅',
+ title: '浠诲姟淇℃伅',
+ },
+ ],
+ },
+ ];
+});
+
+// 鐩戝惉璺敱鍙樺寲
+watch(
+ () => route.path,
+ (path) => {
+ selectedKeys.value = [path];
+ // 鑷姩灞曞紑鐖惰彍鍗�
+ const parts = path.split('/').filter(Boolean);
+ if (parts.length > 1) {
+ openKeys.value = [`/${parts[0]}`];
+ }
+ },
+ { immediate: true }
+);
+
+// 鑿滃崟鐐瑰嚮
+function handleMenuClick({ key }: { key: string }) {
+ router.push(key);
+}
+
+// 閫�鍑虹櫥褰�
+function handleLogout() {
+ Modal.confirm({
+ title: '纭閫�鍑�',
+ content: '纭畾瑕侀��鍑虹櫥褰曞悧锛�',
+ onOk() {
+ authStore.logout();
+ router.push('/login');
+ },
+ });
+}
+</script>
+
+<style scoped>
+.basic-layout {
+ min-height: 100vh;
+}
+
+.logo {
+ height: 64px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: rgba(255, 255, 255, 0.2);
+}
+
+.logo h1 {
+ color: #fff;
+ font-size: 20px;
+ font-weight: bold;
+ margin: 0;
+}
+
+.header {
+ background: #fff;
+ padding: 0 24px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+}
+
+.trigger {
+ font-size: 18px;
+ cursor: pointer;
+ transition: color 0.3s;
+}
+
+.trigger:hover {
+ color: #1890ff;
+}
+
+.header-right {
+ display: flex;
+ align-items: center;
+}
+
+.username {
+ margin: 0 8px;
+}
+
+.content {
+ margin: 24px;
+ padding: 24px;
+ background: #fff;
+ min-height: 280px;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/main.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/main.ts
new file mode 100644
index 0000000..ce9142a
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/main.ts
@@ -0,0 +1,16 @@
+import { createApp } from 'vue';
+import { createPinia } from 'pinia';
+import Antd from 'ant-design-vue';
+import App from './App.vue';
+import router from './router';
+import 'ant-design-vue/dist/reset.css';
+import './assets/styles/index.css';
+
+const app = createApp(App);
+const pinia = createPinia();
+
+app.use(pinia);
+app.use(router);
+app.use(Antd);
+
+app.mount('#app');
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/router/guard.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/router/guard.ts
new file mode 100644
index 0000000..1c5f2b4
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/router/guard.ts
@@ -0,0 +1,29 @@
+import type { Router } from 'vue-router';
+import { useAuthStore } from '../stores/auth';
+import NProgress from 'nprogress';
+import 'nprogress/nprogress.css';
+
+NProgress.configure({ showSpinner: false });
+
+export function setupRouterGuard(router: Router) {
+ router.beforeEach((to, from, next) => {
+ NProgress.start();
+
+ const authStore = useAuthStore();
+ const requiresAuth = to.meta.requiresAuth !== false;
+
+ if (requiresAuth && !authStore.isLoggedIn) {
+ // 闇�瑕佽璇佷絾鏈櫥褰曪紝璺宠浆鍒扮櫥褰曢〉
+ next({ path: '/login', query: { redirect: to.fullPath } });
+ } else if (to.path === '/login' && authStore.isLoggedIn) {
+ // 宸茬櫥褰曡闂櫥褰曢〉锛岃烦杞埌棣栭〉
+ next({ path: '/' });
+ } else {
+ next();
+ }
+ });
+
+ router.afterEach(() => {
+ NProgress.done();
+ });
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/router/index.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/router/index.ts
new file mode 100644
index 0000000..d277527
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/router/index.ts
@@ -0,0 +1,12 @@
+import { createRouter, createWebHistory } from 'vue-router';
+import { routes } from './routes';
+import { setupRouterGuard } from './guard';
+
+const router = createRouter({
+ history: createWebHistory(),
+ routes,
+});
+
+setupRouterGuard(router);
+
+export default router;
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/router/routes.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/router/routes.ts
new file mode 100644
index 0000000..6c51eeb
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/router/routes.ts
@@ -0,0 +1,218 @@
+import type { RouteRecordRaw } from 'vue-router';
+
+export const routes: RouteRecordRaw[] = [
+ {
+ path: '/login',
+ name: 'Login',
+ component: () => import('../views/login/index.vue'),
+ meta: {
+ title: '鐧诲綍',
+ requiresAuth: false,
+ },
+ },
+ {
+ path: '/',
+ name: 'Layout',
+ component: () => import('../layouts/BasicLayout.vue'),
+ redirect: '/dashboard',
+ meta: {
+ requiresAuth: true,
+ },
+ children: [
+ {
+ path: '/dashboard',
+ name: 'Dashboard',
+ component: () => import('../views/dashboard/index.vue'),
+ meta: {
+ title: '棣栭〉',
+ icon: 'HomeOutlined',
+ },
+ },
+ // 绯荤粺绠$悊
+ {
+ path: '/system',
+ name: 'System',
+ meta: {
+ title: '绯荤粺绠$悊',
+ icon: 'SettingOutlined',
+ },
+ children: [
+ {
+ path: '/system/user',
+ name: 'SystemUser',
+ component: () => import('../views/system/user/index.vue'),
+ meta: {
+ title: '鐢ㄦ埛绠$悊',
+ icon: 'UserOutlined',
+ },
+ },
+ {
+ path: '/system/role',
+ name: 'SystemRole',
+ component: () => import('../views/system/role/index.vue'),
+ meta: {
+ title: '瑙掕壊绠$悊',
+ icon: 'TeamOutlined',
+ },
+ },
+ {
+ path: '/system/menu',
+ name: 'SystemMenu',
+ component: () => import('../views/system/menu/index.vue'),
+ meta: {
+ title: '鑿滃崟绠$悊',
+ icon: 'MenuOutlined',
+ },
+ },
+ ],
+ },
+ // 鍩虹淇℃伅
+ {
+ path: '/basic',
+ name: 'Basic',
+ meta: {
+ title: '鍩虹淇℃伅',
+ icon: 'DatabaseOutlined',
+ },
+ children: [
+ {
+ path: '/basic/warehouse',
+ name: 'BasicWarehouse',
+ component: () => import('../views/basic/warehouse/index.vue'),
+ meta: {
+ title: '浠撳簱绠$悊',
+ icon: 'ShopOutlined',
+ },
+ },
+ {
+ path: '/basic/location',
+ name: 'BasicLocation',
+ component: () => import('../views/basic/location/index.vue'),
+ meta: {
+ title: '璐т綅绠$悊',
+ icon: 'AppstoreOutlined',
+ },
+ },
+ {
+ path: '/basic/materiel',
+ name: 'BasicMateriel',
+ component: () => import('../views/basic/materiel/index.vue'),
+ meta: {
+ title: '鐗╂枡绠$悊',
+ icon: 'InboxOutlined',
+ },
+ },
+ ],
+ },
+ // 鍏ュ簱绠$悊
+ {
+ path: '/inbound',
+ name: 'Inbound',
+ meta: {
+ title: '鍏ュ簱绠$悊',
+ icon: 'ImportOutlined',
+ },
+ children: [
+ {
+ path: '/inbound/order',
+ name: 'InboundOrder',
+ component: () => import('../views/inbound/order/index.vue'),
+ meta: {
+ title: '鍏ュ簱鍗曠鐞�',
+ icon: 'FileTextOutlined',
+ },
+ },
+ ],
+ },
+ // 鍑哄簱绠$悊
+ {
+ path: '/outbound',
+ name: 'Outbound',
+ meta: {
+ title: '鍑哄簱绠$悊',
+ icon: 'ExportOutlined',
+ },
+ children: [
+ {
+ path: '/outbound/order',
+ name: 'OutboundOrder',
+ component: () => import('../views/outbound/order/index.vue'),
+ meta: {
+ title: '鍑哄簱鍗曠鐞�',
+ icon: 'FileTextOutlined',
+ },
+ },
+ ],
+ },
+ // 搴撳瓨绠$悊
+ {
+ path: '/stock',
+ name: 'Stock',
+ meta: {
+ title: '搴撳瓨绠$悊',
+ icon: 'ContainerOutlined',
+ },
+ children: [
+ {
+ path: '/stock/info',
+ name: 'StockInfo',
+ component: () => import('../views/stock/info/index.vue'),
+ meta: {
+ title: '搴撳瓨淇℃伅',
+ icon: 'UnorderedListOutlined',
+ },
+ },
+ ],
+ },
+ // 鐩樼偣绠$悊
+ {
+ path: '/check',
+ name: 'Check',
+ meta: {
+ title: '鐩樼偣绠$悊',
+ icon: 'AuditOutlined',
+ },
+ children: [
+ {
+ path: '/check/order',
+ name: 'CheckOrder',
+ component: () => import('../views/check/order/index.vue'),
+ meta: {
+ title: '鐩樼偣鍗曠鐞�',
+ icon: 'FileTextOutlined',
+ },
+ },
+ ],
+ },
+ // 浠诲姟绠$悊
+ {
+ path: '/task',
+ name: 'Task',
+ meta: {
+ title: '浠诲姟绠$悊',
+ icon: 'CarryOutOutlined',
+ },
+ children: [
+ {
+ path: '/task/info',
+ name: 'TaskInfo',
+ component: () => import('../views/task/info/index.vue'),
+ meta: {
+ title: '浠诲姟淇℃伅',
+ icon: 'UnorderedListOutlined',
+ },
+ },
+ ],
+ },
+ ],
+ },
+ {
+ path: '/:pathMatch(.*)*',
+ name: 'NotFound',
+ component: () => import('../views/error/404.vue'),
+ meta: {
+ title: '404',
+ requiresAuth: false,
+ },
+ },
+];
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/stores/app.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/stores/app.ts
new file mode 100644
index 0000000..1899cc7
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/stores/app.ts
@@ -0,0 +1,28 @@
+import { defineStore } from 'pinia';
+import { ref } from 'vue';
+
+export const useAppStore = defineStore('app', () => {
+ const collapsed = ref<boolean>(false);
+ const loading = ref<boolean>(false);
+
+ /**
+ * 鍒囨崲渚ц竟鏍忔姌鍙犵姸鎬�
+ */
+ function toggleCollapsed() {
+ collapsed.value = !collapsed.value;
+ }
+
+ /**
+ * 璁剧疆鍔犺浇鐘舵��
+ */
+ function setLoading(value: boolean) {
+ loading.value = value;
+ }
+
+ return {
+ collapsed,
+ loading,
+ toggleCollapsed,
+ setLoading,
+ };
+});
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/stores/auth.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/stores/auth.ts
new file mode 100644
index 0000000..f707b7a
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/stores/auth.ts
@@ -0,0 +1,79 @@
+import { defineStore } from 'pinia';
+import { ref } from 'vue';
+import type { UserInfo } from '../types/user';
+import { getToken, setToken, getUserInfo, setUserInfo, clearAuth } from '../utils/auth';
+import { login as loginApi, getCurrentUserInfo } from '../api/auth';
+
+export const useAuthStore = defineStore('auth', () => {
+ const token = ref<string | null>(getToken());
+ const userInfo = ref<UserInfo | null>(getUserInfo());
+ const isLoggedIn = ref<boolean>(!!token.value);
+
+ /**
+ * 鐧诲綍
+ */
+ async function login(username: string, password: string) {
+ try {
+ const res = await loginApi({ UserName: username, Password: password });
+ if (res.status && res.data) {
+ const { token: newToken, ...user } = res.data;
+ token.value = newToken;
+ userInfo.value = user;
+ isLoggedIn.value = true;
+ setToken(newToken);
+ setUserInfo(user);
+ return true;
+ }
+ return false;
+ } catch (error) {
+ console.error('Login failed:', error);
+ return false;
+ }
+ }
+
+ /**
+ * 鐧诲嚭
+ */
+ function logout() {
+ token.value = null;
+ userInfo.value = null;
+ isLoggedIn.value = false;
+ clearAuth();
+ }
+
+ /**
+ * 鑾峰彇褰撳墠鐢ㄦ埛淇℃伅
+ */
+ async function fetchUserInfo() {
+ try {
+ const res = await getCurrentUserInfo();
+ if (res.status && res.data) {
+ userInfo.value = res.data;
+ setUserInfo(res.data);
+ return true;
+ }
+ return false;
+ } catch (error) {
+ console.error('Fetch user info failed:', error);
+ return false;
+ }
+ }
+
+ /**
+ * 鏇存柊 Token
+ */
+ function updateToken(newToken: string) {
+ token.value = newToken;
+ setToken(newToken);
+ }
+
+ return {
+ token,
+ userInfo,
+ isLoggedIn,
+ login,
+ logout,
+ fetchUserInfo,
+ updateToken,
+ };
+});
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/types/api.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/types/api.ts
new file mode 100644
index 0000000..4f0c9c3
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/types/api.ts
@@ -0,0 +1,39 @@
+/**
+ * API 鍝嶅簲鍩虹绫诲瀷
+ */
+export interface ApiResponse<T = any> {
+ status: boolean;
+ message: string;
+ data: T;
+ total?: number;
+}
+
+/**
+ * 鍒嗛〉璇锋眰鍙傛暟
+ */
+export interface PageRequest {
+ page: number;
+ rows: number;
+ sort?: string;
+ order?: 'asc' | 'desc';
+ wheres?: WhereCondition[];
+}
+
+/**
+ * 鏌ヨ鏉′欢
+ */
+export interface WhereCondition {
+ name: string;
+ value: any;
+ displayType?: 'like' | 'equal' | 'notEqual' | 'greaterThan' | 'lessThan' | 'in' | 'notIn';
+}
+
+/**
+ * 鍒嗛〉鍝嶅簲鏁版嵁
+ */
+export interface PageResponse<T = any> {
+ rows: T[];
+ total: number;
+ page: number;
+ records: number;
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/types/common.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/types/common.ts
new file mode 100644
index 0000000..d4048b9
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/types/common.ts
@@ -0,0 +1,111 @@
+/**
+ * 浠撳簱淇℃伅
+ */
+export interface WarehouseInfo {
+ Id: string;
+ WarehouseCode: string;
+ WarehouseName: string;
+ WarehouseType?: string;
+ Enable: number;
+ CreateDate?: string;
+ Creator?: string;
+}
+
+/**
+ * 璐т綅淇℃伅
+ */
+export interface LocationInfo {
+ Id: string;
+ LocationCode: string;
+ LocationName: string;
+ WarehouseCode: string;
+ WarehouseName?: string;
+ LocationType?: string;
+ LocationStatus?: number;
+ Enable: number;
+ CreateDate?: string;
+}
+
+/**
+ * 鐗╂枡淇℃伅
+ */
+export interface MaterielInfo {
+ Id: string;
+ MaterielCode: string;
+ MaterielName: string;
+ MaterielType?: string;
+ Specification?: string;
+ Unit?: string;
+ Enable: number;
+ CreateDate?: string;
+}
+
+/**
+ * 鍏ュ簱鍗曚俊鎭�
+ */
+export interface InboundOrderInfo {
+ Id: string;
+ InboundOrderNo: string;
+ InboundType?: string;
+ WarehouseCode: string;
+ WarehouseName?: string;
+ OrderStatus?: number;
+ CreateDate?: string;
+ Creator?: string;
+}
+
+/**
+ * 鍑哄簱鍗曚俊鎭�
+ */
+export interface OutboundOrderInfo {
+ Id: string;
+ OutboundOrderNo: string;
+ OutboundType?: string;
+ WarehouseCode: string;
+ WarehouseName?: string;
+ OrderStatus?: number;
+ CreateDate?: string;
+ Creator?: string;
+}
+
+/**
+ * 搴撳瓨淇℃伅
+ */
+export interface StockInfo {
+ Id: string;
+ WarehouseCode: string;
+ WarehouseName?: string;
+ LocationCode: string;
+ MaterielCode: string;
+ MaterielName?: string;
+ Quantity: number;
+ AvailableQuantity: number;
+ LockedQuantity: number;
+ CreateDate?: string;
+}
+
+/**
+ * 鐩樼偣鍗曚俊鎭�
+ */
+export interface CheckOrderInfo {
+ Id: string;
+ CheckOrderNo: string;
+ WarehouseCode: string;
+ WarehouseName?: string;
+ CheckStatus?: number;
+ CreateDate?: string;
+ Creator?: string;
+}
+
+/**
+ * 浠诲姟淇℃伅
+ */
+export interface TaskInfo {
+ Id: string;
+ TaskNo: string;
+ TaskType?: string;
+ TaskStatus?: number;
+ WarehouseCode: string;
+ CreateDate?: string;
+ Creator?: string;
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/types/user.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/types/user.ts
new file mode 100644
index 0000000..d6dadc9
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/types/user.ts
@@ -0,0 +1,57 @@
+/**
+ * 鐢ㄦ埛淇℃伅
+ */
+export interface UserInfo {
+ Id: string;
+ UserName: string;
+ UserTrueName: string;
+ Role_Id: string;
+ RoleName?: string;
+ DepartmentName?: string;
+ Enable: number;
+ CreateDate?: string;
+ Creator?: string;
+ Token?: string;
+}
+
+/**
+ * 鐧诲綍璇锋眰鍙傛暟
+ */
+export interface LoginParams {
+ UserName: string;
+ Password: string;
+}
+
+/**
+ * 鐧诲綍鍝嶅簲鏁版嵁
+ */
+export interface LoginResult {
+ token: string;
+ userInfo: UserInfo;
+}
+
+/**
+ * 瑙掕壊淇℃伅
+ */
+export interface RoleInfo {
+ Id: string;
+ RoleName: string;
+ OrderNo?: number;
+ Enable: number;
+ CreateDate?: string;
+ Creator?: string;
+}
+
+/**
+ * 鑿滃崟淇℃伅
+ */
+export interface MenuInfo {
+ Id: string;
+ ParentId?: string;
+ MenuName: string;
+ Url?: string;
+ Icon?: string;
+ OrderNo?: number;
+ Enable: number;
+ children?: MenuInfo[];
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/utils/auth.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/utils/auth.ts
new file mode 100644
index 0000000..3ace419
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/utils/auth.ts
@@ -0,0 +1,53 @@
+const TOKEN_KEY = 'token';
+const USER_INFO_KEY = 'userInfo';
+
+/**
+ * 鑾峰彇 Token
+ */
+export function getToken(): string | null {
+ return localStorage.getItem(TOKEN_KEY);
+}
+
+/**
+ * 璁剧疆 Token
+ */
+export function setToken(token: string): void {
+ localStorage.setItem(TOKEN_KEY, token);
+}
+
+/**
+ * 绉婚櫎 Token
+ */
+export function removeToken(): void {
+ localStorage.removeItem(TOKEN_KEY);
+}
+
+/**
+ * 鑾峰彇鐢ㄦ埛淇℃伅
+ */
+export function getUserInfo(): any {
+ const userInfo = localStorage.getItem(USER_INFO_KEY);
+ return userInfo ? JSON.parse(userInfo) : null;
+}
+
+/**
+ * 璁剧疆鐢ㄦ埛淇℃伅
+ */
+export function setUserInfo(userInfo: any): void {
+ localStorage.setItem(USER_INFO_KEY, JSON.stringify(userInfo));
+}
+
+/**
+ * 绉婚櫎鐢ㄦ埛淇℃伅
+ */
+export function removeUserInfo(): void {
+ localStorage.removeItem(USER_INFO_KEY);
+}
+
+/**
+ * 娓呴櫎鎵�鏈夎璇佷俊鎭�
+ */
+export function clearAuth(): void {
+ removeToken();
+ removeUserInfo();
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/utils/common.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/utils/common.ts
new file mode 100644
index 0000000..07549ae
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/utils/common.ts
@@ -0,0 +1,57 @@
+import dayjs from 'dayjs';
+
+/**
+ * 鏍煎紡鍖栨棩鏈�
+ */
+export function formatDate(date: string | Date, format = 'YYYY-MM-DD HH:mm:ss'): string {
+ if (!date) return '';
+ return dayjs(date).format(format);
+}
+
+/**
+ * 鏍煎紡鍖栨棩鏈燂紙浠呮棩鏈燂級
+ */
+export function formatDateOnly(date: string | Date): string {
+ return formatDate(date, 'YYYY-MM-DD');
+}
+
+/**
+ * 娣辨嫹璐�
+ */
+export function deepClone<T>(obj: T): T {
+ return JSON.parse(JSON.stringify(obj));
+}
+
+/**
+ * 闃叉姈
+ */
+export function debounce<T extends (...args: any[]) => any>(
+ func: T,
+ wait: number
+): (...args: Parameters<T>) => void {
+ let timeout: NodeJS.Timeout | null = null;
+ return function (this: any, ...args: Parameters<T>) {
+ if (timeout) clearTimeout(timeout);
+ timeout = setTimeout(() => {
+ func.apply(this, args);
+ }, wait);
+ };
+}
+
+/**
+ * 鑺傛祦
+ */
+export function throttle<T extends (...args: any[]) => any>(
+ func: T,
+ wait: number
+): (...args: Parameters<T>) => void {
+ let timeout: NodeJS.Timeout | null = null;
+ return function (this: any, ...args: Parameters<T>) {
+ if (!timeout) {
+ timeout = setTimeout(() => {
+ timeout = null;
+ func.apply(this, args);
+ }, wait);
+ }
+ };
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/utils/request.ts b/Code/WMS/WIDESEA_WMS_Frontend/src/utils/request.ts
new file mode 100644
index 0000000..07dab8d
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/utils/request.ts
@@ -0,0 +1,130 @@
+import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';
+import { message } from 'ant-design-vue';
+import { getToken, setToken, clearAuth } from './auth';
+import router from '../router';
+
+// 鍒涘缓 axios 瀹炰緥
+const service: AxiosInstance = axios.create({
+ baseURL: '/api',
+ timeout: 30000,
+ headers: {
+ 'Content-Type': 'application/json;charset=UTF-8',
+ },
+});
+
+// 璇锋眰鎷︽埅鍣�
+service.interceptors.request.use(
+ (config: any) => {
+ // 娣诲姞 Token 鍒拌姹傚ご
+ const token = getToken();
+ if (token) {
+ config.headers.Authorization = `Bearer ${token}`;
+ }
+
+ // 纭繚 POST 璇锋眰鐨勬暟鎹姝g‘搴忓垪鍖栦负 JSON
+ if (config.method === 'post' && config.data) {
+ // 濡傛灉 data 涓嶆槸 FormData锛岀‘淇濆畠鏄� JSON 瀛楃涓�
+ if (!(config.data instanceof FormData)) {
+ config.headers['Content-Type'] = 'application/json;charset=UTF-8';
+ // axios 浼氳嚜鍔ㄥ皢瀵硅薄杞崲涓� JSON锛屼絾鎴戜滑纭繚 Content-Type 姝g‘
+ }
+ }
+
+ // 寮�鍙戠幆澧冧笅鎵撳嵃璇锋眰淇℃伅
+ if (import.meta.env.DEV) {
+ console.log('Request:', {
+ url: config.url,
+ method: config.method,
+ data: config.data,
+ headers: config.headers,
+ });
+ }
+
+ return config;
+ },
+ (error: AxiosError) => {
+ console.error('Request error:', error);
+ return Promise.reject(error);
+ }
+);
+
+// 鍝嶅簲鎷︽埅鍣�
+service.interceptors.response.use(
+ (response: AxiosResponse) => {
+ // 妫�鏌ユ槸鍚﹂渶瑕佸埛鏂� Token
+ const expHeader = response.headers['widesea_exp'];
+ if (expHeader === '1') {
+ // Token 鍗冲皢杩囨湡锛屽埛鏂� Token
+ refreshToken();
+ }
+
+ const res = response.data;
+
+ // 濡傛灉鍝嶅簲鐘舵�佷笉鏄� true锛屾樉绀洪敊璇秷鎭�
+ if (res.status === false) {
+ message.error(res.message || '璇锋眰澶辫触');
+ return Promise.reject(new Error(res.message || '璇锋眰澶辫触'));
+ }
+
+ return res;
+ },
+ (error: AxiosError) => {
+ console.error('Response error:', error);
+
+ if (error.response) {
+ const status = error.response.status;
+
+ switch (status) {
+ case 401:
+ // 鏈璇侊紝娓呴櫎 Token 骞惰烦杞埌鐧诲綍椤�
+ message.error('鐧诲綍宸茶繃鏈燂紝璇烽噸鏂扮櫥褰�');
+ clearAuth();
+ router.push('/login');
+ break;
+ case 403:
+ message.error('娌℃湁鏉冮檺璁块棶璇ヨ祫婧�');
+ break;
+ case 404:
+ message.error('璇锋眰鐨勮祫婧愪笉瀛樺湪');
+ break;
+ case 500:
+ message.error('鏈嶅姟鍣ㄩ敊璇�');
+ break;
+ default:
+ message.error(error.message || '璇锋眰澶辫触');
+ }
+ } else {
+ message.error('缃戠粶閿欒锛岃妫�鏌ョ綉缁滆繛鎺�');
+ }
+
+ return Promise.reject(error);
+ }
+);
+
+/**
+ * 鍒锋柊 Token
+ */
+async function refreshToken() {
+ try {
+ const token = getToken();
+ if (!token) return;
+
+ const response = await axios.post(
+ '/api/User/replaceToken',
+ { token },
+ {
+ headers: {
+ Authorization: `Bearer ${token}`,
+ },
+ }
+ );
+
+ if (response.data.status && response.data.data) {
+ setToken(response.data.data);
+ }
+ } catch (error) {
+ console.error('Token refresh failed:', error);
+ }
+}
+
+export default service;
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/basic/location/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/basic/location/index.vue
new file mode 100644
index 0000000..278c07e
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/basic/location/index.vue
@@ -0,0 +1,230 @@
+<template>
+ <div class="location-page">
+ <a-card>
+ <a-space style="margin-bottom: 16px">
+ <a-button type="primary" @click="handleAdd">
+ <template #icon><plus-outlined /></template>
+ 鏂板璐т綅
+ </a-button>
+ <a-input-search
+ v-model:value="searchText"
+ placeholder="鎼滅储璐т綅缂栫爜"
+ style="width: 200px"
+ @search="handleSearch"
+ />
+ </a-space>
+
+ <a-table
+ :columns="columns"
+ :data-source="dataSource"
+ :loading="loading"
+ :pagination="pagination"
+ @change="handleTableChange"
+ row-key="Id"
+ >
+ <template #bodyCell="{ column, record }">
+ <template v-if="column.key === 'LocationStatus'">
+ <a-tag :color="record.LocationStatus === 1 ? 'green' : 'orange'">
+ {{ record.LocationStatus === 1 ? '绌洪棽' : '鍗犵敤' }}
+ </a-tag>
+ </template>
+ <template v-else-if="column.key === 'Enable'">
+ <a-tag :color="record.Enable === 1 ? 'green' : 'red'">
+ {{ record.Enable === 1 ? '鍚敤' : '绂佺敤' }}
+ </a-tag>
+ </template>
+ <template v-else-if="column.key === 'action'">
+ <a-space>
+ <a @click="handleEdit(record)">缂栬緫</a>
+ <a-divider type="vertical" />
+ <a-popconfirm title="纭畾瑕佸垹闄ゅ悧锛�" @confirm="handleDelete(record)">
+ <a style="color: red">鍒犻櫎</a>
+ </a-popconfirm>
+ </a-space>
+ </template>
+ </template>
+ </a-table>
+ </a-card>
+
+ <a-modal
+ v-model:open="modalVisible"
+ :title="modalTitle"
+ @ok="handleModalOk"
+ @cancel="handleModalCancel"
+ >
+ <a-form
+ ref="formRef"
+ :model="formState"
+ :rules="rules"
+ :label-col="{ span: 6 }"
+ :wrapper-col="{ span: 16 }"
+ >
+ <a-form-item label="璐т綅缂栫爜" name="LocationCode">
+ <a-input v-model:value="formState.LocationCode" />
+ </a-form-item>
+ <a-form-item label="璐т綅鍚嶇О" name="LocationName">
+ <a-input v-model:value="formState.LocationName" />
+ </a-form-item>
+ <a-form-item label="浠撳簱缂栫爜" name="WarehouseCode">
+ <a-input v-model:value="formState.WarehouseCode" />
+ </a-form-item>
+ <a-form-item label="璐т綅绫诲瀷" name="LocationType">
+ <a-input v-model:value="formState.LocationType" />
+ </a-form-item>
+ <a-form-item label="鐘舵��" name="Enable">
+ <a-select v-model:value="formState.Enable">
+ <a-select-option :value="1">鍚敤</a-select-option>
+ <a-select-option :value="0">绂佺敤</a-select-option>
+ </a-select>
+ </a-form-item>
+ </a-form>
+ </a-modal>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
+import { PlusOutlined } from '@ant-design/icons-vue';
+import {
+ getLocationList,
+ addLocation,
+ updateLocation,
+ deleteLocation,
+} from '../../../api/basic';
+import type { LocationInfo } from '../../../types/common';
+
+const columns = [
+ { title: '璐т綅缂栫爜', dataIndex: 'LocationCode', key: 'LocationCode' },
+ { title: '璐т綅鍚嶇О', dataIndex: 'LocationName', key: 'LocationName' },
+ { title: '浠撳簱缂栫爜', dataIndex: 'WarehouseCode', key: 'WarehouseCode' },
+ { title: '璐т綅绫诲瀷', dataIndex: 'LocationType', key: 'LocationType' },
+ { title: '璐т綅鐘舵��', dataIndex: 'LocationStatus', key: 'LocationStatus' },
+ { title: '鐘舵��', dataIndex: 'Enable', key: 'Enable' },
+ { title: '鍒涘缓鏃堕棿', dataIndex: 'CreateDate', key: 'CreateDate' },
+ { title: '鎿嶄綔', key: 'action', width: 150 },
+];
+
+const dataSource = ref<LocationInfo[]>([]);
+const loading = ref(false);
+const searchText = ref('');
+const pagination = reactive({
+ current: 1,
+ pageSize: 20,
+ total: 0,
+ showSizeChanger: true,
+ showTotal: (total: number) => `鍏� ${total} 鏉,
+});
+
+const modalVisible = ref(false);
+const modalTitle = ref('鏂板璐т綅');
+const formRef = ref();
+const formState = reactive<Partial<LocationInfo>>({
+ LocationCode: '',
+ LocationName: '',
+ WarehouseCode: '',
+ LocationType: '',
+ Enable: 1,
+});
+
+const rules = {
+ LocationCode: [{ required: true, message: '璇疯緭鍏ヨ揣浣嶇紪鐮�', trigger: 'blur' }],
+ LocationName: [{ required: true, message: '璇疯緭鍏ヨ揣浣嶅悕绉�', trigger: 'blur' }],
+ WarehouseCode: [{ required: true, message: '璇疯緭鍏ヤ粨搴撶紪鐮�', trigger: 'blur' }],
+};
+
+onMounted(() => {
+ fetchData();
+});
+
+async function fetchData() {
+ loading.value = true;
+ try {
+ const res = await getLocationList({
+ page: pagination.current,
+ rows: pagination.pageSize,
+ sort: 'CreateDate',
+ order: 'desc',
+ wheres: searchText.value
+ ? [{ name: 'LocationCode', value: searchText.value, displayType: 'like' }]
+ : [],
+ });
+ if (res.status && res.data) {
+ dataSource.value = res.data.rows || [];
+ pagination.total = res.data.total || 0;
+ }
+ } catch (error) {
+ console.error('Fetch data error:', error);
+ } finally {
+ loading.value = false;
+ }
+}
+
+function handleTableChange(pag: any) {
+ pagination.current = pag.current;
+ pagination.pageSize = pag.pageSize;
+ fetchData();
+}
+
+function handleSearch() {
+ pagination.current = 1;
+ fetchData();
+}
+
+function handleAdd() {
+ modalTitle.value = '鏂板璐т綅';
+ Object.assign(formState, {
+ Id: undefined,
+ LocationCode: '',
+ LocationName: '',
+ WarehouseCode: '',
+ LocationType: '',
+ Enable: 1,
+ });
+ modalVisible.value = true;
+}
+
+function handleEdit(record: LocationInfo) {
+ modalTitle.value = '缂栬緫璐т綅';
+ Object.assign(formState, record);
+ modalVisible.value = true;
+}
+
+async function handleModalOk() {
+ try {
+ await formRef.value.validate();
+ const api = formState.Id ? updateLocation : addLocation;
+ const res = await api(formState);
+ if (res.status) {
+ message.success(formState.Id ? '鏇存柊鎴愬姛' : '鏂板鎴愬姛');
+ modalVisible.value = false;
+ fetchData();
+ }
+ } catch (error) {
+ console.error('Save error:', error);
+ }
+}
+
+function handleModalCancel() {
+ modalVisible.value = false;
+ formRef.value?.resetFields();
+}
+
+async function handleDelete(record: LocationInfo) {
+ try {
+ const res = await deleteLocation([record.Id]);
+ if (res.status) {
+ message.success('鍒犻櫎鎴愬姛');
+ fetchData();
+ }
+ } catch (error) {
+ console.error('Delete error:', error);
+ }
+}
+</script>
+
+<style scoped>
+.location-page {
+ padding: 0;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/basic/materiel/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/basic/materiel/index.vue
new file mode 100644
index 0000000..3f0d409
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/basic/materiel/index.vue
@@ -0,0 +1,229 @@
+<template>
+ <div class="materiel-page">
+ <a-card>
+ <a-space style="margin-bottom: 16px">
+ <a-button type="primary" @click="handleAdd">
+ <template #icon><plus-outlined /></template>
+ 鏂板鐗╂枡
+ </a-button>
+ <a-input-search
+ v-model:value="searchText"
+ placeholder="鎼滅储鐗╂枡鍚嶇О"
+ style="width: 200px"
+ @search="handleSearch"
+ />
+ </a-space>
+
+ <a-table
+ :columns="columns"
+ :data-source="dataSource"
+ :loading="loading"
+ :pagination="pagination"
+ @change="handleTableChange"
+ row-key="Id"
+ >
+ <template #bodyCell="{ column, record }">
+ <template v-if="column.key === 'Enable'">
+ <a-tag :color="record.Enable === 1 ? 'green' : 'red'">
+ {{ record.Enable === 1 ? '鍚敤' : '绂佺敤' }}
+ </a-tag>
+ </template>
+ <template v-else-if="column.key === 'action'">
+ <a-space>
+ <a @click="handleEdit(record)">缂栬緫</a>
+ <a-divider type="vertical" />
+ <a-popconfirm title="纭畾瑕佸垹闄ゅ悧锛�" @confirm="handleDelete(record)">
+ <a style="color: red">鍒犻櫎</a>
+ </a-popconfirm>
+ </a-space>
+ </template>
+ </template>
+ </a-table>
+ </a-card>
+
+ <a-modal
+ v-model:open="modalVisible"
+ :title="modalTitle"
+ @ok="handleModalOk"
+ @cancel="handleModalCancel"
+ >
+ <a-form
+ ref="formRef"
+ :model="formState"
+ :rules="rules"
+ :label-col="{ span: 6 }"
+ :wrapper-col="{ span: 16 }"
+ >
+ <a-form-item label="鐗╂枡缂栫爜" name="MaterielCode">
+ <a-input v-model:value="formState.MaterielCode" />
+ </a-form-item>
+ <a-form-item label="鐗╂枡鍚嶇О" name="MaterielName">
+ <a-input v-model:value="formState.MaterielName" />
+ </a-form-item>
+ <a-form-item label="鐗╂枡绫诲瀷" name="MaterielType">
+ <a-input v-model:value="formState.MaterielType" />
+ </a-form-item>
+ <a-form-item label="瑙勬牸" name="Specification">
+ <a-input v-model:value="formState.Specification" />
+ </a-form-item>
+ <a-form-item label="鍗曚綅" name="Unit">
+ <a-input v-model:value="formState.Unit" />
+ </a-form-item>
+ <a-form-item label="鐘舵��" name="Enable">
+ <a-select v-model:value="formState.Enable">
+ <a-select-option :value="1">鍚敤</a-select-option>
+ <a-select-option :value="0">绂佺敤</a-select-option>
+ </a-select>
+ </a-form-item>
+ </a-form>
+ </a-modal>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
+import { PlusOutlined } from '@ant-design/icons-vue';
+import {
+ getMaterielList,
+ addMateriel,
+ updateMateriel,
+ deleteMateriel,
+} from '../../../api/basic';
+import type { MaterielInfo } from '../../../types/common';
+
+const columns = [
+ { title: '鐗╂枡缂栫爜', dataIndex: 'MaterielCode', key: 'MaterielCode' },
+ { title: '鐗╂枡鍚嶇О', dataIndex: 'MaterielName', key: 'MaterielName' },
+ { title: '鐗╂枡绫诲瀷', dataIndex: 'MaterielType', key: 'MaterielType' },
+ { title: '瑙勬牸', dataIndex: 'Specification', key: 'Specification' },
+ { title: '鍗曚綅', dataIndex: 'Unit', key: 'Unit' },
+ { title: '鐘舵��', dataIndex: 'Enable', key: 'Enable' },
+ { title: '鍒涘缓鏃堕棿', dataIndex: 'CreateDate', key: 'CreateDate' },
+ { title: '鎿嶄綔', key: 'action', width: 150 },
+];
+
+const dataSource = ref<MaterielInfo[]>([]);
+const loading = ref(false);
+const searchText = ref('');
+const pagination = reactive({
+ current: 1,
+ pageSize: 20,
+ total: 0,
+ showSizeChanger: true,
+ showTotal: (total: number) => `鍏� ${total} 鏉,
+});
+
+const modalVisible = ref(false);
+const modalTitle = ref('鏂板鐗╂枡');
+const formRef = ref();
+const formState = reactive<Partial<MaterielInfo>>({
+ MaterielCode: '',
+ MaterielName: '',
+ MaterielType: '',
+ Specification: '',
+ Unit: '',
+ Enable: 1,
+});
+
+const rules = {
+ MaterielCode: [{ required: true, message: '璇疯緭鍏ョ墿鏂欑紪鐮�', trigger: 'blur' }],
+ MaterielName: [{ required: true, message: '璇疯緭鍏ョ墿鏂欏悕绉�', trigger: 'blur' }],
+};
+
+onMounted(() => {
+ fetchData();
+});
+
+async function fetchData() {
+ loading.value = true;
+ try {
+ const res = await getMaterielList({
+ page: pagination.current,
+ rows: pagination.pageSize,
+ sort: 'CreateDate',
+ order: 'desc',
+ wheres: searchText.value
+ ? [{ name: 'MaterielName', value: searchText.value, displayType: 'like' }]
+ : [],
+ });
+ if (res.status && res.data) {
+ dataSource.value = res.data.rows || [];
+ pagination.total = res.data.total || 0;
+ }
+ } catch (error) {
+ console.error('Fetch data error:', error);
+ } finally {
+ loading.value = false;
+ }
+}
+
+function handleTableChange(pag: any) {
+ pagination.current = pag.current;
+ pagination.pageSize = pag.pageSize;
+ fetchData();
+}
+
+function handleSearch() {
+ pagination.current = 1;
+ fetchData();
+}
+
+function handleAdd() {
+ modalTitle.value = '鏂板鐗╂枡';
+ Object.assign(formState, {
+ Id: undefined,
+ MaterielCode: '',
+ MaterielName: '',
+ MaterielType: '',
+ Specification: '',
+ Unit: '',
+ Enable: 1,
+ });
+ modalVisible.value = true;
+}
+
+function handleEdit(record: MaterielInfo) {
+ modalTitle.value = '缂栬緫鐗╂枡';
+ Object.assign(formState, record);
+ modalVisible.value = true;
+}
+
+async function handleModalOk() {
+ try {
+ await formRef.value.validate();
+ const api = formState.Id ? updateMateriel : addMateriel;
+ const res = await api(formState);
+ if (res.status) {
+ message.success(formState.Id ? '鏇存柊鎴愬姛' : '鏂板鎴愬姛');
+ modalVisible.value = false;
+ fetchData();
+ }
+ } catch (error) {
+ console.error('Save error:', error);
+ }
+}
+
+function handleModalCancel() {
+ modalVisible.value = false;
+ formRef.value?.resetFields();
+}
+
+async function handleDelete(record: MaterielInfo) {
+ try {
+ const res = await deleteMateriel([record.Id]);
+ if (res.status) {
+ message.success('鍒犻櫎鎴愬姛');
+ fetchData();
+ }
+ } catch (error) {
+ console.error('Delete error:', error);
+ }
+}
+</script>
+
+<style scoped>
+.materiel-page {
+ padding: 0;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/basic/warehouse/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/basic/warehouse/index.vue
new file mode 100644
index 0000000..d1d8c03
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/basic/warehouse/index.vue
@@ -0,0 +1,217 @@
+<template>
+ <div class="warehouse-page">
+ <a-card>
+ <a-space style="margin-bottom: 16px">
+ <a-button type="primary" @click="handleAdd">
+ <template #icon><plus-outlined /></template>
+ 鏂板浠撳簱
+ </a-button>
+ <a-input-search
+ v-model:value="searchText"
+ placeholder="鎼滅储浠撳簱鍚嶇О"
+ style="width: 200px"
+ @search="handleSearch"
+ />
+ </a-space>
+
+ <a-table
+ :columns="columns"
+ :data-source="dataSource"
+ :loading="loading"
+ :pagination="pagination"
+ @change="handleTableChange"
+ row-key="Id"
+ >
+ <template #bodyCell="{ column, record }">
+ <template v-if="column.key === 'Enable'">
+ <a-tag :color="record.Enable === 1 ? 'green' : 'red'">
+ {{ record.Enable === 1 ? '鍚敤' : '绂佺敤' }}
+ </a-tag>
+ </template>
+ <template v-else-if="column.key === 'action'">
+ <a-space>
+ <a @click="handleEdit(record)">缂栬緫</a>
+ <a-divider type="vertical" />
+ <a-popconfirm title="纭畾瑕佸垹闄ゅ悧锛�" @confirm="handleDelete(record)">
+ <a style="color: red">鍒犻櫎</a>
+ </a-popconfirm>
+ </a-space>
+ </template>
+ </template>
+ </a-table>
+ </a-card>
+
+ <a-modal
+ v-model:open="modalVisible"
+ :title="modalTitle"
+ @ok="handleModalOk"
+ @cancel="handleModalCancel"
+ >
+ <a-form
+ ref="formRef"
+ :model="formState"
+ :rules="rules"
+ :label-col="{ span: 6 }"
+ :wrapper-col="{ span: 16 }"
+ >
+ <a-form-item label="浠撳簱缂栫爜" name="WarehouseCode">
+ <a-input v-model:value="formState.WarehouseCode" />
+ </a-form-item>
+ <a-form-item label="浠撳簱鍚嶇О" name="WarehouseName">
+ <a-input v-model:value="formState.WarehouseName" />
+ </a-form-item>
+ <a-form-item label="浠撳簱绫诲瀷" name="WarehouseType">
+ <a-input v-model:value="formState.WarehouseType" />
+ </a-form-item>
+ <a-form-item label="鐘舵��" name="Enable">
+ <a-select v-model:value="formState.Enable">
+ <a-select-option :value="1">鍚敤</a-select-option>
+ <a-select-option :value="0">绂佺敤</a-select-option>
+ </a-select>
+ </a-form-item>
+ </a-form>
+ </a-modal>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
+import { PlusOutlined } from '@ant-design/icons-vue';
+import {
+ getWarehouseList,
+ addWarehouse,
+ updateWarehouse,
+ deleteWarehouse,
+} from '../../../api/basic';
+import type { WarehouseInfo } from '../../../types/common';
+
+const columns = [
+ { title: '浠撳簱缂栫爜', dataIndex: 'WarehouseCode', key: 'WarehouseCode' },
+ { title: '浠撳簱鍚嶇О', dataIndex: 'WarehouseName', key: 'WarehouseName' },
+ { title: '浠撳簱绫诲瀷', dataIndex: 'WarehouseType', key: 'WarehouseType' },
+ { title: '鐘舵��', dataIndex: 'Enable', key: 'Enable' },
+ { title: '鍒涘缓鏃堕棿', dataIndex: 'CreateDate', key: 'CreateDate' },
+ { title: '鎿嶄綔', key: 'action', width: 150 },
+];
+
+const dataSource = ref<WarehouseInfo[]>([]);
+const loading = ref(false);
+const searchText = ref('');
+const pagination = reactive({
+ current: 1,
+ pageSize: 20,
+ total: 0,
+ showSizeChanger: true,
+ showTotal: (total: number) => `鍏� ${total} 鏉,
+});
+
+const modalVisible = ref(false);
+const modalTitle = ref('鏂板浠撳簱');
+const formRef = ref();
+const formState = reactive<Partial<WarehouseInfo>>({
+ WarehouseCode: '',
+ WarehouseName: '',
+ WarehouseType: '',
+ Enable: 1,
+});
+
+const rules = {
+ WarehouseCode: [{ required: true, message: '璇疯緭鍏ヤ粨搴撶紪鐮�', trigger: 'blur' }],
+ WarehouseName: [{ required: true, message: '璇疯緭鍏ヤ粨搴撳悕绉�', trigger: 'blur' }],
+};
+
+onMounted(() => {
+ fetchData();
+});
+
+async function fetchData() {
+ loading.value = true;
+ try {
+ const res = await getWarehouseList({
+ page: pagination.current,
+ rows: pagination.pageSize,
+ sort: 'CreateDate',
+ order: 'desc',
+ wheres: searchText.value
+ ? [{ name: 'WarehouseName', value: searchText.value, displayType: 'like' }]
+ : [],
+ });
+ if (res.status && res.data) {
+ dataSource.value = res.data.rows || [];
+ pagination.total = res.data.total || 0;
+ }
+ } catch (error) {
+ console.error('Fetch data error:', error);
+ } finally {
+ loading.value = false;
+ }
+}
+
+function handleTableChange(pag: any) {
+ pagination.current = pag.current;
+ pagination.pageSize = pag.pageSize;
+ fetchData();
+}
+
+function handleSearch() {
+ pagination.current = 1;
+ fetchData();
+}
+
+function handleAdd() {
+ modalTitle.value = '鏂板浠撳簱';
+ Object.assign(formState, {
+ Id: undefined,
+ WarehouseCode: '',
+ WarehouseName: '',
+ WarehouseType: '',
+ Enable: 1,
+ });
+ modalVisible.value = true;
+}
+
+function handleEdit(record: WarehouseInfo) {
+ modalTitle.value = '缂栬緫浠撳簱';
+ Object.assign(formState, record);
+ modalVisible.value = true;
+}
+
+async function handleModalOk() {
+ try {
+ await formRef.value.validate();
+ const api = formState.Id ? updateWarehouse : addWarehouse;
+ const res = await api(formState);
+ if (res.status) {
+ message.success(formState.Id ? '鏇存柊鎴愬姛' : '鏂板鎴愬姛');
+ modalVisible.value = false;
+ fetchData();
+ }
+ } catch (error) {
+ console.error('Save error:', error);
+ }
+}
+
+function handleModalCancel() {
+ modalVisible.value = false;
+ formRef.value?.resetFields();
+}
+
+async function handleDelete(record: WarehouseInfo) {
+ try {
+ const res = await deleteWarehouse([record.Id]);
+ if (res.status) {
+ message.success('鍒犻櫎鎴愬姛');
+ fetchData();
+ }
+ } catch (error) {
+ console.error('Delete error:', error);
+ }
+}
+</script>
+
+<style scoped>
+.warehouse-page {
+ padding: 0;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/check/order/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/check/order/index.vue
new file mode 100644
index 0000000..ef52b48
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/check/order/index.vue
@@ -0,0 +1,145 @@
+<template>
+ <div class="check-order-page">
+ <a-card>
+ <a-space style="margin-bottom: 16px">
+ <a-button type="primary" @click="handleAdd">
+ <template #icon><plus-outlined /></template>
+ 鏂板鐩樼偣鍗�
+ </a-button>
+ <a-input-search
+ v-model:value="searchText"
+ placeholder="鎼滅储鐩樼偣鍗曞彿"
+ style="width: 200px"
+ @search="handleSearch"
+ />
+ </a-space>
+
+ <a-table
+ :columns="columns"
+ :data-source="dataSource"
+ :loading="loading"
+ :pagination="pagination"
+ @change="handleTableChange"
+ row-key="Id"
+ >
+ <template #bodyCell="{ column, record }">
+ <template v-if="column.key === 'CheckStatus'">
+ <a-tag :color="getStatusColor(record.CheckStatus)">
+ {{ getStatusText(record.CheckStatus) }}
+ </a-tag>
+ </template>
+ <template v-else-if="column.key === 'action'">
+ <a-space>
+ <a @click="handleView(record)">鏌ョ湅</a>
+ <a-divider type="vertical" />
+ <a @click="handleEdit(record)">缂栬緫</a>
+ <a-divider type="vertical" />
+ <a-popconfirm title="纭畾瑕佸垹闄ゅ悧锛�" @confirm="handleDelete(record)">
+ <a style="color: red">鍒犻櫎</a>
+ </a-popconfirm>
+ </a-space>
+ </template>
+ </template>
+ </a-table>
+ </a-card>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
+import { PlusOutlined } from '@ant-design/icons-vue';
+import type { CheckOrderInfo } from '../../../types/common';
+
+const columns = [
+ { title: '鐩樼偣鍗曞彿', dataIndex: 'CheckOrderNo', key: 'CheckOrderNo' },
+ { title: '浠撳簱缂栫爜', dataIndex: 'WarehouseCode', key: 'WarehouseCode' },
+ { title: '浠撳簱鍚嶇О', dataIndex: 'WarehouseName', key: 'WarehouseName' },
+ { title: '鐩樼偣鐘舵��', dataIndex: 'CheckStatus', key: 'CheckStatus' },
+ { title: '鍒涘缓鏃堕棿', dataIndex: 'CreateDate', key: 'CreateDate' },
+ { title: '鍒涘缓浜�', dataIndex: 'Creator', key: 'Creator' },
+ { title: '鎿嶄綔', key: 'action', width: 200 },
+];
+
+const dataSource = ref<CheckOrderInfo[]>([]);
+const loading = ref(false);
+const searchText = ref('');
+const pagination = reactive({
+ current: 1,
+ pageSize: 20,
+ total: 0,
+ showSizeChanger: true,
+ showTotal: (total: number) => `鍏� ${total} 鏉,
+});
+
+onMounted(() => {
+ fetchData();
+});
+
+async function fetchData() {
+ loading.value = true;
+ try {
+ // 杩欓噷璋冪敤瀹為檯鐨� API
+ setTimeout(() => {
+ dataSource.value = [];
+ pagination.total = 0;
+ loading.value = false;
+ }, 500);
+ } catch (error) {
+ console.error('Fetch data error:', error);
+ loading.value = false;
+ }
+}
+
+function handleTableChange(pag: any) {
+ pagination.current = pag.current;
+ pagination.pageSize = pag.pageSize;
+ fetchData();
+}
+
+function handleSearch() {
+ pagination.current = 1;
+ fetchData();
+}
+
+function handleAdd() {
+ message.info('鏂板鐩樼偣鍗曞姛鑳�');
+}
+
+function handleView(record: CheckOrderInfo) {
+ message.info(`鏌ョ湅鐩樼偣鍗�: ${record.CheckOrderNo}`);
+}
+
+function handleEdit(record: CheckOrderInfo) {
+ message.info(`缂栬緫鐩樼偣鍗�: ${record.CheckOrderNo}`);
+}
+
+async function handleDelete(record: CheckOrderInfo) {
+ message.success('鍒犻櫎鎴愬姛');
+ fetchData();
+}
+
+function getStatusColor(status?: number) {
+ const colorMap: Record<number, string> = {
+ 0: 'default',
+ 1: 'processing',
+ 2: 'success',
+ };
+ return colorMap[status || 0] || 'default';
+}
+
+function getStatusText(status?: number) {
+ const textMap: Record<number, string> = {
+ 0: '寰呯洏鐐�',
+ 1: '鐩樼偣涓�',
+ 2: '宸插畬鎴�',
+ };
+ return textMap[status || 0] || '鏈煡';
+}
+</script>
+
+<style scoped>
+.check-order-page {
+ padding: 0;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/dashboard/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/dashboard/index.vue
new file mode 100644
index 0000000..ad867b3
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/dashboard/index.vue
@@ -0,0 +1,93 @@
+<template>
+ <div class="dashboard">
+ <a-row :gutter="16">
+ <a-col :span="6">
+ <a-card>
+ <a-statistic
+ title="鍏ュ簱鍗曟�绘暟"
+ :value="statistics.inboundCount"
+ :prefix="() => h(ImportOutlined)"
+ />
+ </a-card>
+ </a-col>
+ <a-col :span="6">
+ <a-card>
+ <a-statistic
+ title="鍑哄簱鍗曟�绘暟"
+ :value="statistics.outboundCount"
+ :prefix="() => h(ExportOutlined)"
+ />
+ </a-card>
+ </a-col>
+ <a-col :span="6">
+ <a-card>
+ <a-statistic
+ title="搴撳瓨鎬婚噺"
+ :value="statistics.stockCount"
+ :prefix="() => h(ContainerOutlined)"
+ />
+ </a-card>
+ </a-col>
+ <a-col :span="6">
+ <a-card>
+ <a-statistic
+ title="寰呭鐞嗕换鍔�"
+ :value="statistics.taskCount"
+ :prefix="() => h(CarryOutOutlined)"
+ />
+ </a-card>
+ </a-col>
+ </a-row>
+
+ <a-row :gutter="16" style="margin-top: 16px">
+ <a-col :span="24">
+ <a-card title="娆㈣繋浣跨敤 WIDESEA WMS 浠撳簱绠$悊绯荤粺">
+ <p>绯荤粺鍔熻兘妯″潡锛�</p>
+ <ul>
+ <li>绯荤粺绠$悊锛氱敤鎴枫�佽鑹层�佽彍鍗曠鐞�</li>
+ <li>鍩虹淇℃伅锛氫粨搴撱�佽揣浣嶃�佺墿鏂欑鐞�</li>
+ <li>鍏ュ簱绠$悊锛氬叆搴撳崟銆侀噰璐崟銆佹敹璐у崟绠$悊</li>
+ <li>鍑哄簱绠$悊锛氬嚭搴撳崟銆佸嚭搴撻攣瀹氫俊鎭鐞�</li>
+ <li>搴撳瓨绠$悊锛氬簱瀛樹俊鎭�佸簱瀛樻槑缁嗐�佸簱瀛樿鍥�</li>
+ <li>鐩樼偣绠$悊锛氱洏鐐瑰崟銆佺洏鐐圭粨鏋滅鐞�</li>
+ <li>浠诲姟绠$悊锛氫换鍔′俊鎭�佷换鍔″巻鍙茬鐞�</li>
+ </ul>
+ </a-card>
+ </a-col>
+ </a-row>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, onMounted, h } from 'vue';
+import {
+ ImportOutlined,
+ ExportOutlined,
+ ContainerOutlined,
+ CarryOutOutlined,
+} from '@ant-design/icons-vue';
+
+const statistics = ref({
+ inboundCount: 0,
+ outboundCount: 0,
+ stockCount: 0,
+ taskCount: 0,
+});
+
+onMounted(() => {
+ // 杩欓噷鍙互璋冪敤 API 鑾峰彇缁熻鏁版嵁
+ // 鏆傛椂浣跨敤妯℃嫙鏁版嵁
+ statistics.value = {
+ inboundCount: 128,
+ outboundCount: 96,
+ stockCount: 1024,
+ taskCount: 12,
+ };
+});
+</script>
+
+<style scoped>
+.dashboard {
+ padding: 0;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/error/404.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/error/404.vue
new file mode 100644
index 0000000..6706c5b
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/error/404.vue
@@ -0,0 +1,32 @@
+<template>
+ <div class="error-page">
+ <a-result
+ status="404"
+ title="404"
+ sub-title="鎶辨瓑锛屾偍璁块棶鐨勯〉闈笉瀛樺湪"
+ >
+ <template #extra>
+ <a-button type="primary" @click="goHome">杩斿洖棣栭〉</a-button>
+ </template>
+ </a-result>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router';
+
+const router = useRouter();
+
+function goHome() {
+ router.push('/');
+}
+</script>
+
+<style scoped>
+.error-page {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 400px;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/inbound/order/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/inbound/order/index.vue
new file mode 100644
index 0000000..f900554
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/inbound/order/index.vue
@@ -0,0 +1,150 @@
+<template>
+ <div class="inbound-order-page">
+ <a-card>
+ <a-space style="margin-bottom: 16px">
+ <a-button type="primary" @click="handleAdd">
+ <template #icon><plus-outlined /></template>
+ 鏂板鍏ュ簱鍗�
+ </a-button>
+ <a-input-search
+ v-model:value="searchText"
+ placeholder="鎼滅储鍏ュ簱鍗曞彿"
+ style="width: 200px"
+ @search="handleSearch"
+ />
+ </a-space>
+
+ <a-table
+ :columns="columns"
+ :data-source="dataSource"
+ :loading="loading"
+ :pagination="pagination"
+ @change="handleTableChange"
+ row-key="Id"
+ >
+ <template #bodyCell="{ column, record }">
+ <template v-if="column.key === 'OrderStatus'">
+ <a-tag :color="getStatusColor(record.OrderStatus)">
+ {{ getStatusText(record.OrderStatus) }}
+ </a-tag>
+ </template>
+ <template v-else-if="column.key === 'action'">
+ <a-space>
+ <a @click="handleView(record)">鏌ョ湅</a>
+ <a-divider type="vertical" />
+ <a @click="handleEdit(record)">缂栬緫</a>
+ <a-divider type="vertical" />
+ <a-popconfirm title="纭畾瑕佸垹闄ゅ悧锛�" @confirm="handleDelete(record)">
+ <a style="color: red">鍒犻櫎</a>
+ </a-popconfirm>
+ </a-space>
+ </template>
+ </template>
+ </a-table>
+ </a-card>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
+import { PlusOutlined } from '@ant-design/icons-vue';
+import type { InboundOrderInfo } from '../../../types/common';
+
+const columns = [
+ { title: '鍏ュ簱鍗曞彿', dataIndex: 'InboundOrderNo', key: 'InboundOrderNo' },
+ { title: '鍏ュ簱绫诲瀷', dataIndex: 'InboundType', key: 'InboundType' },
+ { title: '浠撳簱缂栫爜', dataIndex: 'WarehouseCode', key: 'WarehouseCode' },
+ { title: '浠撳簱鍚嶇О', dataIndex: 'WarehouseName', key: 'WarehouseName' },
+ { title: '璁㈠崟鐘舵��', dataIndex: 'OrderStatus', key: 'OrderStatus' },
+ { title: '鍒涘缓鏃堕棿', dataIndex: 'CreateDate', key: 'CreateDate' },
+ { title: '鍒涘缓浜�', dataIndex: 'Creator', key: 'Creator' },
+ { title: '鎿嶄綔', key: 'action', width: 200 },
+];
+
+const dataSource = ref<InboundOrderInfo[]>([]);
+const loading = ref(false);
+const searchText = ref('');
+const pagination = reactive({
+ current: 1,
+ pageSize: 20,
+ total: 0,
+ showSizeChanger: true,
+ showTotal: (total: number) => `鍏� ${total} 鏉,
+});
+
+onMounted(() => {
+ fetchData();
+});
+
+async function fetchData() {
+ loading.value = true;
+ try {
+ // 杩欓噷璋冪敤瀹為檯鐨� API
+ // const res = await getInboundOrderList({...});
+ // 鏆傛椂浣跨敤妯℃嫙鏁版嵁
+ setTimeout(() => {
+ dataSource.value = [];
+ pagination.total = 0;
+ loading.value = false;
+ }, 500);
+ } catch (error) {
+ console.error('Fetch data error:', error);
+ loading.value = false;
+ }
+}
+
+function handleTableChange(pag: any) {
+ pagination.current = pag.current;
+ pagination.pageSize = pag.pageSize;
+ fetchData();
+}
+
+function handleSearch() {
+ pagination.current = 1;
+ fetchData();
+}
+
+function handleAdd() {
+ message.info('鏂板鍏ュ簱鍗曞姛鑳�');
+}
+
+function handleView(record: InboundOrderInfo) {
+ message.info(`鏌ョ湅鍏ュ簱鍗�: ${record.InboundOrderNo}`);
+}
+
+function handleEdit(record: InboundOrderInfo) {
+ message.info(`缂栬緫鍏ュ簱鍗�: ${record.InboundOrderNo}`);
+}
+
+async function handleDelete(record: InboundOrderInfo) {
+ message.success('鍒犻櫎鎴愬姛');
+ fetchData();
+}
+
+function getStatusColor(status?: number) {
+ const colorMap: Record<number, string> = {
+ 0: 'default',
+ 1: 'processing',
+ 2: 'success',
+ 3: 'error',
+ };
+ return colorMap[status || 0] || 'default';
+}
+
+function getStatusText(status?: number) {
+ const textMap: Record<number, string> = {
+ 0: '寰呭鐞�',
+ 1: '澶勭悊涓�',
+ 2: '宸插畬鎴�',
+ 3: '宸插彇娑�',
+ };
+ return textMap[status || 0] || '鏈煡';
+}
+</script>
+
+<style scoped>
+.inbound-order-page {
+ padding: 0;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/login/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/login/index.vue
new file mode 100644
index 0000000..7731f98
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/login/index.vue
@@ -0,0 +1,133 @@
+<template>
+ <div class="login-container">
+ <div class="login-box">
+ <div class="login-header">
+ <h1>WIDESEA WMS</h1>
+ <p>浠撳簱绠$悊绯荤粺</p>
+ </div>
+ <a-form
+ :model="formState"
+ :rules="rules"
+ @finish="handleLogin"
+ class="login-form"
+ >
+ <a-form-item name="username">
+ <a-input
+ v-model:value="formState.username"
+ size="large"
+ placeholder="璇疯緭鍏ョ敤鎴峰悕"
+ >
+ <template #prefix>
+ <user-outlined />
+ </template>
+ </a-input>
+ </a-form-item>
+ <a-form-item name="password">
+ <a-input-password
+ v-model:value="formState.password"
+ size="large"
+ placeholder="璇疯緭鍏ュ瘑鐮�"
+ >
+ <template #prefix>
+ <lock-outlined />
+ </template>
+ </a-input-password>
+ </a-form-item>
+ <a-form-item>
+ <a-button
+ type="primary"
+ html-type="submit"
+ size="large"
+ :loading="loading"
+ block
+ >
+ 鐧诲綍
+ </a-button>
+ </a-form-item>
+ </a-form>
+ </div>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref } from 'vue';
+import { useRouter, useRoute } from 'vue-router';
+import { message } from 'ant-design-vue';
+import { UserOutlined, LockOutlined } from '@ant-design/icons-vue';
+import { useAuthStore } from '../../stores/auth';
+
+const router = useRouter();
+const route = useRoute();
+const authStore = useAuthStore();
+
+const formState = reactive({
+ username: '',
+ password: '',
+});
+
+const rules = {
+ username: [{ required: true, message: '璇疯緭鍏ョ敤鎴峰悕', trigger: 'blur' }],
+ password: [{ required: true, message: '璇疯緭鍏ュ瘑鐮�', trigger: 'blur' }],
+};
+
+const loading = ref(false);
+
+async function handleLogin() {
+ loading.value = true;
+ try {
+ const success = await authStore.login(formState.username, formState.password);
+ if (success) {
+ message.success('鐧诲綍鎴愬姛');
+ const redirect = (route.query.redirect as string) || '/';
+ router.push(redirect);
+ } else {
+ message.error('鐧诲綍澶辫触锛岃妫�鏌ョ敤鎴峰悕鍜屽瘑鐮�');
+ }
+ } catch (error) {
+ console.error('Login error:', error);
+ message.error('鐧诲綍澶辫触');
+ } finally {
+ loading.value = false;
+ }
+}
+</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: 400px;
+ padding: 40px;
+ background: #fff;
+ border-radius: 8px;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+}
+
+.login-header {
+ text-align: center;
+ margin-bottom: 32px;
+}
+
+.login-header h1 {
+ font-size: 32px;
+ font-weight: bold;
+ color: #333;
+ margin: 0 0 8px 0;
+}
+
+.login-header p {
+ font-size: 14px;
+ color: #666;
+ margin: 0;
+}
+
+.login-form {
+ margin-top: 24px;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/outbound/order/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/outbound/order/index.vue
new file mode 100644
index 0000000..5bdc61b
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/outbound/order/index.vue
@@ -0,0 +1,148 @@
+<template>
+ <div class="outbound-order-page">
+ <a-card>
+ <a-space style="margin-bottom: 16px">
+ <a-button type="primary" @click="handleAdd">
+ <template #icon><plus-outlined /></template>
+ 鏂板鍑哄簱鍗�
+ </a-button>
+ <a-input-search
+ v-model:value="searchText"
+ placeholder="鎼滅储鍑哄簱鍗曞彿"
+ style="width: 200px"
+ @search="handleSearch"
+ />
+ </a-space>
+
+ <a-table
+ :columns="columns"
+ :data-source="dataSource"
+ :loading="loading"
+ :pagination="pagination"
+ @change="handleTableChange"
+ row-key="Id"
+ >
+ <template #bodyCell="{ column, record }">
+ <template v-if="column.key === 'OrderStatus'">
+ <a-tag :color="getStatusColor(record.OrderStatus)">
+ {{ getStatusText(record.OrderStatus) }}
+ </a-tag>
+ </template>
+ <template v-else-if="column.key === 'action'">
+ <a-space>
+ <a @click="handleView(record)">鏌ョ湅</a>
+ <a-divider type="vertical" />
+ <a @click="handleEdit(record)">缂栬緫</a>
+ <a-divider type="vertical" />
+ <a-popconfirm title="纭畾瑕佸垹闄ゅ悧锛�" @confirm="handleDelete(record)">
+ <a style="color: red">鍒犻櫎</a>
+ </a-popconfirm>
+ </a-space>
+ </template>
+ </template>
+ </a-table>
+ </a-card>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
+import { PlusOutlined } from '@ant-design/icons-vue';
+import type { OutboundOrderInfo } from '../../../types/common';
+
+const columns = [
+ { title: '鍑哄簱鍗曞彿', dataIndex: 'OutboundOrderNo', key: 'OutboundOrderNo' },
+ { title: '鍑哄簱绫诲瀷', dataIndex: 'OutboundType', key: 'OutboundType' },
+ { title: '浠撳簱缂栫爜', dataIndex: 'WarehouseCode', key: 'WarehouseCode' },
+ { title: '浠撳簱鍚嶇О', dataIndex: 'WarehouseName', key: 'WarehouseName' },
+ { title: '璁㈠崟鐘舵��', dataIndex: 'OrderStatus', key: 'OrderStatus' },
+ { title: '鍒涘缓鏃堕棿', dataIndex: 'CreateDate', key: 'CreateDate' },
+ { title: '鍒涘缓浜�', dataIndex: 'Creator', key: 'Creator' },
+ { title: '鎿嶄綔', key: 'action', width: 200 },
+];
+
+const dataSource = ref<OutboundOrderInfo[]>([]);
+const loading = ref(false);
+const searchText = ref('');
+const pagination = reactive({
+ current: 1,
+ pageSize: 20,
+ total: 0,
+ showSizeChanger: true,
+ showTotal: (total: number) => `鍏� ${total} 鏉,
+});
+
+onMounted(() => {
+ fetchData();
+});
+
+async function fetchData() {
+ loading.value = true;
+ try {
+ // 杩欓噷璋冪敤瀹為檯鐨� API
+ setTimeout(() => {
+ dataSource.value = [];
+ pagination.total = 0;
+ loading.value = false;
+ }, 500);
+ } catch (error) {
+ console.error('Fetch data error:', error);
+ loading.value = false;
+ }
+}
+
+function handleTableChange(pag: any) {
+ pagination.current = pag.current;
+ pagination.pageSize = pag.pageSize;
+ fetchData();
+}
+
+function handleSearch() {
+ pagination.current = 1;
+ fetchData();
+}
+
+function handleAdd() {
+ message.info('鏂板鍑哄簱鍗曞姛鑳�');
+}
+
+function handleView(record: OutboundOrderInfo) {
+ message.info(`鏌ョ湅鍑哄簱鍗�: ${record.OutboundOrderNo}`);
+}
+
+function handleEdit(record: OutboundOrderInfo) {
+ message.info(`缂栬緫鍑哄簱鍗�: ${record.OutboundOrderNo}`);
+}
+
+async function handleDelete(record: OutboundOrderInfo) {
+ message.success('鍒犻櫎鎴愬姛');
+ fetchData();
+}
+
+function getStatusColor(status?: number) {
+ const colorMap: Record<number, string> = {
+ 0: 'default',
+ 1: 'processing',
+ 2: 'success',
+ 3: 'error',
+ };
+ return colorMap[status || 0] || 'default';
+}
+
+function getStatusText(status?: number) {
+ const textMap: Record<number, string> = {
+ 0: '寰呭鐞�',
+ 1: '澶勭悊涓�',
+ 2: '宸插畬鎴�',
+ 3: '宸插彇娑�',
+ };
+ return textMap[status || 0] || '鏈煡';
+}
+</script>
+
+<style scoped>
+.outbound-order-page {
+ padding: 0;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/stock/info/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/stock/info/index.vue
new file mode 100644
index 0000000..026e58f
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/stock/info/index.vue
@@ -0,0 +1,108 @@
+<template>
+ <div class="stock-info-page">
+ <a-card>
+ <a-space style="margin-bottom: 16px">
+ <a-input-search
+ v-model:value="searchText"
+ placeholder="鎼滅储鐗╂枡缂栫爜"
+ style="width: 200px"
+ @search="handleSearch"
+ />
+ <a-button @click="handleExport">
+ <template #icon><download-outlined /></template>
+ 瀵煎嚭
+ </a-button>
+ </a-space>
+
+ <a-table
+ :columns="columns"
+ :data-source="dataSource"
+ :loading="loading"
+ :pagination="pagination"
+ @change="handleTableChange"
+ row-key="Id"
+ >
+ <template #bodyCell="{ column, record }">
+ <template v-if="column.key === 'action'">
+ <a @click="handleView(record)">鏌ョ湅鏄庣粏</a>
+ </template>
+ </template>
+ </a-table>
+ </a-card>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
+import { DownloadOutlined } from '@ant-design/icons-vue';
+import type { StockInfo } from '../../../types/common';
+
+const columns = [
+ { title: '浠撳簱缂栫爜', dataIndex: 'WarehouseCode', key: 'WarehouseCode' },
+ { title: '浠撳簱鍚嶇О', dataIndex: 'WarehouseName', key: 'WarehouseName' },
+ { title: '璐т綅缂栫爜', dataIndex: 'LocationCode', key: 'LocationCode' },
+ { title: '鐗╂枡缂栫爜', dataIndex: 'MaterielCode', key: 'MaterielCode' },
+ { title: '鐗╂枡鍚嶇О', dataIndex: 'MaterielName', key: 'MaterielName' },
+ { title: '鎬绘暟閲�', dataIndex: 'Quantity', key: 'Quantity' },
+ { title: '鍙敤鏁伴噺', dataIndex: 'AvailableQuantity', key: 'AvailableQuantity' },
+ { title: '閿佸畾鏁伴噺', dataIndex: 'LockedQuantity', key: 'LockedQuantity' },
+ { title: '鍒涘缓鏃堕棿', dataIndex: 'CreateDate', key: 'CreateDate' },
+ { title: '鎿嶄綔', key: 'action', width: 120 },
+];
+
+const dataSource = ref<StockInfo[]>([]);
+const loading = ref(false);
+const searchText = ref('');
+const pagination = reactive({
+ current: 1,
+ pageSize: 20,
+ total: 0,
+ showSizeChanger: true,
+ showTotal: (total: number) => `鍏� ${total} 鏉,
+});
+
+onMounted(() => {
+ fetchData();
+});
+
+async function fetchData() {
+ loading.value = true;
+ try {
+ // 杩欓噷璋冪敤瀹為檯鐨� API
+ setTimeout(() => {
+ dataSource.value = [];
+ pagination.total = 0;
+ loading.value = false;
+ }, 500);
+ } catch (error) {
+ console.error('Fetch data error:', error);
+ loading.value = false;
+ }
+}
+
+function handleTableChange(pag: any) {
+ pagination.current = pag.current;
+ pagination.pageSize = pag.pageSize;
+ fetchData();
+}
+
+function handleSearch() {
+ pagination.current = 1;
+ fetchData();
+}
+
+function handleView(record: StockInfo) {
+ message.info(`鏌ョ湅搴撳瓨鏄庣粏: ${record.MaterielCode}`);
+}
+
+function handleExport() {
+ message.info('瀵煎嚭搴撳瓨鏁版嵁');
+}
+</script>
+
+<style scoped>
+.stock-info-page {
+ padding: 0;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/system/menu/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/system/menu/index.vue
new file mode 100644
index 0000000..e65c995
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/system/menu/index.vue
@@ -0,0 +1,186 @@
+<template>
+ <div class="menu-page">
+ <a-card>
+ <a-space style="margin-bottom: 16px">
+ <a-button type="primary" @click="handleAdd">
+ <template #icon><plus-outlined /></template>
+ 鏂板鑿滃崟
+ </a-button>
+ </a-space>
+
+ <a-table
+ :columns="columns"
+ :data-source="dataSource"
+ :loading="loading"
+ :pagination="false"
+ row-key="Id"
+ >
+ <template #bodyCell="{ column, record }">
+ <template v-if="column.key === 'Enable'">
+ <a-tag :color="record.Enable === 1 ? 'green' : 'red'">
+ {{ record.Enable === 1 ? '鍚敤' : '绂佺敤' }}
+ </a-tag>
+ </template>
+ <template v-else-if="column.key === 'action'">
+ <a-space>
+ <a @click="handleEdit(record)">缂栬緫</a>
+ <a-divider type="vertical" />
+ <a-popconfirm title="纭畾瑕佸垹闄ゅ悧锛�" @confirm="handleDelete(record)">
+ <a style="color: red">鍒犻櫎</a>
+ </a-popconfirm>
+ </a-space>
+ </template>
+ </template>
+ </a-table>
+ </a-card>
+
+ <a-modal
+ v-model:open="modalVisible"
+ :title="modalTitle"
+ @ok="handleModalOk"
+ @cancel="handleModalCancel"
+ >
+ <a-form
+ ref="formRef"
+ :model="formState"
+ :rules="rules"
+ :label-col="{ span: 6 }"
+ :wrapper-col="{ span: 16 }"
+ >
+ <a-form-item label="鑿滃崟鍚嶇О" name="MenuName">
+ <a-input v-model:value="formState.MenuName" />
+ </a-form-item>
+ <a-form-item label="鑿滃崟璺緞" name="Url">
+ <a-input v-model:value="formState.Url" />
+ </a-form-item>
+ <a-form-item label="鍥炬爣" name="Icon">
+ <a-input v-model:value="formState.Icon" />
+ </a-form-item>
+ <a-form-item label="鎺掑簭鍙�" name="OrderNo">
+ <a-input-number v-model:value="formState.OrderNo" style="width: 100%" />
+ </a-form-item>
+ <a-form-item label="鐘舵��" name="Enable">
+ <a-select v-model:value="formState.Enable">
+ <a-select-option :value="1">鍚敤</a-select-option>
+ <a-select-option :value="0">绂佺敤</a-select-option>
+ </a-select>
+ </a-form-item>
+ </a-form>
+ </a-modal>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
+import { PlusOutlined } from '@ant-design/icons-vue';
+import { getMenuList, addMenu, updateMenu, deleteMenu } from '../../../api/system';
+import type { MenuInfo } from '../../../types/user';
+
+const columns = [
+ { title: '鑿滃崟鍚嶇О', dataIndex: 'MenuName', key: 'MenuName' },
+ { title: '鑿滃崟璺緞', dataIndex: 'Url', key: 'Url' },
+ { title: '鍥炬爣', dataIndex: 'Icon', key: 'Icon' },
+ { title: '鎺掑簭鍙�', dataIndex: 'OrderNo', key: 'OrderNo' },
+ { title: '鐘舵��', dataIndex: 'Enable', key: 'Enable' },
+ { title: '鎿嶄綔', key: 'action', width: 150 },
+];
+
+const dataSource = ref<MenuInfo[]>([]);
+const loading = ref(false);
+
+const modalVisible = ref(false);
+const modalTitle = ref('鏂板鑿滃崟');
+const formRef = ref();
+const formState = reactive<Partial<MenuInfo>>({
+ MenuName: '',
+ Url: '',
+ Icon: '',
+ OrderNo: 0,
+ Enable: 1,
+});
+
+const rules = {
+ MenuName: [{ required: true, message: '璇疯緭鍏ヨ彍鍗曞悕绉�', trigger: 'blur' }],
+};
+
+onMounted(() => {
+ fetchData();
+});
+
+async function fetchData() {
+ loading.value = true;
+ try {
+ const res = await getMenuList({
+ page: 1,
+ rows: 1000,
+ sort: 'OrderNo',
+ order: 'asc',
+ });
+ if (res.status && res.data) {
+ dataSource.value = res.data.rows || [];
+ }
+ } catch (error) {
+ console.error('Fetch data error:', error);
+ } finally {
+ loading.value = false;
+ }
+}
+
+function handleAdd() {
+ modalTitle.value = '鏂板鑿滃崟';
+ Object.assign(formState, {
+ Id: undefined,
+ MenuName: '',
+ Url: '',
+ Icon: '',
+ OrderNo: 0,
+ Enable: 1,
+ });
+ modalVisible.value = true;
+}
+
+function handleEdit(record: MenuInfo) {
+ modalTitle.value = '缂栬緫鑿滃崟';
+ Object.assign(formState, record);
+ modalVisible.value = true;
+}
+
+async function handleModalOk() {
+ try {
+ await formRef.value.validate();
+ const api = formState.Id ? updateMenu : addMenu;
+ const res = await api(formState);
+ if (res.status) {
+ message.success(formState.Id ? '鏇存柊鎴愬姛' : '鏂板鎴愬姛');
+ modalVisible.value = false;
+ fetchData();
+ }
+ } catch (error) {
+ console.error('Save error:', error);
+ }
+}
+
+function handleModalCancel() {
+ modalVisible.value = false;
+ formRef.value?.resetFields();
+}
+
+async function handleDelete(record: MenuInfo) {
+ try {
+ const res = await deleteMenu([record.Id]);
+ if (res.status) {
+ message.success('鍒犻櫎鎴愬姛');
+ fetchData();
+ }
+ } catch (error) {
+ console.error('Delete error:', error);
+ }
+}
+</script>
+
+<style scoped>
+.menu-page {
+ padding: 0;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/system/role/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/system/role/index.vue
new file mode 100644
index 0000000..c3a2628
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/system/role/index.vue
@@ -0,0 +1,190 @@
+<template>
+ <div class="role-page">
+ <a-card>
+ <a-space style="margin-bottom: 16px">
+ <a-button type="primary" @click="handleAdd">
+ <template #icon><plus-outlined /></template>
+ 鏂板瑙掕壊
+ </a-button>
+ </a-space>
+
+ <a-table
+ :columns="columns"
+ :data-source="dataSource"
+ :loading="loading"
+ :pagination="pagination"
+ @change="handleTableChange"
+ row-key="Id"
+ >
+ <template #bodyCell="{ column, record }">
+ <template v-if="column.key === 'Enable'">
+ <a-tag :color="record.Enable === 1 ? 'green' : 'red'">
+ {{ record.Enable === 1 ? '鍚敤' : '绂佺敤' }}
+ </a-tag>
+ </template>
+ <template v-else-if="column.key === 'action'">
+ <a-space>
+ <a @click="handleEdit(record)">缂栬緫</a>
+ <a-divider type="vertical" />
+ <a-popconfirm title="纭畾瑕佸垹闄ゅ悧锛�" @confirm="handleDelete(record)">
+ <a style="color: red">鍒犻櫎</a>
+ </a-popconfirm>
+ </a-space>
+ </template>
+ </template>
+ </a-table>
+ </a-card>
+
+ <a-modal
+ v-model:open="modalVisible"
+ :title="modalTitle"
+ @ok="handleModalOk"
+ @cancel="handleModalCancel"
+ >
+ <a-form
+ ref="formRef"
+ :model="formState"
+ :rules="rules"
+ :label-col="{ span: 6 }"
+ :wrapper-col="{ span: 16 }"
+ >
+ <a-form-item label="瑙掕壊鍚嶇О" name="RoleName">
+ <a-input v-model:value="formState.RoleName" />
+ </a-form-item>
+ <a-form-item label="鎺掑簭鍙�" name="OrderNo">
+ <a-input-number v-model:value="formState.OrderNo" style="width: 100%" />
+ </a-form-item>
+ <a-form-item label="鐘舵��" name="Enable">
+ <a-select v-model:value="formState.Enable">
+ <a-select-option :value="1">鍚敤</a-select-option>
+ <a-select-option :value="0">绂佺敤</a-select-option>
+ </a-select>
+ </a-form-item>
+ </a-form>
+ </a-modal>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
+import { PlusOutlined } from '@ant-design/icons-vue';
+import { getRoleList, addRole, updateRole, deleteRole } from '../../../api/system';
+import type { RoleInfo } from '../../../types/user';
+
+const columns = [
+ { title: '瑙掕壊鍚嶇О', dataIndex: 'RoleName', key: 'RoleName' },
+ { title: '鎺掑簭鍙�', dataIndex: 'OrderNo', key: 'OrderNo' },
+ { title: '鐘舵��', dataIndex: 'Enable', key: 'Enable' },
+ { title: '鍒涘缓鏃堕棿', dataIndex: 'CreateDate', key: 'CreateDate' },
+ { title: '鎿嶄綔', key: 'action', width: 150 },
+];
+
+const dataSource = ref<RoleInfo[]>([]);
+const loading = ref(false);
+const pagination = reactive({
+ current: 1,
+ pageSize: 20,
+ total: 0,
+ showSizeChanger: true,
+ showTotal: (total: number) => `鍏� ${total} 鏉,
+});
+
+const modalVisible = ref(false);
+const modalTitle = ref('鏂板瑙掕壊');
+const formRef = ref();
+const formState = reactive<Partial<RoleInfo>>({
+ RoleName: '',
+ OrderNo: 0,
+ Enable: 1,
+});
+
+const rules = {
+ RoleName: [{ required: true, message: '璇疯緭鍏ヨ鑹插悕绉�', trigger: 'blur' }],
+};
+
+onMounted(() => {
+ fetchData();
+});
+
+async function fetchData() {
+ loading.value = true;
+ try {
+ const res = await getRoleList({
+ page: pagination.current,
+ rows: pagination.pageSize,
+ sort: 'OrderNo',
+ order: 'asc',
+ });
+ if (res.status && res.data) {
+ dataSource.value = res.data.rows || [];
+ pagination.total = res.data.total || 0;
+ }
+ } catch (error) {
+ console.error('Fetch data error:', error);
+ } finally {
+ loading.value = false;
+ }
+}
+
+function handleTableChange(pag: any) {
+ pagination.current = pag.current;
+ pagination.pageSize = pag.pageSize;
+ fetchData();
+}
+
+function handleAdd() {
+ modalTitle.value = '鏂板瑙掕壊';
+ Object.assign(formState, {
+ Id: undefined,
+ RoleName: '',
+ OrderNo: 0,
+ Enable: 1,
+ });
+ modalVisible.value = true;
+}
+
+function handleEdit(record: RoleInfo) {
+ modalTitle.value = '缂栬緫瑙掕壊';
+ Object.assign(formState, record);
+ modalVisible.value = true;
+}
+
+async function handleModalOk() {
+ try {
+ await formRef.value.validate();
+ const api = formState.Id ? updateRole : addRole;
+ const res = await api(formState);
+ if (res.status) {
+ message.success(formState.Id ? '鏇存柊鎴愬姛' : '鏂板鎴愬姛');
+ modalVisible.value = false;
+ fetchData();
+ }
+ } catch (error) {
+ console.error('Save error:', error);
+ }
+}
+
+function handleModalCancel() {
+ modalVisible.value = false;
+ formRef.value?.resetFields();
+}
+
+async function handleDelete(record: RoleInfo) {
+ try {
+ const res = await deleteRole([record.Id]);
+ if (res.status) {
+ message.success('鍒犻櫎鎴愬姛');
+ fetchData();
+ }
+ } catch (error) {
+ console.error('Delete error:', error);
+ }
+}
+</script>
+
+<style scoped>
+.role-page {
+ padding: 0;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/system/user/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/system/user/index.vue
new file mode 100644
index 0000000..adab39c
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/system/user/index.vue
@@ -0,0 +1,216 @@
+<template>
+ <div class="user-page">
+ <a-card>
+ <a-space style="margin-bottom: 16px">
+ <a-button type="primary" @click="handleAdd">
+ <template #icon><plus-outlined /></template>
+ 鏂板鐢ㄦ埛
+ </a-button>
+ <a-input-search
+ v-model:value="searchText"
+ placeholder="鎼滅储鐢ㄦ埛鍚�"
+ style="width: 200px"
+ @search="handleSearch"
+ />
+ </a-space>
+
+ <a-table
+ :columns="columns"
+ :data-source="dataSource"
+ :loading="loading"
+ :pagination="pagination"
+ @change="handleTableChange"
+ row-key="Id"
+ >
+ <template #bodyCell="{ column, record }">
+ <template v-if="column.key === 'Enable'">
+ <a-tag :color="record.Enable === 1 ? 'green' : 'red'">
+ {{ record.Enable === 1 ? '鍚敤' : '绂佺敤' }}
+ </a-tag>
+ </template>
+ <template v-else-if="column.key === 'action'">
+ <a-space>
+ <a @click="handleEdit(record)">缂栬緫</a>
+ <a-divider type="vertical" />
+ <a-popconfirm
+ title="纭畾瑕佸垹闄ゅ悧锛�"
+ @confirm="handleDelete(record)"
+ >
+ <a style="color: red">鍒犻櫎</a>
+ </a-popconfirm>
+ </a-space>
+ </template>
+ </template>
+ </a-table>
+ </a-card>
+
+ <a-modal
+ v-model:open="modalVisible"
+ :title="modalTitle"
+ @ok="handleModalOk"
+ @cancel="handleModalCancel"
+ >
+ <a-form
+ ref="formRef"
+ :model="formState"
+ :rules="rules"
+ :label-col="{ span: 6 }"
+ :wrapper-col="{ span: 16 }"
+ >
+ <a-form-item label="鐢ㄦ埛鍚�" name="UserName">
+ <a-input v-model:value="formState.UserName" />
+ </a-form-item>
+ <a-form-item label="鐪熷疄濮撳悕" name="UserTrueName">
+ <a-input v-model:value="formState.UserTrueName" />
+ </a-form-item>
+ <a-form-item label="瀵嗙爜" name="Password" v-if="!formState.Id">
+ <a-input-password v-model:value="formState.Password" />
+ </a-form-item>
+ <a-form-item label="鐘舵��" name="Enable">
+ <a-select v-model:value="formState.Enable">
+ <a-select-option :value="1">鍚敤</a-select-option>
+ <a-select-option :value="0">绂佺敤</a-select-option>
+ </a-select>
+ </a-form-item>
+ </a-form>
+ </a-modal>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
+import { PlusOutlined } from '@ant-design/icons-vue';
+import { getUserList, addUser, updateUser, deleteUser } from '../../../api/system';
+import type { UserInfo } from '../../../types/user';
+
+const columns = [
+ { title: '鐢ㄦ埛鍚�', dataIndex: 'UserName', key: 'UserName' },
+ { title: '鐪熷疄濮撳悕', dataIndex: 'UserTrueName', key: 'UserTrueName' },
+ { title: '瑙掕壊', dataIndex: 'RoleName', key: 'RoleName' },
+ { title: '鐘舵��', dataIndex: 'Enable', key: 'Enable' },
+ { title: '鍒涘缓鏃堕棿', dataIndex: 'CreateDate', key: 'CreateDate' },
+ { title: '鎿嶄綔', key: 'action', width: 150 },
+];
+
+const dataSource = ref<UserInfo[]>([]);
+const loading = ref(false);
+const searchText = ref('');
+const pagination = reactive({
+ current: 1,
+ pageSize: 20,
+ total: 0,
+ showSizeChanger: true,
+ showTotal: (total: number) => `鍏� ${total} 鏉,
+});
+
+const modalVisible = ref(false);
+const modalTitle = ref('鏂板鐢ㄦ埛');
+const formRef = ref();
+const formState = reactive<Partial<UserInfo>>({
+ UserName: '',
+ UserTrueName: '',
+ Password: '',
+ Enable: 1,
+});
+
+const rules = {
+ UserName: [{ required: true, message: '璇疯緭鍏ョ敤鎴峰悕', trigger: 'blur' }],
+ UserTrueName: [{ required: true, message: '璇疯緭鍏ョ湡瀹炲鍚�', trigger: 'blur' }],
+ Password: [{ required: true, message: '璇疯緭鍏ュ瘑鐮�', trigger: 'blur' }],
+};
+
+onMounted(() => {
+ fetchData();
+});
+
+async function fetchData() {
+ loading.value = true;
+ try {
+ const res = await getUserList({
+ page: pagination.current,
+ rows: pagination.pageSize,
+ sort: 'CreateDate',
+ order: 'desc',
+ wheres: searchText.value
+ ? [{ name: 'UserName', value: searchText.value, displayType: 'like' }]
+ : [],
+ });
+ if (res.status && res.data) {
+ dataSource.value = res.data.rows || [];
+ pagination.total = res.data.total || 0;
+ }
+ } catch (error) {
+ console.error('Fetch data error:', error);
+ } finally {
+ loading.value = false;
+ }
+}
+
+function handleTableChange(pag: any) {
+ pagination.current = pag.current;
+ pagination.pageSize = pag.pageSize;
+ fetchData();
+}
+
+function handleSearch() {
+ pagination.current = 1;
+ fetchData();
+}
+
+function handleAdd() {
+ modalTitle.value = '鏂板鐢ㄦ埛';
+ Object.assign(formState, {
+ Id: undefined,
+ UserName: '',
+ UserTrueName: '',
+ Password: '',
+ Enable: 1,
+ });
+ modalVisible.value = true;
+}
+
+function handleEdit(record: UserInfo) {
+ modalTitle.value = '缂栬緫鐢ㄦ埛';
+ Object.assign(formState, { ...record, Password: undefined });
+ modalVisible.value = true;
+}
+
+async function handleModalOk() {
+ try {
+ await formRef.value.validate();
+ const api = formState.Id ? updateUser : addUser;
+ const res = await api(formState);
+ if (res.status) {
+ message.success(formState.Id ? '鏇存柊鎴愬姛' : '鏂板鎴愬姛');
+ modalVisible.value = false;
+ fetchData();
+ }
+ } catch (error) {
+ console.error('Save error:', error);
+ }
+}
+
+function handleModalCancel() {
+ modalVisible.value = false;
+ formRef.value?.resetFields();
+}
+
+async function handleDelete(record: UserInfo) {
+ try {
+ const res = await deleteUser([record.Id]);
+ if (res.status) {
+ message.success('鍒犻櫎鎴愬姛');
+ fetchData();
+ }
+ } catch (error) {
+ console.error('Delete error:', error);
+ }
+}
+</script>
+
+<style scoped>
+.user-page {
+ padding: 0;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/src/views/task/info/index.vue b/Code/WMS/WIDESEA_WMS_Frontend/src/views/task/info/index.vue
new file mode 100644
index 0000000..b80c85f
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/src/views/task/info/index.vue
@@ -0,0 +1,134 @@
+<template>
+ <div class="task-info-page">
+ <a-card>
+ <a-space style="margin-bottom: 16px">
+ <a-input-search
+ v-model:value="searchText"
+ placeholder="鎼滅储浠诲姟鍙�"
+ style="width: 200px"
+ @search="handleSearch"
+ />
+ <a-select
+ v-model:value="statusFilter"
+ placeholder="浠诲姟鐘舵��"
+ style="width: 120px"
+ @change="handleSearch"
+ allowClear
+ >
+ <a-select-option :value="0">寰呭鐞�</a-select-option>
+ <a-select-option :value="1">澶勭悊涓�</a-select-option>
+ <a-select-option :value="2">宸插畬鎴�</a-select-option>
+ <a-select-option :value="3">宸插彇娑�</a-select-option>
+ </a-select>
+ </a-space>
+
+ <a-table
+ :columns="columns"
+ :data-source="dataSource"
+ :loading="loading"
+ :pagination="pagination"
+ @change="handleTableChange"
+ row-key="Id"
+ >
+ <template #bodyCell="{ column, record }">
+ <template v-if="column.key === 'TaskStatus'">
+ <a-tag :color="getStatusColor(record.TaskStatus)">
+ {{ getStatusText(record.TaskStatus) }}
+ </a-tag>
+ </template>
+ <template v-else-if="column.key === 'action'">
+ <a @click="handleView(record)">鏌ョ湅璇︽儏</a>
+ </template>
+ </template>
+ </a-table>
+ </a-card>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
+import type { TaskInfo } from '../../../types/common';
+
+const columns = [
+ { title: '浠诲姟鍙�', dataIndex: 'TaskNo', key: 'TaskNo' },
+ { title: '浠诲姟绫诲瀷', dataIndex: 'TaskType', key: 'TaskType' },
+ { title: '浠诲姟鐘舵��', dataIndex: 'TaskStatus', key: 'TaskStatus' },
+ { title: '浠撳簱缂栫爜', dataIndex: 'WarehouseCode', key: 'WarehouseCode' },
+ { title: '鍒涘缓鏃堕棿', dataIndex: 'CreateDate', key: 'CreateDate' },
+ { title: '鍒涘缓浜�', dataIndex: 'Creator', key: 'Creator' },
+ { title: '鎿嶄綔', key: 'action', width: 120 },
+];
+
+const dataSource = ref<TaskInfo[]>([]);
+const loading = ref(false);
+const searchText = ref('');
+const statusFilter = ref<number>();
+const pagination = reactive({
+ current: 1,
+ pageSize: 20,
+ total: 0,
+ showSizeChanger: true,
+ showTotal: (total: number) => `鍏� ${total} 鏉,
+});
+
+onMounted(() => {
+ fetchData();
+});
+
+async function fetchData() {
+ loading.value = true;
+ try {
+ // 杩欓噷璋冪敤瀹為檯鐨� API
+ setTimeout(() => {
+ dataSource.value = [];
+ pagination.total = 0;
+ loading.value = false;
+ }, 500);
+ } catch (error) {
+ console.error('Fetch data error:', error);
+ loading.value = false;
+ }
+}
+
+function handleTableChange(pag: any) {
+ pagination.current = pag.current;
+ pagination.pageSize = pag.pageSize;
+ fetchData();
+}
+
+function handleSearch() {
+ pagination.current = 1;
+ fetchData();
+}
+
+function handleView(record: TaskInfo) {
+ message.info(`鏌ョ湅浠诲姟璇︽儏: ${record.TaskNo}`);
+}
+
+function getStatusColor(status?: number) {
+ const colorMap: Record<number, string> = {
+ 0: 'default',
+ 1: 'processing',
+ 2: 'success',
+ 3: 'error',
+ };
+ return colorMap[status || 0] || 'default';
+}
+
+function getStatusText(status?: number) {
+ const textMap: Record<number, string> = {
+ 0: '寰呭鐞�',
+ 1: '澶勭悊涓�',
+ 2: '宸插畬鎴�',
+ 3: '宸插彇娑�',
+ };
+ return textMap[status || 0] || '鏈煡';
+}
+</script>
+
+<style scoped>
+.task-info-page {
+ padding: 0;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/tsconfig.json b/Code/WMS/WIDESEA_WMS_Frontend/tsconfig.json
new file mode 100644
index 0000000..16521e6
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/tsconfig.json
@@ -0,0 +1,31 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "module": "ESNext",
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "preserve",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+
+ /* Path mapping */
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["src/*"]
+ }
+ },
+ "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/tsconfig.node.json b/Code/WMS/WIDESEA_WMS_Frontend/tsconfig.node.json
new file mode 100644
index 0000000..42872c5
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/tsconfig.node.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowSyntheticDefaultImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/Code/WMS/WIDESEA_WMS_Frontend/vite.config.ts b/Code/WMS/WIDESEA_WMS_Frontend/vite.config.ts
new file mode 100644
index 0000000..f90a5a5
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMS_Frontend/vite.config.ts
@@ -0,0 +1,55 @@
+import { defineConfig } from 'vite';
+import vue from '@vitejs/plugin-vue';
+import vueJsx from '@vitejs/plugin-vue-jsx';
+import { resolve } from 'path';
+import AutoImport from 'unplugin-auto-import/vite';
+import Components from 'unplugin-vue-components/vite';
+import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [
+ vue(),
+ vueJsx(),
+ AutoImport({
+ imports: ['vue', 'vue-router', 'pinia'],
+ dts: 'src/auto-imports.d.ts',
+ }),
+ Components({
+ resolvers: [
+ AntDesignVueResolver({
+ importStyle: false,
+ }),
+ ],
+ dts: 'src/components.d.ts',
+ }),
+ ],
+ resolve: {
+ alias: {
+ '@': resolve(__dirname, 'src'),
+ },
+ },
+ server: {
+ host: '0.0.0.0',
+ port: 3031,
+ proxy: {
+ '/api': {
+ target: 'http://localhost:9291',
+ changeOrigin: true,
+ },
+ },
+ },
+ build: {
+ outDir: 'dist',
+ sourcemap: false,
+ chunkSizeWarningLimit: 1500,
+ rollupOptions: {
+ output: {
+ manualChunks: {
+ 'vue-vendor': ['vue', 'vue-router', 'pinia'],
+ 'ant-design-vue': ['ant-design-vue', '@ant-design/icons-vue'],
+ },
+ },
+ },
+ },
+});
--
Gitblit v1.9.3