From bd674571b63057ad5aa7a0ebc1bea85c51f8f1f8 Mon Sep 17 00:00:00 2001
From: z8018 <1282578289@qq.com>
Date: 星期五, 17 十月 2025 02:07:34 +0800
Subject: [PATCH] .

---
 WIDESEA_WMSClient/src/extension/stock/stockInfo.js                                                          |   59 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpContextHelper.cs                                          |   36 
 WIDESEA_WMSClient/src/extension/stock/stockInfo_Hty.js                                                      |   75 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Core/InternalApp.cs                                                  |   47 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisRuleEnum.cs                                   |   27 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IBasicService/WIDESEA_IBasicService.csproj                                |   13 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs                                 |   20 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_LogController.cs                         |   20 
 WIDESEA_WMSClient/src/router/viewGird.js                                                                    |  186 
 WIDESEA_WMSClient/src/extension/outbound/extend/SelectedStock.vue                                           |  241 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrder.cs                                       |  120 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleService.cs                                        |   35 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWorkManage.cs                       |  194 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs                                     |  977 
 WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js                                             |   58 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PalletTypeEnum.cs                                       |   38 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrder_HtyService.cs                               |   19 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_TenantController.cs                      |   36 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ExceptionHandlerMiddleware.cs                            |   59 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockViewController.cs                        |   38 
 WIDESEA_WMSClient/src/components/basic/ViewGrid/detailMethods.js                                            |  102 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationTypeEnum.cs                                   |   45 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Utilities/LambdaExtensions.cs                                        |  248 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Record/StockQuantityChangeRecordController.cs       |   20 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/IpPolicyRateLimitSetup.cs                                 |   43 
 WIDESEA_WMSClient/src/assets/imgs/wms_x.png                                                                 |    0 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_ApprovalNode.cs                              |   53 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrder_HtyService.cs                             |   10 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryService.cs                                  |   19 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs                  |   31 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceFunFilter.cs                                     |  238 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs                                   |   20 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Filter/ExporterHeaderFilter.cs                                       |   23 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs                                          |   41 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/AllOptionRegister.cs                                      |   24 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs                                       |   24 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_MesOutboundOrder.cs                              |  116 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs                                   |   25 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/logo/favicon-32x32.png                                  |    0 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs                                     |   76 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IBasicService/IWarehouseService.cs                                        |   17 
 WIDESEA_WMSClient/src/views/taskinfo/task.vue                                                               |  230 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundService.cs                                        |   16 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/WIDESEA_BasicService.csproj                                  |   14 
 WIDESEA_WMSClient/src/views/charts/formChart.vue                                                            |  118 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_MenuController.cs                        |   67 
 WIDESEA_WMSClient/src/extension/basic/materielCodeInfo.js                                                   |  136 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Basic/InitializationLocationDTO.cs                                    |   43 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs                                     |   25 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Tenants/MultiTenantAttribute.cs                                      |   56 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/MaterielGroupDTO.cs                                           |   22 
 WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue                                                       |  200 
 WIDESEA_WMSClient/src/components/basic/VolForm.vue                                                          | 1487 +
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/IUnitOfWorkManage.cs                      |   25 
 WIDESEA_WMSClient/package.json                                                                              |   71 
 WIDESEA_WMSClient/src/views/charts/chart.vue                                                                |  101 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs                                           |  126 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_LocationStatusChangeRecord.cs                      |   77 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/CodeAnalysisHelper.cs                                         |  204 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/PalletCodeInfoController.cs                   |   19 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Const/HtmlElementType.cs                                             |   32 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielCodeInfo.cs                                 |   70 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/EnableEnum.cs                                           |   27 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile1.pubxml                |   17 
 WIDESEA_WMSClient/src/components/basic/VolForm/VolFormRender.js                                             |   14 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SwaggerContextExtension.cs                                |   72 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/MethodInfoExtensions.cs                                       |   22 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationChangeType.cs                                 |   57 
 WIDESEA_WMSClient/src/views/inbound/inboundOrder_Hty.vue                                                    |  115 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs                                          |  923 
 WIDESEA_WMSClient/src/components/basic/VolTable.vue                                                         | 1874 +
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetailService.cs                               |   25 
 WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue                                            |  218 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/HttpContextSetup.cs                                       |   30 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderDetailAddDTO.cs                                 |   39 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Basic/CachePointGroupDTO.cs                                           |   35 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/AOP/SqlSugarAop.cs                                                   |  158 
 WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1091.29919/SemanticSymbols.db          |    0 
 WIDESEA_WMSClient/src/components/basic/VolUpload.vue                                                        |  880 
 WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGridCustomColumn.js                                     |  151 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Attributes/CustomValidationAttribute.cs                              |   25 
 WIDESEA_WMSClient/src/components/basic/VolElementMenu.vue                                                   |  198 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs                                              |   26 
 WIDESEA_WMSClient/src/extension/stock/stockView.js                                                          |  134 
 WIDESEA_WMSClient/src/views/outbound/outboundOrder_Hty.vue                                                  |  115 
 WIDESEA_WMSClient/src/assets/element-icon/fonts/element-icons.woff                                          |    0 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielSourceTypeEnum.cs                             |   26 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs                                   |   80 
 WIDESEA_WMSClient/src/views/system/PermissionPDA.vue                                                        |  369 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Basic/InnerCodeDTO.cs                                                 |   16 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskEnumHelper.cs                                         |   38 
 WIDESEA_WMSClient/src/views/stock/stockInfoDetail_Hty.vue                                                   |   72 
 WIDESEA_WMSClient/src/views/stock/stockInfo_Hty.vue                                                         |   67 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml                 |   21 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder_Hty.cs                             |   44 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_ApprovalTask.cs                              |   71 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/WIDESEA_OutboundService.csproj                            |   16 
 WIDESEA_WMSClient/src/router/redirect.js                                                                    |   22 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/Task_HtyController.cs                      |   23 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/WarehouseController.cs                        |   22 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.xml                                           |  163 
 WIDESEA_WMSClient/src/views/charts/bigdata/layout.less                                                      |  197 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/AuditStatusEnum.cs                                      |   36 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs                                                 |   41 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/AOP/LogAOP.cs                                                        |  337 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/SwaggerAuthMiddleware.cs                                 |   86 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetail_HtyController.cs         |   23 
 WIDESEA_WMSClient/src/views/system/UserInfo.vue                                                             |  317 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_UserService.cs                                        |   26 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/launchSettings.json                                  |   31 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Attributes/AnalysisRuleAttribute.cs                                  |   34 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/AutofacPropertityModuleReg.cs                            |   16 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_StockQuantityChangeRecord.cs                       |  101 
 WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue                                             |  318 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutboundOrderEnum.cs                                     |   96 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/AutofacModuleRegister.cs                                  |   80 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/System/ActionDTO.cs                                                   |   16 
 WIDESEA_WMSClient/src/router/charts.js                                                                      |   17 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielStateEnum.cs                                  |   13 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/swaggerdoc.js                                        |  139 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs                                      |  161 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PrintStatusEnum.cs                                      |   23 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Caches/MemoryCacheService.cs                                         |  113 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleAuthService.cs                                      |   21 
 WIDESEA_WMSClient/src/extension/record/stockQuantityChangeRecord.js                                         |   58 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/WarehouseService.cs                                          |   85 
 WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8954ea78-c411-4744-b044-fa31a1aeb066.vsidx |    0 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseController/ApiBaseController.cs                                  |  171 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer.sln                                                             |  366 
 WIDESEA_WMSClient/src/components/basic/VolElementMenuChild.vue                                              |   56 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_RecordService/WIDESEA_RecordService.csproj                                |   13 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs                                            |   20 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/ConsoleHelper.cs                                              |   57 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/App.cs                                                               |  211 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Attributes/ValueChangeAttribute.cs                                   |   18 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderService.cs                                         |   24 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Authorization/AuthorizationResponse.cs                               |   46 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundLockInfo.cs                              |  112 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj                            |   18 
 WIDESEA_WMSClient/src/components/basic/ViewGrid/AuditHis.vue                                                |   46 
 WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/config/applicationhost.config                               | 1021 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IRecordService/IStockQuantityChangeRecordService.cs                       |   18 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Seed/DBContext.cs                                                    |  216 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/Logger.cs                                                  |  251 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Filter/ApiAuthorizeFilter.cs                                         |   95 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ICheckService/WIDESEA_ICheckService.csproj                                |   13 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_MenuService.cs                                          |  396 
 WIDESEA_WMSClient/src/components/basic/VolBox.vue                                                           |  200 
 WIDESEA_WMSClient/src/extension/inbound/purchaseOrderDetail.js                                              |   75 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Const/ErrorMsgConst.cs                                               |   15 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_CustomerInfo.cs                                     |   47 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs                                              |   27 
 WIDESEA_WMSClient/src/views/system/test.vue                                                                 |   18 
 WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGridAudit.vue                                           |  427 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs                             |  101 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_Warehouse.cs                                        |   59 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/EnableStatusEnum.cs                                   |   39 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/HttpRequestMiddleware.cs                                 |   25 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryListService.cs                              |   11 
 WIDESEA_WMSClient/src/router/index.js                                                                       |   82 
 WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGrid.vue                                                |  806 
 WIDESEA_WMSClient/src/extension/basic/extend/GetLocationStatus.vue                                          |  292 
 WIDESEA_WMSClient/src/extension/basic/warehouse.js                                                          |   77 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs                                        |   21 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/DB/MainDb.cs                                                         |   32 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITask_HtyService.cs                                      |   18 
 WIDESEA_WMSClient/src/extension/system/Sys_Dictionary.js                                                    |   65 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SqlsugarSetup.cs                                          |  150 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/LogLock.cs                                                 |   92 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs                            |   71 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderAddDTO.cs                                         |   79 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IOutboundService/WIDESEA_IOutboundService.csproj                          |   13 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Core/IConfigurableOptions.cs                                         |   12 
 WIDESEA_WMSClient/src/extension/inbound/inboundOrderDetail_Hty.js                                           |   75 
 WIDESEA_WMSClient/src/components/redirect/404.vue                                                           |   21 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_LogService.cs                                         |   14 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Dictionary.tsv               |  274 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/HostedService/SeedDataHostedService.cs                               |   63 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrderResult.cs                                 |   53 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail_Hty.cs                       |   42 
 WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js                                                   |   74 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/SwaggerMiddleware.cs                                     |   62 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/AutoMapperHelper.cs                                           |   23 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Filter/GlobalExceptionsFilter.cs                                     |   93 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICacheService.cs                                              |   60 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/WIDESEA_Core.csproj                                                  |   41 
 WIDESEA_WMSClient/src/views/basic/locationInfo.vue                                                          |  217 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/site.js                                              |    4 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Seed/FrameSeed.cs                                                    |  582 
 WIDESEA_WMSClient/src/extension/basic/materielInfo.js                                                       |   58 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Basic/SupplierDTO.cs                                                  |   79 
 WIDESEA_WMSClient/src/extension/basic/customerInfo.js                                                       |   68 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_AnalysisRuleConfig.cs                              |   65 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Menu.tsv                     |  716 
 WIDESEA_WMSClient/src/assets/script/common.js                                                               |    2 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/PalletCodeInfoService.cs                                     |   28 
 WIDESEA_WMSClient/public/wms_d.png                                                                          |    0 
 WIDESEA_WMSClient/src/extension/basic/extend/printView.vue                                                  |  122 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Attributes/ModelValidateAttribute.cs                                 |  109 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs                  |   20 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/WebResponseContent.cs                                     |   53 
 WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js                                                    |   58 
 WIDESEA_WMSClient/src/views/system/Sys_Role1.vue                                                            |   72 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Role.tsv                     |   15 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_RoleAuth.cs                                       |   48 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_UserService.cs                                          |  269 
 WIDESEA_WMSClient/src/components/basic/VolFormDraggable/options.js                                          |  226 
 WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js                                                     |   58 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Authorization/AuthorizationSetup.cs                                  |   67 
 WIDESEA_WMSClient/public/wcslogo.png                                                                        |    0 
 WIDESEA_WMSClient/src/extension/system/Sys_User.js                                                          |   87 
 WIDESEA_WMSClient/src/views/system/Sys_Log.vue                                                              |  157 
 WIDESEA_WMSClient/src/components/basic/UploadExcel.vue                                                      |  221 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Attributes/MethodParamsValidateAttribute.cs                          |   14 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Const/TenantConst.cs                                                 |   13 
 WIDESEA_WMSClient/src/views/Index.vue                                                                       |  836 
 WIDESEA_WMSClient/yarn.lock                                                                                 | 10203 +++++++
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/OtherEnum/SequenceEnum.cs                                          |   13 
 WIDESEA_WMSClient/src/assets/element-icon/fonts/element-icons.ttf                                           |    0 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetailService.cs                             |   17 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_RecordService/RecordService.cs                                            |   22 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs              |   23 
 WIDESEA_WMSClient/src/extension/outbound/extend/addMesOutOrder.vue                                          |  163 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Role.cs                                           |   54 
 WIDESEA_WMSClient/src/components/redirect/401.vue                                                           |   19 
 WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue                                                      |  370 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Enums/OperateTypeEnum.cs                                             |   19 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Seed/DBSeed.cs                                                       |  318 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_SystemService/WIDESEA_SystemService.csproj                                |   13 
 WIDESEA_WMSClient/src/views/basic/customerInfo.vue                                                          |   71 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/FileHelper.cs                                                 |  451 
 WIDESEA_WMSClient/src/components/basic/ViewGrid/serviceFilter.js                                            |  109 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IBasicService/IPalletCodeInfoService.cs                                   |   17 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs                 |   28 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IBasicService/IBasicService.cs                                            |   31 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/AutoMapperConfig.cs                                      |   18 
 WIDESEA_WMSClient/src/views/system/Sys_Role.vue                                                             |  220 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/UploadStatusEnum.cs                                     |   12 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs                                                |  983 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs                                          |   22 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs                        |   25 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Const/ConfigConst.cs                                                 |   64 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockInfo_HtyService.cs                                      |   20 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs                                 |   50 
 WIDESEA_WMSClient/src/extension/inbound/purchaseOrder.js                                                    |   58 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_TenantService.cs                                      |   19 
 WIDESEA_WMSClient/src/components/basic/VolFormDraggable/templateCode.js                                     |   95 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs                          |   26 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Tenant.cs                                         |   57 
 WIDESEA_WMSClient/src/extension/outbound/mesOutboundOrder.js                                                |  101 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrder_HtyService.cs                               |   17 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetail_HtyService.cs                           |   23 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_PalletCodeInfo.cs                                   |   41 
 WIDESEA_WMSClient/src/components/basic/AsyncLoading.vue                                                     |   10 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs                                    |   26 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_User.tsv                     |   29 
 WIDESEA_WMSClient/tests/unit/example.spec.js                                                                |   13 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/RuntimeExtension.cs                                           |   89 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/HttpContextExtension.cs                                   |   24 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.Development.json                                    |    8 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Attributes/SequenceAttirbute.cs                                      |   30 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/MaterielInfoController.cs                     |   27 
 WMS无仓储版/WIDESEA_WMSServer/.editorconfig                                                                     |    4 
 WIDESEA_WMSClient/src/components/basic/Icons.vue                                                            |  345 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetail_HtyService.cs                         |   15 
 WIDESEA_WMSClient/src/views/outbound/mesOutboundOrder.vue                                                   |  185 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetailService.cs                           |   22 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetail_HtyController.cs       |   24 
 WIDESEA_WMSClient/src/assets/script/extend.js                                                               |    5 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs                                   |   22 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/DbSetup.cs                                                |   24 
 WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue                                                        |  374 
 WIDESEA_WMSClient/src/views/basic/materielCodeInfo.vue                                                      |  229 
 WIDESEA_WMSClient/src/assets/script/testFormExtend.js                                                       |   15 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs                             |   89 
 WIDESEA_WMSClient/src/components/basic/ErrorMsg.vue                                                         |    3 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_RoleController.cs                        |   84 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_ApiInfo.cs                                          |   43 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/WIDESEA_Model.csproj                                                |   19 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/favicon.ico                                             |    0 
 WIDESEA_WMSClient/src/views/stock/stockView.vue                                                             |  392 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs                                        |   13 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/LocationInfoController.cs                     |   30 
 WIDESEA_WMSClient/src/App.vue                                                                               |   67 
 WIDESEA_WMSClient/src/assets/css/common.less                                                                |   75 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisCodeEnum.cs                                   |   29 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/JwtTokenAuthMiddleware.cs                                |   94 
 WIDESEA_WMSClient/src/components/basic/VolFormDraggable/DownloadForm.js                                     |  156 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs                                       |   65 
 WIDESEA_WMSClient/src/views/check/checkOrderResult.vue                                                      |   65 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_RecordService/StockQuantityChangeRecordService.cs                         |   19 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/RecyclingEnum.cs                                        |   31 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/WIDESEA_DTO.csproj                                                    |   14 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder_Hty.cs                               |   44 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/anime.min.js                                         |   33 
 WIDESEA_WMSClient/src/views/system/Permission.vue                                                           |  359 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpHelper.cs                                                 |  136 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Utilities/VierificationCode.cs                                       |  122 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs                                |   29 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs                   |   24 
 WIDESEA_WMSClient/public/static/login_bg.png                                                                |    0 
 WIDESEA_WMSClient/src/assets/imgs/wcs_x.png                                                                 |    0 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OrderCreateTypeEnum.cs                                   |   24 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs                                                 |  133 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs                                         |   38 
 WIDESEA_WMSClient/src/views/charts/bigdata/head_bg.png                                                      |    0 
 WIDESEA_WMSClient/src/extension/basic/roadwayInfo.js                                                        |   72 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Authorization/JwtHelper.cs                                           |  121 
 WIDESEA_WMSClient/src/views/system/Sys_Menu.vue                                                             |  672 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/System/RoleAuthor.cs                                         |   14 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Enums/EnumHelper.cs                                                  |  111 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderController.cs                       |   23 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/SecurityEncDecryptHelper.cs                                   |   93 
 WIDESEA_WMSClient/src/extension/basic/locationInfo.js                                                       |  103 
 WIDESEA_WMSClient/src/views/Login.vue                                                                       |  408 
 WIDESEA_WMSClient/src/assets/imgs/error-img.png                                                             |    0 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/BaseWarehouseEntity.cs                                     |   15 
 WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGridCustomColumn.vue                                    |   95 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetail_HtyService.cs                       |   19 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/IpLimitMiddleware.cs                                     |   40 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/css/swaggerdoc.css                                      |  109 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs                                        |  432 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisFormatTypeEnum.cs                             |   49 
 WIDESEA_WMSClient/src/extension/basic/supplierInfo.js                                                       |   69 
 WIDESEA_WMSClient/src/extension/basic/userInfo.js                                                           |   69 
 WIDESEA_WMSClient/src/views/basic/palletCodeInfo.vue                                                        |  159 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Filter/IFixedTokenFilter.cs                                          |   57 
 WIDESEA_WMSClient/src/api/permission.js                                                                     |   53 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj                                        |   87 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs                                        |  188 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderResultService.cs                                 |   15 
 WIDESEA_WMSClient/src/extension/record/locationStatusChangeRecord.js                                        |   61 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/MaterielCodeInfoController.cs                 |   17 
 WIDESEA_WMSClient/src/extension/check/checkOrder.js                                                         |   75 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ParamsValidator.cs                                         |   48 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/System/RoleNodes.cs                                          |   15 
 WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e11e475c-9a04-4eaf-9f0f-4065c716b0e2.vsidx |    0 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderAddDTO.cs                                       |   37 
 WIDESEA_WMSClient/src/views/system/Sys_User.vue                                                             |  369 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfo_HtyController.cs                    |   22 
 WIDESEA_WMSClient/src/views/index/Message.vue                                                               |  108 
 WIDESEA_WMSClient/src/components/redirect/coding.vue                                                        |   25 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/AllServicesMiddleware.cs                                 |   62 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielCodeInfoService.cs                                 |   16 
 WIDESEA_WMSClient/.gitignore                                                                                |   23 
 WIDESEA_WMSClient/src/views/index/MessageConfig.js                                                          |   28 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_CodeRuleConfig.cs                                  |   71 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/MiddlewareHelpers.cs                                     |   42 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_UserInfo.cs                                         |   61 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderService.cs                                       |   15 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail_Hty.cs                         |   42 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryListService.cs                                |   21 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Log.cs                                            |   83 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/CodeFormatTypeEnum.cs                                 |   51 
 WIDESEA_WMSClient/src/components/basic/VolHeader.vue                                                        |   67 
 WIDESEA_WMSClient/src/views/basic/userInfo.vue                                                              |   78 
 WIDESEA_WMSClient/src/api/http.js                                                                           |  324 
 WIDESEA_WMSClient/src/components/basic/RouterLoading.vue                                                    |  105 
 WIDESEA_WMSClient/.eslintrc.js                                                                              |   28 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Filter/ActionExecuteFilter.cs                                        |   23 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderResultController.cs                 |   22 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/DB/BaseDBConfig.cs                                                   |  121 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/WIDESEA_Common.csproj                                              |   15 
 WIDESEA_WMSClient/src/components/basic/VolFormDraggable/VolFormDraggable.vue                                | 1159 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageDataOptions.cs                                        |  153 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielTypeEnum.cs                                   |   34 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/logo.jpg.jpg                                            |    0 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/System/UserPermissions.cs                                             |   17 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_MenuService.cs                                        |   39 
 WIDESEA_WMSClient/src/extension/basic/extend/materielcodeprintView.vue                                      |  158 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/Permissions.cs                                            |   27 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ModelValidate.cs                                           |  239 
 WIDESEA_WMSClient/src/main.js                                                                               |   63 
 WIDESEA_WMSClient/src/views/index/index.less                                                                |  644 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs           |   24 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetailController.cs             |   22 
 WIDESEA_WMSClient/src/views/check/checkOrder.vue                                                            |  102 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs                                 |   86 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReceiveOrderEnum.cs                                      |   51 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Filter/UseServiceDIAttribute.cs                                      |   38 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderDetailAddDTO.cs                                   |   11 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Core/ConfigurableOptions.cs                                          |   66 
 WIDESEA_WMSClient/src/assets/logo.png                                                                       |    0 
 WIDESEA_WMSClient/src/components/basic/VolFormDraggable/index.js                                            |    3 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Dictionary.cs                                     |   81 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_RoleDataPermission.cs                             |   27 
 WIDESEA_WMSClient/src/views/basic/supplierInfo.vue                                                          |   82 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/index.html                                                      |  188 
 WIDESEA_WMSClient/src/extension/basic/palletCodeInfo.js                                                     |   79 
 WIDESEA_WMSClient/src/extension/inbound/inboundOrderDetail.js                                               |   58 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs                                      |   93 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/.config/dotnet-tools.json                                       |   12 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IStockService/WIDESEA_IStockService.csproj                                |   13 
 WIDESEA_WMSClient/babel.config.js                                                                           |    5 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrder.cs                                  |   77 
 WIDESEA_WMSClient/src/components/redirect/Message.vue                                                       |   39 
 WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue                                                        |  327 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/System/MenuDTO.cs                                                     |   14 
 WIDESEA_WMSClient/src/extension/taskinfo/task.js                                                            |   96 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/System/VueDictionaryDTO.cs                                            |   19 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/WhetherEnum.cs                                          |   24 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_DictionaryList.tsv           |  522 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs                              |   23 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetail_HtyService.cs                              |   11 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetail_HtyService.cs                                |   15 
 WIDESEA_WMSClient/src/extension/inbound/receiveOrder.js                                                     |   74 
 WIDESEA_WMSClient/src/extension/system/Sys_DictionaryList.js                                                |   22 
 WIDESEA_WMSClient/src/views/stock/stockInfo.vue                                                             |  154 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs                                         |  115 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IRecordService/WIDESEA_IRecordService.csproj                              |   13 
 WIDESEA_WMSClient/src/uitils/common.js                                                                      |  344 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs                                     |   55 
 WIDESEA_WMSClient/src/views/charts/formOptions.js                                                           |  148 
 WIDESEA_WMSClient/src/extension/check/checkOrderResult.js                                                   |   75 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderGetDTO.cs                                         |   14 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs                                    |  224 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_LocationInfo.cs                                     |   95 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageGridData.cs                                           |   26 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfo.cs                                        |   65 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrder_HtyController.cs               |   23 
 WIDESEA_WMSClient/src/views/charts/flex.vue                                                                 |  386 
 WIDESEA_WMSClient/vue.config.js                                                                             |   59 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_RecordService/LocationStatusChangeRecordService.cs                        |   16 
 WIDESEA_WMSClient/src/extension/basic/extend/palletCodeAdd.vue                                              |  170 
 WIDESEA_WMSClient/src/assets/imgs/wms_d.png                                                                 |    0 
 WIDESEA_WMSClient/src/components/basic/QuickSearch.vue                                                      |  152 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Caches/Caching.cs                                                    |  351 
 WIDESEA_WMSClient/src/views/system/Permission/RoleTree.vue                                                  |  152 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_SupplierInfo.cs                                     |   83 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_DictionaryList.cs                                 |   57 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_PalletTypeInfo.cs                                   |   89 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetail.cs                                  |  106 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/MesOutboundOrderType.cs                                  |   39 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/AutoMapperSetup.cs                                       |   16 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/jquery-3.3.1.min.js                                  |    2 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Task/WCSTaskDTO.cs                                                    |  104 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/CorsSetup.cs                                              |   56 
 WIDESEA_WMSClient/src/views/inbound/purchaseOrderDetail.vue                                                 |   67 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Enums/AuthorityScopeEnum.cs                                          |   41 
 WIDESEA_WMSClient/src/views/Home.vue                                                                        |   24 
 WIDESEA_WMSClient/src/extension/outbound/outboundOrder_Hty.js                                               |   75 
 WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue                                                |  221 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrder_HtyService.cs                                 |   30 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MemoryCacheSetup.cs                                       |   28 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/HostedService/PermissionDataHostService.cs                           |  200 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/WebSocketSetup.cs                                         |   32 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/PurchaseOrderEnum.cs                                     |   64 
 WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue                                          |  432 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj                              |   17 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Enums/LinqExpressionType.cs                                          |   21 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs                             |   20 
 WIDESEA_WMSClient/src/views/system/Sys_DictionaryList.vue                                                   |   65 
 WIDESEA_WMSClient/package-lock.json                                                                         | 14041 +++++++++
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_CheckService/WIDESEA_CheckService.csproj                                  |   13 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetail_HtyController.cs              |   22 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Basic/MatSerNumAnalysisModel.cs                                       |   59 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleAuthService.cs                                    |   16 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/LoginInfo.cs                                                        |   15 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfo_HtyService.cs                                    |   17 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Const/SqlDbTypeName.cs                                               |   29 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SwaggerSetup.cs                                           |  113 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielCodeInfoService.cs                                   |   26 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/CheckOrderEnum.cs                                        |   61 
 WIDESEA_WMSClient/src/views/charts/bigdata/IviewCircle.vue                                                  |  102 
 WIDESEA_WMSClient/src/api/useTest.js                                                                        |    9 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICaching.cs                                                   |   59 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs                                     |  128 
 WIDESEA_WMSClient/src/components/basic/VolFormDraggable/formTemplate.js                                     |  664 
 WIDESEA_WMSClient/config/buttons.js                                                                         |  185 
 WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue                                                       |  316 
 WIDESEA_WMSClient/src/extension/taskinfo/task_hty.js                                                        |   58 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs                                |   27 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/WIDESEA_ITaskInfoService.csproj                          |   13 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/ObjectExtension.cs                                            |   59 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs                                      |   18 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs                                              |   83 
 WIDESEA_WMSClient/src/assets/imgs/error.png                                                                 |    0 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/AppSettings.cs                                                |   89 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs                                        |  367 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_TenantService.cs                                        |   82 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Record/LocationStatusChangeRecordController.cs      |   23 
 WIDESEA_WMSClient/src/views/system/system/Sys_Department.vue                                                |   71 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OrderDetailStatusEnum.cs                                 |   52 
 WIDESEA_WMSClient/src/extension/inbound/inboundOrder_Hty.js                                                 |   75 
 WIDESEA_WMSClient/src/extension/system/Sys_Log.js                                                           |   26 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/ApplicationSetup.cs                                       |   28 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_ISystemService/WIDESEA_ISystemService.csproj                              |   13 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfo_Hty.cs                                    |   42 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetail_HtyService.cs                         |   19 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/swg-login.html                                          |  140 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IRecordService/IRecordService.cs                                          |   16 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail.cs                           |   87 
 WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue                                                           |  230 
 WIDESEA_WMSClient/src/components/basic/Audit.vue                                                            |   59 
 WIDESEA_WMSClient/src/assets/element-icon/icon.css                                                          |    1 
 WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/803b3a74-4766-45c3-8690-d090fa2f656d.vsidx |    0 
 WIDESEA_WMSClient/src/components/basic/ViewGrid/index.js                                                    |    7 
 WIDESEA_WMSClient/src/components/basic/VolFormDraggable/VolFormPreview.vue                                  |  206 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/IUser.cs                                             |   57 
 WIDESEA_WMSClient/src/components/basic/ViewGrid/props.js                                                    |   55 
 WIDESEA_WMSClient/README.md                                                                                 |   41 
 WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail_Hty.vue                                              |   71 
 WIDESEA_WMSClient/src/views/home/home-chart-options.js                                                      |  248 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                                            |   57 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs                                                    |   75 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_NodeTransition.cs                            |   41 
 WIDESEA_WMSClient/src/extension/system/Sys_User/Sys_UserGridHeader.vue                                      |   85 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs                                                      |  139 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielInfoService.cs                                     |   18 
 WIDESEA_WMSClient/src/views/charts/bigdata/chart-options.js                                                 |  551 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/RuleCodeEnum.cs                                       |   49 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWork.cs                             |   55 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs                                          |   21 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IStockService/IStockViewService.cs                                        |   18 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordService.cs                      |   18 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Menu.cs                                           |   81 
 WIDESEA_WMSClient/src/components/basic/VolTable/VolTableRender.js                                           |   14 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/RequestLogModel.cs                                         |   13 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderGetDTO.cs                                       |   15 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetail_Hty.cs                              |   42 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs                                          |  146 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_ApprovalFlow.cs                              |   41 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Tenants/ITenantEntity.cs                                             |   21 
 WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail_Hty.vue                                            |   71 
 WIDESEA_WMSClient/src/views/charts/bigdata.vue                                                              |  258 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/WIDESEA_StockService.csproj                                  |   14 
 WIDESEA_WMSClient/src/extension/system/Sys_Role1.js                                                         |   61 
 WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4e1a3361-060f-4df2-8128-844a7bbeba4f.vsidx |    0 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task_Hty.cs                                      |   44 
 WIDESEA_WMSClient/src/store/index.js                                                                        |   94 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs                                       |  157 
 WIDESEA_WMSClient/src/extension/inbound/receiveOrderDetail.js                                               |   75 
 WIDESEA_WMSClient/src/components/basic/ViewGrid/methods.js                                                  | 1684 +
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs                        |  157 
 WIDESEA_WMSClient/src/extension/system/Sys_Role.js                                                          |   49 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/System/DictionaryDTO.cs                                               |   29 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/WIDESEA_IInboundService.csproj                            |   13 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryListController.cs              |   19 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleService.cs                                          |  358 
 WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGrid.less                                               |  178 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Const/AppSecret.cs                                                   |   29 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_User.cs                                           |  127 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_RoleAuth.tsv                 |  167 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Const/CacheConst.cs                                                  |   94 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Attributes/CodeRuleAttribute.cs                                      |   20 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MiniProfilerSetup.cs                                      |   32 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/IDependency.cs                                                       |   12 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Helper/ExportHelper.cs                                               |  106 
 WIDESEA_WMSClient/src/components/redirect/RedirectError.vue                                                 |   59 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Tenants/TenantUtil.cs                                                |  127 
 WIDESEA_WMSClient/src/views/inbound/receiveOrderDetail.vue                                                  |   73 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Basic/LocationGroupDTO.cs                                             |   35 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json                                                |   34 
 WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue                                                  |  221 
 WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail_Hty.js                                         |   75 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs                                        |   11 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_LogService.cs                                           |   19 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/css/site.css                                            |   71 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs                                   |   92 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/SaveModel.cs                                              |   21 
 WIDESEA_WMSClient/public/index.html                                                                         |  136 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/IService.cs                                             |  123 
 WIDESEA_WMSClient/src/views/charts/chartOptions.js                                                          |  212 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs                                  |   11 
 WIDESEA_WMSClient/src/views/record/locationStatusChangeRecord.vue                                           |  207 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockChangeTypeEnum.cs                                   |   41 
 WIDESEA_WMSClient/src/extension/system/system/Sys_Department.js                                             |  152 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrder_HtyController.cs             |   24 
 WIDESEA_WMSClient/src/views/basic/materielInfo.vue                                                          |  226 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Const/TenantStatus.cs                                                |   14 
 WIDESEA_WMSClient/src/views/system/Sys_Dictionary.vue                                                       |  316 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockSelectViewDTO.cs                                           |   22 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs                                          |  101 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/DB/RepositorySetting.cs                                              |   53 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/BaseEntity.cs                                              |   82 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/IBaseHistoryEntity.cs                                      |   37 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Extensions/InitializationHostServiceSetup.cs                         |   28 
 WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1091.29919/CodeChunks.db               |    0 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/css/style.css                                           |  132 
 WIDESEA_WMSClient/src/extension/stock/stockInfoDetail_Hty.js                                                |   75 
 WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/443d58c7-94ca-4648-b692-1832b06c01bc.vsidx |    0 
 WIDESEA_WMSClient/public/webconfig.js                                                                       |    4 
 WIDESEA_WMSClient/src/views/basic/warehouse.vue                                                             |  182 
 WIDESEA_WMSClient/src/components/basic/Empty.vue                                                            |    3 
 WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/PDAController.cs                                    |  113 
 585 files changed, 85,154 insertions(+), 0 deletions(-)

diff --git a/WIDESEA_WMSClient/.eslintrc.js b/WIDESEA_WMSClient/.eslintrc.js
new file mode 100644
index 0000000..ab1a421
--- /dev/null
+++ b/WIDESEA_WMSClient/.eslintrc.js
@@ -0,0 +1,28 @@
+module.exports = {
+  root: true,
+  env: {
+    node: true
+  },
+  'extends': [
+    'plugin:vue/vue3-essential',
+    'eslint:recommended'
+  ],
+  parserOptions: {
+    parser: 'babel-eslint'
+  },
+  rules: {
+    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
+  },
+  overrides: [
+    {
+      files: [
+        '**/__tests__/*.{j,t}s?(x)',
+        '**/tests/unit/**/*.spec.{j,t}s?(x)'
+      ],
+      env: {
+        mocha: true
+      }
+    }
+  ]
+}
diff --git a/WIDESEA_WMSClient/.gitignore b/WIDESEA_WMSClient/.gitignore
new file mode 100644
index 0000000..403adbc
--- /dev/null
+++ b/WIDESEA_WMSClient/.gitignore
@@ -0,0 +1,23 @@
+.DS_Store
+node_modules
+/dist
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/WIDESEA_WMSClient/README.md b/WIDESEA_WMSClient/README.md
new file mode 100644
index 0000000..1d81700
--- /dev/null
+++ b/WIDESEA_WMSClient/README.md
@@ -0,0 +1,41 @@
+# vol.vue3
+
+## Project setup
+```
+npm install
+```
+
+### Compiles and hot-reloads for development
+```
+npm run serve
+```
+
+### Compiles and minifies for production
+```
+npm run build
+```
+
+### Run your unit tests
+```
+npm run test:unit
+```
+
+### Lints and fixes files
+```
+npm run lint
+```
+
+### Customize configuration
+See [Configuration Reference](https://cli.vuejs.org/config/).
+
+
+### npm run serve鍚姩寮傚父锛�
+    浣跨敤cmd杈撳叆node -v鏌ョ湅鐗堟湰锛屽鏋滄槸18.+鐗堟湰,璇峰皢package.json涓浜旇scripts涓殑鍐呭鏇挎崲涓猴細
+
+"scripts": {
+    "serve": " SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
+    "build": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
+    "test:unit": "vue-cli-service test:unit",
+    "lint": "vue-cli-service lint"
+}
+
diff --git a/WIDESEA_WMSClient/babel.config.js b/WIDESEA_WMSClient/babel.config.js
new file mode 100644
index 0000000..e955840
--- /dev/null
+++ b/WIDESEA_WMSClient/babel.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/cli-plugin-babel/preset'
+  ]
+}
diff --git a/WIDESEA_WMSClient/config/buttons.js b/WIDESEA_WMSClient/config/buttons.js
new file mode 100644
index 0000000..67c05e7
--- /dev/null
+++ b/WIDESEA_WMSClient/config/buttons.js
@@ -0,0 +1,185 @@
+
+let buttons = [{
+    name: "鏌� 璇�",
+    value: 'Search',
+    icon: 'el-icon-search',
+    class: '',
+    type: 'primary',
+    onClick: function () {
+        this.search();
+    }
+},
+{
+    name: "鏂� 寤�",
+    icon: 'el-icon-plus',
+    value: 'Add',
+    class: '',
+    //  plain:true,
+    type: 'success',
+    // plain:true,
+    onClick: function () {
+        this.add();
+    }
+},
+{
+    name: "缂� 杈�",
+    icon: 'el-icon-edit',
+    value: 'Update',
+    // plain:true,
+    class: '',
+    type: 'primary',
+    onClick: function () {
+        this.edit();
+    }
+},
+
+{
+    name: "鍒� 闄�",
+    icon: 'el-icon-delete',
+    class: '',
+    value: 'Delete',
+    type: 'danger',
+    onClick: function () {
+        this.del();
+    }
+},
+{
+    name: "瀹� 鏍�",
+    icon: 'el-icon-check',
+    class: '',
+    value: 'Audit',
+    plain: true,
+    type: 'primary',
+    onClick: function () {
+        this.audit();
+    }
+},
+{
+    name: "瀵� 鍏�",
+    icon: 'el-icon-top',
+    class: '',
+    type: 'success',
+    plain: true,
+    value: 'Import',
+    onClick: function () {
+        this.import();
+    }
+},
+{
+    name: "瀵� 鍑�",
+    icon: 'el-icon-bottom',
+    type: 'success',
+    plain: true,
+    value: 'Export',
+    onClick: function () {
+        this.export();
+    }
+},{
+    name: "鍚� 鐢�",
+    icon: '',
+    class: '',
+    value: 'Enable',
+    type: 'primary',
+    onClick: function () {
+    }
+},
+{
+    name: "绂� 鐢�",
+    icon: '',
+    class: '',
+    value: 'Disable',
+    type: 'danger',
+    onClick: function () {
+    }
+},
+{
+    name: "鎵� 鍔� 瀹� 鎴�",
+    icon: '',
+    class: '',
+    value: 'TaskHandCompleted',
+    onClick: function () {
+    }
+},
+{
+    name: "鍙� 娑� 浠� 鍔�",
+    icon: '',
+    class: '',
+    value: 'TaskHandCancel',
+    onClick: function () {
+    }
+},
+{
+    name: "浠诲姟鎭㈠",
+    icon: '',
+    class: '',
+    value: 'TaskRecovery',
+    type: 'danger',
+    onClick: function () {
+    }
+},
+{
+    name: "鏌ョ湅瀹屾暣璺敱",
+    icon: '',
+    class: '',
+    value: 'ViewAllRouter',
+    type: 'info',
+    onClick: function () {
+    }
+},
+{
+    name: "璺敱閰嶇疆",
+    icon: '',
+    class: '',
+    value: 'AddRouters',
+    type: 'success',
+    onClick: function () {
+    }
+},
+{
+    name: "鍥炴粴鍒颁笂涓�姝�",
+    icon: '',
+    class: '',
+    value: 'Previous',
+    type: 'danger',
+    onClick: function () {
+    }
+},
+{
+    name: "璺宠浆鍒颁笅涓�姝�",
+    icon: '',
+    class: '',
+    value: 'Next',
+    type: 'warning',
+    onClick: function () {
+    }
+},
+{
+    name: "鍒� 寤� 鍏� 搴� 鍗�",
+    icon: '',
+    class: '',
+    value: 'CreateInOrder',
+    type: 'success',
+    onClick: function () {
+    }
+},
+{
+    name: "鎸� 瀹� 搴� 瀛� 鍑� 搴�",
+    icon: '',
+    class: '',
+    value: 'StockOutbound',
+    type: 'success',
+    onClick: function () {
+    }
+},
+{
+    name: "鎵ц鍑哄簱",
+    icon: '',
+    class: '',
+    value: 'ExecuteOutbound',
+    type: 'success',
+    onClick: function () {
+    }
+},
+]
+
+export default buttons
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/package-lock.json b/WIDESEA_WMSClient/package-lock.json
new file mode 100644
index 0000000..71a1cc1
--- /dev/null
+++ b/WIDESEA_WMSClient/package-lock.json
@@ -0,0 +1,14041 @@
+{
+  "name": "wideseawcs",
+  "version": "0.1.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@achrinza/node-ipc": {
+      "version": "9.2.2",
+      "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.2.tgz",
+      "integrity": "sha512-b90U39dx0cU6emsOvy5hxU4ApNXnE3+Tuo8XQZfiKTGelDwpMwBVgBP7QX6dGTcJgu/miyJuNJ/2naFBliNWEw==",
+      "dev": true,
+      "requires": {
+        "@node-ipc/js-queue": "2.0.3",
+        "event-pubsub": "4.3.0",
+        "js-message": "1.0.7"
+      }
+    },
+    "@babel/code-frame": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.14.5.tgz",
+      "integrity": "sha1-I7CNdA6D9JxeWZRfvxtD6Au/Tts=",
+      "dev": true,
+      "requires": {
+        "@babel/highlight": "^7.14.5"
+      }
+    },
+    "@babel/compat-data": {
+      "version": "7.14.7",
+      "resolved": "https://registry.nlark.com/@babel/compat-data/download/@babel/compat-data-7.14.7.tgz",
+      "integrity": "sha1-ewR9ejqJpn0iWNxh9gTwmPG8fgg=",
+      "dev": true
+    },
+    "@babel/core": {
+      "version": "7.14.6",
+      "resolved": "https://registry.nlark.com/@babel/core/download/@babel/core-7.14.6.tgz",
+      "integrity": "sha1-4IFOwalQAy/xbBOich3jmoQW/Ks=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.14.5",
+        "@babel/generator": "^7.14.5",
+        "@babel/helper-compilation-targets": "^7.14.5",
+        "@babel/helper-module-transforms": "^7.14.5",
+        "@babel/helpers": "^7.14.6",
+        "@babel/parser": "^7.14.6",
+        "@babel/template": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5",
+        "convert-source-map": "^1.7.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.1.2",
+        "semver": "^6.3.0",
+        "source-map": "^0.5.0"
+      }
+    },
+    "@babel/generator": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.14.5.tgz",
+      "integrity": "sha1-hI17nwMcrKnQzQrwGwY/Im9S14U=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.5",
+        "jsesc": "^2.5.1",
+        "source-map": "^0.5.0"
+      }
+    },
+    "@babel/helper-annotate-as-pure": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.14.5.tgz",
+      "integrity": "sha1-e/R47Dtxcm1WqMpXdbBG/CmHnmE=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-builder-binary-assignment-operator-visitor": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz?cache=0&sync_timestamp=1623280539341&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor%2Fdownload%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor-7.14.5.tgz",
+      "integrity": "sha1-uTm0P4w3dlRDoZrnStixWXjgoZE=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-explode-assignable-expression": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-compilation-targets": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.14.5.tgz?cache=0&sync_timestamp=1623280514256&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.14.5.tgz",
+      "integrity": "sha1-epnF0JZ5Eely/iw0EffVtJhJjs8=",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.14.5",
+        "@babel/helper-validator-option": "^7.14.5",
+        "browserslist": "^4.16.6",
+        "semver": "^6.3.0"
+      }
+    },
+    "@babel/helper-create-class-features-plugin": {
+      "version": "7.14.6",
+      "resolved": "https://registry.nlark.com/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.14.6.tgz",
+      "integrity": "sha1-8RRGm2wG+LXFnGxOdGIfUIU2JUI=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.14.5",
+        "@babel/helper-function-name": "^7.14.5",
+        "@babel/helper-member-expression-to-functions": "^7.14.5",
+        "@babel/helper-optimise-call-expression": "^7.14.5",
+        "@babel/helper-replace-supers": "^7.14.5",
+        "@babel/helper-split-export-declaration": "^7.14.5"
+      }
+    },
+    "@babel/helper-create-regexp-features-plugin": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.14.5.tgz",
+      "integrity": "sha1-x9WsXpz2IcJgV3Ivt6ikxYiTWMQ=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.14.5",
+        "regexpu-core": "^4.7.1"
+      }
+    },
+    "@babel/helper-define-polyfill-provider": {
+      "version": "0.2.3",
+      "resolved": "https://registry.nlark.com/@babel/helper-define-polyfill-provider/download/@babel/helper-define-polyfill-provider-0.2.3.tgz?cache=0&sync_timestamp=1622025430652&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-define-polyfill-provider%2Fdownload%2F%40babel%2Fhelper-define-polyfill-provider-0.2.3.tgz",
+      "integrity": "sha1-BSXt7FCUZTooJojTTYRuTHXpwLY=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-compilation-targets": "^7.13.0",
+        "@babel/helper-module-imports": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/traverse": "^7.13.0",
+        "debug": "^4.1.1",
+        "lodash.debounce": "^4.0.8",
+        "resolve": "^1.14.2",
+        "semver": "^6.1.2"
+      }
+    },
+    "@babel/helper-explode-assignable-expression": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.14.5.tgz",
+      "integrity": "sha1-iqcucIIFx7tkPkXHO0OGzfKh9kU=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-function-name": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-function-name/download/@babel/helper-function-name-7.14.5.tgz?cache=0&sync_timestamp=1623280544273&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.14.5.tgz",
+      "integrity": "sha1-ieLEdJcvFdjiM7Uu6MSA4s/NUMQ=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-get-function-arity": "^7.14.5",
+        "@babel/template": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-get-function-arity": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.14.5.tgz",
+      "integrity": "sha1-Jfv6V5sJN+7h87gF7OTOOYxDGBU=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-hoist-variables": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.14.5.tgz",
+      "integrity": "sha1-4N0nwzp45XfXyIhJFqPn7x98f40=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-member-expression-to-functions": {
+      "version": "7.14.7",
+      "resolved": "https://registry.nlark.com/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.14.7.tgz",
+      "integrity": "sha1-l+ViRL65QhH+J3vYGOOjKcZveXA=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-module-imports": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.14.5.tgz",
+      "integrity": "sha1-bRpE32o4yVeqfDEtoHZCnxG0IvM=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-module-transforms": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.14.5.tgz?cache=0&sync_timestamp=1623280540631&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.14.5.tgz",
+      "integrity": "sha1-feQvENeJtCPrkC69JAMcp3yx4Q4=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.14.5",
+        "@babel/helper-replace-supers": "^7.14.5",
+        "@babel/helper-simple-access": "^7.14.5",
+        "@babel/helper-split-export-declaration": "^7.14.5",
+        "@babel/helper-validator-identifier": "^7.14.5",
+        "@babel/template": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-optimise-call-expression": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.14.5.tgz",
+      "integrity": "sha1-8nOVqGGeBmWz8DZM3bQcJdcbSZw=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-plugin-utils": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.14.5.tgz",
+      "integrity": "sha1-WsgizpfuxGdBq3ClF5ceRDpwxak=",
+      "dev": true
+    },
+    "@babel/helper-remap-async-to-generator": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.14.5.tgz?cache=0&sync_timestamp=1623280541106&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-remap-async-to-generator%2Fdownload%2F%40babel%2Fhelper-remap-async-to-generator-7.14.5.tgz",
+      "integrity": "sha1-UUOckTYSlY9UqYek/8nuWHogRdY=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.14.5",
+        "@babel/helper-wrap-function": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-replace-supers": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.14.5.tgz?cache=0&sync_timestamp=1623280539767&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.14.5.tgz",
+      "integrity": "sha1-DswLA8Qc1We0Ak6gFhNMKEFKu5Q=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-member-expression-to-functions": "^7.14.5",
+        "@babel/helper-optimise-call-expression": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-simple-access": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-simple-access/download/@babel/helper-simple-access-7.14.5.tgz",
+      "integrity": "sha1-ZuqFz1O6C05Yi6d/yBP1OryqQcQ=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.14.5.tgz",
+      "integrity": "sha1-lvSGrAUMqfRLAJ++W305TKs6DuQ=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-split-export-declaration": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.14.5.tgz?cache=0&sync_timestamp=1623280535830&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.14.5.tgz",
+      "integrity": "sha1-IrI6VO9RwrdgXYUZMMGXbdC8aTo=",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helper-validator-identifier": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.14.5.tgz",
+      "integrity": "sha1-0PDid8US4Mk4J3+qhaOWjJpEwOg=",
+      "dev": true
+    },
+    "@babel/helper-validator-option": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-validator-option/download/@babel/helper-validator-option-7.14.5.tgz",
+      "integrity": "sha1-bnKh//GNXfy4eOHmLxoCHEty1aM=",
+      "dev": true
+    },
+    "@babel/helper-wrap-function": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.14.5.tgz?cache=0&sync_timestamp=1623280540387&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-wrap-function%2Fdownload%2F%40babel%2Fhelper-wrap-function-7.14.5.tgz",
+      "integrity": "sha1-WRnRFb8P4yi4pdY7y2EPUWAfK/8=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "^7.14.5",
+        "@babel/template": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/helpers": {
+      "version": "7.14.6",
+      "resolved": "https://registry.nlark.com/@babel/helpers/download/@babel/helpers-7.14.6.tgz",
+      "integrity": "sha1-W1gwa5XxtH4qAZlDT6hlj6bCFjU=",
+      "dev": true,
+      "requires": {
+        "@babel/template": "^7.14.5",
+        "@babel/traverse": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/highlight/download/@babel/highlight-7.14.5.tgz",
+      "integrity": "sha1-aGGlLwOWZAUAH2qlNKAaJNmejNk=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-validator-identifier": "^7.14.5",
+        "chalk": "^2.0.0",
+        "js-tokens": "^4.0.0"
+      }
+    },
+    "@babel/parser": {
+      "version": "7.18.11",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.11.tgz",
+      "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ=="
+    },
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz",
+      "integrity": "sha1-S0ZzAuFUjtOxvkO+rizJz0Xgu34=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5",
+        "@babel/plugin-proposal-optional-chaining": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-async-generator-functions": {
+      "version": "7.14.7",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.14.7.tgz",
+      "integrity": "sha1-eEpIw9jtBz9lrc8wtXvL9sgRms4=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-remap-async-to-generator": "^7.14.5",
+        "@babel/plugin-syntax-async-generators": "^7.8.4"
+      }
+    },
+    "@babel/plugin-proposal-class-properties": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.14.5.tgz?cache=0&sync_timestamp=1623280542725&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-class-properties%2Fdownload%2F%40babel%2Fplugin-proposal-class-properties-7.14.5.tgz",
+      "integrity": "sha1-QNHuFAxbHjGjUPT17tlFCWVZtC4=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-class-static-block": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.14.5.tgz",
+      "integrity": "sha1-FY6eENRJw4Se8+zelKA9nxhBtoE=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-decorators": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.14.5.tgz?cache=0&sync_timestamp=1623280534359&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-decorators%2Fdownload%2F%40babel%2Fplugin-proposal-decorators-7.14.5.tgz",
+      "integrity": "sha1-WbxN/B1mW1pnSc95j/Qil+0bLB0=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-decorators": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-dynamic-import": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.14.5.tgz",
+      "integrity": "sha1-DGYX30YcDB+P/ztHzVl3I2AQHSw=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-export-namespace-from": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.14.5.tgz",
+      "integrity": "sha1-260kQxDObM0IMHIWfYzqg6Uvr3Y=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-json-strings": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.14.5.tgz",
+      "integrity": "sha1-ON5g2zYug6PYyUSshY3fnwwiOes=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-json-strings": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-logical-assignment-operators": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.14.5.tgz",
+      "integrity": "sha1-bmIpwqmbAqspFfglceDMZGpAxzg=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+      }
+    },
+    "@babel/plugin-proposal-nullish-coalescing-operator": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz",
+      "integrity": "sha1-7jhYnOAOLMWbKZ7D6kBvzToP2vY=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-numeric-separator": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.14.5.tgz",
+      "integrity": "sha1-g2Mb8z2aUd8YTCECoGmsDFjAXxg=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+      }
+    },
+    "@babel/plugin-proposal-object-rest-spread": {
+      "version": "7.14.7",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.14.7.tgz",
+      "integrity": "sha1-WSCis99/eQHfAgWXTAZBsT/Z02M=",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.14.7",
+        "@babel/helper-compilation-targets": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-transform-parameters": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-optional-catch-binding": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.14.5.tgz",
+      "integrity": "sha1-k53W7d7/Omf997PwRLU0cmJZjDw=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-optional-chaining": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.14.5.tgz?cache=0&sync_timestamp=1623281177929&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-optional-chaining%2Fdownload%2F%40babel%2Fplugin-proposal-optional-chaining-7.14.5.tgz",
+      "integrity": "sha1-+oNlHmCjYOPxN5fu8AuNUZaVtgM=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+      }
+    },
+    "@babel/plugin-proposal-private-methods": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.14.5.tgz",
+      "integrity": "sha1-N0RklZlrKUXzD1vltg1eKqT1eS0=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-private-property-in-object": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.14.5.tgz",
+      "integrity": "sha1-n2Wk0Ek6lAtMAfiqnT8YlKWH9jY=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.14.5",
+        "@babel/helper-create-class-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+      }
+    },
+    "@babel/plugin-proposal-unicode-property-regex": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.14.5.tgz?cache=0&sync_timestamp=1623280542681&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-unicode-property-regex%2Fdownload%2F%40babel%2Fplugin-proposal-unicode-property-regex-7.14.5.tgz",
+      "integrity": "sha1-D5XuDnV6XWR/N42qDsp+k/qou+g=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-async-generators": {
+      "version": "7.8.4",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz",
+      "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-class-properties": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz",
+      "integrity": "sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-syntax-class-static-block": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-class-static-block/download/@babel/plugin-syntax-class-static-block-7.14.5.tgz",
+      "integrity": "sha1-GV34mxRrS3izv4l/16JXyEZZ1AY=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-decorators": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.14.5.tgz",
+      "integrity": "sha1-6vucDL4JyK/rlkujp7vWOUWnLyA=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-dynamic-import": {
+      "version": "7.8.3",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz?cache=0&sync_timestamp=1618847125283&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-syntax-dynamic-import%2Fdownload%2F%40babel%2Fplugin-syntax-dynamic-import-7.8.3.tgz",
+      "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-export-namespace-from": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz",
+      "integrity": "sha1-AolkqbqA28CUyRXEh618TnpmRlo=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.3"
+      }
+    },
+    "@babel/plugin-syntax-json-strings": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz",
+      "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-jsx": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.14.5.tgz?cache=0&sync_timestamp=1623280667234&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-syntax-jsx%2Fdownload%2F%40babel%2Fplugin-syntax-jsx-7.14.5.tgz",
+      "integrity": "sha1-AA4uJdhnPM5JMAUXo+2kTCY+QgE=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-logical-assignment-operators": {
+      "version": "7.10.4",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+      "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-nullish-coalescing-operator": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+      "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-numeric-separator": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz",
+      "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-object-rest-spread": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz",
+      "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-optional-catch-binding": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+      "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-optional-chaining": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz",
+      "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-private-property-in-object": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-private-property-in-object/download/@babel/plugin-syntax-private-property-in-object-7.14.5.tgz",
+      "integrity": "sha1-DcZnHsDqIrbpShEU+FeXDNOd4a0=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-top-level-await": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.14.5.tgz",
+      "integrity": "sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-arrow-functions": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.14.5.tgz",
+      "integrity": "sha1-9xh9lYinaN0IC/TJ/+EX6mL3hio=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-async-to-generator": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.14.5.tgz?cache=0&sync_timestamp=1623280543644&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-async-to-generator%2Fdownload%2F%40babel%2Fplugin-transform-async-to-generator-7.14.5.tgz",
+      "integrity": "sha1-cseJCE2PIJSsuUVjOUPvhEPTnmc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-remap-async-to-generator": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.14.5.tgz",
+      "integrity": "sha1-5IZB2ZnUvBV6Z+8zautUvET9OtQ=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-block-scoping": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.14.5.tgz",
+      "integrity": "sha1-jMY+YeUPQuB45vCb53WnXyPvmTk=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-classes": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.14.5.tgz?cache=0&sync_timestamp=1623280541378&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.14.5.tgz",
+      "integrity": "sha1-DpjoIJezhVCwO0g/m1GnjeCsss8=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.14.5",
+        "@babel/helper-function-name": "^7.14.5",
+        "@babel/helper-optimise-call-expression": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-replace-supers": "^7.14.5",
+        "@babel/helper-split-export-declaration": "^7.14.5",
+        "globals": "^11.1.0"
+      }
+    },
+    "@babel/plugin-transform-computed-properties": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.14.5.tgz",
+      "integrity": "sha1-G514mHQg0RIj1BGVRhzEO5dLIE8=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-destructuring": {
+      "version": "7.14.7",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.14.7.tgz",
+      "integrity": "sha1-CtWO034j4iCE0QnxhSYINeVVdXY=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-dotall-regex": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.14.5.tgz?cache=0&sync_timestamp=1623280544588&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-dotall-regex%2Fdownload%2F%40babel%2Fplugin-transform-dotall-regex-7.14.5.tgz",
+      "integrity": "sha1-L2v3bka9+AQ7Tn4WzyRTJim6DHo=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-duplicate-keys": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.14.5.tgz",
+      "integrity": "sha1-NlpIRIgb3xUB46nwJw5/D5EXeVQ=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.14.5.tgz?cache=0&sync_timestamp=1623280545524&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-exponentiation-operator%2Fdownload%2F%40babel%2Fplugin-transform-exponentiation-operator-7.14.5.tgz",
+      "integrity": "sha1-UVS43Wo9/m2Qkj1hckvT3uuQtJM=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-for-of": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.14.5.tgz",
+      "integrity": "sha1-2uOEYT3o93wZaohpy/YCpE9/wOs=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-function-name": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.14.5.tgz?cache=0&sync_timestamp=1623280538359&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-function-name%2Fdownload%2F%40babel%2Fplugin-transform-function-name-7.14.5.tgz",
+      "integrity": "sha1-6Bxl7LkAdG1/MYAva+0fUtkV1vI=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-literals": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.14.5.tgz",
+      "integrity": "sha1-QdBsf/XU0J489Fh70+zzkwxzD3g=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-member-expression-literals": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.14.5.tgz",
+      "integrity": "sha1-s5zVISor8jWmF9Mg7CtIvMCRuKc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-modules-amd": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.14.5.tgz?cache=0&sync_timestamp=1623280543412&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.14.5.tgz",
+      "integrity": "sha1-T9nOfjQRy4uDhISAtwQdgwBIWPc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
+      }
+    },
+    "@babel/plugin-transform-modules-commonjs": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.14.5.tgz?cache=0&sync_timestamp=1623280545201&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-commonjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-commonjs-7.14.5.tgz",
+      "integrity": "sha1-eq7g6pgoPelNqYso+MNXAUKdrZc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-simple-access": "^7.14.5",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
+      }
+    },
+    "@babel/plugin-transform-modules-systemjs": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.14.5.tgz?cache=0&sync_timestamp=1623280544915&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.14.5.tgz",
+      "integrity": "sha1-x1NC74sw3N5CldNAGq4k5lY47Sk=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-hoist-variables": "^7.14.5",
+        "@babel/helper-module-transforms": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-validator-identifier": "^7.14.5",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
+      }
+    },
+    "@babel/plugin-transform-modules-umd": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.14.5.tgz?cache=0&sync_timestamp=1623280545520&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-umd%2Fdownload%2F%40babel%2Fplugin-transform-modules-umd-7.14.5.tgz",
+      "integrity": "sha1-+2Yt/uaXzOJ0p82lJRkKeQlqpuA=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.14.7",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.14.7.tgz",
+      "integrity": "sha1-YMBokqz53yMeJWwkRkv+ywkI/U4=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-new-target": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.14.5.tgz",
+      "integrity": "sha1-Mb2ui5JdyEB26/zSqZQBQ67X2/g=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-object-super": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.14.5.tgz?cache=0&sync_timestamp=1623280540862&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-object-super%2Fdownload%2F%40babel%2Fplugin-transform-object-super-7.14.5.tgz",
+      "integrity": "sha1-0LX66snphZehYanPeMUn7ZNM3EU=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-replace-supers": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-parameters": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.14.5.tgz",
+      "integrity": "sha1-SWYuhqHz3cysY2On37H/ChWK/rM=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-property-literals": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.14.5.tgz",
+      "integrity": "sha1-DduqH4PbNgbxzfSEb6HftHNFizQ=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-regenerator": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.14.5.tgz",
+      "integrity": "sha1-lnb9VwftKPUicnxbPAqoVERAsE8=",
+      "dev": true,
+      "requires": {
+        "regenerator-transform": "^0.14.2"
+      }
+    },
+    "@babel/plugin-transform-reserved-words": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.14.5.tgz",
+      "integrity": "sha1-xEWJtmHP2++NQwDcx0ad/6kvgwQ=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-runtime": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.14.5.tgz?cache=0&sync_timestamp=1623280540797&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-runtime%2Fdownload%2F%40babel%2Fplugin-transform-runtime-7.14.5.tgz",
+      "integrity": "sha1-MEkdrUnGBZ+Pj6XuiJagCJ6YdSM=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "babel-plugin-polyfill-corejs2": "^0.2.2",
+        "babel-plugin-polyfill-corejs3": "^0.2.2",
+        "babel-plugin-polyfill-regenerator": "^0.2.2",
+        "semver": "^6.3.0"
+      }
+    },
+    "@babel/plugin-transform-shorthand-properties": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.14.5.tgz",
+      "integrity": "sha1-l/E4VfFAkzjYyty6ymcK154JGlg=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-spread": {
+      "version": "7.14.6",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.14.6.tgz",
+      "integrity": "sha1-a9QOV/596UqpBIUZY7VhZlL3MUQ=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-sticky-regex": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.14.5.tgz",
+      "integrity": "sha1-W2F1Qmdei3dhKUOB88KMYz9Arrk=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-template-literals": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.14.5.tgz",
+      "integrity": "sha1-pfK8Izk32EU4hdxza92Nn/q/PZM=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-typeof-symbol": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.14.5.tgz",
+      "integrity": "sha1-Oa8nOemJor0pG/a1PxaYFCPUV9Q=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-unicode-escapes": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.14.5.tgz",
+      "integrity": "sha1-nUvSpoHjxdes9PV/qeURddkdDGs=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-unicode-regex": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.14.5.tgz?cache=0&sync_timestamp=1623280536838&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-unicode-regex%2Fdownload%2F%40babel%2Fplugin-transform-unicode-regex-7.14.5.tgz",
+      "integrity": "sha1-TNCbbIQl3YElXHzrP7GDbnQUOC4=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/preset-env": {
+      "version": "7.14.7",
+      "resolved": "https://registry.nlark.com/@babel/preset-env/download/@babel/preset-env-7.14.7.tgz?cache=0&sync_timestamp=1624313309952&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.14.7.tgz",
+      "integrity": "sha1-XHCyLUwtiTsD2MiGpcF0IlArkyo=",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.14.7",
+        "@babel/helper-compilation-targets": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-validator-option": "^7.14.5",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5",
+        "@babel/plugin-proposal-async-generator-functions": "^7.14.7",
+        "@babel/plugin-proposal-class-properties": "^7.14.5",
+        "@babel/plugin-proposal-class-static-block": "^7.14.5",
+        "@babel/plugin-proposal-dynamic-import": "^7.14.5",
+        "@babel/plugin-proposal-export-namespace-from": "^7.14.5",
+        "@babel/plugin-proposal-json-strings": "^7.14.5",
+        "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5",
+        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5",
+        "@babel/plugin-proposal-numeric-separator": "^7.14.5",
+        "@babel/plugin-proposal-object-rest-spread": "^7.14.7",
+        "@babel/plugin-proposal-optional-catch-binding": "^7.14.5",
+        "@babel/plugin-proposal-optional-chaining": "^7.14.5",
+        "@babel/plugin-proposal-private-methods": "^7.14.5",
+        "@babel/plugin-proposal-private-property-in-object": "^7.14.5",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.14.5",
+        "@babel/plugin-syntax-async-generators": "^7.8.4",
+        "@babel/plugin-syntax-class-properties": "^7.12.13",
+        "@babel/plugin-syntax-class-static-block": "^7.14.5",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+        "@babel/plugin-syntax-json-strings": "^7.8.3",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+        "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+        "@babel/plugin-syntax-top-level-await": "^7.14.5",
+        "@babel/plugin-transform-arrow-functions": "^7.14.5",
+        "@babel/plugin-transform-async-to-generator": "^7.14.5",
+        "@babel/plugin-transform-block-scoped-functions": "^7.14.5",
+        "@babel/plugin-transform-block-scoping": "^7.14.5",
+        "@babel/plugin-transform-classes": "^7.14.5",
+        "@babel/plugin-transform-computed-properties": "^7.14.5",
+        "@babel/plugin-transform-destructuring": "^7.14.7",
+        "@babel/plugin-transform-dotall-regex": "^7.14.5",
+        "@babel/plugin-transform-duplicate-keys": "^7.14.5",
+        "@babel/plugin-transform-exponentiation-operator": "^7.14.5",
+        "@babel/plugin-transform-for-of": "^7.14.5",
+        "@babel/plugin-transform-function-name": "^7.14.5",
+        "@babel/plugin-transform-literals": "^7.14.5",
+        "@babel/plugin-transform-member-expression-literals": "^7.14.5",
+        "@babel/plugin-transform-modules-amd": "^7.14.5",
+        "@babel/plugin-transform-modules-commonjs": "^7.14.5",
+        "@babel/plugin-transform-modules-systemjs": "^7.14.5",
+        "@babel/plugin-transform-modules-umd": "^7.14.5",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7",
+        "@babel/plugin-transform-new-target": "^7.14.5",
+        "@babel/plugin-transform-object-super": "^7.14.5",
+        "@babel/plugin-transform-parameters": "^7.14.5",
+        "@babel/plugin-transform-property-literals": "^7.14.5",
+        "@babel/plugin-transform-regenerator": "^7.14.5",
+        "@babel/plugin-transform-reserved-words": "^7.14.5",
+        "@babel/plugin-transform-shorthand-properties": "^7.14.5",
+        "@babel/plugin-transform-spread": "^7.14.6",
+        "@babel/plugin-transform-sticky-regex": "^7.14.5",
+        "@babel/plugin-transform-template-literals": "^7.14.5",
+        "@babel/plugin-transform-typeof-symbol": "^7.14.5",
+        "@babel/plugin-transform-unicode-escapes": "^7.14.5",
+        "@babel/plugin-transform-unicode-regex": "^7.14.5",
+        "@babel/preset-modules": "^0.1.4",
+        "@babel/types": "^7.14.5",
+        "babel-plugin-polyfill-corejs2": "^0.2.2",
+        "babel-plugin-polyfill-corejs3": "^0.2.2",
+        "babel-plugin-polyfill-regenerator": "^0.2.2",
+        "core-js-compat": "^3.15.0",
+        "semver": "^6.3.0"
+      }
+    },
+    "@babel/preset-modules": {
+      "version": "0.1.4",
+      "resolved": "https://registry.nlark.com/@babel/preset-modules/download/@babel/preset-modules-0.1.4.tgz",
+      "integrity": "sha1-Ni8raMZihClw/bXiVP/I/BwuQV4=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+        "@babel/plugin-transform-dotall-regex": "^7.4.4",
+        "@babel/types": "^7.4.4",
+        "esutils": "^2.0.2"
+      }
+    },
+    "@babel/runtime": {
+      "version": "7.14.6",
+      "resolved": "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.14.6.tgz",
+      "integrity": "sha1-U1IDvAiS78fexgvcJ7Ls9uQJBi0=",
+      "dev": true,
+      "requires": {
+        "regenerator-runtime": "^0.13.4"
+      }
+    },
+    "@babel/runtime-corejs2": {
+      "version": "7.14.6",
+      "resolved": "https://registry.nlark.com/@babel/runtime-corejs2/download/@babel/runtime-corejs2-7.14.6.tgz",
+      "integrity": "sha1-5dOhpaCPRJhzTdNwGvT9GN2Gd7U=",
+      "dev": true,
+      "requires": {
+        "core-js": "^2.6.5",
+        "regenerator-runtime": "^0.13.4"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.6.12",
+          "resolved": "https://registry.nlark.com/core-js/download/core-js-2.6.12.tgz?cache=0&sync_timestamp=1624966012065&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-js%2Fdownload%2Fcore-js-2.6.12.tgz",
+          "integrity": "sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw=",
+          "dev": true
+        }
+      }
+    },
+    "@babel/template": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/template/download/@babel/template-7.14.5.tgz?cache=0&sync_timestamp=1623280543555&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.14.5.tgz",
+      "integrity": "sha1-qbydizM1T/blWpxg0RCSAKaJdPQ=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.14.5",
+        "@babel/parser": "^7.14.5",
+        "@babel/types": "^7.14.5"
+      }
+    },
+    "@babel/traverse": {
+      "version": "7.14.7",
+      "resolved": "https://registry.nlark.com/@babel/traverse/download/@babel/traverse-7.14.7.tgz?cache=0&sync_timestamp=1624313310223&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.14.7.tgz",
+      "integrity": "sha1-ZAB8l3TP3Dq9I7B4C8GKPONjF1M=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.14.5",
+        "@babel/generator": "^7.14.5",
+        "@babel/helper-function-name": "^7.14.5",
+        "@babel/helper-hoist-variables": "^7.14.5",
+        "@babel/helper-split-export-declaration": "^7.14.5",
+        "@babel/parser": "^7.14.7",
+        "@babel/types": "^7.14.5",
+        "debug": "^4.1.0",
+        "globals": "^11.1.0"
+      }
+    },
+    "@babel/types": {
+      "version": "7.14.5",
+      "resolved": "https://registry.nlark.com/@babel/types/download/@babel/types-7.14.5.tgz",
+      "integrity": "sha1-O7mXuoKaIQTO2yBonEpbgSHTg/8=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-validator-identifier": "^7.14.5",
+        "to-fast-properties": "^2.0.0"
+      }
+    },
+    "@ctrl/tinycolor": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz",
+      "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw=="
+    },
+    "@element-plus/icons-vue": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz",
+      "integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA=="
+    },
+    "@floating-ui/core": {
+      "version": "0.7.3",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-0.7.3.tgz",
+      "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg=="
+    },
+    "@floating-ui/dom": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-0.5.4.tgz",
+      "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==",
+      "requires": {
+        "@floating-ui/core": "^0.7.3"
+      }
+    },
+    "@hapi/address": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-2.1.4.tgz",
+      "integrity": "sha1-XWftQ/P9QaadS5/3tW58DR0KgeU=",
+      "dev": true
+    },
+    "@hapi/bourne": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npm.taobao.org/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz",
+      "integrity": "sha1-CnCVreoGckPOMoPhtWuKj0U7JCo=",
+      "dev": true
+    },
+    "@hapi/hoek": {
+      "version": "8.5.1",
+      "resolved": "https://registry.nlark.com/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz",
+      "integrity": "sha1-/elgZMpEbeyMVajC8TCVewcMbgY=",
+      "dev": true
+    },
+    "@hapi/joi": {
+      "version": "15.1.1",
+      "resolved": "https://registry.npm.taobao.org/@hapi/joi/download/@hapi/joi-15.1.1.tgz",
+      "integrity": "sha1-xnW4pxKW8Cgz+NbSQ7NMV7jOGdc=",
+      "dev": true,
+      "requires": {
+        "@hapi/address": "2.x.x",
+        "@hapi/bourne": "1.x.x",
+        "@hapi/hoek": "8.x.x",
+        "@hapi/topo": "3.x.x"
+      }
+    },
+    "@hapi/topo": {
+      "version": "3.1.6",
+      "resolved": "https://registry.nlark.com/@hapi/topo/download/@hapi/topo-3.1.6.tgz",
+      "integrity": "sha1-aNk1+j6uf91asNf5U/MgXYsr/Ck=",
+      "dev": true,
+      "requires": {
+        "@hapi/hoek": "^8.3.0"
+      }
+    },
+    "@intervolga/optimize-cssnano-plugin": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npm.taobao.org/@intervolga/optimize-cssnano-plugin/download/@intervolga/optimize-cssnano-plugin-1.0.6.tgz",
+      "integrity": "sha1-vnx4RhKLiPapsdEmGgrQbrXA/fg=",
+      "dev": true,
+      "requires": {
+        "cssnano": "^4.0.0",
+        "cssnano-preset-default": "^4.0.0",
+        "postcss": "^7.0.0"
+      }
+    },
+    "@microsoft/signalr": {
+      "version": "6.0.4",
+      "resolved": "https://registry.npmmirror.com/@microsoft/signalr/-/signalr-6.0.4.tgz",
+      "integrity": "sha512-YeWRh4LxfYnq4I5CKw17/HOq8rY+ouTv6Bq+s55122StE3pK29j8j2OpP+1PA3D1ksHPfy7dFIgC33yr/E+01A==",
+      "requires": {
+        "abort-controller": "^3.0.0",
+        "eventsource": "^1.0.7",
+        "fetch-cookie": "^0.11.0",
+        "node-fetch": "^2.6.7",
+        "ws": "^7.4.5"
+      }
+    },
+    "@mrmlnc/readdir-enhanced": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz",
+      "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=",
+      "dev": true,
+      "requires": {
+        "call-me-maybe": "^1.0.1",
+        "glob-to-regexp": "^0.3.0"
+      }
+    },
+    "@node-ipc/js-queue": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz",
+      "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==",
+      "dev": true,
+      "requires": {
+        "easy-stack": "1.0.1"
+      }
+    },
+    "@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.nlark.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz",
+      "integrity": "sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U=",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "dependencies": {
+        "@nodelib/fs.stat": {
+          "version": "2.0.5",
+          "resolved": "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-2.0.5.tgz",
+          "integrity": "sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos=",
+          "dev": true
+        }
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "1.1.3",
+      "resolved": "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz",
+      "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=",
+      "dev": true
+    },
+    "@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.nlark.com/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz?cache=0&sync_timestamp=1625769855088&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.8.tgz",
+      "integrity": "sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po=",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      }
+    },
+    "@parcel/watcher": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.4.1.tgz",
+      "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==",
+      "dev": true,
+      "requires": {
+        "@parcel/watcher-android-arm64": "2.4.1",
+        "@parcel/watcher-darwin-arm64": "2.4.1",
+        "@parcel/watcher-darwin-x64": "2.4.1",
+        "@parcel/watcher-freebsd-x64": "2.4.1",
+        "@parcel/watcher-linux-arm-glibc": "2.4.1",
+        "@parcel/watcher-linux-arm64-glibc": "2.4.1",
+        "@parcel/watcher-linux-arm64-musl": "2.4.1",
+        "@parcel/watcher-linux-x64-glibc": "2.4.1",
+        "@parcel/watcher-linux-x64-musl": "2.4.1",
+        "@parcel/watcher-win32-arm64": "2.4.1",
+        "@parcel/watcher-win32-ia32": "2.4.1",
+        "@parcel/watcher-win32-x64": "2.4.1",
+        "detect-libc": "^1.0.3",
+        "is-glob": "^4.0.3",
+        "micromatch": "^4.0.5",
+        "node-addon-api": "^7.0.0"
+      },
+      "dependencies": {
+        "braces": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
+          "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.1.1"
+          }
+        },
+        "fill-range": {
+          "version": "7.1.1",
+          "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
+          "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "is-glob": {
+          "version": "4.0.3",
+          "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+          "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^2.1.1"
+          }
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+          "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "4.0.8",
+          "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
+          "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+          "dev": true,
+          "requires": {
+            "braces": "^3.0.3",
+            "picomatch": "^2.3.1"
+          }
+        },
+        "picomatch": {
+          "version": "2.3.1",
+          "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+          "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+          "dev": true
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+          "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
+    "@parcel/watcher-android-arm64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz",
+      "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-darwin-arm64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz",
+      "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-darwin-x64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz",
+      "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-freebsd-x64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz",
+      "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-linux-arm-glibc": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz",
+      "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-linux-arm64-glibc": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz",
+      "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-linux-arm64-musl": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz",
+      "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-linux-x64-glibc": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz",
+      "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-linux-x64-musl": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz",
+      "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-win32-arm64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz",
+      "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-win32-ia32": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz",
+      "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-win32-x64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz",
+      "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==",
+      "dev": true,
+      "optional": true
+    },
+    "@soda/friendly-errors-webpack-plugin": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.0.tgz?cache=0&sync_timestamp=1607927406873&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40soda%2Ffriendly-errors-webpack-plugin%2Fdownload%2F%40soda%2Ffriendly-errors-webpack-plugin-1.8.0.tgz",
+      "integrity": "sha1-hHUdgqkwGdXJLAzw5FrFkIfNIkA=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "error-stack-parser": "^2.0.2",
+        "string-width": "^2.0.0",
+        "strip-ansi": "^5"
+      }
+    },
+    "@soda/get-current-script": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/@soda/get-current-script/download/@soda/get-current-script-1.0.2.tgz",
+      "integrity": "sha1-pTUV2yXYA4N0OBtzryC7Ty5QjYc=",
+      "dev": true
+    },
+    "@tootallnate/once": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz",
+      "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
+    },
+    "@types/body-parser": {
+      "version": "1.19.1",
+      "resolved": "https://registry.nlark.com/@types/body-parser/download/@types/body-parser-1.19.1.tgz?cache=0&sync_timestamp=1625595908991&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fbody-parser%2Fdownload%2F%40types%2Fbody-parser-1.19.1.tgz",
+      "integrity": "sha1-DAF0xCp9AXuBgwPUtdlpywt1kpw=",
+      "dev": true,
+      "requires": {
+        "@types/connect": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/connect": {
+      "version": "3.4.35",
+      "resolved": "https://registry.nlark.com/@types/connect/download/@types/connect-3.4.35.tgz",
+      "integrity": "sha1-X89q5EXkAh0fwiGaSHPMc6O7KtE=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/connect-history-api-fallback": {
+      "version": "1.3.5",
+      "resolved": "https://registry.nlark.com/@types/connect-history-api-fallback/download/@types/connect-history-api-fallback-1.3.5.tgz",
+      "integrity": "sha1-0feooJ0O1aV67lrpwYq5uAMgXa4=",
+      "dev": true,
+      "requires": {
+        "@types/express-serve-static-core": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/express": {
+      "version": "4.17.13",
+      "resolved": "https://registry.nlark.com/@types/express/download/@types/express-4.17.13.tgz?cache=0&sync_timestamp=1625605304761&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fexpress%2Fdownload%2F%40types%2Fexpress-4.17.13.tgz",
+      "integrity": "sha1-p24plXKJmbq1GjP6vOHXBaNwkDQ=",
+      "dev": true,
+      "requires": {
+        "@types/body-parser": "*",
+        "@types/express-serve-static-core": "^4.17.18",
+        "@types/qs": "*",
+        "@types/serve-static": "*"
+      }
+    },
+    "@types/express-serve-static-core": {
+      "version": "4.17.24",
+      "resolved": "https://registry.nlark.com/@types/express-serve-static-core/download/@types/express-serve-static-core-4.17.24.tgz?cache=0&sync_timestamp=1625762134763&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fexpress-serve-static-core%2Fdownload%2F%40types%2Fexpress-serve-static-core-4.17.24.tgz",
+      "integrity": "sha1-6kH5O/fg1ZzVp2ZlBo7WqraBXAc=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*",
+        "@types/qs": "*",
+        "@types/range-parser": "*"
+      }
+    },
+    "@types/glob": {
+      "version": "7.1.4",
+      "resolved": "https://registry.nlark.com/@types/glob/download/@types/glob-7.1.4.tgz?cache=0&sync_timestamp=1625605304235&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.1.4.tgz",
+      "integrity": "sha1-6lniHS7lxReRTLS8jkFTuZ5WZnI=",
+      "dev": true,
+      "requires": {
+        "@types/minimatch": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/http-proxy": {
+      "version": "1.17.7",
+      "resolved": "https://registry.nlark.com/@types/http-proxy/download/@types/http-proxy-1.17.7.tgz",
+      "integrity": "sha1-MOqFzCyGg2g1Kjfw0NNYHiSDTG8=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/json-schema": {
+      "version": "7.0.8",
+      "resolved": "https://registry.nlark.com/@types/json-schema/download/@types/json-schema-7.0.8.tgz",
+      "integrity": "sha1-7fG/Hb9OBEE8qOWxezt9fVS1mBg=",
+      "dev": true
+    },
+    "@types/lodash": {
+      "version": "4.14.184",
+      "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.184.tgz",
+      "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q=="
+    },
+    "@types/lodash-es": {
+      "version": "4.17.6",
+      "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz",
+      "integrity": "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==",
+      "requires": {
+        "@types/lodash": "*"
+      }
+    },
+    "@types/mime": {
+      "version": "1.3.2",
+      "resolved": "https://registry.nlark.com/@types/mime/download/@types/mime-1.3.2.tgz",
+      "integrity": "sha1-k+Jb+e51/g/YC1lLxP6w6GIRG1o=",
+      "dev": true
+    },
+    "@types/minimatch": {
+      "version": "3.0.5",
+      "resolved": "https://registry.nlark.com/@types/minimatch/download/@types/minimatch-3.0.5.tgz?cache=0&sync_timestamp=1625616310061&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.5.tgz",
+      "integrity": "sha1-EAHMXmo3BLg8I2An538vWOoBD0A=",
+      "dev": true
+    },
+    "@types/minimist": {
+      "version": "1.2.2",
+      "resolved": "https://registry.nlark.com/@types/minimist/download/@types/minimist-1.2.2.tgz?cache=0&sync_timestamp=1625616254387&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fminimist%2Fdownload%2F%40types%2Fminimist-1.2.2.tgz",
+      "integrity": "sha1-7nceK6Sz3Fs3KTXVSf2WF780W4w=",
+      "dev": true
+    },
+    "@types/node": {
+      "version": "16.3.2",
+      "resolved": "https://registry.nlark.com/@types/node/download/@types/node-16.3.2.tgz?cache=0&sync_timestamp=1626221012858&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-16.3.2.tgz",
+      "integrity": "sha1-ZVQygX+DtRrIacLVHdgwX7g0LhY=",
+      "dev": true
+    },
+    "@types/normalize-package-data": {
+      "version": "2.4.1",
+      "resolved": "https://registry.nlark.com/@types/normalize-package-data/download/@types/normalize-package-data-2.4.1.tgz?cache=0&sync_timestamp=1625675733240&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.1.tgz",
+      "integrity": "sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE=",
+      "dev": true
+    },
+    "@types/q": {
+      "version": "1.5.5",
+      "resolved": "https://registry.nlark.com/@types/q/download/@types/q-1.5.5.tgz?cache=0&sync_timestamp=1625678452535&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.5.tgz",
+      "integrity": "sha1-daKo59irSyMEFFBdkjNdHctTpt8=",
+      "dev": true
+    },
+    "@types/qs": {
+      "version": "6.9.7",
+      "resolved": "https://registry.nlark.com/@types/qs/download/@types/qs-6.9.7.tgz",
+      "integrity": "sha1-Y7t9Bn2xB8weRXwwO8JdUR/r9ss=",
+      "dev": true
+    },
+    "@types/range-parser": {
+      "version": "1.2.4",
+      "resolved": "https://registry.nlark.com/@types/range-parser/download/@types/range-parser-1.2.4.tgz",
+      "integrity": "sha1-zWZ7z90CUhOq+3ylkVqTJZCs3Nw=",
+      "dev": true
+    },
+    "@types/serve-static": {
+      "version": "1.13.10",
+      "resolved": "https://registry.nlark.com/@types/serve-static/download/@types/serve-static-1.13.10.tgz",
+      "integrity": "sha1-9eDOh5fS18xevtpIpSyWxPpHqNk=",
+      "dev": true,
+      "requires": {
+        "@types/mime": "^1",
+        "@types/node": "*"
+      }
+    },
+    "@types/source-list-map": {
+      "version": "0.1.2",
+      "resolved": "https://registry.nlark.com/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz",
+      "integrity": "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk=",
+      "dev": true
+    },
+    "@types/tapable": {
+      "version": "1.0.8",
+      "resolved": "https://registry.nlark.com/@types/tapable/download/@types/tapable-1.0.8.tgz",
+      "integrity": "sha1-uUpDkchWZse3Mpn9OtedT6pDUxA=",
+      "dev": true
+    },
+    "@types/uglify-js": {
+      "version": "3.13.1",
+      "resolved": "https://registry.nlark.com/@types/uglify-js/download/@types/uglify-js-3.13.1.tgz?cache=0&sync_timestamp=1625249395387&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fuglify-js%2Fdownload%2F%40types%2Fuglify-js-3.13.1.tgz",
+      "integrity": "sha1-XoienoHpQkXHW2RQYA4cXqKHiuo=",
+      "dev": true,
+      "requires": {
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "@types/web-bluetooth": {
+      "version": "0.0.15",
+      "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.15.tgz",
+      "integrity": "sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA=="
+    },
+    "@types/webpack": {
+      "version": "4.41.30",
+      "resolved": "https://registry.nlark.com/@types/webpack/download/@types/webpack-4.41.30.tgz?cache=0&sync_timestamp=1625251660875&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fwebpack%2Fdownload%2F%40types%2Fwebpack-4.41.30.tgz",
+      "integrity": "sha1-/T220NQeFFqO7q/NPEp8zekGjdw=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*",
+        "@types/tapable": "^1",
+        "@types/uglify-js": "*",
+        "@types/webpack-sources": "*",
+        "anymatch": "^3.0.0",
+        "source-map": "^0.6.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "@types/webpack-dev-server": {
+      "version": "3.11.5",
+      "resolved": "https://registry.nlark.com/@types/webpack-dev-server/download/@types/webpack-dev-server-3.11.5.tgz?cache=0&sync_timestamp=1625251651898&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fwebpack-dev-server%2Fdownload%2F%40types%2Fwebpack-dev-server-3.11.5.tgz",
+      "integrity": "sha1-9KJUo90GZ8juSvkNQq/bStHWB/M=",
+      "dev": true,
+      "requires": {
+        "@types/connect-history-api-fallback": "*",
+        "@types/express": "*",
+        "@types/serve-static": "*",
+        "@types/webpack": "^4",
+        "http-proxy-middleware": "^1.0.0"
+      }
+    },
+    "@types/webpack-sources": {
+      "version": "2.1.1",
+      "resolved": "https://registry.nlark.com/@types/webpack-sources/download/@types/webpack-sources-2.1.1.tgz?cache=0&sync_timestamp=1625251653385&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fwebpack-sources%2Fdownload%2F%40types%2Fwebpack-sources-2.1.1.tgz",
+      "integrity": "sha1-avF+Oj3tce7CuYAI18EvSYoKRQY=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*",
+        "@types/source-list-map": "*",
+        "source-map": "^0.7.3"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.7.3",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz",
+          "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/babel-helper-vue-jsx-merge-props": {
+      "version": "1.2.1",
+      "resolved": "https://registry.nlark.com/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz",
+      "integrity": "sha1-MWJKelBfsU2h1YAjclpMXycOaoE=",
+      "dev": true
+    },
+    "@vue/babel-helper-vue-transform-on": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/@vue/babel-helper-vue-transform-on/download/@vue/babel-helper-vue-transform-on-1.0.2.tgz",
+      "integrity": "sha1-m5xpHNBvyFUiGiR1w8yDHXdLx9w=",
+      "dev": true
+    },
+    "@vue/babel-plugin-jsx": {
+      "version": "1.0.6",
+      "resolved": "https://registry.nlark.com/@vue/babel-plugin-jsx/download/@vue/babel-plugin-jsx-1.0.6.tgz",
+      "integrity": "sha1-GEvzVBq279vlB5q4sgwZ4q8QC/s=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.0.0",
+        "@babel/template": "^7.0.0",
+        "@babel/traverse": "^7.0.0",
+        "@babel/types": "^7.0.0",
+        "@vue/babel-helper-vue-transform-on": "^1.0.2",
+        "camelcase": "^6.0.0",
+        "html-tags": "^3.1.0",
+        "svg-tags": "^1.0.0"
+      }
+    },
+    "@vue/babel-plugin-transform-vue-jsx": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-plugin-transform-vue-jsx/download/@vue/babel-plugin-transform-vue-jsx-1.2.1.tgz",
+      "integrity": "sha1-ZGBGxlLC8CQnJ/NFGdkXsGQEHtc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.2.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+        "html-tags": "^2.0.0",
+        "lodash.kebabcase": "^4.1.1",
+        "svg-tags": "^1.0.0"
+      },
+      "dependencies": {
+        "html-tags": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz",
+          "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/babel-preset-app": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/babel-preset-app/download/@vue/babel-preset-app-4.5.13.tgz?cache=0&sync_timestamp=1623215857834&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fbabel-preset-app%2Fdownload%2F%40vue%2Fbabel-preset-app-4.5.13.tgz",
+      "integrity": "sha1-y0dTIeTHP38RDawppIwqnLgK/rY=",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.11.0",
+        "@babel/helper-compilation-targets": "^7.9.6",
+        "@babel/helper-module-imports": "^7.8.3",
+        "@babel/plugin-proposal-class-properties": "^7.8.3",
+        "@babel/plugin-proposal-decorators": "^7.8.3",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+        "@babel/plugin-syntax-jsx": "^7.8.3",
+        "@babel/plugin-transform-runtime": "^7.11.0",
+        "@babel/preset-env": "^7.11.0",
+        "@babel/runtime": "^7.11.0",
+        "@vue/babel-plugin-jsx": "^1.0.3",
+        "@vue/babel-preset-jsx": "^1.2.4",
+        "babel-plugin-dynamic-import-node": "^2.3.3",
+        "core-js": "^3.6.5",
+        "core-js-compat": "^3.6.5",
+        "semver": "^6.1.0"
+      }
+    },
+    "@vue/babel-preset-jsx": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-jsx/download/@vue/babel-preset-jsx-1.2.4.tgz",
+      "integrity": "sha1-kv6nnbbxOwHoDToAmeKSS9y+Toc=",
+      "dev": true,
+      "requires": {
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+        "@vue/babel-sugar-composition-api-inject-h": "^1.2.1",
+        "@vue/babel-sugar-composition-api-render-instance": "^1.2.4",
+        "@vue/babel-sugar-functional-vue": "^1.2.2",
+        "@vue/babel-sugar-inject-h": "^1.2.2",
+        "@vue/babel-sugar-v-model": "^1.2.3",
+        "@vue/babel-sugar-v-on": "^1.2.3"
+      }
+    },
+    "@vue/babel-sugar-composition-api-inject-h": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-composition-api-inject-h/download/@vue/babel-sugar-composition-api-inject-h-1.2.1.tgz",
+      "integrity": "sha1-BdbgxDJxDjdYKyvppgSbaJtvA+s=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-composition-api-render-instance": {
+      "version": "1.2.4",
+      "resolved": "https://registry.nlark.com/@vue/babel-sugar-composition-api-render-instance/download/@vue/babel-sugar-composition-api-render-instance-1.2.4.tgz",
+      "integrity": "sha1-5MvGmXw0T6wnF4WteikyXFHWjRk=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-functional-vue": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-functional-vue/download/@vue/babel-sugar-functional-vue-1.2.2.tgz?cache=0&sync_timestamp=1602929625505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-functional-vue%2Fdownload%2F%40vue%2Fbabel-sugar-functional-vue-1.2.2.tgz",
+      "integrity": "sha1-JnqayNeHyW7b8Dzj85LEnam9Jlg=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-inject-h": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-inject-h/download/@vue/babel-sugar-inject-h-1.2.2.tgz?cache=0&sync_timestamp=1602929625678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-inject-h%2Fdownload%2F%40vue%2Fbabel-sugar-inject-h-1.2.2.tgz",
+      "integrity": "sha1-1zjTyJM2fshJHcu2abAAkZKT46o=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-v-model": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-model/download/@vue/babel-sugar-v-model-1.2.3.tgz",
+      "integrity": "sha1-+h8pulHr8KoabDX6ZtU5vEWaGPI=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+        "camelcase": "^5.0.0",
+        "html-tags": "^2.0.0",
+        "svg-tags": "^1.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.nlark.com/camelcase/download/camelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        },
+        "html-tags": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz",
+          "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/babel-sugar-v-on": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-on/download/@vue/babel-sugar-v-on-1.2.3.tgz?cache=0&sync_timestamp=1603181880042&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-v-on%2Fdownload%2F%40vue%2Fbabel-sugar-v-on-1.2.3.tgz",
+      "integrity": "sha1-NCNnF4WGpp85LwS/ujICHQKROto=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+        "camelcase": "^5.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.nlark.com/camelcase/download/camelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/cli-overlay": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/cli-overlay/download/@vue/cli-overlay-4.5.13.tgz",
+      "integrity": "sha1-Tx/SFhvo9p1suoB58/DX3E3uR6c=",
+      "dev": true
+    },
+    "@vue/cli-plugin-babel": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-4.5.13.tgz",
+      "integrity": "sha1-qJxILtzE6h0TVkXOxQKn9f1MMOc=",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.11.0",
+        "@vue/babel-preset-app": "^4.5.13",
+        "@vue/cli-shared-utils": "^4.5.13",
+        "babel-loader": "^8.1.0",
+        "cache-loader": "^4.1.0",
+        "thread-loader": "^2.1.3",
+        "webpack": "^4.0.0"
+      }
+    },
+    "@vue/cli-plugin-eslint": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-4.5.13.tgz",
+      "integrity": "sha1-i68i0NltdnIMdQZka5b09iwFvfo=",
+      "dev": true,
+      "requires": {
+        "@vue/cli-shared-utils": "^4.5.13",
+        "eslint-loader": "^2.2.1",
+        "globby": "^9.2.0",
+        "inquirer": "^7.1.0",
+        "webpack": "^4.0.0",
+        "yorkie": "^2.0.0"
+      }
+    },
+    "@vue/cli-plugin-router": {
+      "version": "4.5.19",
+      "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.19.tgz",
+      "integrity": "sha512-3icGzH1IbVYmMMsOwYa0lal/gtvZLebFXdE5hcQJo2mnTwngXGMTyYAzL56EgHBPjbMmRpyj6Iw9k4aVInVX6A==",
+      "dev": true,
+      "requires": {
+        "@vue/cli-shared-utils": "^4.5.19"
+      }
+    },
+    "@vue/cli-plugin-unit-mocha": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/cli-plugin-unit-mocha/download/@vue/cli-plugin-unit-mocha-4.5.13.tgz?cache=0&sync_timestamp=1623216922909&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-plugin-unit-mocha%2Fdownload%2F%40vue%2Fcli-plugin-unit-mocha-4.5.13.tgz",
+      "integrity": "sha1-GBCMawtx7psyvs+/dk9cvk112tY=",
+      "dev": true,
+      "requires": {
+        "@vue/cli-shared-utils": "^4.5.13",
+        "jsdom": "^15.2.1",
+        "jsdom-global": "^3.0.2",
+        "mocha": "^6.2.2",
+        "mochapack": "^1.1.15"
+      }
+    },
+    "@vue/cli-plugin-vuex": {
+      "version": "4.5.19",
+      "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.19.tgz",
+      "integrity": "sha512-DUmfdkG3pCdkP7Iznd87RfE9Qm42mgp2hcrNcYQYSru1W1gX2dG/JcW8bxmeGSa06lsxi9LEIc/QD1yPajSCZw==",
+      "dev": true
+    },
+    "@vue/cli-service": {
+      "version": "4.5.13",
+      "resolved": "https://registry.nlark.com/@vue/cli-service/download/@vue/cli-service-4.5.13.tgz",
+      "integrity": "sha1-oJ5oSoAWhLbiTlQUrTBlCXDuye0=",
+      "dev": true,
+      "requires": {
+        "@intervolga/optimize-cssnano-plugin": "^1.0.5",
+        "@soda/friendly-errors-webpack-plugin": "^1.7.1",
+        "@soda/get-current-script": "^1.0.0",
+        "@types/minimist": "^1.2.0",
+        "@types/webpack": "^4.0.0",
+        "@types/webpack-dev-server": "^3.11.0",
+        "@vue/cli-overlay": "^4.5.13",
+        "@vue/cli-plugin-router": "^4.5.13",
+        "@vue/cli-plugin-vuex": "^4.5.13",
+        "@vue/cli-shared-utils": "^4.5.13",
+        "@vue/component-compiler-utils": "^3.1.2",
+        "@vue/preload-webpack-plugin": "^1.1.0",
+        "@vue/web-component-wrapper": "^1.2.0",
+        "acorn": "^7.4.0",
+        "acorn-walk": "^7.1.1",
+        "address": "^1.1.2",
+        "autoprefixer": "^9.8.6",
+        "browserslist": "^4.12.0",
+        "cache-loader": "^4.1.0",
+        "case-sensitive-paths-webpack-plugin": "^2.3.0",
+        "cli-highlight": "^2.1.4",
+        "clipboardy": "^2.3.0",
+        "cliui": "^6.0.0",
+        "copy-webpack-plugin": "^5.1.1",
+        "css-loader": "^3.5.3",
+        "cssnano": "^4.1.10",
+        "debug": "^4.1.1",
+        "default-gateway": "^5.0.5",
+        "dotenv": "^8.2.0",
+        "dotenv-expand": "^5.1.0",
+        "file-loader": "^4.2.0",
+        "fs-extra": "^7.0.1",
+        "globby": "^9.2.0",
+        "hash-sum": "^2.0.0",
+        "html-webpack-plugin": "^3.2.0",
+        "launch-editor-middleware": "^2.2.1",
+        "lodash.defaultsdeep": "^4.6.1",
+        "lodash.mapvalues": "^4.6.0",
+        "lodash.transform": "^4.6.0",
+        "mini-css-extract-plugin": "^0.9.0",
+        "minimist": "^1.2.5",
+        "pnp-webpack-plugin": "^1.6.4",
+        "portfinder": "^1.0.26",
+        "postcss-loader": "^3.0.0",
+        "ssri": "^8.0.1",
+        "terser-webpack-plugin": "^1.4.4",
+        "thread-loader": "^2.1.3",
+        "url-loader": "^2.2.0",
+        "vue-loader": "^15.9.2",
+        "vue-loader-v16": "npm:vue-loader@^16.1.0",
+        "vue-style-loader": "^4.1.2",
+        "webpack": "^4.0.0",
+        "webpack-bundle-analyzer": "^3.8.0",
+        "webpack-chain": "^6.4.0",
+        "webpack-dev-server": "^3.11.0",
+        "webpack-merge": "^4.2.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "vue-loader-v16": {
+          "version": "npm:vue-loader@16.8.3",
+          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chalk": "^4.1.0",
+            "hash-sum": "^2.0.0",
+            "loader-utils": "^2.0.0"
+          }
+        }
+      }
+    },
+    "@vue/cli-shared-utils": {
+      "version": "4.5.19",
+      "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.19.tgz",
+      "integrity": "sha512-JYpdsrC/d9elerKxbEUtmSSU6QRM60rirVubOewECHkBHj+tLNznWq/EhCjswywtePyLaMUK25eTqnTSZlEE+g==",
+      "dev": true,
+      "requires": {
+        "@achrinza/node-ipc": "9.2.2",
+        "@hapi/joi": "^15.0.1",
+        "chalk": "^2.4.2",
+        "execa": "^1.0.0",
+        "launch-editor": "^2.2.1",
+        "lru-cache": "^5.1.1",
+        "open": "^6.3.0",
+        "ora": "^3.4.0",
+        "read-pkg": "^5.1.1",
+        "request": "^2.88.2",
+        "semver": "^6.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz",
+          "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "6.0.0",
+          "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-6.0.0.tgz",
+          "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^5.0.0"
+          }
+        }
+      }
+    },
+    "@vue/compiler-core": {
+      "version": "3.2.37",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz",
+      "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==",
+      "requires": {
+        "@babel/parser": "^7.16.4",
+        "@vue/shared": "3.2.37",
+        "estree-walker": "^2.0.2",
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+        }
+      }
+    },
+    "@vue/compiler-dom": {
+      "version": "3.2.37",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz",
+      "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==",
+      "requires": {
+        "@vue/compiler-core": "3.2.37",
+        "@vue/shared": "3.2.37"
+      }
+    },
+    "@vue/compiler-sfc": {
+      "version": "3.2.37",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz",
+      "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==",
+      "requires": {
+        "@babel/parser": "^7.16.4",
+        "@vue/compiler-core": "3.2.37",
+        "@vue/compiler-dom": "3.2.37",
+        "@vue/compiler-ssr": "3.2.37",
+        "@vue/reactivity-transform": "3.2.37",
+        "@vue/shared": "3.2.37",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.25.7",
+        "postcss": "^8.1.10",
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "8.3.5",
+          "resolved": "https://registry.nlark.com/postcss/download/postcss-8.3.5.tgz",
+          "integrity": "sha1-mCIWsRNBK8IKhiiekeuZSVKltwk=",
+          "requires": {
+            "colorette": "^1.2.2",
+            "nanoid": "^3.1.23",
+            "source-map-js": "^0.6.2"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+        }
+      }
+    },
+    "@vue/compiler-ssr": {
+      "version": "3.2.37",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz",
+      "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==",
+      "requires": {
+        "@vue/compiler-dom": "3.2.37",
+        "@vue/shared": "3.2.37"
+      }
+    },
+    "@vue/component-compiler-utils": {
+      "version": "3.2.2",
+      "resolved": "https://registry.nlark.com/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.2.2.tgz",
+      "integrity": "sha1-L37V/u2C/38ChKzBHVJe5+/yJGA=",
+      "dev": true,
+      "requires": {
+        "consolidate": "^0.15.1",
+        "hash-sum": "^1.0.2",
+        "lru-cache": "^4.1.2",
+        "merge-source-map": "^1.1.0",
+        "postcss": "^7.0.36",
+        "postcss-selector-parser": "^6.0.2",
+        "prettier": "^1.18.2",
+        "source-map": "~0.6.1",
+        "vue-template-es2015-compiler": "^1.9.0"
+      },
+      "dependencies": {
+        "hash-sum": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+          "dev": true
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.nlark.com/lru-cache/download/lru-cache-4.1.5.tgz",
+          "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.nlark.com/yallist/download/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/devtools-api": {
+      "version": "6.0.0-beta.15",
+      "resolved": "https://registry.nlark.com/@vue/devtools-api/download/@vue/devtools-api-6.0.0-beta.15.tgz?cache=0&sync_timestamp=1624900514906&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fdevtools-api%2Fdownload%2F%40vue%2Fdevtools-api-6.0.0-beta.15.tgz",
+      "integrity": "sha1-rXyzhOBi8WW8+cg3MhJb/7wq2D0="
+    },
+    "@vue/preload-webpack-plugin": {
+      "version": "1.1.2",
+      "resolved": "https://registry.nlark.com/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz",
+      "integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=",
+      "dev": true
+    },
+    "@vue/reactivity": {
+      "version": "3.2.37",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz",
+      "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==",
+      "requires": {
+        "@vue/shared": "3.2.37"
+      }
+    },
+    "@vue/reactivity-transform": {
+      "version": "3.2.37",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz",
+      "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==",
+      "requires": {
+        "@babel/parser": "^7.16.4",
+        "@vue/compiler-core": "3.2.37",
+        "@vue/shared": "3.2.37",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.25.7"
+      }
+    },
+    "@vue/runtime-core": {
+      "version": "3.2.37",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz",
+      "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==",
+      "requires": {
+        "@vue/reactivity": "3.2.37",
+        "@vue/shared": "3.2.37"
+      }
+    },
+    "@vue/runtime-dom": {
+      "version": "3.2.37",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz",
+      "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==",
+      "requires": {
+        "@vue/runtime-core": "3.2.37",
+        "@vue/shared": "3.2.37",
+        "csstype": "^2.6.8"
+      }
+    },
+    "@vue/server-renderer": {
+      "version": "3.2.37",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz",
+      "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==",
+      "requires": {
+        "@vue/compiler-ssr": "3.2.37",
+        "@vue/shared": "3.2.37"
+      }
+    },
+    "@vue/shared": {
+      "version": "3.2.37",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz",
+      "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw=="
+    },
+    "@vue/test-utils": {
+      "version": "2.0.0-rc.10",
+      "resolved": "https://registry.nlark.com/@vue/test-utils/download/@vue/test-utils-2.0.0-rc.10.tgz",
+      "integrity": "sha1-ntaJzX1aHJ72aTgGAQ5GTS7ME7I=",
+      "dev": true
+    },
+    "@vue/web-component-wrapper": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.3.0.tgz?cache=0&sync_timestamp=1613216912643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fweb-component-wrapper%2Fdownload%2F%40vue%2Fweb-component-wrapper-1.3.0.tgz",
+      "integrity": "sha1-trQKdiVCnSvXwigd26YB7QXcfxo=",
+      "dev": true
+    },
+    "@vueuse/core": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.1.0.tgz",
+      "integrity": "sha512-BIroqvXEqt826aE9r3K5cox1zobuPuAzdYJ36kouC2TVhlXvFKIILgFVWrpp9HZPwB3aLzasmG3K87q7TSyXZg==",
+      "requires": {
+        "@types/web-bluetooth": "^0.0.15",
+        "@vueuse/metadata": "9.1.0",
+        "@vueuse/shared": "9.1.0",
+        "vue-demi": "*"
+      },
+      "dependencies": {
+        "vue-demi": {
+          "version": "0.13.8",
+          "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.8.tgz",
+          "integrity": "sha512-Vy1zbZhCOdsmvGR6tJhAvO5vhP7eiS8xkbYQSoVa7o6KlIy3W8Rc53ED4qI4qpeRDjv3mLfXSEpYU6Yq4pgXRg=="
+        }
+      }
+    },
+    "@vueuse/metadata": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.1.0.tgz",
+      "integrity": "sha512-8OEhlog1iaAGTD3LICZ8oBGQdYeMwByvXetOtAOZCJOzyCRSwqwdggTsmVZZ1rkgYIEqgUBk942AsAPwM21s6A=="
+    },
+    "@vueuse/shared": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.1.0.tgz",
+      "integrity": "sha512-pB/3njQu4tfJJ78ajELNda0yMG6lKfpToQW7Soe09CprF1k3QuyoNi1tBNvo75wBDJWD+LOnr+c4B5HZ39jY/Q==",
+      "requires": {
+        "vue-demi": "*"
+      },
+      "dependencies": {
+        "vue-demi": {
+          "version": "0.13.8",
+          "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.8.tgz",
+          "integrity": "sha512-Vy1zbZhCOdsmvGR6tJhAvO5vhP7eiS8xkbYQSoVa7o6KlIy3W8Rc53ED4qI4qpeRDjv3mLfXSEpYU6Yq4pgXRg=="
+        }
+      }
+    },
+    "@webassemblyjs/ast": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz?cache=0&sync_timestamp=1625473466238&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.9.0.tgz",
+      "integrity": "sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0"
+      }
+    },
+    "@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz?cache=0&sync_timestamp=1625473463638&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.9.0.tgz",
+      "integrity": "sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q=",
+      "dev": true
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz?cache=0&sync_timestamp=1625473346773&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.9.0.tgz",
+      "integrity": "sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI=",
+      "dev": true
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz?cache=0&sync_timestamp=1625473462686&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-buffer%2Fdownload%2F%40webassemblyjs%2Fhelper-buffer-1.9.0.tgz",
+      "integrity": "sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA=",
+      "dev": true
+    },
+    "@webassemblyjs/helper-code-frame": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz",
+      "integrity": "sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/wast-printer": "1.9.0"
+      }
+    },
+    "@webassemblyjs/helper-fsm": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz",
+      "integrity": "sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg=",
+      "dev": true
+    },
+    "@webassemblyjs/helper-module-context": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz",
+      "integrity": "sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0"
+      }
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz",
+      "integrity": "sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A=",
+      "dev": true
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz?cache=0&sync_timestamp=1625473466570&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-wasm-section%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-section-1.9.0.tgz",
+      "integrity": "sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0"
+      }
+    },
+    "@webassemblyjs/ieee754": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz?cache=0&sync_timestamp=1625473461909&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fieee754%2Fdownload%2F%40webassemblyjs%2Fieee754-1.9.0.tgz",
+      "integrity": "sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ=",
+      "dev": true,
+      "requires": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz?cache=0&sync_timestamp=1625473463971&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fleb128%2Fdownload%2F%40webassemblyjs%2Fleb128-1.9.0.tgz",
+      "integrity": "sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=",
+      "dev": true,
+      "requires": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz?cache=0&sync_timestamp=1625473462317&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Futf8%2Fdownload%2F%40webassemblyjs%2Futf8-1.9.0.tgz",
+      "integrity": "sha1-BNM7Y2945qaBMifoJAL3Y3tiKas=",
+      "dev": true
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz?cache=0&sync_timestamp=1625473468202&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-edit%2Fdownload%2F%40webassemblyjs%2Fwasm-edit-1.9.0.tgz",
+      "integrity": "sha1-P+bXnT8PkiGDqoYALELdJWz+6c8=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/helper-wasm-section": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0",
+        "@webassemblyjs/wasm-opt": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
+        "@webassemblyjs/wast-printer": "1.9.0"
+      }
+    },
+    "@webassemblyjs/wasm-gen": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz?cache=0&sync_timestamp=1625473464969&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-gen%2Fdownload%2F%40webassemblyjs%2Fwasm-gen-1.9.0.tgz",
+      "integrity": "sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/ieee754": "1.9.0",
+        "@webassemblyjs/leb128": "1.9.0",
+        "@webassemblyjs/utf8": "1.9.0"
+      }
+    },
+    "@webassemblyjs/wasm-opt": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz?cache=0&sync_timestamp=1625473467198&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-opt%2Fdownload%2F%40webassemblyjs%2Fwasm-opt-1.9.0.tgz",
+      "integrity": "sha1-IhEYHlsxMmRDzIES658LkChyGmE=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0"
+      }
+    },
+    "@webassemblyjs/wasm-parser": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz?cache=0&sync_timestamp=1625473464593&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-parser%2Fdownload%2F%40webassemblyjs%2Fwasm-parser-1.9.0.tgz",
+      "integrity": "sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-api-error": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/ieee754": "1.9.0",
+        "@webassemblyjs/leb128": "1.9.0",
+        "@webassemblyjs/utf8": "1.9.0"
+      }
+    },
+    "@webassemblyjs/wast-parser": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwast-parser%2Fdownload%2F%40webassemblyjs%2Fwast-parser-1.9.0.tgz",
+      "integrity": "sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+        "@webassemblyjs/helper-api-error": "1.9.0",
+        "@webassemblyjs/helper-code-frame": "1.9.0",
+        "@webassemblyjs/helper-fsm": "1.9.0",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/wast-printer": {
+      "version": "1.9.0",
+      "resolved": "https://registry.nlark.com/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz?cache=0&sync_timestamp=1625473465901&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwast-printer%2Fdownload%2F%40webassemblyjs%2Fwast-printer-1.9.0.tgz",
+      "integrity": "sha1-STXVTIX+9jewDOn1I3dFHQDUeJk=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz",
+      "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=",
+      "dev": true
+    },
+    "@xtuc/long": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz",
+      "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=",
+      "dev": true
+    },
+    "abab": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npm.taobao.org/abab/download/abab-2.0.5.tgz",
+      "integrity": "sha1-wLZ4+zLWD8EhnHhNaoJv44Wut5o=",
+      "dev": true
+    },
+    "abort-controller": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz",
+      "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+      "requires": {
+        "event-target-shim": "^5.0.0"
+      }
+    },
+    "accepts": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
+      "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
+      "dev": true,
+      "requires": {
+        "mime-types": "~2.1.24",
+        "negotiator": "0.6.2"
+      }
+    },
+    "acorn": {
+      "version": "7.4.1",
+      "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1624526907659&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
+      "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
+      "dev": true
+    },
+    "acorn-globals": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.3.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-globals%2Fdownload%2Facorn-globals-4.3.4.tgz",
+      "integrity": "sha1-n6GSat3BHJcwjE5m163Q1Awycuc=",
+      "dev": true,
+      "requires": {
+        "acorn": "^6.0.1",
+        "acorn-walk": "^6.0.1"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.4.2",
+          "resolved": "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1624526907659&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz",
+          "integrity": "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=",
+          "dev": true
+        },
+        "acorn-walk": {
+          "version": "6.2.0",
+          "resolved": "https://registry.nlark.com/acorn-walk/download/acorn-walk-6.2.0.tgz",
+          "integrity": "sha1-Ejy487hMIXHx9/slJhWxx4prGow=",
+          "dev": true
+        }
+      }
+    },
+    "acorn-walk": {
+      "version": "7.2.0",
+      "resolved": "https://registry.nlark.com/acorn-walk/download/acorn-walk-7.2.0.tgz",
+      "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=",
+      "dev": true
+    },
+    "address": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/address/download/address-1.1.2.tgz",
+      "integrity": "sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY="
+    },
+    "agent-base": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz",
+      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+      "requires": {
+        "debug": "4"
+      }
+    },
+    "agentkeepalive": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz",
+      "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==",
+      "requires": {
+        "humanize-ms": "^1.2.1"
+      }
+    },
+    "ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz",
+      "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+      "dev": true,
+      "requires": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      }
+    },
+    "ajv-errors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz",
+      "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=",
+      "dev": true
+    },
+    "ajv-keywords": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1616882441894&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz",
+      "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=",
+      "dev": true
+    },
+    "ali-oss": {
+      "version": "6.17.1",
+      "resolved": "https://registry.npmmirror.com/ali-oss/-/ali-oss-6.17.1.tgz",
+      "integrity": "sha512-v2oT3UhSJTH/LrsscVvi7iEGrnundydNaFzpYAKatqOl4JNcBV4UiwtlJU+ZHLys040JH2k+CutznA0GoE+P2w==",
+      "requires": {
+        "address": "^1.0.0",
+        "agentkeepalive": "^3.4.1",
+        "bowser": "^1.6.0",
+        "copy-to": "^2.0.1",
+        "dateformat": "^2.0.0",
+        "debug": "^2.2.0",
+        "destroy": "^1.0.4",
+        "end-or-error": "^1.0.1",
+        "get-ready": "^1.0.0",
+        "humanize-ms": "^1.2.0",
+        "is-type-of": "^1.0.0",
+        "js-base64": "^2.5.2",
+        "jstoxml": "^2.0.0",
+        "merge-descriptors": "^1.0.1",
+        "mime": "^2.4.5",
+        "mz-modules": "^2.1.0",
+        "platform": "^1.3.1",
+        "pump": "^3.0.0",
+        "sdk-base": "^2.0.1",
+        "stream-http": "2.8.2",
+        "stream-wormhole": "^1.0.4",
+        "urllib": "^2.33.1",
+        "utility": "^1.8.0",
+        "xml2js": "^0.4.16"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+        }
+      }
+    },
+    "alphanum-sort": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz",
+      "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+      "dev": true
+    },
+    "ansi-colors": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.3.tgz",
+      "integrity": "sha1-V9NbhoboUeLMBMQD8cACA5dqGBM=",
+      "dev": true
+    },
+    "ansi-escapes": {
+      "version": "4.3.2",
+      "resolved": "https://registry.nlark.com/ansi-escapes/download/ansi-escapes-4.3.2.tgz?cache=0&sync_timestamp=1618847144938&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.2.tgz",
+      "integrity": "sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4=",
+      "dev": true,
+      "requires": {
+        "type-fest": "^0.21.3"
+      }
+    },
+    "ansi-html": {
+      "version": "0.0.7",
+      "resolved": "https://registry.nlark.com/ansi-html/download/ansi-html-0.0.7.tgz?cache=0&sync_timestamp=1618846919541&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-html%2Fdownload%2Fansi-html-0.0.7.tgz",
+      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+      "dev": true
+    },
+    "ansi-regex": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+      "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1618995547052&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz",
+      "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+      "dev": true,
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz",
+      "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
+    },
+    "anymatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.2.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-3.1.2.tgz",
+      "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=",
+      "dev": true,
+      "requires": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      }
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.nlark.com/aproba/download/aproba-1.2.0.tgz",
+      "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=",
+      "dev": true
+    },
+    "arch": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/arch/download/arch-2.2.0.tgz",
+      "integrity": "sha1-G8R4GPMFdk8jqzMGsL/AhsWinRE=",
+      "dev": true
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz",
+      "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
+      "dev": true,
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "arr-diff": {
+      "version": "4.0.0",
+      "resolved": "https://registry.nlark.com/arr-diff/download/arr-diff-4.0.0.tgz?cache=0&sync_timestamp=1618847029174&other_urls=https%3A%2F%2Fregistry.nlark.com%2Farr-diff%2Fdownload%2Farr-diff-4.0.0.tgz",
+      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+      "dev": true
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz",
+      "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
+      "dev": true
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+      "dev": true
+    },
+    "array-equal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz",
+      "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
+      "dev": true
+    },
+    "array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz",
+      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+      "dev": true
+    },
+    "array-union": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz?cache=0&sync_timestamp=1614624861176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-union%2Fdownload%2Farray-union-1.0.2.tgz",
+      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "dev": true,
+      "requires": {
+        "array-uniq": "^1.0.1"
+      }
+    },
+    "array-uniq": {
+      "version": "1.0.3",
+      "resolved": "https://registry.nlark.com/array-uniq/download/array-uniq-1.0.3.tgz",
+      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+      "dev": true
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+      "dev": true
+    },
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz",
+      "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=",
+      "dev": true,
+      "requires": {
+        "safer-buffer": "~2.1.0"
+      }
+    },
+    "asn1.js": {
+      "version": "5.4.1",
+      "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-5.4.1.tgz",
+      "integrity": "sha1-EamAuE67kXgc41sP3C7ilON4Pwc=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0",
+        "safer-buffer": "^2.1.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+          "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=",
+          "dev": true
+        }
+      }
+    },
+    "assert": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz",
+      "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=",
+      "dev": true,
+      "requires": {
+        "object-assign": "^4.1.1",
+        "util": "0.10.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz",
+          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+          "dev": true
+        },
+        "util": {
+          "version": "0.10.3",
+          "resolved": "https://registry.nlark.com/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1622212943994&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil%2Fdownload%2Futil-0.10.3.tgz",
+          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+          "dev": true,
+          "requires": {
+            "inherits": "2.0.1"
+          }
+        }
+      }
+    },
+    "assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/assert-plus/download/assert-plus-1.0.0.tgz",
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+      "dev": true
+    },
+    "assertion-error": {
+      "version": "1.1.0",
+      "resolved": "https://registry.nlark.com/assertion-error/download/assertion-error-1.1.0.tgz",
+      "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=",
+      "dev": true
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/assign-symbols/download/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "dev": true
+    },
+    "ast-types": {
+      "version": "0.13.4",
+      "resolved": "https://registry.npmmirror.com/ast-types/-/ast-types-0.13.4.tgz",
+      "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
+      "requires": {
+        "tslib": "^2.0.1"
+      }
+    },
+    "async": {
+      "version": "2.6.3",
+      "resolved": "https://registry.nlark.com/async/download/async-2.6.3.tgz",
+      "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.14"
+      }
+    },
+    "async-each": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz",
+      "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=",
+      "dev": true
+    },
+    "async-limiter": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz",
+      "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=",
+      "dev": true
+    },
+    "async-validator": {
+      "version": "4.2.5",
+      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
+      "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.nlark.com/asynckit/download/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "dev": true
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz",
+      "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=",
+      "dev": true
+    },
+    "autoprefixer": {
+      "version": "9.8.6",
+      "resolved": "https://registry.nlark.com/autoprefixer/download/autoprefixer-9.8.6.tgz?cache=0&sync_timestamp=1626111053301&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fautoprefixer%2Fdownload%2Fautoprefixer-9.8.6.tgz",
+      "integrity": "sha1-O3NZTKG/kmYyDFrPFYjXTep0IQ8=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.12.0",
+        "caniuse-lite": "^1.0.30001109",
+        "colorette": "^1.2.1",
+        "normalize-range": "^0.1.2",
+        "num2fraction": "^1.2.2",
+        "postcss": "^7.0.32",
+        "postcss-value-parser": "^4.1.0"
+      }
+    },
+    "aws-sign2": {
+      "version": "0.7.0",
+      "resolved": "https://registry.nlark.com/aws-sign2/download/aws-sign2-0.7.0.tgz",
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+      "dev": true
+    },
+    "aws4": {
+      "version": "1.11.0",
+      "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz?cache=0&sync_timestamp=1604101244098&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.11.0.tgz",
+      "integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=",
+      "dev": true
+    },
+    "axios": {
+      "version": "0.21.1",
+      "resolved": "https://registry.nlark.com/axios/download/axios-0.21.1.tgz",
+      "integrity": "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg=",
+      "requires": {
+        "follow-redirects": "^1.10.0"
+      }
+    },
+    "babel-eslint": {
+      "version": "10.1.0",
+      "resolved": "https://registry.nlark.com/babel-eslint/download/babel-eslint-10.1.0.tgz",
+      "integrity": "sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "@babel/parser": "^7.7.0",
+        "@babel/traverse": "^7.7.0",
+        "@babel/types": "^7.7.0",
+        "eslint-visitor-keys": "^1.0.0",
+        "resolve": "^1.12.0"
+      }
+    },
+    "babel-loader": {
+      "version": "8.2.2",
+      "resolved": "https://registry.nlark.com/babel-loader/download/babel-loader-8.2.2.tgz",
+      "integrity": "sha1-k2POhMEMmkDmx1N0jhRBtgyKC4E=",
+      "dev": true,
+      "requires": {
+        "find-cache-dir": "^3.3.1",
+        "loader-utils": "^1.4.0",
+        "make-dir": "^3.1.0",
+        "schema-utils": "^2.6.5"
+      }
+    },
+    "babel-plugin-dynamic-import-node": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz",
+      "integrity": "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=",
+      "dev": true,
+      "requires": {
+        "object.assign": "^4.1.0"
+      }
+    },
+    "babel-plugin-polyfill-corejs2": {
+      "version": "0.2.2",
+      "resolved": "https://registry.nlark.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.2.2.tgz",
+      "integrity": "sha1-6RJHheb9lPlLYYp5VOVpMFO/Uyc=",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.13.11",
+        "@babel/helper-define-polyfill-provider": "^0.2.2",
+        "semver": "^6.1.1"
+      }
+    },
+    "babel-plugin-polyfill-corejs3": {
+      "version": "0.2.3",
+      "resolved": "https://registry.nlark.com/babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.2.3.tgz?cache=0&sync_timestamp=1623878015630&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-polyfill-corejs3%2Fdownload%2Fbabel-plugin-polyfill-corejs3-0.2.3.tgz",
+      "integrity": "sha1-cq3WjPCKi/E5um5t/AsdUECY5Xs=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-define-polyfill-provider": "^0.2.2",
+        "core-js-compat": "^3.14.0"
+      }
+    },
+    "babel-plugin-polyfill-regenerator": {
+      "version": "0.2.2",
+      "resolved": "https://registry.nlark.com/babel-plugin-polyfill-regenerator/download/babel-plugin-polyfill-regenerator-0.2.2.tgz",
+      "integrity": "sha1-sxDI1kKsraNIwfo7Pmzg6FG+4Hc=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-define-polyfill-provider": "^0.2.2"
+      }
+    },
+    "balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&sync_timestamp=1617714298273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz",
+      "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4="
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz",
+      "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
+      "dev": true,
+      "requires": {
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        }
+      }
+    },
+    "base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.5.1.tgz",
+      "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=",
+      "dev": true
+    },
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "dev": true,
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "bfj": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz",
+      "integrity": "sha1-MlyGGoIryzWKQceKM7jm4ght3n8=",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.5",
+        "check-types": "^8.0.3",
+        "hoopy": "^0.1.4",
+        "tryer": "^1.0.1"
+      }
+    },
+    "big.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.nlark.com/big.js/download/big.js-5.2.2.tgz",
+      "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=",
+      "dev": true
+    },
+    "binary-extensions": {
+      "version": "1.13.1",
+      "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1610299322955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz",
+      "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
+      "dev": true
+    },
+    "bindings": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "file-uri-to-path": "1.0.0"
+      }
+    },
+    "bluebird": {
+      "version": "3.7.2",
+      "resolved": "https://registry.nlark.com/bluebird/download/bluebird-3.7.2.tgz",
+      "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=",
+      "dev": true
+    },
+    "bn.js": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.2.0.tgz",
+      "integrity": "sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI=",
+      "dev": true
+    },
+    "body-parser": {
+      "version": "1.19.0",
+      "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz",
+      "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=",
+      "dev": true,
+      "requires": {
+        "bytes": "3.1.0",
+        "content-type": "~1.0.4",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "on-finished": "~2.3.0",
+        "qs": "6.7.0",
+        "raw-body": "2.4.0",
+        "type-is": "~1.6.17"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+          "dev": true
+        },
+        "qs": {
+          "version": "6.7.0",
+          "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz",
+          "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=",
+          "dev": true
+        }
+      }
+    },
+    "bonjour": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz",
+      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+      "dev": true,
+      "requires": {
+        "array-flatten": "^2.1.0",
+        "deep-equal": "^1.0.1",
+        "dns-equal": "^1.0.0",
+        "dns-txt": "^2.0.2",
+        "multicast-dns": "^6.0.1",
+        "multicast-dns-service-types": "^1.1.0"
+      },
+      "dependencies": {
+        "array-flatten": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz",
+          "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=",
+          "dev": true
+        }
+      }
+    },
+    "boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/boolbase/download/boolbase-1.0.0.tgz",
+      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+      "dev": true
+    },
+    "bowser": {
+      "version": "1.9.4",
+      "resolved": "https://registry.npmmirror.com/bowser/-/bowser-1.9.4.tgz",
+      "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ=="
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz",
+      "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "2.3.2",
+      "resolved": "https://registry.nlark.com/braces/download/braces-2.3.2.tgz",
+      "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
+      "dev": true,
+      "requires": {
+        "arr-flatten": "^1.1.0",
+        "array-unique": "^0.3.2",
+        "extend-shallow": "^2.0.1",
+        "fill-range": "^4.0.0",
+        "isobject": "^3.0.1",
+        "repeat-element": "^1.1.2",
+        "snapdragon": "^0.8.1",
+        "snapdragon-node": "^2.0.1",
+        "split-string": "^3.0.2",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz",
+          "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+          "dev": true
+        }
+      }
+    },
+    "brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz",
+      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+      "dev": true
+    },
+    "browser-process-hrtime": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz",
+      "integrity": "sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY=",
+      "dev": true
+    },
+    "browser-stdout": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.1.tgz",
+      "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=",
+      "dev": true
+    },
+    "browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz",
+      "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=",
+      "dev": true,
+      "requires": {
+        "buffer-xor": "^1.0.3",
+        "cipher-base": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.3",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "browserify-cipher": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz",
+      "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=",
+      "dev": true,
+      "requires": {
+        "browserify-aes": "^1.0.4",
+        "browserify-des": "^1.0.0",
+        "evp_bytestokey": "^1.0.0"
+      }
+    },
+    "browserify-des": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/browserify-des/download/browserify-des-1.0.2.tgz",
+      "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "browserify-rsa": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.1.0.tgz?cache=0&sync_timestamp=1605194257215&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-rsa%2Fdownload%2Fbrowserify-rsa-4.1.0.tgz",
+      "integrity": "sha1-sv0Gtbda4pf3zi3GUfkY9b4VjI0=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^5.0.0",
+        "randombytes": "^2.0.1"
+      }
+    },
+    "browserify-sign": {
+      "version": "4.2.1",
+      "resolved": "https://registry.nlark.com/browserify-sign/download/browserify-sign-4.2.1.tgz",
+      "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^5.1.1",
+        "browserify-rsa": "^4.0.1",
+        "create-hash": "^1.2.0",
+        "create-hmac": "^1.1.7",
+        "elliptic": "^6.5.3",
+        "inherits": "^2.0.4",
+        "parse-asn1": "^5.1.5",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz",
+          "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=",
+          "dev": true
+        }
+      }
+    },
+    "browserify-zlib": {
+      "version": "0.2.0",
+      "resolved": "https://registry.nlark.com/browserify-zlib/download/browserify-zlib-0.2.0.tgz",
+      "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
+      "dev": true,
+      "requires": {
+        "pako": "~1.0.5"
+      }
+    },
+    "browserslist": {
+      "version": "4.16.6",
+      "resolved": "https://registry.nlark.com/browserslist/download/browserslist-4.16.6.tgz?cache=0&sync_timestamp=1619789072079&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.16.6.tgz",
+      "integrity": "sha1-15ASd6WojlVO0wWxg+ybDAj2b6I=",
+      "dev": true,
+      "requires": {
+        "caniuse-lite": "^1.0.30001219",
+        "colorette": "^1.2.2",
+        "electron-to-chromium": "^1.3.723",
+        "escalade": "^3.1.1",
+        "node-releases": "^1.1.71"
+      }
+    },
+    "buffer": {
+      "version": "4.9.2",
+      "resolved": "https://registry.nlark.com/buffer/download/buffer-4.9.2.tgz",
+      "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=",
+      "dev": true,
+      "requires": {
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
+      }
+    },
+    "buffer-from": {
+      "version": "1.1.1",
+      "resolved": "https://registry.nlark.com/buffer-from/download/buffer-from-1.1.1.tgz",
+      "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=",
+      "dev": true
+    },
+    "buffer-indexof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz",
+      "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=",
+      "dev": true
+    },
+    "buffer-json": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/buffer-json/download/buffer-json-2.0.0.tgz",
+      "integrity": "sha1-9z4TseQvGW/i/WfQAcfXEH7dfCM=",
+      "dev": true
+    },
+    "buffer-xor": {
+      "version": "1.0.3",
+      "resolved": "https://registry.nlark.com/buffer-xor/download/buffer-xor-1.0.3.tgz",
+      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+      "dev": true
+    },
+    "builtin-status-codes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz",
+      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
+    },
+    "bytes": {
+      "version": "3.1.0",
+      "resolved": "https://registry.nlark.com/bytes/download/bytes-3.1.0.tgz",
+      "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY="
+    },
+    "cacache": {
+      "version": "12.0.4",
+      "resolved": "https://registry.nlark.com/cacache/download/cacache-12.0.4.tgz?cache=0&sync_timestamp=1621949700715&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcacache%2Fdownload%2Fcacache-12.0.4.tgz",
+      "integrity": "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw=",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.5",
+        "chownr": "^1.1.1",
+        "figgy-pudding": "^3.5.1",
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.1.15",
+        "infer-owner": "^1.0.3",
+        "lru-cache": "^5.1.1",
+        "mississippi": "^3.0.0",
+        "mkdirp": "^0.5.1",
+        "move-concurrently": "^1.0.1",
+        "promise-inflight": "^1.0.1",
+        "rimraf": "^2.6.3",
+        "ssri": "^6.0.1",
+        "unique-filename": "^1.1.1",
+        "y18n": "^4.0.0"
+      },
+      "dependencies": {
+        "ssri": {
+          "version": "6.0.2",
+          "resolved": "https://registry.nlark.com/ssri/download/ssri-6.0.2.tgz?cache=0&sync_timestamp=1621364918494&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fssri%2Fdownload%2Fssri-6.0.2.tgz",
+          "integrity": "sha1-FXk5E08gRk5zAd26PpD/qPdyisU=",
+          "dev": true,
+          "requires": {
+            "figgy-pudding": "^3.5.1"
+          }
+        }
+      }
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz",
+      "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
+      "dev": true,
+      "requires": {
+        "collection-visit": "^1.0.0",
+        "component-emitter": "^1.2.1",
+        "get-value": "^2.0.6",
+        "has-value": "^1.0.0",
+        "isobject": "^3.0.1",
+        "set-value": "^2.0.0",
+        "to-object-path": "^0.3.0",
+        "union-value": "^1.0.0",
+        "unset-value": "^1.0.0"
+      }
+    },
+    "cache-loader": {
+      "version": "4.1.0",
+      "resolved": "https://registry.nlark.com/cache-loader/download/cache-loader-4.1.0.tgz",
+      "integrity": "sha1-mUjK41OuwKH8ser9ojAIFuyFOH4=",
+      "dev": true,
+      "requires": {
+        "buffer-json": "^2.0.0",
+        "find-cache-dir": "^3.0.0",
+        "loader-utils": "^1.2.3",
+        "mkdirp": "^0.5.1",
+        "neo-async": "^2.6.1",
+        "schema-utils": "^2.0.0"
+      }
+    },
+    "call-bind": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/call-bind/download/call-bind-1.0.2.tgz",
+      "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1",
+        "get-intrinsic": "^1.0.2"
+      }
+    },
+    "call-me-maybe": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz",
+      "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+      "dev": true
+    },
+    "caller-callsite": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz",
+      "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+      "dev": true,
+      "requires": {
+        "callsites": "^2.0.0"
+      }
+    },
+    "caller-path": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz?cache=0&sync_timestamp=1618738159926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaller-path%2Fdownload%2Fcaller-path-2.0.0.tgz",
+      "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+      "dev": true,
+      "requires": {
+        "caller-callsite": "^2.0.0"
+      }
+    },
+    "callsites": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/callsites/download/callsites-2.0.0.tgz",
+      "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+      "dev": true
+    },
+    "camel-case": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz?cache=0&sync_timestamp=1606867311564&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-3.0.0.tgz",
+      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0",
+        "upper-case": "^1.1.1"
+      }
+    },
+    "camelcase": {
+      "version": "6.2.0",
+      "resolved": "https://registry.nlark.com/camelcase/download/camelcase-6.2.0.tgz",
+      "integrity": "sha1-kkr4gcnVJaydh/QNlk5c6pgqGAk=",
+      "dev": true
+    },
+    "caniuse-api": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/caniuse-api/download/caniuse-api-3.0.0.tgz",
+      "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "caniuse-lite": "^1.0.0",
+        "lodash.memoize": "^4.1.2",
+        "lodash.uniq": "^4.5.0"
+      }
+    },
+    "caniuse-lite": {
+      "version": "1.0.30001245",
+      "resolved": "https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001245.tgz?cache=0&sync_timestamp=1626238653626&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001245.tgz",
+      "integrity": "sha1-RblBu9gzyw+lOGH/K650azxspdQ=",
+      "dev": true
+    },
+    "case-sensitive-paths-webpack-plugin": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npm.taobao.org/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
+      "integrity": "sha1-22QGbGQi7tLgjMFLmGykN5bbxtQ=",
+      "dev": true
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.nlark.com/caseless/download/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+      "dev": true
+    },
+    "chai": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npm.taobao.org/chai/download/chai-4.3.4.tgz",
+      "integrity": "sha1-tV5lWzHh6scJm+TAjCGWT84ubEk=",
+      "dev": true,
+      "requires": {
+        "assertion-error": "^1.1.0",
+        "check-error": "^1.0.2",
+        "deep-eql": "^3.0.1",
+        "get-func-name": "^2.0.0",
+        "pathval": "^1.1.1",
+        "type-detect": "^4.0.5"
+      }
+    },
+    "chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1618995354302&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz",
+      "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      }
+    },
+    "chardet": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz",
+      "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=",
+      "dev": true
+    },
+    "check-error": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/check-error/download/check-error-1.0.2.tgz",
+      "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+      "dev": true
+    },
+    "check-types": {
+      "version": "8.0.3",
+      "resolved": "https://registry.npm.taobao.org/check-types/download/check-types-8.0.3.tgz",
+      "integrity": "sha1-M1bMoZyIlUTy16le1JzlCKDs9VI=",
+      "dev": true
+    },
+    "chokidar": {
+      "version": "2.1.8",
+      "resolved": "https://registry.nlark.com/chokidar/download/chokidar-2.1.8.tgz",
+      "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
+      "dev": true,
+      "requires": {
+        "anymatch": "^2.0.0",
+        "async-each": "^1.0.1",
+        "braces": "^2.3.2",
+        "fsevents": "^1.2.7",
+        "glob-parent": "^3.1.0",
+        "inherits": "^2.0.3",
+        "is-binary-path": "^1.0.0",
+        "is-glob": "^4.0.0",
+        "normalize-path": "^3.0.0",
+        "path-is-absolute": "^1.0.0",
+        "readdirp": "^2.2.1",
+        "upath": "^1.1.1"
+      },
+      "dependencies": {
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-2.0.0.tgz",
+          "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+          "dev": true,
+          "requires": {
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          },
+          "dependencies": {
+            "normalize-path": {
+              "version": "2.1.1",
+              "resolved": "https://registry.nlark.com/normalize-path/download/normalize-path-2.1.1.tgz",
+              "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+              "dev": true,
+              "requires": {
+                "remove-trailing-separator": "^1.0.1"
+              }
+            }
+          }
+        }
+      }
+    },
+    "chownr": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz",
+      "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=",
+      "dev": true
+    },
+    "chrome-trace-event": {
+      "version": "1.0.3",
+      "resolved": "https://registry.nlark.com/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz",
+      "integrity": "sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw=",
+      "dev": true
+    },
+    "ci-info": {
+      "version": "1.6.0",
+      "resolved": "https://registry.nlark.com/ci-info/download/ci-info-1.6.0.tgz?cache=0&sync_timestamp=1622039942508&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fci-info%2Fdownload%2Fci-info-1.6.0.tgz",
+      "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=",
+      "dev": true
+    },
+    "cipher-base": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz",
+      "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz",
+      "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+          "dev": true
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
+          "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        }
+      }
+    },
+    "clean-css": {
+      "version": "4.2.3",
+      "resolved": "https://registry.nlark.com/clean-css/download/clean-css-4.2.3.tgz?cache=0&sync_timestamp=1624616709466&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fclean-css%2Fdownload%2Fclean-css-4.2.3.tgz",
+      "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=",
+      "dev": true,
+      "requires": {
+        "source-map": "~0.6.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "cli-cursor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.nlark.com/cli-cursor/download/cli-cursor-3.1.0.tgz",
+      "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=",
+      "dev": true,
+      "requires": {
+        "restore-cursor": "^3.1.0"
+      }
+    },
+    "cli-highlight": {
+      "version": "2.1.11",
+      "resolved": "https://registry.npm.taobao.org/cli-highlight/download/cli-highlight-2.1.11.tgz?cache=0&sync_timestamp=1616955426054&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-highlight%2Fdownload%2Fcli-highlight-2.1.11.tgz",
+      "integrity": "sha1-SXNvpFLwqvT65YDjCssmgo0twb8=",
+      "dev": true,
+      "requires": {
+        "chalk": "^4.0.0",
+        "highlight.js": "^10.7.1",
+        "mz": "^2.4.0",
+        "parse5": "^5.1.1",
+        "parse5-htmlparser2-tree-adapter": "^6.0.0",
+        "yargs": "^16.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1618995547052&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.1",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995354302&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz",
+          "integrity": "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "cli-spinners": {
+      "version": "2.6.0",
+      "resolved": "https://registry.nlark.com/cli-spinners/download/cli-spinners-2.6.0.tgz",
+      "integrity": "sha1-NsfcmPtqmna9YjjsP3fiQlYn6Tk=",
+      "dev": true
+    },
+    "cli-width": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/cli-width/download/cli-width-3.0.0.tgz",
+      "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=",
+      "dev": true
+    },
+    "clipboardy": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/clipboardy/download/clipboardy-2.3.0.tgz",
+      "integrity": "sha1-PCkDZQxo5GqRs4iYW8J3QofbopA=",
+      "dev": true,
+      "requires": {
+        "arch": "^2.1.1",
+        "execa": "^1.0.0",
+        "is-wsl": "^2.1.1"
+      }
+    },
+    "cliui": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-6.0.0.tgz",
+      "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=",
+      "requires": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^6.2.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz",
+          "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U="
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&sync_timestamp=1618552469710&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0="
+        },
+        "string-width": {
+          "version": "4.2.2",
+          "resolved": "https://registry.nlark.com/string-width/download/string-width-4.2.2.tgz",
+          "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=",
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "6.0.0",
+          "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-6.0.0.tgz",
+          "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=",
+          "requires": {
+            "ansi-regex": "^5.0.0"
+          }
+        }
+      }
+    },
+    "clone": {
+      "version": "1.0.4",
+      "resolved": "https://registry.nlark.com/clone/download/clone-1.0.4.tgz",
+      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+      "dev": true
+    },
+    "coa": {
+      "version": "2.0.2",
+      "resolved": "https://registry.nlark.com/coa/download/coa-2.0.2.tgz",
+      "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=",
+      "dev": true,
+      "requires": {
+        "@types/q": "^1.5.1",
+        "chalk": "^2.4.1",
+        "q": "^1.1.2"
+      }
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/collection-visit/download/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "dev": true,
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npm.taobao.org/color/download/color-3.1.3.tgz",
+      "integrity": "sha1-ymf7TnuX1hHc3jns7tQiBn2RWW4=",
+      "dev": true,
+      "requires": {
+        "color-convert": "^1.9.1",
+        "color-string": "^1.5.4"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz",
+      "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+      "dev": true,
+      "requires": {
+        "color-name": "1.1.3"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+      "dev": true
+    },
+    "color-string": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npm.taobao.org/color-string/download/color-string-1.5.5.tgz",
+      "integrity": "sha1-ZUdKjw50OWJfPSemoZ2J/EUiMBQ=",
+      "dev": true,
+      "requires": {
+        "color-name": "^1.0.0",
+        "simple-swizzle": "^0.2.2"
+      }
+    },
+    "colorette": {
+      "version": "1.2.2",
+      "resolved": "https://registry.nlark.com/colorette/download/colorette-1.2.2.tgz?cache=0&sync_timestamp=1618847174680&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcolorette%2Fdownload%2Fcolorette-1.2.2.tgz",
+      "integrity": "sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ="
+    },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz",
+      "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=",
+      "dev": true,
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
+    "commander": {
+      "version": "2.17.1",
+      "resolved": "https://registry.nlark.com/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1624609533517&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz",
+      "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=",
+      "dev": true
+    },
+    "commondir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz",
+      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+      "dev": true
+    },
+    "component-emitter": {
+      "version": "1.3.0",
+      "resolved": "https://registry.nlark.com/component-emitter/download/component-emitter-1.3.0.tgz",
+      "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=",
+      "dev": true
+    },
+    "compressible": {
+      "version": "2.0.18",
+      "resolved": "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz",
+      "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=",
+      "dev": true,
+      "requires": {
+        "mime-db": ">= 1.43.0 < 2"
+      }
+    },
+    "compression": {
+      "version": "1.7.4",
+      "resolved": "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz",
+      "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.5",
+        "bytes": "3.0.0",
+        "compressible": "~2.0.16",
+        "debug": "2.6.9",
+        "on-headers": "~1.0.2",
+        "safe-buffer": "5.1.2",
+        "vary": "~1.1.2"
+      },
+      "dependencies": {
+        "bytes": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/bytes/download/bytes-3.0.0.tgz",
+          "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+          "dev": true
+        },
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+          "dev": true
+        }
+      }
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+    },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.nlark.com/concat-stream/download/concat-stream-1.6.2.tgz",
+      "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "connect-history-api-fallback": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz",
+      "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=",
+      "dev": true
+    },
+    "console-browserify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz",
+      "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=",
+      "dev": true
+    },
+    "consolidate": {
+      "version": "0.15.1",
+      "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz",
+      "integrity": "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc=",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.1.1"
+      }
+    },
+    "constants-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz",
+      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+      "dev": true
+    },
+    "content-disposition": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz",
+      "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "content-type": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz",
+      "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js="
+    },
+    "convert-source-map": {
+      "version": "1.8.0",
+      "resolved": "https://registry.nlark.com/convert-source-map/download/convert-source-map-1.8.0.tgz",
+      "integrity": "sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.1.1"
+      }
+    },
+    "cookie": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz",
+      "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=",
+      "dev": true
+    },
+    "cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz",
+      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+      "dev": true
+    },
+    "copy-anything": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npm.taobao.org/copy-anything/download/copy-anything-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-anything%2Fdownload%2Fcopy-anything-2.0.3.tgz",
+      "integrity": "sha1-hCQHugJGaw34RIGbvjuuu+XUXYc=",
+      "requires": {
+        "is-what": "^3.12.0"
+      }
+    },
+    "copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1",
+        "fs-write-stream-atomic": "^1.0.8",
+        "iferr": "^0.1.5",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.0"
+      }
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.nlark.com/copy-descriptor/download/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+      "dev": true
+    },
+    "copy-to": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/copy-to/-/copy-to-2.0.1.tgz",
+      "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w=="
+    },
+    "copy-webpack-plugin": {
+      "version": "5.1.2",
+      "resolved": "https://registry.nlark.com/copy-webpack-plugin/download/copy-webpack-plugin-5.1.2.tgz?cache=0&sync_timestamp=1624628458516&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-5.1.2.tgz",
+      "integrity": "sha1-ioieHcr6bJHGzUvhrRWPHTgjuuI=",
+      "dev": true,
+      "requires": {
+        "cacache": "^12.0.3",
+        "find-cache-dir": "^2.1.0",
+        "glob-parent": "^3.1.0",
+        "globby": "^7.1.1",
+        "is-glob": "^4.0.1",
+        "loader-utils": "^1.2.3",
+        "minimatch": "^3.0.4",
+        "normalize-path": "^3.0.0",
+        "p-limit": "^2.2.1",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^4.0.0",
+        "webpack-log": "^2.0.0"
+      },
+      "dependencies": {
+        "find-cache-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz",
+          "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=",
+          "dev": true,
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^2.0.0",
+            "pkg-dir": "^3.0.0"
+          }
+        },
+        "globby": {
+          "version": "7.1.1",
+          "resolved": "https://registry.nlark.com/globby/download/globby-7.1.1.tgz",
+          "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+          "dev": true,
+          "requires": {
+            "array-union": "^1.0.1",
+            "dir-glob": "^2.0.0",
+            "glob": "^7.1.2",
+            "ignore": "^3.3.5",
+            "pify": "^3.0.0",
+            "slash": "^1.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz",
+              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+              "dev": true
+            }
+          }
+        },
+        "ignore": {
+          "version": "3.3.10",
+          "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz",
+          "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
+          "dev": true
+        },
+        "make-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.nlark.com/make-dir/download/make-dir-2.1.0.tgz",
+          "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
+          "dev": true,
+          "requires": {
+            "pify": "^4.0.1",
+            "semver": "^5.6.0"
+          }
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/pkg-dir/download/pkg-dir-3.0.0.tgz?cache=0&sync_timestamp=1618847182947&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-3.0.0.tgz",
+          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1625484933876&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz",
+          "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+          "dev": true
+        },
+        "slash": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
+          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+          "dev": true
+        }
+      }
+    },
+    "core-js": {
+      "version": "3.15.2",
+      "resolved": "https://registry.nlark.com/core-js/download/core-js-3.15.2.tgz?cache=0&sync_timestamp=1624966012065&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-js%2Fdownload%2Fcore-js-3.15.2.tgz",
+      "integrity": "sha1-dAZg0v9V7zTOZk1+JFURnFvdPWE="
+    },
+    "core-js-compat": {
+      "version": "3.15.2",
+      "resolved": "https://registry.nlark.com/core-js-compat/download/core-js-compat-3.15.2.tgz?cache=0&sync_timestamp=1624966048946&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-js-compat%2Fdownload%2Fcore-js-compat-3.15.2.tgz",
+      "integrity": "sha1-Rycvu0eYgN4UtOYIH3HzSS9b08s=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.16.6",
+        "semver": "7.0.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "7.0.0",
+          "resolved": "https://registry.nlark.com/semver/download/semver-7.0.0.tgz",
+          "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=",
+          "dev": true
+        }
+      }
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+    },
+    "cosmiconfig": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz",
+      "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=",
+      "dev": true,
+      "requires": {
+        "import-fresh": "^2.0.0",
+        "is-directory": "^0.3.1",
+        "js-yaml": "^3.13.1",
+        "parse-json": "^4.0.0"
+      }
+    },
+    "create-ecdh": {
+      "version": "4.0.4",
+      "resolved": "https://registry.nlark.com/create-ecdh/download/create-ecdh-4.0.4.tgz",
+      "integrity": "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.5.3"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+          "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=",
+          "dev": true
+        }
+      }
+    },
+    "create-hash": {
+      "version": "1.2.0",
+      "resolved": "https://registry.nlark.com/create-hash/download/create-hash-1.2.0.tgz",
+      "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "inherits": "^2.0.1",
+        "md5.js": "^1.3.4",
+        "ripemd160": "^2.0.1",
+        "sha.js": "^2.4.0"
+      }
+    },
+    "create-hmac": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz",
+      "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.3",
+        "create-hash": "^1.1.0",
+        "inherits": "^2.0.1",
+        "ripemd160": "^2.0.0",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      }
+    },
+    "cross-env": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
+      "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^7.0.1"
+      }
+    },
+    "cross-spawn": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "dev": true,
+      "requires": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      }
+    },
+    "crypto-browserify": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz",
+      "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
+      "dev": true,
+      "requires": {
+        "browserify-cipher": "^1.0.0",
+        "browserify-sign": "^4.0.0",
+        "create-ecdh": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.0",
+        "diffie-hellman": "^5.0.0",
+        "inherits": "^2.0.1",
+        "pbkdf2": "^3.0.3",
+        "public-encrypt": "^4.0.0",
+        "randombytes": "^2.0.0",
+        "randomfill": "^1.0.3"
+      }
+    },
+    "css": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npm.taobao.org/css/download/css-2.2.4.tgz",
+      "integrity": "sha1-xkZ1XHOXHyu6amAeLPL9cbEpiSk=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "source-map": "^0.6.1",
+        "source-map-resolve": "^0.5.2",
+        "urix": "^0.1.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "css-color-names": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz",
+      "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+      "dev": true
+    },
+    "css-declaration-sorter": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz?cache=0&sync_timestamp=1620754845858&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-declaration-sorter%2Fdownload%2Fcss-declaration-sorter-4.0.1.tgz",
+      "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.1",
+        "timsort": "^0.3.0"
+      }
+    },
+    "css-loader": {
+      "version": "3.6.0",
+      "resolved": "https://registry.nlark.com/css-loader/download/css-loader-3.6.0.tgz",
+      "integrity": "sha1-Lkssfm4tJ/jI8o9hv/zS5ske9kU=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^5.3.1",
+        "cssesc": "^3.0.0",
+        "icss-utils": "^4.1.1",
+        "loader-utils": "^1.2.3",
+        "normalize-path": "^3.0.0",
+        "postcss": "^7.0.32",
+        "postcss-modules-extract-imports": "^2.0.0",
+        "postcss-modules-local-by-default": "^3.0.2",
+        "postcss-modules-scope": "^2.2.0",
+        "postcss-modules-values": "^3.0.0",
+        "postcss-value-parser": "^4.1.0",
+        "schema-utils": "^2.7.0",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.nlark.com/camelcase/download/camelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        }
+      }
+    },
+    "css-parse": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/css-parse/download/css-parse-2.0.0.tgz",
+      "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=",
+      "dev": true,
+      "requires": {
+        "css": "^2.0.0"
+      }
+    },
+    "css-select": {
+      "version": "4.1.3",
+      "resolved": "https://registry.nlark.com/css-select/download/css-select-4.1.3.tgz",
+      "integrity": "sha1-pwRA9wMX8maRGK10/xBeZYSccGc=",
+      "dev": true,
+      "requires": {
+        "boolbase": "^1.0.0",
+        "css-what": "^5.0.0",
+        "domhandler": "^4.2.0",
+        "domutils": "^2.6.0",
+        "nth-check": "^2.0.0"
+      }
+    },
+    "css-select-base-adapter": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz",
+      "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=",
+      "dev": true
+    },
+    "css-tree": {
+      "version": "1.0.0-alpha.37",
+      "resolved": "https://registry.nlark.com/css-tree/download/css-tree-1.0.0-alpha.37.tgz",
+      "integrity": "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI=",
+      "dev": true,
+      "requires": {
+        "mdn-data": "2.0.4",
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "css-what": {
+      "version": "5.0.1",
+      "resolved": "https://registry.nlark.com/css-what/download/css-what-5.0.1.tgz?cache=0&sync_timestamp=1622227630859&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-what%2Fdownload%2Fcss-what-5.0.1.tgz",
+      "integrity": "sha1-PvqCATH0ZpqKwkCPnDLnx96fTK0=",
+      "dev": true
+    },
+    "cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
+      "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=",
+      "dev": true
+    },
+    "cssnano": {
+      "version": "4.1.11",
+      "resolved": "https://registry.nlark.com/cssnano/download/cssnano-4.1.11.tgz?cache=0&sync_timestamp=1623330418944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssnano%2Fdownload%2Fcssnano-4.1.11.tgz",
+      "integrity": "sha1-x7X1uB2iacsf2YLLlgwSAJEMmpk=",
+      "dev": true,
+      "requires": {
+        "cosmiconfig": "^5.0.0",
+        "cssnano-preset-default": "^4.0.8",
+        "is-resolvable": "^1.0.0",
+        "postcss": "^7.0.0"
+      }
+    },
+    "cssnano-preset-default": {
+      "version": "4.0.8",
+      "resolved": "https://registry.nlark.com/cssnano-preset-default/download/cssnano-preset-default-4.0.8.tgz?cache=0&sync_timestamp=1623330257156&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssnano-preset-default%2Fdownload%2Fcssnano-preset-default-4.0.8.tgz",
+      "integrity": "sha1-kgYisfwelaNOiDggPxOXpQTy0/8=",
+      "dev": true,
+      "requires": {
+        "css-declaration-sorter": "^4.0.1",
+        "cssnano-util-raw-cache": "^4.0.1",
+        "postcss": "^7.0.0",
+        "postcss-calc": "^7.0.1",
+        "postcss-colormin": "^4.0.3",
+        "postcss-convert-values": "^4.0.1",
+        "postcss-discard-comments": "^4.0.2",
+        "postcss-discard-duplicates": "^4.0.2",
+        "postcss-discard-empty": "^4.0.1",
+        "postcss-discard-overridden": "^4.0.1",
+        "postcss-merge-longhand": "^4.0.11",
+        "postcss-merge-rules": "^4.0.3",
+        "postcss-minify-font-values": "^4.0.2",
+        "postcss-minify-gradients": "^4.0.2",
+        "postcss-minify-params": "^4.0.2",
+        "postcss-minify-selectors": "^4.0.2",
+        "postcss-normalize-charset": "^4.0.1",
+        "postcss-normalize-display-values": "^4.0.2",
+        "postcss-normalize-positions": "^4.0.2",
+        "postcss-normalize-repeat-style": "^4.0.2",
+        "postcss-normalize-string": "^4.0.2",
+        "postcss-normalize-timing-functions": "^4.0.2",
+        "postcss-normalize-unicode": "^4.0.1",
+        "postcss-normalize-url": "^4.0.1",
+        "postcss-normalize-whitespace": "^4.0.2",
+        "postcss-ordered-values": "^4.1.2",
+        "postcss-reduce-initial": "^4.0.3",
+        "postcss-reduce-transforms": "^4.0.2",
+        "postcss-svgo": "^4.0.3",
+        "postcss-unique-selectors": "^4.0.1"
+      }
+    },
+    "cssnano-util-get-arguments": {
+      "version": "4.0.0",
+      "resolved": "https://registry.nlark.com/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz",
+      "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
+      "dev": true
+    },
+    "cssnano-util-get-match": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz",
+      "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
+      "dev": true
+    },
+    "cssnano-util-raw-cache": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz",
+      "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "cssnano-util-same-parent": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz",
+      "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=",
+      "dev": true
+    },
+    "csso": {
+      "version": "4.2.0",
+      "resolved": "https://registry.nlark.com/csso/download/csso-4.2.0.tgz",
+      "integrity": "sha1-6jpWE0bo3J9UbW/r7dUBh884lSk=",
+      "dev": true,
+      "requires": {
+        "css-tree": "^1.1.2"
+      },
+      "dependencies": {
+        "css-tree": {
+          "version": "1.1.3",
+          "resolved": "https://registry.nlark.com/css-tree/download/css-tree-1.1.3.tgz",
+          "integrity": "sha1-60hw+2/XcHMn7JXC/yqwm16NuR0=",
+          "dev": true,
+          "requires": {
+            "mdn-data": "2.0.14",
+            "source-map": "^0.6.1"
+          }
+        },
+        "mdn-data": {
+          "version": "2.0.14",
+          "resolved": "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.14.tgz",
+          "integrity": "sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "cssom": {
+      "version": "0.4.4",
+      "resolved": "https://registry.nlark.com/cssom/download/cssom-0.4.4.tgz?cache=0&sync_timestamp=1624219249710&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssom%2Fdownload%2Fcssom-0.4.4.tgz",
+      "integrity": "sha1-WmbPk9LQtmHYC/akT7ZfXC5OChA=",
+      "dev": true
+    },
+    "cssstyle": {
+      "version": "2.3.0",
+      "resolved": "https://registry.nlark.com/cssstyle/download/cssstyle-2.3.0.tgz",
+      "integrity": "sha1-/2ZaDdvcMYZLCWR/NBY0Q9kLCFI=",
+      "dev": true,
+      "requires": {
+        "cssom": "~0.3.6"
+      },
+      "dependencies": {
+        "cssom": {
+          "version": "0.3.8",
+          "resolved": "https://registry.nlark.com/cssom/download/cssom-0.3.8.tgz?cache=0&sync_timestamp=1624219249710&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssom%2Fdownload%2Fcssom-0.3.8.tgz",
+          "integrity": "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=",
+          "dev": true
+        }
+      }
+    },
+    "csstype": {
+      "version": "2.6.20",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz",
+      "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA=="
+    },
+    "cyclist": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz",
+      "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
+      "dev": true
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "data-uri-to-buffer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
+      "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og=="
+    },
+    "data-urls": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/data-urls/download/data-urls-1.1.0.tgz",
+      "integrity": "sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4=",
+      "dev": true,
+      "requires": {
+        "abab": "^2.0.0",
+        "whatwg-mimetype": "^2.2.0",
+        "whatwg-url": "^7.0.0"
+      }
+    },
+    "dateformat": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/dateformat/-/dateformat-2.2.0.tgz",
+      "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw=="
+    },
+    "dayjs": {
+      "version": "1.11.5",
+      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz",
+      "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA=="
+    },
+    "debug": {
+      "version": "4.3.2",
+      "resolved": "https://registry.nlark.com/debug/download/debug-4.3.2.tgz",
+      "integrity": "sha1-8KScGKyHeeMdSgxgKd+3aHPHQos=",
+      "requires": {
+        "ms": "2.1.2"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.nlark.com/decamelize/download/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+    },
+    "decode-uri-component": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz",
+      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+      "dev": true
+    },
+    "deep-eql": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npm.taobao.org/deep-eql/download/deep-eql-3.0.1.tgz",
+      "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=",
+      "dev": true,
+      "requires": {
+        "type-detect": "^4.0.0"
+      }
+    },
+    "deep-equal": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz?cache=0&sync_timestamp=1606860101281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz",
+      "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=",
+      "dev": true,
+      "requires": {
+        "is-arguments": "^1.0.4",
+        "is-date-object": "^1.0.1",
+        "is-regex": "^1.0.4",
+        "object-is": "^1.0.1",
+        "object-keys": "^1.1.1",
+        "regexp.prototype.flags": "^1.2.0"
+      }
+    },
+    "deep-is": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz",
+      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
+    },
+    "deepmerge": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1606805746825&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz",
+      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=",
+      "dev": true
+    },
+    "default-gateway": {
+      "version": "5.0.5",
+      "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-5.0.5.tgz?cache=0&sync_timestamp=1610365816953&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-5.0.5.tgz",
+      "integrity": "sha1-T9a9XShV05s0zFpZUFSG6ar8mxA=",
+      "dev": true,
+      "requires": {
+        "execa": "^3.3.0"
+      },
+      "dependencies": {
+        "execa": {
+          "version": "3.4.0",
+          "resolved": "https://registry.nlark.com/execa/download/execa-3.4.0.tgz?cache=0&sync_timestamp=1622825859616&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fexeca%2Fdownload%2Fexeca-3.4.0.tgz",
+          "integrity": "sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^7.0.0",
+            "get-stream": "^5.0.0",
+            "human-signals": "^1.1.1",
+            "is-stream": "^2.0.0",
+            "merge-stream": "^2.0.0",
+            "npm-run-path": "^4.0.0",
+            "onetime": "^5.1.0",
+            "p-finally": "^2.0.0",
+            "signal-exit": "^3.0.2",
+            "strip-final-newline": "^2.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "5.2.0",
+          "resolved": "https://registry.nlark.com/get-stream/download/get-stream-5.2.0.tgz",
+          "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "is-stream": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz",
+          "integrity": "sha1-venDJoDW+uBBKdasnZIc54FfeOM=",
+          "dev": true
+        },
+        "npm-run-path": {
+          "version": "4.0.1",
+          "resolved": "https://registry.nlark.com/npm-run-path/download/npm-run-path-4.0.1.tgz",
+          "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "p-finally": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz",
+          "integrity": "sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE=",
+          "dev": true
+        }
+      }
+    },
+    "default-user-agent": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/default-user-agent/-/default-user-agent-1.0.0.tgz",
+      "integrity": "sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==",
+      "requires": {
+        "os-name": "~1.0.3"
+      }
+    },
+    "defaults": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz",
+      "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+      "dev": true,
+      "requires": {
+        "clone": "^1.0.2"
+      }
+    },
+    "define-properties": {
+      "version": "1.1.3",
+      "resolved": "https://registry.nlark.com/define-properties/download/define-properties-1.1.3.tgz",
+      "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
+      "dev": true,
+      "requires": {
+        "object-keys": "^1.0.12"
+      }
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz",
+      "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=",
+      "dev": true,
+      "requires": {
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
+      }
+    },
+    "degenerator": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/degenerator/-/degenerator-3.0.2.tgz",
+      "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==",
+      "requires": {
+        "ast-types": "^0.13.2",
+        "escodegen": "^1.8.1",
+        "esprima": "^4.0.0",
+        "vm2": "^3.9.8"
+      }
+    },
+    "del": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz",
+      "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=",
+      "dev": true,
+      "requires": {
+        "@types/glob": "^7.1.1",
+        "globby": "^6.1.0",
+        "is-path-cwd": "^2.0.0",
+        "is-path-in-cwd": "^2.0.0",
+        "p-map": "^2.0.0",
+        "pify": "^4.0.1",
+        "rimraf": "^2.6.3"
+      },
+      "dependencies": {
+        "globby": {
+          "version": "6.1.0",
+          "resolved": "https://registry.nlark.com/globby/download/globby-6.1.0.tgz",
+          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+          "dev": true,
+          "requires": {
+            "array-union": "^1.0.1",
+            "glob": "^7.0.3",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "2.3.0",
+              "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
+              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+              "dev": true
+            }
+          }
+        }
+      }
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "dev": true
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+    },
+    "des.js": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz",
+      "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "destroy": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz",
+      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+    },
+    "detect-libc": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz",
+      "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+      "dev": true
+    },
+    "detect-node": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/detect-node/download/detect-node-2.1.0.tgz?cache=0&sync_timestamp=1621146954463&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdetect-node%2Fdownload%2Fdetect-node-2.1.0.tgz",
+      "integrity": "sha1-yccHdaScPQO8LAbZpzvlUPl4+LE=",
+      "dev": true
+    },
+    "diff": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-3.5.0.tgz",
+      "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=",
+      "dev": true
+    },
+    "diffie-hellman": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz",
+      "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+          "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=",
+          "dev": true
+        }
+      }
+    },
+    "digest-header": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/digest-header/-/digest-header-1.0.0.tgz",
+      "integrity": "sha512-sRTuakZ2PkOUCuAaVv+SLjhr/hRf8ldZP0XnGEQ69RFGxmll5fVaMsnRXWKKK4XsUTnJf8+eRPSFNgE/lWa9wQ==",
+      "requires": {
+        "utility": "^1.17.0"
+      }
+    },
+    "dijkstrajs": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
+      "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="
+    },
+    "dir-glob": {
+      "version": "2.2.2",
+      "resolved": "https://registry.nlark.com/dir-glob/download/dir-glob-2.2.2.tgz",
+      "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=",
+      "dev": true,
+      "requires": {
+        "path-type": "^3.0.0"
+      }
+    },
+    "dns-equal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz",
+      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+      "dev": true
+    },
+    "dns-packet": {
+      "version": "1.3.4",
+      "resolved": "https://registry.nlark.com/dns-packet/download/dns-packet-1.3.4.tgz",
+      "integrity": "sha1-40VQZYJKJQe6iGxVqJljuxB97G8=",
+      "dev": true,
+      "requires": {
+        "ip": "^1.1.0",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "dns-txt": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz",
+      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+      "dev": true,
+      "requires": {
+        "buffer-indexof": "^1.0.0"
+      }
+    },
+    "dom-converter": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz",
+      "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=",
+      "dev": true,
+      "requires": {
+        "utila": "~0.4"
+      }
+    },
+    "dom-serializer": {
+      "version": "1.3.2",
+      "resolved": "https://registry.nlark.com/dom-serializer/download/dom-serializer-1.3.2.tgz?cache=0&sync_timestamp=1621256819522&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-1.3.2.tgz",
+      "integrity": "sha1-YgZDfTLO767HFhgDIwx6ILwbTZE=",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^2.0.1",
+        "domhandler": "^4.2.0",
+        "entities": "^2.0.0"
+      }
+    },
+    "domain-browser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz",
+      "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
+      "dev": true
+    },
+    "domelementtype": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz",
+      "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=",
+      "dev": true
+    },
+    "domexception": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/domexception/download/domexception-1.0.1.tgz",
+      "integrity": "sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA=",
+      "dev": true,
+      "requires": {
+        "webidl-conversions": "^4.0.2"
+      }
+    },
+    "domhandler": {
+      "version": "4.2.0",
+      "resolved": "https://registry.nlark.com/domhandler/download/domhandler-4.2.0.tgz",
+      "integrity": "sha1-+XaKXwNL5gqJonwuTQ9066DYsFk=",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^2.2.0"
+      }
+    },
+    "domutils": {
+      "version": "2.7.0",
+      "resolved": "https://registry.nlark.com/domutils/download/domutils-2.7.0.tgz",
+      "integrity": "sha1-jrrwxB66/PVbC3LsMcVjI3EsVEI=",
+      "dev": true,
+      "requires": {
+        "dom-serializer": "^1.0.1",
+        "domelementtype": "^2.2.0",
+        "domhandler": "^4.2.0"
+      }
+    },
+    "dot-prop": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz?cache=0&sync_timestamp=1605778235569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.3.0.tgz",
+      "integrity": "sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog=",
+      "dev": true,
+      "requires": {
+        "is-obj": "^2.0.0"
+      }
+    },
+    "dotenv": {
+      "version": "8.6.0",
+      "resolved": "https://registry.nlark.com/dotenv/download/dotenv-8.6.0.tgz",
+      "integrity": "sha1-Bhr2ZNGff02PxuT/m1hM4jety4s=",
+      "dev": true
+    },
+    "dotenv-expand": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npm.taobao.org/dotenv-expand/download/dotenv-expand-5.1.0.tgz",
+      "integrity": "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=",
+      "dev": true
+    },
+    "duplexer": {
+      "version": "0.1.2",
+      "resolved": "https://registry.nlark.com/duplexer/download/duplexer-0.1.2.tgz",
+      "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=",
+      "dev": true
+    },
+    "duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz",
+      "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "easy-stack": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz",
+      "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==",
+      "dev": true
+    },
+    "ecc-jsbn": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz",
+      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+      "dev": true,
+      "requires": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "echarts": {
+      "version": "5.0.2",
+      "resolved": "https://registry.nlark.com/echarts/download/echarts-5.0.2.tgz",
+      "integrity": "sha1-FybRelfPBdYs0FZ7QyXhIBpWuvY=",
+      "requires": {
+        "tslib": "2.0.3",
+        "zrender": "5.0.4"
+      }
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.nlark.com/ee-first/download/ee-first-1.1.1.tgz",
+      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+    },
+    "ejs": {
+      "version": "2.7.4",
+      "resolved": "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz?cache=0&sync_timestamp=1612644037163&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fejs%2Fdownload%2Fejs-2.7.4.tgz",
+      "integrity": "sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=",
+      "dev": true
+    },
+    "electron-to-chromium": {
+      "version": "1.3.775",
+      "resolved": "https://registry.nlark.com/electron-to-chromium/download/electron-to-chromium-1.3.775.tgz",
+      "integrity": "sha1-BGUX0fLOp1Pgb/9UmZW53EXiAII=",
+      "dev": true
+    },
+    "element-plus": {
+      "version": "2.2.14",
+      "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.2.14.tgz",
+      "integrity": "sha512-V5Pis0OHhePg1RgVogZrcefaVl8vjVn4Pn9Qsh/t2CbFgjg9kKOYFqf/tuP3ObSXGm3X89hpe0W+nLVAsaFnpw==",
+      "requires": {
+        "@ctrl/tinycolor": "^3.4.1",
+        "@element-plus/icons-vue": "^2.0.6",
+        "@floating-ui/dom": "^0.5.4",
+        "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
+        "@types/lodash": "^4.14.182",
+        "@types/lodash-es": "^4.17.6",
+        "@vueuse/core": "^9.1.0",
+        "async-validator": "^4.2.5",
+        "dayjs": "^1.11.3",
+        "escape-html": "^1.0.3",
+        "lodash": "^4.17.21",
+        "lodash-es": "^4.17.21",
+        "lodash-unified": "^1.0.2",
+        "memoize-one": "^6.0.0",
+        "normalize-wheel-es": "^1.2.0"
+      },
+      "dependencies": {
+        "@popperjs/core": {
+          "version": "npm:@sxzz/popperjs-es@2.11.7",
+          "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+          "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
+        }
+      }
+    },
+    "elliptic": {
+      "version": "6.5.4",
+      "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.4.tgz?cache=0&sync_timestamp=1612290836352&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.4.tgz",
+      "integrity": "sha1-2jfOvTHnmhNn6UG1ku0fvr1Yq7s=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.11.9",
+        "brorand": "^1.1.0",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.1",
+        "inherits": "^2.0.4",
+        "minimalistic-assert": "^1.0.1",
+        "minimalistic-crypto-utils": "^1.0.1"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+          "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=",
+          "dev": true
+        }
+      }
+    },
+    "emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.nlark.com/emoji-regex/download/emoji-regex-8.0.0.tgz",
+      "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc="
+    },
+    "emojis-list": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz",
+      "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=",
+      "dev": true
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+      "dev": true
+    },
+    "end-of-stream": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz",
+      "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=",
+      "requires": {
+        "once": "^1.4.0"
+      }
+    },
+    "end-or-error": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/end-or-error/-/end-or-error-1.0.1.tgz",
+      "integrity": "sha512-OclLMSug+k2A0JKuf494im25ANRBVW8qsjmwbgX7lQ8P82H21PQ1PWkoYwb9y5yMBS69BPlwtzdIFClo3+7kOQ=="
+    },
+    "enhanced-resolve": {
+      "version": "4.5.0",
+      "resolved": "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-4.5.0.tgz?cache=0&sync_timestamp=1620663831689&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.5.0.tgz",
+      "integrity": "sha1-Lzz9hNvjtIfxjy2y7x4GSlccpew=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "memory-fs": "^0.5.0",
+        "tapable": "^1.0.0"
+      },
+      "dependencies": {
+        "memory-fs": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.5.0.tgz",
+          "integrity": "sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw=",
+          "dev": true,
+          "requires": {
+            "errno": "^0.1.3",
+            "readable-stream": "^2.0.1"
+          }
+        }
+      }
+    },
+    "entities": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.2.0.tgz?cache=0&sync_timestamp=1611535322406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-2.2.0.tgz",
+      "integrity": "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=",
+      "dev": true
+    },
+    "errno": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.8.tgz",
+      "integrity": "sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=",
+      "requires": {
+        "prr": "~1.0.1"
+      }
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz",
+      "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "error-stack-parser": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.6.tgz",
+      "integrity": "sha1-WpmnB716TFinl5AtSNgoA+3mqtg=",
+      "dev": true,
+      "requires": {
+        "stackframe": "^1.1.1"
+      }
+    },
+    "es-abstract": {
+      "version": "1.18.3",
+      "resolved": "https://registry.nlark.com/es-abstract/download/es-abstract-1.18.3.tgz?cache=0&sync_timestamp=1622158101826&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fes-abstract%2Fdownload%2Fes-abstract-1.18.3.tgz",
+      "integrity": "sha1-JcTDOAonqiA8RLK2hbupTaMbY+A=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "es-to-primitive": "^1.2.1",
+        "function-bind": "^1.1.1",
+        "get-intrinsic": "^1.1.1",
+        "has": "^1.0.3",
+        "has-symbols": "^1.0.2",
+        "is-callable": "^1.2.3",
+        "is-negative-zero": "^2.0.1",
+        "is-regex": "^1.1.3",
+        "is-string": "^1.0.6",
+        "object-inspect": "^1.10.3",
+        "object-keys": "^1.1.1",
+        "object.assign": "^4.1.2",
+        "string.prototype.trimend": "^1.0.4",
+        "string.prototype.trimstart": "^1.0.4",
+        "unbox-primitive": "^1.0.1"
+      }
+    },
+    "es-to-primitive": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz",
+      "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=",
+      "dev": true,
+      "requires": {
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
+      }
+    },
+    "escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz",
+      "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=",
+      "dev": true
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.nlark.com/escape-html/download/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.nlark.com/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
+    },
+    "escodegen": {
+      "version": "1.14.3",
+      "resolved": "https://registry.nlark.com/escodegen/download/escodegen-1.14.3.tgz",
+      "integrity": "sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM=",
+      "requires": {
+        "esprima": "^4.0.1",
+        "estraverse": "^4.2.0",
+        "esutils": "^2.0.2",
+        "optionator": "^0.8.1",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "optional": true
+        }
+      }
+    },
+    "eslint-loader": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/eslint-loader/download/eslint-loader-2.2.1.tgz",
+      "integrity": "sha1-KLnBLaVAV68IReKmEScBova/gzc=",
+      "dev": true,
+      "requires": {
+        "loader-fs-cache": "^1.0.0",
+        "loader-utils": "^1.0.2",
+        "object-assign": "^4.0.1",
+        "object-hash": "^1.1.4",
+        "rimraf": "^2.6.1"
+      }
+    },
+    "eslint-visitor-keys": {
+      "version": "1.3.0",
+      "resolved": "https://registry.nlark.com/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz",
+      "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=",
+      "dev": true
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/esprima/download/esprima-4.0.1.tgz",
+      "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE="
+    },
+    "esrecurse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz",
+      "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=",
+      "dev": true,
+      "requires": {
+        "estraverse": "^5.2.0"
+      },
+      "dependencies": {
+        "estraverse": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz",
+          "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=",
+          "dev": true
+        }
+      }
+    },
+    "estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz",
+      "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0="
+    },
+    "estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+    },
+    "esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.nlark.com/esutils/download/esutils-2.0.3.tgz",
+      "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q="
+    },
+    "etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz",
+      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+      "dev": true
+    },
+    "event-pubsub": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz",
+      "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==",
+      "dev": true
+    },
+    "event-target-shim": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz",
+      "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
+    },
+    "eventemitter3": {
+      "version": "4.0.7",
+      "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz",
+      "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=",
+      "dev": true
+    },
+    "events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npm.taobao.org/events/download/events-3.3.0.tgz",
+      "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=",
+      "dev": true
+    },
+    "eventsource": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/eventsource/download/eventsource-1.1.0.tgz?cache=0&sync_timestamp=1616041748498&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventsource%2Fdownload%2Feventsource-1.1.0.tgz",
+      "integrity": "sha1-AOjKfJIQnpSw3fMtrGd9hBAoz68=",
+      "requires": {
+        "original": "^1.0.0"
+      }
+    },
+    "evp_bytestokey": {
+      "version": "1.0.3",
+      "resolved": "https://registry.nlark.com/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz",
+      "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
+      "dev": true,
+      "requires": {
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "execa": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1622825859616&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
+      "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^6.0.0",
+        "get-stream": "^4.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "6.0.5",
+          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz",
+          "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
+          "dev": true,
+          "requires": {
+            "nice-try": "^1.0.4",
+            "path-key": "^2.0.1",
+            "semver": "^5.5.0",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "path-key": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz",
+          "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+          "dev": true
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz",
+          "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz",
+          "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^1.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz",
+          "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+          "dev": true
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz",
+          "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
+    "expand-brackets": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz",
+      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "dev": true,
+      "requires": {
+        "debug": "^2.3.3",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "posix-character-classes": "^0.1.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+          "dev": true
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
+          "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          }
+        },
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz",
+          "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+          "dev": true
+        }
+      }
+    },
+    "express": {
+      "version": "4.17.1",
+      "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz",
+      "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.7",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.19.0",
+        "content-disposition": "0.5.3",
+        "content-type": "~1.0.4",
+        "cookie": "0.4.0",
+        "cookie-signature": "1.0.6",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "~1.1.2",
+        "fresh": "0.5.2",
+        "merge-descriptors": "1.0.1",
+        "methods": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "0.1.7",
+        "proxy-addr": "~2.0.5",
+        "qs": "6.7.0",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.1.2",
+        "send": "0.17.1",
+        "serve-static": "1.14.1",
+        "setprototypeof": "1.1.1",
+        "statuses": "~1.5.0",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+          "dev": true
+        },
+        "qs": {
+          "version": "6.7.0",
+          "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz",
+          "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=",
+          "dev": true
+        }
+      }
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz",
+      "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=",
+      "dev": true
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "dev": true,
+      "requires": {
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
+      }
+    },
+    "external-editor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz",
+      "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=",
+      "dev": true,
+      "requires": {
+        "chardet": "^0.7.0",
+        "iconv-lite": "^0.4.24",
+        "tmp": "^0.0.33"
+      }
+    },
+    "extglob": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz",
+      "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
+      "dev": true,
+      "requires": {
+        "array-unique": "^0.3.2",
+        "define-property": "^1.0.0",
+        "expand-brackets": "^2.1.4",
+        "extend-shallow": "^2.0.1",
+        "fragment-cache": "^0.2.1",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz",
+          "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+          "dev": true
+        }
+      }
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.nlark.com/extsprintf/download/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+      "dev": true
+    },
+    "fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": "https://registry.nlark.com/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
+      "dev": true
+    },
+    "fast-glob": {
+      "version": "2.2.7",
+      "resolved": "https://registry.nlark.com/fast-glob/download/fast-glob-2.2.7.tgz",
+      "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=",
+      "dev": true,
+      "requires": {
+        "@mrmlnc/readdir-enhanced": "^2.2.1",
+        "@nodelib/fs.stat": "^1.1.2",
+        "glob-parent": "^3.1.0",
+        "is-glob": "^4.0.0",
+        "merge2": "^1.2.3",
+        "micromatch": "^3.1.10"
+      }
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&sync_timestamp=1618847186091&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz",
+      "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=",
+      "dev": true
+    },
+    "fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.nlark.com/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+    },
+    "fastq": {
+      "version": "1.11.1",
+      "resolved": "https://registry.nlark.com/fastq/download/fastq-1.11.1.tgz",
+      "integrity": "sha1-XYF1quF9thlH+LFiz8f2MmTSKAc=",
+      "dev": true,
+      "requires": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "faye-websocket": {
+      "version": "0.11.4",
+      "resolved": "https://registry.nlark.com/faye-websocket/download/faye-websocket-0.11.4.tgz?cache=0&sync_timestamp=1621894499766&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffaye-websocket%2Fdownload%2Ffaye-websocket-0.11.4.tgz",
+      "integrity": "sha1-fw2Sdc/dhqHJY9yLZfzEUe3Lsdo=",
+      "dev": true,
+      "requires": {
+        "websocket-driver": ">=0.5.1"
+      }
+    },
+    "fetch-cookie": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmmirror.com/fetch-cookie/-/fetch-cookie-0.11.0.tgz",
+      "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==",
+      "requires": {
+        "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0"
+      }
+    },
+    "figgy-pudding": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz",
+      "integrity": "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4=",
+      "dev": true
+    },
+    "figures": {
+      "version": "3.2.0",
+      "resolved": "https://registry.nlark.com/figures/download/figures-3.2.0.tgz",
+      "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^1.0.5"
+      }
+    },
+    "file-loader": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-4.3.0.tgz",
+      "integrity": "sha1-eA8ED3KbPRgBnyBgX3I+hEuKWK8=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.2.3",
+        "schema-utils": "^2.5.0"
+      }
+    },
+    "file-uri-to-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz",
+      "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=",
+      "dev": true,
+      "optional": true
+    },
+    "filesize": {
+      "version": "3.6.1",
+      "resolved": "https://registry.nlark.com/filesize/download/filesize-3.6.1.tgz?cache=0&sync_timestamp=1626007234928&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffilesize%2Fdownload%2Ffilesize-3.6.1.tgz",
+      "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=",
+      "dev": true
+    },
+    "fill-range": {
+      "version": "4.0.0",
+      "resolved": "https://registry.nlark.com/fill-range/download/fill-range-4.0.0.tgz",
+      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1",
+        "to-regex-range": "^2.1.0"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz",
+          "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+          "dev": true
+        }
+      }
+    },
+    "finalhandler": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz",
+      "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
+        "statuses": "~1.5.0",
+        "unpipe": "~1.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+          "dev": true
+        }
+      }
+    },
+    "find-cache-dir": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz",
+      "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=",
+      "dev": true,
+      "requires": {
+        "commondir": "^1.0.1",
+        "make-dir": "^3.0.2",
+        "pkg-dir": "^4.1.0"
+      }
+    },
+    "find-up": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/find-up/download/find-up-3.0.0.tgz",
+      "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+      "dev": true,
+      "requires": {
+        "locate-path": "^3.0.0"
+      }
+    },
+    "flat": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/flat/download/flat-4.1.1.tgz?cache=0&sync_timestamp=1602723427161&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflat%2Fdownload%2Fflat-4.1.1.tgz",
+      "integrity": "sha1-o5IFnMOCiB/5hkL12k3eCpWfMJs=",
+      "dev": true,
+      "requires": {
+        "is-buffer": "~2.0.3"
+      }
+    },
+    "flush-write-stream": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz",
+      "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.3.6"
+      }
+    },
+    "follow-redirects": {
+      "version": "1.14.1",
+      "resolved": "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.1.tgz?cache=0&sync_timestamp=1620555246888&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.14.1.tgz",
+      "integrity": "sha1-2RFN7Qoc/dM04WTmZirQK/2R/0M="
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "dev": true
+    },
+    "forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.nlark.com/forever-agent/download/forever-agent-0.6.1.tgz",
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+      "dev": true
+    },
+    "form-data": {
+      "version": "2.3.3",
+      "resolved": "https://registry.nlark.com/form-data/download/form-data-2.3.3.tgz",
+      "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=",
+      "dev": true,
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.6",
+        "mime-types": "^2.1.12"
+      }
+    },
+    "formstream": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/formstream/-/formstream-1.1.1.tgz",
+      "integrity": "sha512-yHRxt3qLFnhsKAfhReM4w17jP+U1OlhUjnKPPtonwKbIJO7oBP0MvoxkRUwb8AU9n0MIkYy5X5dK6pQnbj+R2Q==",
+      "requires": {
+        "destroy": "^1.0.4",
+        "mime": "^2.5.2",
+        "pause-stream": "~0.0.11"
+      }
+    },
+    "forwarded": {
+      "version": "0.2.0",
+      "resolved": "https://registry.nlark.com/forwarded/download/forwarded-0.2.0.tgz?cache=0&sync_timestamp=1622503508967&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fforwarded%2Fdownload%2Fforwarded-0.2.0.tgz",
+      "integrity": "sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE=",
+      "dev": true
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "dev": true,
+      "requires": {
+        "map-cache": "^0.2.2"
+      }
+    },
+    "fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz",
+      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+      "dev": true
+    },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz",
+      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "fs-extra": {
+      "version": "7.0.1",
+      "resolved": "https://registry.nlark.com/fs-extra/download/fs-extra-7.0.1.tgz?cache=0&sync_timestamp=1620079845472&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffs-extra%2Fdownload%2Ffs-extra-7.0.1.tgz",
+      "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
+      }
+    },
+    "fs-write-stream-atomic": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz",
+      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/fs.realpath/download/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+    },
+    "fsevents": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+      "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "bindings": "^1.5.0",
+        "nan": "^2.12.1"
+      }
+    },
+    "ftp": {
+      "version": "0.3.10",
+      "resolved": "https://registry.npmmirror.com/ftp/-/ftp-0.3.10.tgz",
+      "integrity": "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==",
+      "requires": {
+        "readable-stream": "1.1.x",
+        "xregexp": "2.0.0"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
+        },
+        "readable-stream": {
+          "version": "1.1.14",
+          "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-1.1.14.tgz",
+          "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
+        }
+      }
+    },
+    "function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.nlark.com/function-bind/download/function-bind-1.1.1.tgz",
+      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
+      "dev": true
+    },
+    "gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=",
+      "dev": true
+    },
+    "get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz",
+      "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34="
+    },
+    "get-func-name": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/get-func-name/download/get-func-name-2.0.0.tgz",
+      "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+      "dev": true
+    },
+    "get-intrinsic": {
+      "version": "1.1.1",
+      "resolved": "https://registry.nlark.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz",
+      "integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "has-symbols": "^1.0.1"
+      }
+    },
+    "get-ready": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/get-ready/-/get-ready-1.0.0.tgz",
+      "integrity": "sha512-mFXCZPJIlcYcth+N8267+mghfYN9h3EhsDa6JSnbA3Wrhh/XFpuowviFcsDeYZtKspQyWyJqfs4O6P8CHeTwzw=="
+    },
+    "get-stream": {
+      "version": "4.1.0",
+      "resolved": "https://registry.nlark.com/get-stream/download/get-stream-4.1.0.tgz",
+      "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
+      "dev": true,
+      "requires": {
+        "pump": "^3.0.0"
+      }
+    },
+    "get-uri": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/get-uri/-/get-uri-3.0.2.tgz",
+      "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==",
+      "requires": {
+        "@tootallnate/once": "1",
+        "data-uri-to-buffer": "3",
+        "debug": "4",
+        "file-uri-to-path": "2",
+        "fs-extra": "^8.1.0",
+        "ftp": "^0.3.10"
+      },
+      "dependencies": {
+        "file-uri-to-path": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz",
+          "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg=="
+        },
+        "fs-extra": {
+          "version": "8.1.0",
+          "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz",
+          "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+          "requires": {
+            "graceful-fs": "^4.2.0",
+            "jsonfile": "^4.0.0",
+            "universalify": "^0.1.0"
+          }
+        }
+      }
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.nlark.com/get-value/download/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "dev": true
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "glob": {
+      "version": "7.1.7",
+      "resolved": "https://registry.nlark.com/glob/download/glob-7.1.7.tgz?cache=0&sync_timestamp=1620337498129&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob%2Fdownload%2Fglob-7.1.7.tgz",
+      "integrity": "sha1-Oxk+kjPwHULQs/eClLvutBj5SpA=",
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-parent": {
+      "version": "3.1.0",
+      "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1620073303944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz",
+      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+      "dev": true,
+      "requires": {
+        "is-glob": "^3.1.0",
+        "path-dirname": "^1.0.0"
+      },
+      "dependencies": {
+        "is-glob": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/is-glob/download/is-glob-3.1.0.tgz",
+          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^2.1.0"
+          }
+        }
+      }
+    },
+    "glob-to-regexp": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz",
+      "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+      "dev": true
+    },
+    "globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.nlark.com/globals/download/globals-11.12.0.tgz",
+      "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=",
+      "dev": true
+    },
+    "globby": {
+      "version": "9.2.0",
+      "resolved": "https://registry.nlark.com/globby/download/globby-9.2.0.tgz",
+      "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=",
+      "dev": true,
+      "requires": {
+        "@types/glob": "^7.1.1",
+        "array-union": "^1.0.2",
+        "dir-glob": "^2.2.2",
+        "fast-glob": "^2.2.6",
+        "glob": "^7.1.3",
+        "ignore": "^4.0.3",
+        "pify": "^4.0.1",
+        "slash": "^2.0.0"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.2.6",
+      "resolved": "https://registry.nlark.com/graceful-fs/download/graceful-fs-4.2.6.tgz",
+      "integrity": "sha1-/wQLKwhTsjw9MQJ1I3BvGIXXa+4="
+    },
+    "growl": {
+      "version": "1.10.5",
+      "resolved": "https://registry.npm.taobao.org/growl/download/growl-1.10.5.tgz",
+      "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=",
+      "dev": true
+    },
+    "gzip-size": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-5.1.1.tgz?cache=0&sync_timestamp=1605523260680&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgzip-size%2Fdownload%2Fgzip-size-5.1.1.tgz",
+      "integrity": "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ=",
+      "dev": true,
+      "requires": {
+        "duplexer": "^0.1.1",
+        "pify": "^4.0.1"
+      }
+    },
+    "handle-thing": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz",
+      "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=",
+      "dev": true
+    },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz",
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+      "dev": true
+    },
+    "har-validator": {
+      "version": "5.1.5",
+      "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz",
+      "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.12.3",
+        "har-schema": "^2.0.0"
+      }
+    },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.nlark.com/has/download/has-1.0.3.tgz",
+      "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1"
+      }
+    },
+    "has-bigints": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/has-bigints/download/has-bigints-1.0.1.tgz?cache=0&sync_timestamp=1615461293395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-bigints%2Fdownload%2Fhas-bigints-1.0.1.tgz",
+      "integrity": "sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM=",
+      "dev": true
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz?cache=0&sync_timestamp=1618559744568&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-flag%2Fdownload%2Fhas-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
+    },
+    "has-symbols": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/has-symbols/download/has-symbols-1.0.2.tgz",
+      "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=",
+      "dev": true
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "dev": true,
+      "requires": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      }
+    },
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
+      },
+      "dependencies": {
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "hash-base": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.1.0.tgz",
+      "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz",
+          "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=",
+          "dev": true
+        }
+      }
+    },
+    "hash-sum": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-2.0.0.tgz",
+      "integrity": "sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo=",
+      "dev": true
+    },
+    "hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz",
+      "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
+    },
+    "he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.nlark.com/he/download/he-1.2.0.tgz",
+      "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=",
+      "dev": true
+    },
+    "hex-color-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz",
+      "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=",
+      "dev": true
+    },
+    "highlight.js": {
+      "version": "10.7.3",
+      "resolved": "https://registry.nlark.com/highlight.js/download/highlight.js-10.7.3.tgz",
+      "integrity": "sha1-aXJy45kTVuQMPKxWanTu9oF1ZTE=",
+      "dev": true
+    },
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+      "dev": true,
+      "requires": {
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "hoopy": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/hoopy/download/hoopy-0.1.4.tgz",
+      "integrity": "sha1-YJIH1mEQADOpqUAq096mdzgcGx0=",
+      "dev": true
+    },
+    "hosted-git-info": {
+      "version": "2.8.9",
+      "resolved": "https://registry.nlark.com/hosted-git-info/download/hosted-git-info-2.8.9.tgz",
+      "integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=",
+      "dev": true
+    },
+    "hpack.js": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz",
+      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "obuf": "^1.0.0",
+        "readable-stream": "^2.0.1",
+        "wbuf": "^1.1.0"
+      }
+    },
+    "hsl-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz",
+      "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+      "dev": true
+    },
+    "hsla-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz",
+      "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+      "dev": true
+    },
+    "html-encoding-sniffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz",
+      "integrity": "sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg=",
+      "dev": true,
+      "requires": {
+        "whatwg-encoding": "^1.0.1"
+      }
+    },
+    "html-entities": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.4.0.tgz",
+      "integrity": "sha1-z70bAdKvr5rcobEK59/6uYxx0tw=",
+      "dev": true
+    },
+    "html-minifier": {
+      "version": "3.5.21",
+      "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz",
+      "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=",
+      "dev": true,
+      "requires": {
+        "camel-case": "3.0.x",
+        "clean-css": "4.2.x",
+        "commander": "2.17.x",
+        "he": "1.2.x",
+        "param-case": "2.1.x",
+        "relateurl": "0.2.x",
+        "uglify-js": "3.4.x"
+      }
+    },
+    "html-tags": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-3.1.0.tgz",
+      "integrity": "sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=",
+      "dev": true
+    },
+    "html-webpack-plugin": {
+      "version": "3.2.0",
+      "resolved": "https://registry.nlark.com/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz",
+      "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
+      "dev": true,
+      "requires": {
+        "html-minifier": "^3.2.3",
+        "loader-utils": "^0.2.16",
+        "lodash": "^4.17.3",
+        "pretty-error": "^2.0.2",
+        "tapable": "^1.0.0",
+        "toposort": "^1.0.0",
+        "util.promisify": "1.0.0"
+      },
+      "dependencies": {
+        "big.js": {
+          "version": "3.2.0",
+          "resolved": "https://registry.nlark.com/big.js/download/big.js-3.2.0.tgz",
+          "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=",
+          "dev": true
+        },
+        "emojis-list": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz",
+          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+          "dev": true
+        },
+        "json5": {
+          "version": "0.5.1",
+          "resolved": "https://registry.nlark.com/json5/download/json5-0.5.1.tgz",
+          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+          "dev": true
+        },
+        "loader-utils": {
+          "version": "0.2.17",
+          "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz",
+          "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+          "dev": true,
+          "requires": {
+            "big.js": "^3.1.3",
+            "emojis-list": "^2.0.0",
+            "json5": "^0.5.0",
+            "object-assign": "^4.0.1"
+          }
+        }
+      }
+    },
+    "htmlparser2": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-6.1.0.tgz?cache=0&sync_timestamp=1617915295732&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-6.1.0.tgz",
+      "integrity": "sha1-xNditsM3GgXb5l6UrkOp+EX7j7c=",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^2.0.1",
+        "domhandler": "^4.0.0",
+        "domutils": "^2.5.2",
+        "entities": "^2.0.0"
+      }
+    },
+    "http-deceiver": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz",
+      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+      "dev": true
+    },
+    "http-errors": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz",
+      "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=",
+      "requires": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.1",
+        "statuses": ">= 1.5.0 < 2",
+        "toidentifier": "1.0.0"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+        }
+      }
+    },
+    "http-parser-js": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.5.3.tgz?cache=0&sync_timestamp=1609540073700&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-parser-js%2Fdownload%2Fhttp-parser-js-0.5.3.tgz",
+      "integrity": "sha1-AdJwnHnUFpi7AdTezF6dpOSgM9k=",
+      "dev": true
+    },
+    "http-proxy": {
+      "version": "1.18.1",
+      "resolved": "https://registry.nlark.com/http-proxy/download/http-proxy-1.18.1.tgz",
+      "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=",
+      "dev": true,
+      "requires": {
+        "eventemitter3": "^4.0.0",
+        "follow-redirects": "^1.0.0",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "http-proxy-agent": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+      "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+      "requires": {
+        "@tootallnate/once": "1",
+        "agent-base": "6",
+        "debug": "4"
+      }
+    },
+    "http-proxy-middleware": {
+      "version": "1.3.1",
+      "resolved": "https://registry.nlark.com/http-proxy-middleware/download/http-proxy-middleware-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-1.3.1.tgz",
+      "integrity": "sha1-Q3ANbZ7st0Gb8IahKND3IF2etmU=",
+      "dev": true,
+      "requires": {
+        "@types/http-proxy": "^1.17.5",
+        "http-proxy": "^1.18.1",
+        "is-glob": "^4.0.1",
+        "is-plain-obj": "^3.0.0",
+        "micromatch": "^4.0.2"
+      },
+      "dependencies": {
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.nlark.com/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.nlark.com/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "4.0.4",
+          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz",
+          "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=",
+          "dev": true,
+          "requires": {
+            "braces": "^3.0.1",
+            "picomatch": "^2.2.3"
+          }
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.nlark.com/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.nlark.com/http-signature/download/http-signature-1.2.0.tgz",
+      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      }
+    },
+    "https-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz",
+      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+      "dev": true
+    },
+    "https-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+      "requires": {
+        "agent-base": "6",
+        "debug": "4"
+      }
+    },
+    "human-signals": {
+      "version": "1.1.1",
+      "resolved": "https://registry.nlark.com/human-signals/download/human-signals-1.1.1.tgz",
+      "integrity": "sha1-xbHNFPUK6uCatsWf5jujOV/k36M=",
+      "dev": true
+    },
+    "humanize-ms": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz",
+      "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+      "requires": {
+        "ms": "^2.0.0"
+      }
+    },
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.nlark.com/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz",
+      "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "icss-utils": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-4.1.1.tgz?cache=0&sync_timestamp=1605801312995&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-4.1.1.tgz",
+      "integrity": "sha1-IRcLU3ie4nRHwvR91oMIFAP5pGc=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.14"
+      }
+    },
+    "ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.2.1.tgz",
+      "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=",
+      "dev": true
+    },
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz",
+      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+      "dev": true
+    },
+    "ignore": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz",
+      "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
+      "dev": true
+    },
+    "image-size": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz?cache=0&sync_timestamp=1618422657851&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimage-size%2Fdownload%2Fimage-size-0.5.5.tgz",
+      "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+      "optional": true
+    },
+    "immutable": {
+      "version": "4.3.7",
+      "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.7.tgz",
+      "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
+      "dev": true
+    },
+    "import-cwd": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz",
+      "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+      "dev": true,
+      "requires": {
+        "import-from": "^2.1.0"
+      }
+    },
+    "import-fresh": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz?cache=0&sync_timestamp=1608469532269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-2.0.0.tgz",
+      "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+      "dev": true,
+      "requires": {
+        "caller-path": "^2.0.0",
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "import-from": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/import-from/download/import-from-2.1.0.tgz",
+      "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "import-local": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz",
+      "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=",
+      "dev": true,
+      "requires": {
+        "pkg-dir": "^3.0.0",
+        "resolve-cwd": "^2.0.0"
+      },
+      "dependencies": {
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/pkg-dir/download/pkg-dir-3.0.0.tgz?cache=0&sync_timestamp=1618847182947&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-3.0.0.tgz",
+          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        }
+      }
+    },
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "dev": true
+    },
+    "indexes-of": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz",
+      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+      "dev": true
+    },
+    "infer-owner": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz",
+      "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=",
+      "dev": true
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.nlark.com/inflight/download/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz",
+      "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w="
+    },
+    "inquirer": {
+      "version": "7.3.3",
+      "resolved": "https://registry.nlark.com/inquirer/download/inquirer-7.3.3.tgz?cache=0&sync_timestamp=1623781150792&other_urls=https%3A%2F%2Fregistry.nlark.com%2Finquirer%2Fdownload%2Finquirer-7.3.3.tgz",
+      "integrity": "sha1-BNF2sq8Er8FXqD/XwQDpjuCq0AM=",
+      "dev": true,
+      "requires": {
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^4.1.0",
+        "cli-cursor": "^3.1.0",
+        "cli-width": "^3.0.0",
+        "external-editor": "^3.0.3",
+        "figures": "^3.0.0",
+        "lodash": "^4.17.19",
+        "mute-stream": "0.0.8",
+        "run-async": "^2.4.0",
+        "rxjs": "^6.6.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0",
+        "through": "^2.3.6"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz",
+          "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1618995547052&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&sync_timestamp=1618552469710&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "4.2.2",
+          "resolved": "https://registry.nlark.com/string-width/download/string-width-4.2.2.tgz",
+          "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "6.0.0",
+          "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-6.0.0.tgz",
+          "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^5.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "internal-ip": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz",
+      "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=",
+      "dev": true,
+      "requires": {
+        "default-gateway": "^4.2.0",
+        "ipaddr.js": "^1.9.0"
+      },
+      "dependencies": {
+        "default-gateway": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz?cache=0&sync_timestamp=1610365816953&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-4.2.0.tgz",
+          "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=",
+          "dev": true,
+          "requires": {
+            "execa": "^1.0.0",
+            "ip-regex": "^2.1.0"
+          }
+        }
+      }
+    },
+    "interpret": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npm.taobao.org/interpret/download/interpret-1.4.0.tgz",
+      "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=",
+      "dev": true
+    },
+    "ip": {
+      "version": "1.1.5",
+      "resolved": "https://registry.nlark.com/ip/download/ip-1.1.5.tgz",
+      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
+    },
+    "ip-regex": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz",
+      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+      "dev": true
+    },
+    "ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://registry.nlark.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=",
+      "dev": true
+    },
+    "is-absolute-url": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz",
+      "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+      "dev": true
+    },
+    "is-accessor-descriptor": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+      "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^6.0.0"
+      }
+    },
+    "is-arguments": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.1.0.tgz?cache=0&sync_timestamp=1607117404740&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-arguments%2Fdownload%2Fis-arguments-1.1.0.tgz",
+      "integrity": "sha1-YjUwMd++4HzrNGVqa95Z7+yujdk=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.0"
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.nlark.com/is-arrayish/download/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
+    },
+    "is-bigint": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/is-bigint/download/is-bigint-1.0.2.tgz",
+      "integrity": "sha1-/7OBRCUDI1rSReqJ5Fs9v/BA7lo=",
+      "dev": true
+    },
+    "is-binary-path": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/is-binary-path/download/is-binary-path-1.0.1.tgz",
+      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+      "dev": true,
+      "requires": {
+        "binary-extensions": "^1.0.0"
+      }
+    },
+    "is-boolean-object": {
+      "version": "1.1.1",
+      "resolved": "https://registry.nlark.com/is-boolean-object/download/is-boolean-object-1.1.1.tgz?cache=0&sync_timestamp=1620428521406&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-boolean-object%2Fdownload%2Fis-boolean-object-1.1.1.tgz",
+      "integrity": "sha1-PAh48DXLghIo01DS4eNnGXFqPeg=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2"
+      }
+    },
+    "is-buffer": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-2.0.5.tgz",
+      "integrity": "sha1-68JS5ADSL/jXf6CYiIIaJKZYwZE=",
+      "dev": true
+    },
+    "is-callable": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.3.tgz",
+      "integrity": "sha1-ix4FALc6HXbHBIdjbzaOUZ3o244=",
+      "dev": true
+    },
+    "is-ci": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz?cache=0&sync_timestamp=1613632097993&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-ci%2Fdownload%2Fis-ci-1.2.1.tgz",
+      "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=",
+      "dev": true,
+      "requires": {
+        "ci-info": "^1.5.0"
+      }
+    },
+    "is-class-hotfix": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmmirror.com/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz",
+      "integrity": "sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ=="
+    },
+    "is-color-stop": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz",
+      "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+      "dev": true,
+      "requires": {
+        "css-color-names": "^0.0.4",
+        "hex-color-regex": "^1.1.0",
+        "hsl-regex": "^1.0.0",
+        "hsla-regex": "^1.0.0",
+        "rgb-regex": "^1.0.1",
+        "rgba-regex": "^1.0.0"
+      }
+    },
+    "is-core-module": {
+      "version": "2.5.0",
+      "resolved": "https://registry.nlark.com/is-core-module/download/is-core-module-2.5.0.tgz?cache=0&sync_timestamp=1626158736739&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-core-module%2Fdownload%2Fis-core-module-2.5.0.tgz",
+      "integrity": "sha1-91SENhfHC/0pt72HMnQAzaXBhJE=",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.3"
+      }
+    },
+    "is-data-descriptor": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+      "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^6.0.0"
+      }
+    },
+    "is-date-object": {
+      "version": "1.0.4",
+      "resolved": "https://registry.nlark.com/is-date-object/download/is-date-object-1.0.4.tgz",
+      "integrity": "sha1-VQz8wDr62gXuo90wmBx7CVUfc+U=",
+      "dev": true
+    },
+    "is-descriptor": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+      "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+      "dev": true,
+      "requires": {
+        "is-accessor-descriptor": "^1.0.0",
+        "is-data-descriptor": "^1.0.0",
+        "kind-of": "^6.0.2"
+      }
+    },
+    "is-directory": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz",
+      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+      "dev": true
+    },
+    "is-docker": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/is-docker/download/is-docker-2.2.1.tgz?cache=0&sync_timestamp=1617958823824&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-docker%2Fdownload%2Fis-docker-2.2.1.tgz",
+      "integrity": "sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao=",
+      "dev": true
+    },
+    "is-extendable": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/is-extendable/download/is-extendable-1.0.1.tgz",
+      "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+      "dev": true,
+      "requires": {
+        "is-plain-object": "^2.0.4"
+      }
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "is-fullwidth-code-point": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz?cache=0&sync_timestamp=1618552469710&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-2.0.0.tgz",
+      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+      "dev": true
+    },
+    "is-glob": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/is-glob/download/is-glob-4.0.1.tgz",
+      "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-negative-zero": {
+      "version": "2.0.1",
+      "resolved": "https://registry.nlark.com/is-negative-zero/download/is-negative-zero-2.0.1.tgz",
+      "integrity": "sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ=",
+      "dev": true
+    },
+    "is-number": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
+      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-number-object": {
+      "version": "1.0.5",
+      "resolved": "https://registry.nlark.com/is-number-object/download/is-number-object-1.0.5.tgz?cache=0&sync_timestamp=1620421575334&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-number-object%2Fdownload%2Fis-number-object-1.0.5.tgz",
+      "integrity": "sha1-bt+u7XlQz/Ga/tzp+/yp7m3Sies=",
+      "dev": true
+    },
+    "is-obj": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/is-obj/download/is-obj-2.0.0.tgz",
+      "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=",
+      "dev": true
+    },
+    "is-path-cwd": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz",
+      "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=",
+      "dev": true
+    },
+    "is-path-in-cwd": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz?cache=0&sync_timestamp=1620047110449&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-2.1.0.tgz",
+      "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=",
+      "dev": true,
+      "requires": {
+        "is-path-inside": "^2.1.0"
+      }
+    },
+    "is-path-inside": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/is-path-inside/download/is-path-inside-2.1.0.tgz?cache=0&sync_timestamp=1620046845369&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-inside%2Fdownload%2Fis-path-inside-2.1.0.tgz",
+      "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=",
+      "dev": true,
+      "requires": {
+        "path-is-inside": "^1.0.2"
+      }
+    },
+    "is-plain-obj": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-3.0.0.tgz?cache=0&sync_timestamp=1618600554597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-3.0.0.tgz",
+      "integrity": "sha1-r28uoUrFpkYYOlu9tbqrvBVq2dc=",
+      "dev": true
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz",
+      "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "is-regex": {
+      "version": "1.1.3",
+      "resolved": "https://registry.nlark.com/is-regex/download/is-regex-1.1.3.tgz",
+      "integrity": "sha1-0Cn5r/ZEi5Prvj8z2scVEf3L758=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "has-symbols": "^1.0.2"
+      }
+    },
+    "is-resolvable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz",
+      "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=",
+      "dev": true
+    },
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "dev": true
+    },
+    "is-string": {
+      "version": "1.0.6",
+      "resolved": "https://registry.nlark.com/is-string/download/is-string-1.0.6.tgz?cache=0&sync_timestamp=1620448217105&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-string%2Fdownload%2Fis-string-1.0.6.tgz",
+      "integrity": "sha1-P+XVmS+w2TQE8yWE1LAXmnG1Sl8=",
+      "dev": true
+    },
+    "is-symbol": {
+      "version": "1.0.4",
+      "resolved": "https://registry.nlark.com/is-symbol/download/is-symbol-1.0.4.tgz?cache=0&sync_timestamp=1620502244179&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-symbol%2Fdownload%2Fis-symbol-1.0.4.tgz",
+      "integrity": "sha1-ptrJO2NbBjymhyI23oiRClevE5w=",
+      "dev": true,
+      "requires": {
+        "has-symbols": "^1.0.2"
+      }
+    },
+    "is-type-of": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/is-type-of/-/is-type-of-1.2.1.tgz",
+      "integrity": "sha512-uK0kyX9LZYhSDS7H2sVJQJop1UnWPWmo5RvR3q2kFH6AUHYs7sOrVg0b4nyBHw29kRRNFofYN/JbHZDlHiItTA==",
+      "requires": {
+        "core-util-is": "^1.0.2",
+        "is-class-hotfix": "~0.0.6",
+        "isstream": "~0.1.2"
+      }
+    },
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz",
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "dev": true
+    },
+    "is-what": {
+      "version": "3.14.1",
+      "resolved": "https://registry.npm.taobao.org/is-what/download/is-what-3.14.1.tgz?cache=0&sync_timestamp=1615169735707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-what%2Fdownload%2Fis-what-3.14.1.tgz",
+      "integrity": "sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE="
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz",
+      "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=",
+      "dev": true
+    },
+    "is-wsl": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz",
+      "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=",
+      "dev": true,
+      "requires": {
+        "is-docker": "^2.0.0"
+      }
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.nlark.com/isobject/download/isobject-3.0.1.tgz",
+      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+      "dev": true
+    },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+    },
+    "javascript-stringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/javascript-stringify/download/javascript-stringify-2.1.0.tgz",
+      "integrity": "sha1-J8dlOb4U2L0Sghmi1zGwkzeQTnk=",
+      "dev": true
+    },
+    "js-base64": {
+      "version": "2.6.4",
+      "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz",
+      "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
+    },
+    "js-message": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz",
+      "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==",
+      "dev": true
+    },
+    "js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz",
+      "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=",
+      "dev": true
+    },
+    "js-yaml": {
+      "version": "3.13.1",
+      "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz?cache=0&sync_timestamp=1618435151523&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.13.1.tgz",
+      "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=",
+      "dev": true,
+      "requires": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      }
+    },
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.nlark.com/jsbn/download/jsbn-0.1.1.tgz",
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+      "dev": true
+    },
+    "jsdom": {
+      "version": "15.2.1",
+      "resolved": "https://registry.nlark.com/jsdom/download/jsdom-15.2.1.tgz",
+      "integrity": "sha1-0v6xrvcYP4a+UhuMaDP/UpbQfsU=",
+      "dev": true,
+      "requires": {
+        "abab": "^2.0.0",
+        "acorn": "^7.1.0",
+        "acorn-globals": "^4.3.2",
+        "array-equal": "^1.0.0",
+        "cssom": "^0.4.1",
+        "cssstyle": "^2.0.0",
+        "data-urls": "^1.1.0",
+        "domexception": "^1.0.1",
+        "escodegen": "^1.11.1",
+        "html-encoding-sniffer": "^1.0.2",
+        "nwsapi": "^2.2.0",
+        "parse5": "5.1.0",
+        "pn": "^1.1.0",
+        "request": "^2.88.0",
+        "request-promise-native": "^1.0.7",
+        "saxes": "^3.1.9",
+        "symbol-tree": "^3.2.2",
+        "tough-cookie": "^3.0.1",
+        "w3c-hr-time": "^1.0.1",
+        "w3c-xmlserializer": "^1.1.2",
+        "webidl-conversions": "^4.0.2",
+        "whatwg-encoding": "^1.0.5",
+        "whatwg-mimetype": "^2.3.0",
+        "whatwg-url": "^7.0.0",
+        "ws": "^7.0.0",
+        "xml-name-validator": "^3.0.0"
+      },
+      "dependencies": {
+        "parse5": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.0.tgz",
+          "integrity": "sha1-xZNByXI/QUxFKXVWTHwApo1YrNI=",
+          "dev": true
+        },
+        "tough-cookie": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-3.0.1.tgz",
+          "integrity": "sha1-nfT1fnOcJpMKAYGEiH9K233Kc7I=",
+          "dev": true,
+          "requires": {
+            "ip-regex": "^2.1.0",
+            "psl": "^1.1.28",
+            "punycode": "^2.1.1"
+          }
+        }
+      }
+    },
+    "jsdom-global": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npm.taobao.org/jsdom-global/download/jsdom-global-3.0.2.tgz",
+      "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=",
+      "dev": true
+    },
+    "jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz?cache=0&sync_timestamp=1603891242793&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-2.5.2.tgz",
+      "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=",
+      "dev": true
+    },
+    "json-parse-better-errors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz",
+      "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=",
+      "dev": true
+    },
+    "json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=",
+      "dev": true
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "dev": true
+    },
+    "json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.nlark.com/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
+      "dev": true
+    },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.nlark.com/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+      "dev": true
+    },
+    "json3": {
+      "version": "3.3.3",
+      "resolved": "https://registry.nlark.com/json3/download/json3-3.3.3.tgz",
+      "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=",
+      "dev": true
+    },
+    "json5": {
+      "version": "2.2.0",
+      "resolved": "https://registry.nlark.com/json5/download/json5-2.2.0.tgz",
+      "integrity": "sha1-Lf7+cgxrpSXZ69kJlQ8FFTFsiaM=",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.5"
+      }
+    },
+    "jsonfile": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz?cache=0&sync_timestamp=1604161937969&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-4.0.0.tgz",
+      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+      "requires": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      }
+    },
+    "jstoxml": {
+      "version": "2.2.9",
+      "resolved": "https://registry.npmmirror.com/jstoxml/-/jstoxml-2.2.9.tgz",
+      "integrity": "sha512-OYWlK0j+roh+eyaMROlNbS5cd5R25Y+IUpdl7cNdB8HNrkgwQzIS7L9MegxOiWNBj9dQhA/yAxiMwCC5mwNoBw=="
+    },
+    "killable": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/killable/download/killable-1.0.1.tgz",
+      "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=",
+      "dev": true
+    },
+    "kind-of": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
+      "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
+      "dev": true
+    },
+    "klona": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/klona/download/klona-2.0.4.tgz",
+      "integrity": "sha1-e7Hjr/sMuGJFR+9+j2cI6i4538A=",
+      "dev": true
+    },
+    "ko-sleep": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/ko-sleep/-/ko-sleep-1.1.4.tgz",
+      "integrity": "sha512-s05WGpvvzyTuRlRE8fM7ru2Z3O+InbJuBcckTWKg2W+2c1k6SnFa3IfiSSt0/peFrlYAXgNoxuJWWVNmWh+K/A==",
+      "requires": {
+        "ms": "*"
+      }
+    },
+    "launch-editor": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/launch-editor/download/launch-editor-2.2.1.tgz",
+      "integrity": "sha1-hxtaPuOdZoD8wm03kwtu7aidsMo=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.3.0",
+        "shell-quote": "^1.6.1"
+      }
+    },
+    "launch-editor-middleware": {
+      "version": "2.2.1",
+      "resolved": "https://registry.nlark.com/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz",
+      "integrity": "sha1-4UsH5scVSwpLhqD9NFeE5FgEwVc=",
+      "dev": true,
+      "requires": {
+        "launch-editor": "^2.2.1"
+      }
+    },
+    "less": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/less/download/less-4.1.1.tgz?cache=0&sync_timestamp=1612065808998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fless%2Fdownload%2Fless-4.1.1.tgz",
+      "integrity": "sha1-Fb8lOpk5eR3GkIiMP/Qk8+bH7bo=",
+      "requires": {
+        "copy-anything": "^2.0.1",
+        "errno": "^0.1.1",
+        "graceful-fs": "^4.1.2",
+        "image-size": "~0.5.0",
+        "make-dir": "^2.1.0",
+        "mime": "^1.4.1",
+        "needle": "^2.5.2",
+        "parse-node-version": "^1.0.1",
+        "source-map": "~0.6.0",
+        "tslib": "^1.10.0"
+      },
+      "dependencies": {
+        "make-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.nlark.com/make-dir/download/make-dir-2.1.0.tgz",
+          "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
+          "optional": true,
+          "requires": {
+            "pify": "^4.0.1",
+            "semver": "^5.6.0"
+          }
+        },
+        "mime": {
+          "version": "1.6.0",
+          "resolved": "https://registry.nlark.com/mime/download/mime-1.6.0.tgz",
+          "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
+          "optional": true
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz",
+          "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+          "optional": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "optional": true
+        },
+        "tslib": {
+          "version": "1.14.1",
+          "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz",
+          "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA="
+        }
+      }
+    },
+    "less-loader": {
+      "version": "7.3.0",
+      "resolved": "https://registry.nlark.com/less-loader/download/less-loader-7.3.0.tgz",
+      "integrity": "sha1-+dbTbRhznWQgZ6Bftb1wyMYTF+U=",
+      "dev": true,
+      "requires": {
+        "klona": "^2.0.4",
+        "loader-utils": "^2.0.0",
+        "schema-utils": "^3.0.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.2.tgz",
+          "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
+        "schema-utils": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-3.1.0.tgz?cache=0&sync_timestamp=1625484933876&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-3.1.0.tgz",
+          "integrity": "sha1-lZhutgT2bare7Vbjeb/np/ljzbk=",
+          "dev": true,
+          "requires": {
+            "@types/json-schema": "^7.0.7",
+            "ajv": "^6.12.5",
+            "ajv-keywords": "^3.5.2"
+          }
+        }
+      }
+    },
+    "levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz",
+      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+      "requires": {
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
+      }
+    },
+    "lines-and-columns": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz",
+      "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+      "dev": true
+    },
+    "loader-fs-cache": {
+      "version": "1.0.3",
+      "resolved": "https://registry.nlark.com/loader-fs-cache/download/loader-fs-cache-1.0.3.tgz",
+      "integrity": "sha1-8IZXZG1gcHi+LwoDL4vWndbyd9k=",
+      "dev": true,
+      "requires": {
+        "find-cache-dir": "^0.1.1",
+        "mkdirp": "^0.5.1"
+      },
+      "dependencies": {
+        "find-cache-dir": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-0.1.1.tgz",
+          "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
+          "dev": true,
+          "requires": {
+            "commondir": "^1.0.1",
+            "mkdirp": "^0.5.1",
+            "pkg-dir": "^1.0.0"
+          }
+        },
+        "find-up": {
+          "version": "1.1.2",
+          "resolved": "https://registry.nlark.com/find-up/download/find-up-1.1.2.tgz",
+          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+          "dev": true,
+          "requires": {
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "2.1.0",
+          "resolved": "https://registry.nlark.com/path-exists/download/path-exists-2.1.0.tgz",
+          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+          "dev": true,
+          "requires": {
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "pkg-dir": {
+          "version": "1.0.0",
+          "resolved": "https://registry.nlark.com/pkg-dir/download/pkg-dir-1.0.0.tgz?cache=0&sync_timestamp=1618847182947&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-1.0.0.tgz",
+          "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+          "dev": true,
+          "requires": {
+            "find-up": "^1.0.0"
+          }
+        }
+      }
+    },
+    "loader-runner": {
+      "version": "2.4.0",
+      "resolved": "https://registry.nlark.com/loader-runner/download/loader-runner-2.4.0.tgz",
+      "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=",
+      "dev": true
+    },
+    "loader-utils": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz",
+      "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=",
+      "dev": true,
+      "requires": {
+        "big.js": "^5.2.2",
+        "emojis-list": "^3.0.0",
+        "json5": "^1.0.1"
+      },
+      "dependencies": {
+        "json5": {
+          "version": "1.0.1",
+          "resolved": "https://registry.nlark.com/json5/download/json5-1.0.1.tgz",
+          "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        }
+      }
+    },
+    "locate-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/locate-path/download/locate-path-3.0.0.tgz",
+      "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+      "dev": true,
+      "requires": {
+        "p-locate": "^3.0.0",
+        "path-exists": "^3.0.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.21.tgz",
+      "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw="
+    },
+    "lodash-es": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
+      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+    },
+    "lodash-unified": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.2.tgz",
+      "integrity": "sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g=="
+    },
+    "lodash.clonedeep": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz",
+      "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+      "dev": true
+    },
+    "lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+      "dev": true
+    },
+    "lodash.defaultsdeep": {
+      "version": "4.6.1",
+      "resolved": "https://registry.npm.taobao.org/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.1.tgz",
+      "integrity": "sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY=",
+      "dev": true
+    },
+    "lodash.kebabcase": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/lodash.kebabcase/download/lodash.kebabcase-4.1.1.tgz",
+      "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=",
+      "dev": true
+    },
+    "lodash.mapvalues": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npm.taobao.org/lodash.mapvalues/download/lodash.mapvalues-4.6.0.tgz",
+      "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=",
+      "dev": true
+    },
+    "lodash.memoize": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz",
+      "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+      "dev": true
+    },
+    "lodash.sortby": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz",
+      "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+      "dev": true
+    },
+    "lodash.transform": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npm.taobao.org/lodash.transform/download/lodash.transform-4.6.0.tgz",
+      "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=",
+      "dev": true
+    },
+    "lodash.uniq": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz",
+      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+      "dev": true
+    },
+    "log-symbols": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz",
+      "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.1"
+      }
+    },
+    "loglevel": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.1.tgz?cache=0&sync_timestamp=1606312222145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.7.1.tgz",
+      "integrity": "sha1-AF/eL15uRwaPk1/yhXPhJe9y8Zc=",
+      "dev": true
+    },
+    "lower-case": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz",
+      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+      "dev": true
+    },
+    "lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.nlark.com/lru-cache/download/lru-cache-5.1.1.tgz",
+      "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=",
+      "requires": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "magic-string": {
+      "version": "0.25.7",
+      "resolved": "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz",
+      "integrity": "sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=",
+      "requires": {
+        "sourcemap-codec": "^1.4.4"
+      }
+    },
+    "make-dir": {
+      "version": "3.1.0",
+      "resolved": "https://registry.nlark.com/make-dir/download/make-dir-3.1.0.tgz",
+      "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=",
+      "dev": true,
+      "requires": {
+        "semver": "^6.0.0"
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+      "dev": true
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/map-visit/download/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "dev": true,
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "md5.js": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz",
+      "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=",
+      "dev": true,
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "mdn-data": {
+      "version": "2.0.4",
+      "resolved": "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.4.tgz",
+      "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=",
+      "dev": true
+    },
+    "media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz",
+      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+      "dev": true
+    },
+    "memoize-one": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
+      "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
+    },
+    "memory-fs": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz",
+      "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+      "dev": true,
+      "requires": {
+        "errno": "^0.1.3",
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "merge-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz",
+      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+    },
+    "merge-source-map": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz",
+      "integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=",
+      "dev": true,
+      "requires": {
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz",
+      "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=",
+      "dev": true
+    },
+    "merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz",
+      "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=",
+      "dev": true
+    },
+    "methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz",
+      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+      "dev": true
+    },
+    "micromatch": {
+      "version": "3.1.10",
+      "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz",
+      "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "braces": "^2.3.1",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "extglob": "^2.0.4",
+        "fragment-cache": "^0.2.1",
+        "kind-of": "^6.0.2",
+        "nanomatch": "^1.2.9",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.2"
+      }
+    },
+    "miller-rabin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz",
+      "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+          "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=",
+          "dev": true
+        }
+      }
+    },
+    "mime": {
+      "version": "2.5.2",
+      "resolved": "https://registry.nlark.com/mime/download/mime-2.5.2.tgz",
+      "integrity": "sha1-bj3GzCuVEGQ4MOXxnVy3U9pe6r4="
+    },
+    "mime-db": {
+      "version": "1.48.0",
+      "resolved": "https://registry.nlark.com/mime-db/download/mime-db-1.48.0.tgz?cache=0&sync_timestamp=1622433567590&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-db%2Fdownload%2Fmime-db-1.48.0.tgz",
+      "integrity": "sha1-41sxBF3X6to6qtU37YijOvvvLR0=",
+      "dev": true
+    },
+    "mime-types": {
+      "version": "2.1.31",
+      "resolved": "https://registry.nlark.com/mime-types/download/mime-types-2.1.31.tgz?cache=0&sync_timestamp=1622569304088&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.31.tgz",
+      "integrity": "sha1-oA12t0MXxh+cLbIhi46fjpxcnms=",
+      "dev": true,
+      "requires": {
+        "mime-db": "1.48.0"
+      }
+    },
+    "mimic-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1617823674050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz",
+      "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
+      "dev": true
+    },
+    "mini-css-extract-plugin": {
+      "version": "0.9.0",
+      "resolved": "https://registry.nlark.com/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.9.0.tgz",
+      "integrity": "sha1-R/LPB6oWWrNXM7H8l9TEbAVkM54=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "normalize-url": "1.9.1",
+        "schema-utils": "^1.0.0",
+        "webpack-sources": "^1.1.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1625484933876&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
+      }
+    },
+    "minimalistic-assert": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=",
+      "dev": true
+    },
+    "minimalistic-crypto-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz",
+      "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+      "dev": true
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz",
+      "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "1.2.5",
+      "resolved": "https://registry.nlark.com/minimist/download/minimist-1.2.5.tgz",
+      "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI="
+    },
+    "minipass": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-3.1.3.tgz",
+      "integrity": "sha1-fUL/HzljVILhX5zbUxhN7r1YFf0=",
+      "dev": true,
+      "requires": {
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/yallist/download/yallist-4.0.0.tgz",
+          "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
+          "dev": true
+        }
+      }
+    },
+    "mississippi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz",
+      "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=",
+      "dev": true,
+      "requires": {
+        "concat-stream": "^1.5.0",
+        "duplexify": "^3.4.2",
+        "end-of-stream": "^1.1.0",
+        "flush-write-stream": "^1.0.0",
+        "from2": "^2.1.0",
+        "parallel-transform": "^1.1.0",
+        "pump": "^3.0.0",
+        "pumpify": "^1.3.3",
+        "stream-each": "^1.1.0",
+        "through2": "^2.0.0"
+      }
+    },
+    "mixin-deep": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz",
+      "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=",
+      "dev": true,
+      "requires": {
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.5",
+      "resolved": "https://registry.nlark.com/mkdirp/download/mkdirp-0.5.5.tgz",
+      "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
+      "requires": {
+        "minimist": "^1.2.5"
+      }
+    },
+    "mocha": {
+      "version": "6.2.3",
+      "resolved": "https://registry.nlark.com/mocha/download/mocha-6.2.3.tgz",
+      "integrity": "sha1-5khDIYHYuZOTQQISZkRQpMHjGRI=",
+      "dev": true,
+      "requires": {
+        "ansi-colors": "3.2.3",
+        "browser-stdout": "1.3.1",
+        "debug": "3.2.6",
+        "diff": "3.5.0",
+        "escape-string-regexp": "1.0.5",
+        "find-up": "3.0.0",
+        "glob": "7.1.3",
+        "growl": "1.10.5",
+        "he": "1.2.0",
+        "js-yaml": "3.13.1",
+        "log-symbols": "2.2.0",
+        "minimatch": "3.0.4",
+        "mkdirp": "0.5.4",
+        "ms": "2.1.1",
+        "node-environment-flags": "1.0.5",
+        "object.assign": "4.1.0",
+        "strip-json-comments": "2.0.1",
+        "supports-color": "6.0.0",
+        "which": "1.3.1",
+        "wide-align": "1.1.3",
+        "yargs": "13.3.2",
+        "yargs-parser": "13.1.2",
+        "yargs-unparser": "1.6.0"
+      },
+      "dependencies": {
+        "cliui": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz",
+          "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=",
+          "dev": true,
+          "requires": {
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
+          }
+        },
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.nlark.com/debug/download/debug-3.2.6.tgz",
+          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.nlark.com/emoji-regex/download/emoji-regex-7.0.3.tgz",
+          "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+          "dev": true
+        },
+        "glob": {
+          "version": "7.1.3",
+          "resolved": "https://registry.nlark.com/glob/download/glob-7.1.3.tgz?cache=0&sync_timestamp=1620337498129&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob%2Fdownload%2Fglob-7.1.3.tgz",
+          "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.4",
+          "resolved": "https://registry.nlark.com/mkdirp/download/mkdirp-0.5.4.tgz",
+          "integrity": "sha1-/QFQSmeX7Fyb6B/0PSBJYe1kpRI=",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.5"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        },
+        "object.assign": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/object.assign/download/object.assign-4.1.0.tgz",
+          "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=",
+          "dev": true,
+          "requires": {
+            "define-properties": "^1.1.2",
+            "function-bind": "^1.1.1",
+            "has-symbols": "^1.0.0",
+            "object-keys": "^1.0.11"
+          }
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz",
+          "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "6.0.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-6.0.0.tgz",
+          "integrity": "sha1-ds/nQs8fQbubHCmtAwaMBbTA5Ao=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz",
+          "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz",
+          "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
+          }
+        },
+        "yargs": {
+          "version": "13.3.2",
+          "resolved": "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz",
+          "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=",
+          "dev": true,
+          "requires": {
+            "cliui": "^5.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^3.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.1.2"
+          }
+        }
+      }
+    },
+    "mochapack": {
+      "version": "1.1.15",
+      "resolved": "https://registry.nlark.com/mochapack/download/mochapack-1.1.15.tgz",
+      "integrity": "sha1-Qmx5O4ce0AbHgRctorFfYS8R8tw=",
+      "dev": true,
+      "requires": {
+        "@babel/runtime-corejs2": "^7.0.0",
+        "chalk": "^2.4.2",
+        "chokidar": "^2.0.0",
+        "glob-parent": "5.1.0",
+        "globby": "^10.0.1",
+        "interpret": "^1.2.0",
+        "is-glob": "^4.0.1",
+        "loader-utils": "^1.2.3",
+        "lodash": "^4.17.15",
+        "memory-fs": "^0.4.1",
+        "minimatch": "^3.0.4",
+        "nodent-runtime": "^3.2.1",
+        "normalize-path": "^3.0.0",
+        "progress": "^2.0.3",
+        "source-map-support": "^0.5.13",
+        "toposort": "^2.0.2",
+        "yargs": "14.0.0"
+      },
+      "dependencies": {
+        "@nodelib/fs.stat": {
+          "version": "2.0.5",
+          "resolved": "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-2.0.5.tgz",
+          "integrity": "sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos=",
+          "dev": true
+        },
+        "array-union": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz?cache=0&sync_timestamp=1614624861176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-union%2Fdownload%2Farray-union-2.1.0.tgz",
+          "integrity": "sha1-t5hCCtvrHego2ErNii4j0+/oXo0=",
+          "dev": true
+        },
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.nlark.com/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "cliui": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz",
+          "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=",
+          "dev": true,
+          "requires": {
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
+          }
+        },
+        "dir-glob": {
+          "version": "3.0.1",
+          "resolved": "https://registry.nlark.com/dir-glob/download/dir-glob-3.0.1.tgz",
+          "integrity": "sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=",
+          "dev": true,
+          "requires": {
+            "path-type": "^4.0.0"
+          }
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.nlark.com/emoji-regex/download/emoji-regex-7.0.3.tgz",
+          "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+          "dev": true
+        },
+        "fast-glob": {
+          "version": "3.2.7",
+          "resolved": "https://registry.nlark.com/fast-glob/download/fast-glob-3.2.7.tgz",
+          "integrity": "sha1-/Wy3otfpqnp4RhEehaGW1rL3ZqE=",
+          "dev": true,
+          "requires": {
+            "@nodelib/fs.stat": "^2.0.2",
+            "@nodelib/fs.walk": "^1.2.3",
+            "glob-parent": "^5.1.2",
+            "merge2": "^1.3.0",
+            "micromatch": "^4.0.4"
+          },
+          "dependencies": {
+            "glob-parent": {
+              "version": "5.1.2",
+              "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073303944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz",
+              "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
+              "dev": true,
+              "requires": {
+                "is-glob": "^4.0.1"
+              }
+            }
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.nlark.com/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "glob-parent": {
+          "version": "5.1.0",
+          "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.0.tgz?cache=0&sync_timestamp=1620073303944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.0.tgz",
+          "integrity": "sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^4.0.1"
+          }
+        },
+        "globby": {
+          "version": "10.0.2",
+          "resolved": "https://registry.nlark.com/globby/download/globby-10.0.2.tgz",
+          "integrity": "sha1-J3WT50WsqkZGw6tBEonsR6A5JUM=",
+          "dev": true,
+          "requires": {
+            "@types/glob": "^7.1.1",
+            "array-union": "^2.1.0",
+            "dir-glob": "^3.0.1",
+            "fast-glob": "^3.0.3",
+            "glob": "^7.1.3",
+            "ignore": "^5.1.1",
+            "merge2": "^1.2.3",
+            "slash": "^3.0.0"
+          }
+        },
+        "ignore": {
+          "version": "5.1.8",
+          "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz",
+          "integrity": "sha1-8VCotQo0KJsz4i9YiavU2AFvDlc=",
+          "dev": true
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "4.0.4",
+          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz",
+          "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=",
+          "dev": true,
+          "requires": {
+            "braces": "^3.0.1",
+            "picomatch": "^2.2.3"
+          }
+        },
+        "path-type": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz",
+          "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=",
+          "dev": true
+        },
+        "slash": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz",
+          "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.nlark.com/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        },
+        "toposort": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-2.0.2.tgz",
+          "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=",
+          "dev": true
+        },
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz",
+          "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
+          }
+        },
+        "yargs": {
+          "version": "14.0.0",
+          "resolved": "https://registry.nlark.com/yargs/download/yargs-14.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-14.0.0.tgz",
+          "integrity": "sha1-ukysyAKzwLPjap55FyN2PVeoUGY=",
+          "dev": true,
+          "requires": {
+            "cliui": "^5.0.0",
+            "decamelize": "^1.2.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^3.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.1.1"
+          }
+        }
+      }
+    },
+    "move-concurrently": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz",
+      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1",
+        "copy-concurrently": "^1.0.0",
+        "fs-write-stream-atomic": "^1.0.8",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.3"
+      }
+    },
+    "ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+      "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
+    },
+    "multicast-dns": {
+      "version": "6.2.3",
+      "resolved": "https://registry.nlark.com/multicast-dns/download/multicast-dns-6.2.3.tgz?cache=0&sync_timestamp=1621891072224&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmulticast-dns%2Fdownload%2Fmulticast-dns-6.2.3.tgz",
+      "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=",
+      "dev": true,
+      "requires": {
+        "dns-packet": "^1.3.1",
+        "thunky": "^1.0.2"
+      }
+    },
+    "multicast-dns-service-types": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz",
+      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+      "dev": true
+    },
+    "mute-stream": {
+      "version": "0.0.8",
+      "resolved": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz",
+      "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=",
+      "dev": true
+    },
+    "mz": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz",
+      "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=",
+      "requires": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
+    "mz-modules": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/mz-modules/-/mz-modules-2.1.0.tgz",
+      "integrity": "sha512-sjk8lcRW3vrVYnZ+W+67L/2rL+jbO5K/N6PFGIcLWTiYytNr22Ah9FDXFs+AQntTM1boZcoHi5qS+CV1seuPog==",
+      "requires": {
+        "glob": "^7.1.2",
+        "ko-sleep": "^1.0.3",
+        "mkdirp": "^0.5.1",
+        "pump": "^3.0.0",
+        "rimraf": "^2.6.1"
+      }
+    },
+    "nan": {
+      "version": "2.17.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
+      "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
+      "dev": true,
+      "optional": true
+    },
+    "nanoid": {
+      "version": "3.1.23",
+      "resolved": "https://registry.nlark.com/nanoid/download/nanoid-3.1.23.tgz?cache=0&sync_timestamp=1620674856899&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnanoid%2Fdownload%2Fnanoid-3.1.23.tgz",
+      "integrity": "sha1-90QIbOfCvEfuCoRyV01ceOQYOoE="
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz",
+      "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "fragment-cache": "^0.2.1",
+        "is-windows": "^1.0.2",
+        "kind-of": "^6.0.2",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      }
+    },
+    "needle": {
+      "version": "2.8.0",
+      "resolved": "https://registry.nlark.com/needle/download/needle-2.8.0.tgz",
+      "integrity": "sha1-HI75waLCncweg9c4Cde8aByAoEg=",
+      "optional": true,
+      "requires": {
+        "debug": "^3.2.6",
+        "iconv-lite": "^0.4.4",
+        "sax": "^1.2.4"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.nlark.com/debug/download/debug-3.2.7.tgz",
+          "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+          "optional": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "negotiator": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
+      "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=",
+      "dev": true
+    },
+    "neo-async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz",
+      "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=",
+      "dev": true
+    },
+    "netmask": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/netmask/-/netmask-2.0.2.tgz",
+      "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="
+    },
+    "nice-try": {
+      "version": "1.0.5",
+      "resolved": "https://registry.nlark.com/nice-try/download/nice-try-1.0.5.tgz",
+      "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=",
+      "dev": true
+    },
+    "no-case": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz",
+      "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=",
+      "dev": true,
+      "requires": {
+        "lower-case": "^1.1.1"
+      }
+    },
+    "node-addon-api": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz",
+      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+      "dev": true
+    },
+    "node-environment-flags": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/node-environment-flags/download/node-environment-flags-1.0.5.tgz",
+      "integrity": "sha1-+pMCdfW/Xa4YjWGSsktMi7rD12o=",
+      "dev": true,
+      "requires": {
+        "object.getownpropertydescriptors": "^2.0.3",
+        "semver": "^5.7.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz",
+          "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+          "dev": true
+        }
+      }
+    },
+    "node-fetch": {
+      "version": "2.6.7",
+      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz",
+      "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+      "requires": {
+        "whatwg-url": "^5.0.0"
+      },
+      "dependencies": {
+        "tr46": {
+          "version": "0.0.3",
+          "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",
+          "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+        },
+        "webidl-conversions": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+          "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+        },
+        "whatwg-url": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",
+          "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+          "requires": {
+            "tr46": "~0.0.3",
+            "webidl-conversions": "^3.0.0"
+          }
+        }
+      }
+    },
+    "node-forge": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.10.0.tgz",
+      "integrity": "sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M=",
+      "dev": true
+    },
+    "node-libs-browser": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz",
+      "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=",
+      "dev": true,
+      "requires": {
+        "assert": "^1.1.1",
+        "browserify-zlib": "^0.2.0",
+        "buffer": "^4.3.0",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "^1.0.0",
+        "crypto-browserify": "^3.11.0",
+        "domain-browser": "^1.1.1",
+        "events": "^3.0.0",
+        "https-browserify": "^1.0.0",
+        "os-browserify": "^0.3.0",
+        "path-browserify": "0.0.1",
+        "process": "^0.11.10",
+        "punycode": "^1.2.4",
+        "querystring-es3": "^0.2.0",
+        "readable-stream": "^2.3.3",
+        "stream-browserify": "^2.0.1",
+        "stream-http": "^2.7.2",
+        "string_decoder": "^1.0.0",
+        "timers-browserify": "^2.0.4",
+        "tty-browserify": "0.0.0",
+        "url": "^0.11.0",
+        "util": "^0.11.0",
+        "vm-browserify": "^1.0.1"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+          "dev": true
+        }
+      }
+    },
+    "node-releases": {
+      "version": "1.1.73",
+      "resolved": "https://registry.nlark.com/node-releases/download/node-releases-1.1.73.tgz",
+      "integrity": "sha1-3U6B3dUnf/hGuAtSu0DEnt96eyA=",
+      "dev": true
+    },
+    "nodent-runtime": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npm.taobao.org/nodent-runtime/download/nodent-runtime-3.2.1.tgz",
+      "integrity": "sha1-nidV2F4592Qojw1HUuvP4+VB4A4=",
+      "dev": true
+    },
+    "normalize-package-data": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz?cache=0&sync_timestamp=1616086930281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-2.5.0.tgz",
+      "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz",
+          "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+          "dev": true
+        }
+      }
+    },
+    "normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/normalize-path/download/normalize-path-3.0.0.tgz",
+      "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
+      "dev": true
+    },
+    "normalize-range": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz",
+      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+      "dev": true
+    },
+    "normalize-url": {
+      "version": "1.9.1",
+      "resolved": "https://registry.nlark.com/normalize-url/download/normalize-url-1.9.1.tgz?cache=0&sync_timestamp=1625826704090&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz",
+      "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+      "dev": true,
+      "requires": {
+        "object-assign": "^4.0.1",
+        "prepend-http": "^1.0.0",
+        "query-string": "^4.1.0",
+        "sort-keys": "^1.0.0"
+      }
+    },
+    "normalize-wheel-es": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
+      "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
+    },
+    "npm-run-path": {
+      "version": "2.0.2",
+      "resolved": "https://registry.nlark.com/npm-run-path/download/npm-run-path-2.0.2.tgz",
+      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "dev": true,
+      "requires": {
+        "path-key": "^2.0.0"
+      },
+      "dependencies": {
+        "path-key": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz",
+          "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+          "dev": true
+        }
+      }
+    },
+    "nth-check": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-2.0.0.tgz",
+      "integrity": "sha1-G7T22scAcvwxPoyc0UF7UHTAoSU=",
+      "dev": true,
+      "requires": {
+        "boolbase": "^1.0.0"
+      }
+    },
+    "num2fraction": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz",
+      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+      "dev": true
+    },
+    "nwsapi": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz",
+      "integrity": "sha1-IEh5qePQaP8qVROcLHcngGgaOLc=",
+      "dev": true
+    },
+    "oauth-sign": {
+      "version": "0.9.0",
+      "resolved": "https://registry.nlark.com/oauth-sign/download/oauth-sign-0.9.0.tgz",
+      "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=",
+      "dev": true
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.nlark.com/object-copy/download/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "dev": true,
+      "requires": {
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        },
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+          "dev": true
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
+          "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "5.1.0",
+              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+              "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+              "dev": true
+            }
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "object-hash": {
+      "version": "1.3.1",
+      "resolved": "https://registry.nlark.com/object-hash/download/object-hash-1.3.1.tgz?cache=0&sync_timestamp=1622019485009&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-hash%2Fdownload%2Fobject-hash-1.3.1.tgz",
+      "integrity": "sha1-/eRSCYqVHLFF8Dm7fUVUSd3BJt8=",
+      "dev": true
+    },
+    "object-inspect": {
+      "version": "1.11.0",
+      "resolved": "https://registry.nlark.com/object-inspect/download/object-inspect-1.11.0.tgz",
+      "integrity": "sha1-nc6xRs7dQUig2eUauI00z1CZIrE=",
+      "dev": true
+    },
+    "object-is": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.5.tgz?cache=0&sync_timestamp=1613857744782&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.5.tgz",
+      "integrity": "sha1-ud7qpfx/GEag+uzc7sE45XePU6w=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3"
+      }
+    },
+    "object-keys": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz",
+      "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=",
+      "dev": true
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.assign": {
+      "version": "4.1.2",
+      "resolved": "https://registry.nlark.com/object.assign/download/object.assign-4.1.2.tgz",
+      "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3",
+        "has-symbols": "^1.0.1",
+        "object-keys": "^1.1.1"
+      }
+    },
+    "object.getownpropertydescriptors": {
+      "version": "2.1.2",
+      "resolved": "https://registry.nlark.com/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.2.tgz",
+      "integrity": "sha1-G9Y66s8NXS0vMbXjk7A6fGAaI/c=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.18.0-next.2"
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "object.values": {
+      "version": "1.1.4",
+      "resolved": "https://registry.nlark.com/object.values/download/object.values-1.1.4.tgz?cache=0&sync_timestamp=1622070650699&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject.values%2Fdownload%2Fobject.values-1.1.4.tgz",
+      "integrity": "sha1-DSc3YoM+gWtpOmN9MAc+cFFTWzA=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.18.2"
+      }
+    },
+    "obuf": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz",
+      "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=",
+      "dev": true
+    },
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.nlark.com/on-finished/download/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+      "dev": true,
+      "requires": {
+        "ee-first": "1.1.1"
+      }
+    },
+    "on-headers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/on-headers/download/on-headers-1.0.2.tgz",
+      "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=",
+      "dev": true
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.nlark.com/once/download/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "onetime": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz",
+      "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+      "dev": true,
+      "requires": {
+        "mimic-fn": "^2.1.0"
+      }
+    },
+    "open": {
+      "version": "6.4.0",
+      "resolved": "https://registry.nlark.com/open/download/open-6.4.0.tgz",
+      "integrity": "sha1-XBPpbQ3IlGhhZPGJZez+iJ7PyKk=",
+      "dev": true,
+      "requires": {
+        "is-wsl": "^1.1.0"
+      },
+      "dependencies": {
+        "is-wsl": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz",
+          "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+          "dev": true
+        }
+      }
+    },
+    "opener": {
+      "version": "1.5.2",
+      "resolved": "https://registry.nlark.com/opener/download/opener-1.5.2.tgz",
+      "integrity": "sha1-XTfh81B3udysQwE3InGv3rKhNZg=",
+      "dev": true
+    },
+    "opn": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz",
+      "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=",
+      "dev": true,
+      "requires": {
+        "is-wsl": "^1.1.0"
+      },
+      "dependencies": {
+        "is-wsl": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz",
+          "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+          "dev": true
+        }
+      }
+    },
+    "optionator": {
+      "version": "0.8.3",
+      "resolved": "https://registry.nlark.com/optionator/download/optionator-0.8.3.tgz",
+      "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=",
+      "requires": {
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.6",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "word-wrap": "~1.2.3"
+      }
+    },
+    "ora": {
+      "version": "3.4.0",
+      "resolved": "https://registry.nlark.com/ora/download/ora-3.4.0.tgz?cache=0&sync_timestamp=1623137978561&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fora%2Fdownload%2Fora-3.4.0.tgz",
+      "integrity": "sha1-vwdSSRBZo+8+1MhQl1Md6f280xg=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "cli-cursor": "^2.1.0",
+        "cli-spinners": "^2.0.0",
+        "log-symbols": "^2.2.0",
+        "strip-ansi": "^5.2.0",
+        "wcwidth": "^1.0.1"
+      },
+      "dependencies": {
+        "cli-cursor": {
+          "version": "2.1.0",
+          "resolved": "https://registry.nlark.com/cli-cursor/download/cli-cursor-2.1.0.tgz",
+          "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^2.0.0"
+          }
+        },
+        "mimic-fn": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz?cache=0&sync_timestamp=1617823674050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-1.2.0.tgz",
+          "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=",
+          "dev": true
+        },
+        "onetime": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz",
+          "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^1.0.0"
+          }
+        },
+        "restore-cursor": {
+          "version": "2.0.0",
+          "resolved": "https://registry.nlark.com/restore-cursor/download/restore-cursor-2.0.0.tgz",
+          "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+          "dev": true,
+          "requires": {
+            "onetime": "^2.0.0",
+            "signal-exit": "^3.0.2"
+          }
+        }
+      }
+    },
+    "original": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz",
+      "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=",
+      "requires": {
+        "url-parse": "^1.4.3"
+      }
+    },
+    "os-browserify": {
+      "version": "0.3.0",
+      "resolved": "https://registry.nlark.com/os-browserify/download/os-browserify-0.3.0.tgz",
+      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+      "dev": true
+    },
+    "os-name": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/os-name/-/os-name-1.0.3.tgz",
+      "integrity": "sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==",
+      "requires": {
+        "osx-release": "^1.0.0",
+        "win-release": "^1.0.0"
+      }
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+      "dev": true
+    },
+    "osx-release": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/osx-release/-/osx-release-1.1.0.tgz",
+      "integrity": "sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==",
+      "requires": {
+        "minimist": "^1.1.0"
+      }
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+      "dev": true
+    },
+    "p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz",
+      "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=",
+      "requires": {
+        "p-try": "^2.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz",
+      "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+      "dev": true,
+      "requires": {
+        "p-limit": "^2.0.0"
+      }
+    },
+    "p-map": {
+      "version": "2.1.0",
+      "resolved": "https://registry.nlark.com/p-map/download/p-map-2.1.0.tgz",
+      "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=",
+      "dev": true
+    },
+    "p-retry": {
+      "version": "3.0.1",
+      "resolved": "https://registry.nlark.com/p-retry/download/p-retry-3.0.1.tgz",
+      "integrity": "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg=",
+      "dev": true,
+      "requires": {
+        "retry": "^0.12.0"
+      }
+    },
+    "p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.nlark.com/p-try/download/p-try-2.2.0.tgz",
+      "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY="
+    },
+    "pac-proxy-agent": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz",
+      "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==",
+      "requires": {
+        "@tootallnate/once": "1",
+        "agent-base": "6",
+        "debug": "4",
+        "get-uri": "3",
+        "http-proxy-agent": "^4.0.1",
+        "https-proxy-agent": "5",
+        "pac-resolver": "^5.0.0",
+        "raw-body": "^2.2.0",
+        "socks-proxy-agent": "5"
+      }
+    },
+    "pac-resolver": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/pac-resolver/-/pac-resolver-5.0.1.tgz",
+      "integrity": "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==",
+      "requires": {
+        "degenerator": "^3.0.2",
+        "ip": "^1.1.5",
+        "netmask": "^2.0.2"
+      }
+    },
+    "pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1610208924901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz",
+      "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=",
+      "dev": true
+    },
+    "parallel-transform": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz",
+      "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=",
+      "dev": true,
+      "requires": {
+        "cyclist": "^1.0.1",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
+      }
+    },
+    "param-case": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz?cache=0&sync_timestamp=1606867311360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparam-case%2Fdownload%2Fparam-case-2.1.1.tgz",
+      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0"
+      }
+    },
+    "parse-asn1": {
+      "version": "5.1.6",
+      "resolved": "https://registry.nlark.com/parse-asn1/download/parse-asn1-5.1.6.tgz",
+      "integrity": "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ=",
+      "dev": true,
+      "requires": {
+        "asn1.js": "^5.2.0",
+        "browserify-aes": "^1.0.0",
+        "evp_bytestokey": "^1.0.0",
+        "pbkdf2": "^3.0.3",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "parse-json": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1610966676829&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz",
+      "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+      "dev": true,
+      "requires": {
+        "error-ex": "^1.3.1",
+        "json-parse-better-errors": "^1.0.1"
+      }
+    },
+    "parse-node-version": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/parse-node-version/download/parse-node-version-1.0.1.tgz",
+      "integrity": "sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs="
+    },
+    "parse5": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz",
+      "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=",
+      "dev": true
+    },
+    "parse5-htmlparser2-tree-adapter": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npm.taobao.org/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+      "integrity": "sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY=",
+      "dev": true,
+      "requires": {
+        "parse5": "^6.0.1"
+      },
+      "dependencies": {
+        "parse5": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-6.0.1.tgz",
+          "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=",
+          "dev": true
+        }
+      }
+    },
+    "parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz",
+      "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=",
+      "dev": true
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "dev": true
+    },
+    "path-browserify": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz",
+      "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=",
+      "dev": true
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "dev": true
+    },
+    "path-exists": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz",
+      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+      "dev": true
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/path-is-absolute/download/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+    },
+    "path-is-inside": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/path-is-inside/download/path-is-inside-1.0.2.tgz",
+      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+      "dev": true
+    },
+    "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
+    },
+    "path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.nlark.com/path-parse/download/path-parse-1.0.7.tgz",
+      "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=",
+      "dev": true
+    },
+    "path-to-regexp": {
+      "version": "0.1.7",
+      "resolved": "https://registry.nlark.com/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&sync_timestamp=1618847711772&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz",
+      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+      "dev": true
+    },
+    "path-type": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz",
+      "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
+      "dev": true,
+      "requires": {
+        "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        }
+      }
+    },
+    "pathval": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/pathval/download/pathval-1.1.1.tgz?cache=0&sync_timestamp=1611662006519&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpathval%2Fdownload%2Fpathval-1.1.1.tgz",
+      "integrity": "sha1-hTTnenfOesWiUS6iHg/bj89sPY0=",
+      "dev": true
+    },
+    "pause-stream": {
+      "version": "0.0.11",
+      "resolved": "https://registry.npmmirror.com/pause-stream/-/pause-stream-0.0.11.tgz",
+      "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==",
+      "requires": {
+        "through": "~2.3"
+      }
+    },
+    "pbkdf2": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.2.tgz",
+      "integrity": "sha1-3YIqoIh1gOUvGgOdw+2hCO+uMHU=",
+      "dev": true,
+      "requires": {
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      }
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+      "dev": true
+    },
+    "picomatch": {
+      "version": "2.3.0",
+      "resolved": "https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpicomatch%2Fdownload%2Fpicomatch-2.3.0.tgz",
+      "integrity": "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=",
+      "dev": true
+    },
+    "pify": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz",
+      "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE="
+    },
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.nlark.com/pinkie/download/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+      "dev": true
+    },
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.nlark.com/pinkie-promise/download/pinkie-promise-2.0.1.tgz?cache=0&sync_timestamp=1618847023792&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpinkie-promise%2Fdownload%2Fpinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "dev": true,
+      "requires": {
+        "pinkie": "^2.0.0"
+      }
+    },
+    "pkg-dir": {
+      "version": "4.2.0",
+      "resolved": "https://registry.nlark.com/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1618847182947&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz",
+      "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=",
+      "dev": true,
+      "requires": {
+        "find-up": "^4.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.nlark.com/find-up/download/find-up-4.1.0.tgz",
+          "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz",
+          "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz",
+          "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz",
+          "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
+          "dev": true
+        }
+      }
+    },
+    "platform": {
+      "version": "1.3.6",
+      "resolved": "https://registry.npmmirror.com/platform/-/platform-1.3.6.tgz",
+      "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
+    },
+    "pn": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz",
+      "integrity": "sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=",
+      "dev": true
+    },
+    "pngjs": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz",
+      "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="
+    },
+    "pnp-webpack-plugin": {
+      "version": "1.6.4",
+      "resolved": "https://registry.npm.taobao.org/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz",
+      "integrity": "sha1-yXEaxNxIpoXauvyG+Lbdn434QUk=",
+      "dev": true,
+      "requires": {
+        "ts-pnp": "^1.1.6"
+      }
+    },
+    "portfinder": {
+      "version": "1.0.28",
+      "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz",
+      "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=",
+      "dev": true,
+      "requires": {
+        "async": "^2.6.2",
+        "debug": "^3.1.1",
+        "mkdirp": "^0.5.5"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.nlark.com/debug/download/debug-3.2.7.tgz",
+          "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.nlark.com/posix-character-classes/download/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+      "dev": true
+    },
+    "postcss": {
+      "version": "7.0.36",
+      "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.36.tgz",
+      "integrity": "sha1-BW+M/6k5ZiqPWQWVDAfVKFZE38s=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "source-map": "^0.6.1",
+        "supports-color": "^6.1.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-6.1.0.tgz",
+          "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-calc": {
+      "version": "7.0.5",
+      "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.5.tgz?cache=0&sync_timestamp=1609689191682&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-7.0.5.tgz",
+      "integrity": "sha1-+KbpnxLmGcLrwjz2xIb9wVhgkz4=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.27",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.0.2"
+      }
+    },
+    "postcss-colormin": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/postcss-colormin/download/postcss-colormin-4.0.3.tgz",
+      "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "color": "^3.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-convert-values": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz",
+      "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-discard-comments": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz?cache=0&sync_timestamp=1621449811540&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-discard-comments%2Fdownload%2Fpostcss-discard-comments-4.0.2.tgz",
+      "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-discard-duplicates": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz?cache=0&sync_timestamp=1621449811996&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-discard-duplicates%2Fdownload%2Fpostcss-discard-duplicates-4.0.2.tgz",
+      "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-discard-empty": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz",
+      "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-discard-overridden": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz",
+      "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-load-config": {
+      "version": "2.1.2",
+      "resolved": "https://registry.nlark.com/postcss-load-config/download/postcss-load-config-2.1.2.tgz?cache=0&sync_timestamp=1623669505598&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-load-config%2Fdownload%2Fpostcss-load-config-2.1.2.tgz",
+      "integrity": "sha1-xepQTyxK7zPHNZo03jVzdyrXUCo=",
+      "dev": true,
+      "requires": {
+        "cosmiconfig": "^5.0.0",
+        "import-cwd": "^2.0.0"
+      }
+    },
+    "postcss-loader": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/postcss-loader/download/postcss-loader-3.0.0.tgz?cache=0&sync_timestamp=1625142952652&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-loader%2Fdownload%2Fpostcss-loader-3.0.0.tgz",
+      "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "postcss": "^7.0.0",
+        "postcss-load-config": "^2.0.0",
+        "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1625484933876&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
+      }
+    },
+    "postcss-merge-longhand": {
+      "version": "4.0.11",
+      "resolved": "https://registry.nlark.com/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz",
+      "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=",
+      "dev": true,
+      "requires": {
+        "css-color-names": "0.0.4",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "stylehacks": "^4.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-merge-rules": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz",
+      "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "caniuse-api": "^3.0.0",
+        "cssnano-util-same-parent": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0",
+        "vendors": "^1.0.0"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.2",
+          "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&sync_timestamp=1620753051451&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz",
+          "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
+          "dev": true,
+          "requires": {
+            "dot-prop": "^5.2.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-minify-font-values": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz",
+      "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-minify-gradients": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz?cache=0&sync_timestamp=1621449817860&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-minify-gradients%2Fdownload%2Fpostcss-minify-gradients-4.0.2.tgz",
+      "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "is-color-stop": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-minify-params": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz",
+      "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=",
+      "dev": true,
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "browserslist": "^4.0.0",
+        "cssnano-util-get-arguments": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "uniqs": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-minify-selectors": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz?cache=0&sync_timestamp=1621449812496&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-minify-selectors%2Fdownload%2Fpostcss-minify-selectors-4.0.2.tgz",
+      "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=",
+      "dev": true,
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.2",
+          "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&sync_timestamp=1620753051451&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz",
+          "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
+          "dev": true,
+          "requires": {
+            "dot-prop": "^5.2.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-modules-extract-imports": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-2.0.0.tgz?cache=0&sync_timestamp=1602588260997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-extract-imports%2Fdownload%2Fpostcss-modules-extract-imports-2.0.0.tgz",
+      "integrity": "sha1-gYcZoa4doyX5gyRGsBE27rSTzX4=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.5"
+      }
+    },
+    "postcss-modules-local-by-default": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-3.0.3.tgz",
+      "integrity": "sha1-uxTgzHgnnVBNvcv9fgyiiZP/u7A=",
+      "dev": true,
+      "requires": {
+        "icss-utils": "^4.1.1",
+        "postcss": "^7.0.32",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.1.0"
+      }
+    },
+    "postcss-modules-scope": {
+      "version": "2.2.0",
+      "resolved": "https://registry.nlark.com/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz",
+      "integrity": "sha1-OFyuATzHdD9afXYC0Qc6iequYu4=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.6",
+        "postcss-selector-parser": "^6.0.0"
+      }
+    },
+    "postcss-modules-values": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-3.0.0.tgz?cache=0&sync_timestamp=1602586215124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-values%2Fdownload%2Fpostcss-modules-values-3.0.0.tgz",
+      "integrity": "sha1-W1AA1uuuKbQlUwG0o6VFdEI+fxA=",
+      "dev": true,
+      "requires": {
+        "icss-utils": "^4.0.0",
+        "postcss": "^7.0.6"
+      }
+    },
+    "postcss-normalize-charset": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz?cache=0&sync_timestamp=1621449813014&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-normalize-charset%2Fdownload%2Fpostcss-normalize-charset-4.0.1.tgz",
+      "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-normalize-display-values": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz",
+      "integrity": "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-normalize-positions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz",
+      "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-normalize-repeat-style": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz",
+      "integrity": "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-normalize-string": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz",
+      "integrity": "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw=",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-normalize-timing-functions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz",
+      "integrity": "sha1-jgCcoqOUnNr4rSPmtquZy159KNk=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-normalize-unicode": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz",
+      "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-normalize-url": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz",
+      "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=",
+      "dev": true,
+      "requires": {
+        "is-absolute-url": "^2.0.0",
+        "normalize-url": "^3.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "normalize-url": {
+          "version": "3.3.0",
+          "resolved": "https://registry.nlark.com/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1625826704090&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz",
+          "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
+          "dev": true
+        },
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-normalize-whitespace": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz",
+      "integrity": "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-ordered-values": {
+      "version": "4.1.2",
+      "resolved": "https://registry.nlark.com/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz",
+      "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-reduce-initial": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz?cache=0&sync_timestamp=1621449818195&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-reduce-initial%2Fdownload%2Fpostcss-reduce-initial-4.0.3.tgz",
+      "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "caniuse-api": "^3.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-reduce-transforms": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz",
+      "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-selector-parser": {
+      "version": "6.0.6",
+      "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.6.tgz?cache=0&sync_timestamp=1620753051451&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.6.tgz",
+      "integrity": "sha1-LFu6gXSsL2mBq2MaQqsO5UrzMuo=",
+      "dev": true,
+      "requires": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      }
+    },
+    "postcss-svgo": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/postcss-svgo/download/postcss-svgo-4.0.3.tgz",
+      "integrity": "sha1-NDos26yVBdQWJD1Jb3JPOIlMlB4=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "svgo": "^1.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
+          "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+          "dev": true
+        }
+      }
+    },
+    "postcss-unique-selectors": {
+      "version": "4.0.1",
+      "resolved": "https://registry.nlark.com/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz?cache=0&sync_timestamp=1621449819576&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-unique-selectors%2Fdownload%2Fpostcss-unique-selectors-4.0.1.tgz",
+      "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=",
+      "dev": true,
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "postcss": "^7.0.0",
+        "uniqs": "^2.0.0"
+      }
+    },
+    "postcss-value-parser": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz",
+      "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=",
+      "dev": true
+    },
+    "prelude-ls": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz",
+      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+    },
+    "prepend-http": {
+      "version": "1.0.4",
+      "resolved": "https://registry.nlark.com/prepend-http/download/prepend-http-1.0.4.tgz",
+      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+      "dev": true
+    },
+    "prettier": {
+      "version": "1.19.1",
+      "resolved": "https://registry.nlark.com/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1624696259185&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz",
+      "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=",
+      "dev": true,
+      "optional": true
+    },
+    "pretty-error": {
+      "version": "2.1.2",
+      "resolved": "https://registry.nlark.com/pretty-error/download/pretty-error-2.1.2.tgz?cache=0&sync_timestamp=1623342956536&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpretty-error%2Fdownload%2Fpretty-error-2.1.2.tgz",
+      "integrity": "sha1-von4LYGxyG7I/fvDhQRYgnJ/k7Y=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.20",
+        "renderkid": "^2.0.4"
+      }
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz",
+      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+      "dev": true
+    },
+    "process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.nlark.com/process-nextick-args/download/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I="
+    },
+    "progress": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz",
+      "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=",
+      "dev": true
+    },
+    "promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz",
+      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+      "dev": true
+    },
+    "proxy-addr": {
+      "version": "2.0.7",
+      "resolved": "https://registry.nlark.com/proxy-addr/download/proxy-addr-2.0.7.tgz",
+      "integrity": "sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU=",
+      "dev": true,
+      "requires": {
+        "forwarded": "0.2.0",
+        "ipaddr.js": "1.9.1"
+      }
+    },
+    "proxy-agent": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/proxy-agent/-/proxy-agent-5.0.0.tgz",
+      "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==",
+      "requires": {
+        "agent-base": "^6.0.0",
+        "debug": "4",
+        "http-proxy-agent": "^4.0.0",
+        "https-proxy-agent": "^5.0.0",
+        "lru-cache": "^5.1.1",
+        "pac-proxy-agent": "^5.0.0",
+        "proxy-from-env": "^1.0.0",
+        "socks-proxy-agent": "^5.0.0"
+      }
+    },
+    "proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+    },
+    "prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/prr/download/prr-1.0.1.tgz",
+      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
+    },
+    "psl": {
+      "version": "1.8.0",
+      "resolved": "https://registry.nlark.com/psl/download/psl-1.8.0.tgz",
+      "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ="
+    },
+    "public-encrypt": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz",
+      "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "parse-asn1": "^5.0.0",
+        "randombytes": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.0",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz",
+          "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=",
+          "dev": true
+        }
+      }
+    },
+    "pump": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz",
+      "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "pumpify": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz",
+      "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=",
+      "dev": true,
+      "requires": {
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
+      },
+      "dependencies": {
+        "pump": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz",
+          "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        }
+      }
+    },
+    "punycode": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
+      "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
+    },
+    "q": {
+      "version": "1.5.1",
+      "resolved": "https://registry.nlark.com/q/download/q-1.5.1.tgz",
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+      "dev": true
+    },
+    "qrcode": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.4.tgz",
+      "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==",
+      "requires": {
+        "dijkstrajs": "^1.0.1",
+        "pngjs": "^5.0.0",
+        "yargs": "^15.3.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+          "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+        },
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
+          "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+        },
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz",
+          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
+          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+        },
+        "string-width": {
+          "version": "4.2.3",
+          "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+          "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.1"
+          }
+        },
+        "strip-ansi": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+          "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+          "requires": {
+            "ansi-regex": "^5.0.1"
+          }
+        },
+        "yargs": {
+          "version": "15.4.1",
+          "resolved": "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz",
+          "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+          "requires": {
+            "cliui": "^6.0.0",
+            "decamelize": "^1.2.0",
+            "find-up": "^4.1.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^4.2.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^18.1.2"
+          }
+        },
+        "yargs-parser": {
+          "version": "18.1.3",
+          "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz",
+          "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
+          }
+        }
+      }
+    },
+    "qs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz",
+      "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY="
+    },
+    "query-string": {
+      "version": "4.3.4",
+      "resolved": "https://registry.nlark.com/query-string/download/query-string-4.3.4.tgz?cache=0&sync_timestamp=1624297084219&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fquery-string%2Fdownload%2Fquery-string-4.3.4.tgz",
+      "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+      "dev": true,
+      "requires": {
+        "object-assign": "^4.1.0",
+        "strict-uri-encode": "^1.0.0"
+      }
+    },
+    "querystring": {
+      "version": "0.2.0",
+      "resolved": "https://registry.nlark.com/querystring/download/querystring-0.2.0.tgz?cache=0&sync_timestamp=1626179435543&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fquerystring%2Fdownload%2Fquerystring-0.2.0.tgz",
+      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+      "dev": true
+    },
+    "querystring-es3": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz",
+      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+      "dev": true
+    },
+    "querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.nlark.com/querystringify/download/querystringify-2.2.0.tgz",
+      "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y="
+    },
+    "queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/queue-microtask/download/queue-microtask-1.2.3.tgz?cache=0&sync_timestamp=1616391548624&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqueue-microtask%2Fdownload%2Fqueue-microtask-1.2.3.tgz",
+      "integrity": "sha1-SSkii7xyTfrEPg77BYyve2z7YkM=",
+      "dev": true
+    },
+    "randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
+      "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "randomfill": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz",
+      "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=",
+      "dev": true,
+      "requires": {
+        "randombytes": "^2.0.5",
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://registry.nlark.com/range-parser/download/range-parser-1.2.1.tgz",
+      "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=",
+      "dev": true
+    },
+    "raw-body": {
+      "version": "2.4.0",
+      "resolved": "https://registry.nlark.com/raw-body/download/raw-body-2.4.0.tgz",
+      "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=",
+      "requires": {
+        "bytes": "3.1.0",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      }
+    },
+    "read-pkg": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz?cache=0&sync_timestamp=1616914967500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-5.2.0.tgz",
+      "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=",
+      "dev": true,
+      "requires": {
+        "@types/normalize-package-data": "^2.4.0",
+        "normalize-package-data": "^2.5.0",
+        "parse-json": "^5.0.0",
+        "type-fest": "^0.6.0"
+      },
+      "dependencies": {
+        "parse-json": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-5.2.0.tgz?cache=0&sync_timestamp=1610966676829&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-5.2.0.tgz",
+          "integrity": "sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=",
+          "dev": true,
+          "requires": {
+            "@babel/code-frame": "^7.0.0",
+            "error-ex": "^1.3.1",
+            "json-parse-even-better-errors": "^2.3.0",
+            "lines-and-columns": "^1.1.6"
+          }
+        },
+        "type-fest": {
+          "version": "0.6.0",
+          "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1625745286088&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz",
+          "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=",
+          "dev": true
+        }
+      }
+    },
+    "readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.nlark.com/readable-stream/download/readable-stream-2.3.7.tgz",
+      "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=",
+      "requires": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "readdirp": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz",
+      "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.11",
+        "micromatch": "^3.1.10",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "regenerate": {
+      "version": "1.4.2",
+      "resolved": "https://registry.nlark.com/regenerate/download/regenerate-1.4.2.tgz",
+      "integrity": "sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo=",
+      "dev": true
+    },
+    "regenerate-unicode-properties": {
+      "version": "8.2.0",
+      "resolved": "https://registry.nlark.com/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz",
+      "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=",
+      "dev": true,
+      "requires": {
+        "regenerate": "^1.4.0"
+      }
+    },
+    "regenerator-runtime": {
+      "version": "0.13.7",
+      "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz",
+      "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U=",
+      "dev": true
+    },
+    "regenerator-transform": {
+      "version": "0.14.5",
+      "resolved": "https://registry.nlark.com/regenerator-transform/download/regenerator-transform-0.14.5.tgz",
+      "integrity": "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=",
+      "dev": true,
+      "requires": {
+        "@babel/runtime": "^7.8.4"
+      }
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz",
+      "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "regexp.prototype.flags": {
+      "version": "1.3.1",
+      "resolved": "https://registry.nlark.com/regexp.prototype.flags/download/regexp.prototype.flags-1.3.1.tgz",
+      "integrity": "sha1-fvNSro0VnnWMDq3Kb4/LTu8HviY=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3"
+      }
+    },
+    "regexpu-core": {
+      "version": "4.7.1",
+      "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.1.tgz",
+      "integrity": "sha1-LepamgcjMpj78NuR+pq8TG4PitY=",
+      "dev": true,
+      "requires": {
+        "regenerate": "^1.4.0",
+        "regenerate-unicode-properties": "^8.2.0",
+        "regjsgen": "^0.5.1",
+        "regjsparser": "^0.6.4",
+        "unicode-match-property-ecmascript": "^1.0.4",
+        "unicode-match-property-value-ecmascript": "^1.2.0"
+      }
+    },
+    "regjsgen": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz",
+      "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=",
+      "dev": true
+    },
+    "regjsparser": {
+      "version": "0.6.9",
+      "resolved": "https://registry.nlark.com/regjsparser/download/regjsparser-0.6.9.tgz",
+      "integrity": "sha1-tInu98mizkNydicBFCnPgzpxg+Y=",
+      "dev": true,
+      "requires": {
+        "jsesc": "~0.5.0"
+      },
+      "dependencies": {
+        "jsesc": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz?cache=0&sync_timestamp=1603891242793&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-0.5.0.tgz",
+          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+          "dev": true
+        }
+      }
+    },
+    "relateurl": {
+      "version": "0.2.7",
+      "resolved": "https://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz",
+      "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+      "dev": true
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+      "dev": true
+    },
+    "renderkid": {
+      "version": "2.0.7",
+      "resolved": "https://registry.nlark.com/renderkid/download/renderkid-2.0.7.tgz?cache=0&sync_timestamp=1623343631807&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frenderkid%2Fdownload%2Frenderkid-2.0.7.tgz",
+      "integrity": "sha1-Rk8namvc7mBvShWZP5sp/HTKhgk=",
+      "dev": true,
+      "requires": {
+        "css-select": "^4.1.3",
+        "dom-converter": "^0.2.0",
+        "htmlparser2": "^6.1.0",
+        "lodash": "^4.17.21",
+        "strip-ansi": "^3.0.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        }
+      }
+    },
+    "repeat-element": {
+      "version": "1.1.4",
+      "resolved": "https://registry.nlark.com/repeat-element/download/repeat-element-1.1.4.tgz",
+      "integrity": "sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek=",
+      "dev": true
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+      "dev": true
+    },
+    "request": {
+      "version": "2.88.2",
+      "resolved": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz",
+      "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=",
+      "dev": true,
+      "requires": {
+        "aws-sign2": "~0.7.0",
+        "aws4": "^1.8.0",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.6",
+        "extend": "~3.0.2",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.3.2",
+        "har-validator": "~5.1.3",
+        "http-signature": "~1.2.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.19",
+        "oauth-sign": "~0.9.0",
+        "performance-now": "^2.1.0",
+        "qs": "~6.5.2",
+        "safe-buffer": "^5.1.2",
+        "tough-cookie": "~2.5.0",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "request-promise-core": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.4.tgz",
+      "integrity": "sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.19"
+      }
+    },
+    "request-promise-native": {
+      "version": "1.0.9",
+      "resolved": "https://registry.nlark.com/request-promise-native/download/request-promise-native-1.0.9.tgz?cache=0&sync_timestamp=1618846813899&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frequest-promise-native%2Fdownload%2Frequest-promise-native-1.0.9.tgz",
+      "integrity": "sha1-5AcSBSal79yaObKKVnm/R7nZ3Cg=",
+      "dev": true,
+      "requires": {
+        "request-promise-core": "1.1.4",
+        "stealthy-require": "^1.1.1",
+        "tough-cookie": "^2.3.3"
+      }
+    },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.nlark.com/require-directory/download/require-directory-2.1.1.tgz",
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+    },
+    "require-main-filename": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz",
+      "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs="
+    },
+    "requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz",
+      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
+    },
+    "resolve": {
+      "version": "1.20.0",
+      "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz?cache=0&sync_timestamp=1613054862388&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.20.0.tgz",
+      "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=",
+      "dev": true,
+      "requires": {
+        "is-core-module": "^2.2.0",
+        "path-parse": "^1.0.6"
+      }
+    },
+    "resolve-cwd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/resolve-cwd/download/resolve-cwd-2.0.0.tgz",
+      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "resolve-from": {
+      "version": "3.0.0",
+      "resolved": "https://registry.nlark.com/resolve-from/download/resolve-from-3.0.0.tgz",
+      "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+      "dev": true
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.nlark.com/resolve-url/download/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+      "dev": true
+    },
+    "restore-cursor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.nlark.com/restore-cursor/download/restore-cursor-3.1.0.tgz",
+      "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=",
+      "dev": true,
+      "requires": {
+        "onetime": "^5.1.0",
+        "signal-exit": "^3.0.2"
+      }
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz?cache=0&sync_timestamp=1613002640681&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fret%2Fdownload%2Fret-0.1.15.tgz",
+      "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=",
+      "dev": true
+    },
+    "retry": {
+      "version": "0.12.0",
+      "resolved": "https://registry.nlark.com/retry/download/retry-0.12.0.tgz",
+      "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+      "dev": true
+    },
+    "reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz",
+      "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=",
+      "dev": true
+    },
+    "rgb-regex": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/rgb-regex/download/rgb-regex-1.0.1.tgz",
+      "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+      "dev": true
+    },
+    "rgba-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz",
+      "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+      "dev": true
+    },
+    "rimraf": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz",
+      "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=",
+      "requires": {
+        "glob": "^7.1.3"
+      }
+    },
+    "ripemd160": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz",
+      "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=",
+      "dev": true,
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
+      }
+    },
+    "run-async": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz",
+      "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=",
+      "dev": true
+    },
+    "run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.2.0.tgz?cache=0&sync_timestamp=1612925912322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-parallel%2Fdownload%2Frun-parallel-1.2.0.tgz",
+      "integrity": "sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4=",
+      "dev": true,
+      "requires": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "run-queue": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz",
+      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1"
+      }
+    },
+    "rxjs": {
+      "version": "6.6.7",
+      "resolved": "https://registry.nlark.com/rxjs/download/rxjs-6.6.7.tgz",
+      "integrity": "sha1-kKwBisq/SRv2UEQjXVhjxNq4BMk=",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.9.0"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.14.1",
+          "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz",
+          "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=",
+          "dev": true
+        }
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
+      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
+    },
+    "safe-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.nlark.com/safe-regex/download/safe-regex-1.1.0.tgz",
+      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "dev": true,
+      "requires": {
+        "ret": "~0.1.10"
+      }
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz",
+      "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
+    },
+    "sass": {
+      "version": "1.80.3",
+      "resolved": "https://registry.npmmirror.com/sass/-/sass-1.80.3.tgz",
+      "integrity": "sha512-ptDWyVmDMVielpz/oWy3YP3nfs7LpJTHIJZboMVs8GEC9eUmtZTZhMHlTW98wY4aEorDfjN38+Wr/XjskFWcfA==",
+      "dev": true,
+      "requires": {
+        "@parcel/watcher": "^2.4.1",
+        "chokidar": "^4.0.0",
+        "immutable": "^4.0.0",
+        "source-map-js": ">=0.6.2 <2.0.0"
+      },
+      "dependencies": {
+        "chokidar": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.1.tgz",
+          "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
+          "dev": true,
+          "requires": {
+            "readdirp": "^4.0.1"
+          }
+        },
+        "readdirp": {
+          "version": "4.0.2",
+          "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.0.2.tgz",
+          "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
+          "dev": true
+        }
+      }
+    },
+    "sass-loader": {
+      "version": "16.0.2",
+      "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-16.0.2.tgz",
+      "integrity": "sha512-Ll6iXZ1EYwYT19SqW4mSBb76vSSi8JgzElmzIerhEGgzB5hRjDQIWsPmuk1UrAXkR16KJHqVY0eH+5/uw9Tmfw==",
+      "dev": true,
+      "requires": {
+        "neo-async": "^2.6.2"
+      }
+    },
+    "sax": {
+      "version": "1.2.4",
+      "resolved": "https://registry.nlark.com/sax/download/sax-1.2.4.tgz",
+      "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk="
+    },
+    "saxes": {
+      "version": "3.1.11",
+      "resolved": "https://registry.npm.taobao.org/saxes/download/saxes-3.1.11.tgz",
+      "integrity": "sha1-1Z0f0zLskq2YouCy7mRHAjhLHFs=",
+      "dev": true,
+      "requires": {
+        "xmlchars": "^2.1.1"
+      }
+    },
+    "schema-utils": {
+      "version": "2.7.1",
+      "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz?cache=0&sync_timestamp=1625484933876&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz",
+      "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=",
+      "dev": true,
+      "requires": {
+        "@types/json-schema": "^7.0.5",
+        "ajv": "^6.12.4",
+        "ajv-keywords": "^3.5.2"
+      }
+    },
+    "sdk-base": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/sdk-base/-/sdk-base-2.0.1.tgz",
+      "integrity": "sha512-eeG26wRwhtwYuKGCDM3LixCaxY27Pa/5lK4rLKhQa7HBjJ3U3Y+f81MMZQRsDw/8SC2Dao/83yJTXJ8aULuN8Q==",
+      "requires": {
+        "get-ready": "~1.0.0"
+      }
+    },
+    "select-hose": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz",
+      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+      "dev": true
+    },
+    "selfsigned": {
+      "version": "1.10.11",
+      "resolved": "https://registry.nlark.com/selfsigned/download/selfsigned-1.10.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.11.tgz",
+      "integrity": "sha1-JJKc2Qb+D0S20B+yOZmnOVN6y+k=",
+      "dev": true,
+      "requires": {
+        "node-forge": "^0.10.0"
+      }
+    },
+    "semver": {
+      "version": "6.3.0",
+      "resolved": "https://registry.nlark.com/semver/download/semver-6.3.0.tgz",
+      "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+      "dev": true
+    },
+    "send": {
+      "version": "0.17.1",
+      "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz",
+      "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "destroy": "~1.0.4",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "~1.7.2",
+        "mime": "1.6.0",
+        "ms": "2.1.1",
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.2.1",
+        "statuses": "~1.5.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          },
+          "dependencies": {
+            "ms": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+              "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+              "dev": true
+            }
+          }
+        },
+        "mime": {
+          "version": "1.6.0",
+          "resolved": "https://registry.nlark.com/mime/download/mime-1.6.0.tgz",
+          "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
+          "dev": true
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        }
+      }
+    },
+    "serialize-javascript": {
+      "version": "4.0.0",
+      "resolved": "https://registry.nlark.com/serialize-javascript/download/serialize-javascript-4.0.0.tgz",
+      "integrity": "sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao=",
+      "dev": true,
+      "requires": {
+        "randombytes": "^2.1.0"
+      }
+    },
+    "serve-index": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz",
+      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.4",
+        "batch": "0.6.1",
+        "debug": "2.6.9",
+        "escape-html": "~1.0.3",
+        "http-errors": "~1.6.2",
+        "mime-types": "~2.1.17",
+        "parseurl": "~1.3.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.nlark.com/debug/download/debug-2.6.9.tgz",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "http-errors": {
+          "version": "1.6.3",
+          "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz",
+          "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+          "dev": true,
+          "requires": {
+            "depd": "~1.1.2",
+            "inherits": "2.0.3",
+            "setprototypeof": "1.1.0",
+            "statuses": ">= 1.4.0 < 2"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+          "dev": true
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+          "dev": true
+        },
+        "setprototypeof": {
+          "version": "1.1.0",
+          "resolved": "https://registry.nlark.com/setprototypeof/download/setprototypeof-1.1.0.tgz",
+          "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=",
+          "dev": true
+        }
+      }
+    },
+    "serve-static": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz",
+      "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=",
+      "dev": true,
+      "requires": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.17.1"
+      }
+    },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/set-blocking/download/set-blocking-2.0.0.tgz",
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+    },
+    "set-value": {
+      "version": "2.0.1",
+      "resolved": "https://registry.nlark.com/set-value/download/set-value-2.0.1.tgz",
+      "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz",
+          "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+          "dev": true
+        }
+      }
+    },
+    "setimmediate": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz",
+      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+      "dev": true
+    },
+    "setprototypeof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.nlark.com/setprototypeof/download/setprototypeof-1.1.1.tgz",
+      "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM="
+    },
+    "sha.js": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz",
+      "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "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,
+      "requires": {
+        "shebang-regex": "^3.0.0"
+      }
+    },
+    "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
+    },
+    "shell-quote": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npm.taobao.org/shell-quote/download/shell-quote-1.7.2.tgz",
+      "integrity": "sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I=",
+      "dev": true
+    },
+    "signal-exit": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz",
+      "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=",
+      "dev": true
+    },
+    "simple-swizzle": {
+      "version": "0.2.2",
+      "resolved": "https://registry.nlark.com/simple-swizzle/download/simple-swizzle-0.2.2.tgz",
+      "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.3.1"
+      },
+      "dependencies": {
+        "is-arrayish": {
+          "version": "0.3.2",
+          "resolved": "https://registry.nlark.com/is-arrayish/download/is-arrayish-0.3.2.tgz",
+          "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=",
+          "dev": true
+        }
+      }
+    },
+    "slash": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz",
+      "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=",
+      "dev": true
+    },
+    "smart-buffer": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz",
+      "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz",
+      "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=",
+      "dev": true,
+      "requires": {
+        "base": "^0.11.1",
+        "debug": "^2.2.0",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "map-cache": "^0.2.2",
+        "source-map": "^0.5.6",
+        "source-map-resolve": "^0.5.0",
+        "use": "^3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+          "dev": true
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
+          "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          }
+        },
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz",
+          "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+          "dev": true
+        }
+      }
+    },
+    "snapdragon-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.nlark.com/snapdragon-node/download/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
+      "dev": true,
+      "requires": {
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        }
+      }
+    },
+    "snapdragon-util": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.2.0"
+      },
+      "dependencies": {
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "sockjs": {
+      "version": "0.3.21",
+      "resolved": "https://registry.nlark.com/sockjs/download/sockjs-0.3.21.tgz",
+      "integrity": "sha1-s0/7mOeWkwtgoM+hGQTWozmn1Bc=",
+      "dev": true,
+      "requires": {
+        "faye-websocket": "^0.11.3",
+        "uuid": "^3.4.0",
+        "websocket-driver": "^0.7.4"
+      }
+    },
+    "sockjs-client": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.5.1.tgz",
+      "integrity": "sha1-JWkI9tWt+5Tau9vQLGY2LMoPnqY=",
+      "dev": true,
+      "requires": {
+        "debug": "^3.2.6",
+        "eventsource": "^1.0.7",
+        "faye-websocket": "^0.11.3",
+        "inherits": "^2.0.4",
+        "json3": "^3.3.3",
+        "url-parse": "^1.5.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.nlark.com/debug/download/debug-3.2.7.tgz",
+          "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "socks": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmmirror.com/socks/-/socks-2.7.1.tgz",
+      "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
+      "requires": {
+        "ip": "^2.0.0",
+        "smart-buffer": "^4.2.0"
+      },
+      "dependencies": {
+        "ip": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ip/-/ip-2.0.0.tgz",
+          "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
+        }
+      }
+    },
+    "socks-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==",
+      "requires": {
+        "agent-base": "^6.0.2",
+        "debug": "4",
+        "socks": "^2.3.3"
+      }
+    },
+    "sort-keys": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz",
+      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+      "dev": true,
+      "requires": {
+        "is-plain-obj": "^1.0.0"
+      },
+      "dependencies": {
+        "is-plain-obj": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz?cache=0&sync_timestamp=1618600554597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-1.1.0.tgz",
+          "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+          "dev": true
+        }
+      }
+    },
+    "source-list-map": {
+      "version": "2.0.1",
+      "resolved": "https://registry.nlark.com/source-list-map/download/source-list-map-2.0.1.tgz",
+      "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=",
+      "dev": true
+    },
+    "source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "dev": true
+    },
+    "source-map-js": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npm.taobao.org/source-map-js/download/source-map-js-0.6.2.tgz",
+      "integrity": "sha1-C7XeYxtBz72mz7qL0FqA79/SOF4="
+    },
+    "source-map-resolve": {
+      "version": "0.5.3",
+      "resolved": "https://registry.nlark.com/source-map-resolve/download/source-map-resolve-0.5.3.tgz",
+      "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=",
+      "dev": true,
+      "requires": {
+        "atob": "^2.1.2",
+        "decode-uri-component": "^0.2.0",
+        "resolve-url": "^0.2.1",
+        "source-map-url": "^0.4.0",
+        "urix": "^0.1.0"
+      }
+    },
+    "source-map-support": {
+      "version": "0.5.19",
+      "resolved": "https://registry.nlark.com/source-map-support/download/source-map-support-0.5.19.tgz",
+      "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "source-map-url": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.1.tgz?cache=0&sync_timestamp=1612210508484&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-url%2Fdownload%2Fsource-map-url-0.4.1.tgz",
+      "integrity": "sha1-CvZmBadFpaL5HPG7+KevvCg97FY=",
+      "dev": true
+    },
+    "sourcemap-codec": {
+      "version": "1.4.8",
+      "resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz",
+      "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ="
+    },
+    "spdx-correct": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz",
+      "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=",
+      "dev": true,
+      "requires": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz",
+      "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=",
+      "dev": true
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz",
+      "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=",
+      "dev": true,
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.9",
+      "resolved": "https://registry.nlark.com/spdx-license-ids/download/spdx-license-ids-3.0.9.tgz",
+      "integrity": "sha1-illRNd75WSvaaXCUdPHL7qfCRn8=",
+      "dev": true
+    },
+    "spdy": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz",
+      "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.0",
+        "handle-thing": "^2.0.0",
+        "http-deceiver": "^1.2.7",
+        "select-hose": "^2.0.0",
+        "spdy-transport": "^3.0.0"
+      }
+    },
+    "spdy-transport": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz",
+      "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.0",
+        "detect-node": "^2.0.4",
+        "hpack.js": "^2.1.6",
+        "obuf": "^1.1.2",
+        "readable-stream": "^3.0.6",
+        "wbuf": "^1.7.3"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "split-string": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz",
+      "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.0"
+      }
+    },
+    "sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.nlark.com/sprintf-js/download/sprintf-js-1.0.3.tgz",
+      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+      "dev": true
+    },
+    "sshpk": {
+      "version": "1.16.1",
+      "resolved": "https://registry.nlark.com/sshpk/download/sshpk-1.16.1.tgz",
+      "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=",
+      "dev": true,
+      "requires": {
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
+        "tweetnacl": "~0.14.0"
+      }
+    },
+    "ssri": {
+      "version": "8.0.1",
+      "resolved": "https://registry.nlark.com/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1621364918494&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fssri%2Fdownload%2Fssri-8.0.1.tgz",
+      "integrity": "sha1-Y45OQ54v+9LNKJd21cpFfE9Roq8=",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.1.1"
+      }
+    },
+    "stable": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz",
+      "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=",
+      "dev": true
+    },
+    "stackframe": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz",
+      "integrity": "sha1-UkKUktY8YuuYmATBFVLj0i53kwM=",
+      "dev": true
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "dev": true,
+      "requires": {
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+          "dev": true
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
+          "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        }
+      }
+    },
+    "statuses": {
+      "version": "1.5.0",
+      "resolved": "https://registry.nlark.com/statuses/download/statuses-1.5.0.tgz",
+      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+    },
+    "stealthy-require": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz",
+      "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
+      "dev": true
+    },
+    "stream-browserify": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz",
+      "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=",
+      "dev": true,
+      "requires": {
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "stream-each": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz",
+      "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "stream-http": {
+      "version": "2.8.2",
+      "resolved": "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.2.tgz",
+      "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==",
+      "requires": {
+        "builtin-status-codes": "^3.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.3.6",
+        "to-arraybuffer": "^1.0.0",
+        "xtend": "^4.0.0"
+      }
+    },
+    "stream-shift": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz",
+      "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=",
+      "dev": true
+    },
+    "stream-wormhole": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz",
+      "integrity": "sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew=="
+    },
+    "strict-uri-encode": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz",
+      "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+      "dev": true
+    },
+    "string-width": {
+      "version": "2.1.1",
+      "resolved": "https://registry.nlark.com/string-width/download/string-width-2.1.1.tgz",
+      "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+      "dev": true,
+      "requires": {
+        "is-fullwidth-code-point": "^2.0.0",
+        "strip-ansi": "^4.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
+      }
+    },
+    "string.prototype.trimend": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.4.tgz",
+      "integrity": "sha1-51rpDClCxjUEaGwYsoe0oLGkX4A=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3"
+      }
+    },
+    "string.prototype.trimstart": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.4.tgz?cache=0&sync_timestamp=1614127357785&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.4.tgz",
+      "integrity": "sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3"
+      }
+    },
+    "string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.nlark.com/string_decoder/download/string_decoder-1.1.1.tgz",
+      "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
+      "requires": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "strip-ansi": {
+      "version": "5.2.0",
+      "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz",
+      "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^4.1.0"
+      }
+    },
+    "strip-eof": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz",
+      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+      "dev": true
+    },
+    "strip-final-newline": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/strip-final-newline/download/strip-final-newline-2.0.0.tgz",
+      "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=",
+      "dev": true
+    },
+    "strip-indent": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/strip-indent/download/strip-indent-2.0.0.tgz?cache=0&sync_timestamp=1620053263051&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-indent%2Fdownload%2Fstrip-indent-2.0.0.tgz",
+      "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+      "dev": true
+    },
+    "stylehacks": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/stylehacks/download/stylehacks-4.0.3.tgz",
+      "integrity": "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.2",
+          "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&sync_timestamp=1620753051451&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz",
+          "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
+          "dev": true,
+          "requires": {
+            "dot-prop": "^5.2.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "stylus": {
+      "version": "0.54.8",
+      "resolved": "https://registry.npm.taobao.org/stylus/download/stylus-0.54.8.tgz?cache=0&sync_timestamp=1594901358297&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylus%2Fdownload%2Fstylus-0.54.8.tgz",
+      "integrity": "sha1-PaPmWWa8Vnp7BEv+DuzmU+CZ0Uc=",
+      "dev": true,
+      "requires": {
+        "css-parse": "~2.0.0",
+        "debug": "~3.1.0",
+        "glob": "^7.1.6",
+        "mkdirp": "~1.0.4",
+        "safer-buffer": "^2.1.2",
+        "sax": "~1.2.4",
+        "semver": "^6.3.0",
+        "source-map": "^0.7.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/debug/download/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.nlark.com/mkdirp/download/mkdirp-1.0.4.tgz",
+          "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=",
+          "dev": true
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.7.3",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz",
+          "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=",
+          "dev": true
+        }
+      }
+    },
+    "stylus-loader": {
+      "version": "3.0.2",
+      "resolved": "https://registry.nlark.com/stylus-loader/download/stylus-loader-3.0.2.tgz",
+      "integrity": "sha1-J6cGQgsFo44DjnyssVNXjUUFE8Y=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.0.2",
+        "lodash.clonedeep": "^4.5.0",
+        "when": "~3.6.x"
+      }
+    },
+    "supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz",
+      "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+      "dev": true,
+      "requires": {
+        "has-flag": "^3.0.0"
+      }
+    },
+    "svg-tags": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/svg-tags/download/svg-tags-1.0.0.tgz",
+      "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
+      "dev": true
+    },
+    "svgo": {
+      "version": "1.3.2",
+      "resolved": "https://registry.nlark.com/svgo/download/svgo-1.3.2.tgz",
+      "integrity": "sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.1",
+        "coa": "^2.0.2",
+        "css-select": "^2.0.0",
+        "css-select-base-adapter": "^0.1.1",
+        "css-tree": "1.0.0-alpha.37",
+        "csso": "^4.0.2",
+        "js-yaml": "^3.13.1",
+        "mkdirp": "~0.5.1",
+        "object.values": "^1.1.0",
+        "sax": "~1.2.4",
+        "stable": "^0.1.8",
+        "unquote": "~1.1.1",
+        "util.promisify": "~1.0.0"
+      },
+      "dependencies": {
+        "css-select": {
+          "version": "2.1.0",
+          "resolved": "https://registry.nlark.com/css-select/download/css-select-2.1.0.tgz",
+          "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=",
+          "dev": true,
+          "requires": {
+            "boolbase": "^1.0.0",
+            "css-what": "^3.2.1",
+            "domutils": "^1.7.0",
+            "nth-check": "^1.0.2"
+          }
+        },
+        "css-what": {
+          "version": "3.4.2",
+          "resolved": "https://registry.nlark.com/css-what/download/css-what-3.4.2.tgz?cache=0&sync_timestamp=1622227630859&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-what%2Fdownload%2Fcss-what-3.4.2.tgz",
+          "integrity": "sha1-6nAm/LAXd+295SEk4h8yfnrpUOQ=",
+          "dev": true
+        },
+        "dom-serializer": {
+          "version": "0.2.2",
+          "resolved": "https://registry.nlark.com/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1621256819522&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz",
+          "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=",
+          "dev": true,
+          "requires": {
+            "domelementtype": "^2.0.1",
+            "entities": "^2.0.0"
+          }
+        },
+        "domutils": {
+          "version": "1.7.0",
+          "resolved": "https://registry.nlark.com/domutils/download/domutils-1.7.0.tgz",
+          "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=",
+          "dev": true,
+          "requires": {
+            "dom-serializer": "0",
+            "domelementtype": "1"
+          },
+          "dependencies": {
+            "domelementtype": {
+              "version": "1.3.1",
+              "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz",
+              "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=",
+              "dev": true
+            }
+          }
+        },
+        "nth-check": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz",
+          "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=",
+          "dev": true,
+          "requires": {
+            "boolbase": "~1.0.0"
+          }
+        }
+      }
+    },
+    "symbol-tree": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz",
+      "integrity": "sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I=",
+      "dev": true
+    },
+    "tapable": {
+      "version": "1.1.3",
+      "resolved": "https://registry.nlark.com/tapable/download/tapable-1.1.3.tgz",
+      "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=",
+      "dev": true
+    },
+    "terser": {
+      "version": "4.8.0",
+      "resolved": "https://registry.nlark.com/terser/download/terser-4.8.0.tgz",
+      "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=",
+      "dev": true,
+      "requires": {
+        "commander": "^2.20.0",
+        "source-map": "~0.6.1",
+        "source-map-support": "~0.5.12"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.20.3",
+          "resolved": "https://registry.nlark.com/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1624609533517&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz",
+          "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "terser-webpack-plugin": {
+      "version": "1.4.5",
+      "resolved": "https://registry.nlark.com/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz?cache=0&sync_timestamp=1624624486956&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.5.tgz",
+      "integrity": "sha1-oheu+uozDnNP+sthIOwfoxLWBAs=",
+      "dev": true,
+      "requires": {
+        "cacache": "^12.0.2",
+        "find-cache-dir": "^2.1.0",
+        "is-wsl": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^4.0.0",
+        "source-map": "^0.6.1",
+        "terser": "^4.1.2",
+        "webpack-sources": "^1.4.0",
+        "worker-farm": "^1.7.0"
+      },
+      "dependencies": {
+        "find-cache-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz",
+          "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=",
+          "dev": true,
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^2.0.0",
+            "pkg-dir": "^3.0.0"
+          }
+        },
+        "is-wsl": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz",
+          "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+          "dev": true
+        },
+        "make-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.nlark.com/make-dir/download/make-dir-2.1.0.tgz",
+          "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
+          "dev": true,
+          "requires": {
+            "pify": "^4.0.1",
+            "semver": "^5.6.0"
+          }
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/pkg-dir/download/pkg-dir-3.0.0.tgz?cache=0&sync_timestamp=1618847182947&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-3.0.0.tgz",
+          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1625484933876&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz",
+          "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "thenify": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npm.taobao.org/thenify/download/thenify-3.3.1.tgz",
+      "integrity": "sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8=",
+      "requires": {
+        "any-promise": "^1.0.0"
+      }
+    },
+    "thenify-all": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz",
+      "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+      "requires": {
+        "thenify": ">= 3.1.0 < 4"
+      }
+    },
+    "thread-loader": {
+      "version": "2.1.3",
+      "resolved": "https://registry.nlark.com/thread-loader/download/thread-loader-2.1.3.tgz?cache=0&sync_timestamp=1620664384427&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fthread-loader%2Fdownload%2Fthread-loader-2.1.3.tgz",
+      "integrity": "sha1-y9LBOfwrLebp0o9iKGq3cMGsvdo=",
+      "dev": true,
+      "requires": {
+        "loader-runner": "^2.3.1",
+        "loader-utils": "^1.1.0",
+        "neo-async": "^2.6.0"
+      }
+    },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "https://registry.nlark.com/through/download/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+    },
+    "through2": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
+      "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
+      }
+    },
+    "thunky": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz",
+      "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=",
+      "dev": true
+    },
+    "timers-browserify": {
+      "version": "2.0.12",
+      "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.12.tgz",
+      "integrity": "sha1-RKRcEfv0B/NPl7zNFXfGUjYbAO4=",
+      "dev": true,
+      "requires": {
+        "setimmediate": "^1.0.4"
+      }
+    },
+    "timsort": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz",
+      "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+      "dev": true
+    },
+    "tmp": {
+      "version": "0.0.33",
+      "resolved": "https://registry.nlark.com/tmp/download/tmp-0.0.33.tgz",
+      "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
+      "dev": true,
+      "requires": {
+        "os-tmpdir": "~1.0.2"
+      }
+    },
+    "to-arraybuffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz",
+      "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+    },
+    "to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz",
+      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+      "dev": true
+    },
+    "to-object-path": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz",
+      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "to-regex": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz",
+      "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=",
+      "dev": true,
+      "requires": {
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "regex-not": "^1.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "to-regex-range": {
+      "version": "2.1.1",
+      "resolved": "https://registry.nlark.com/to-regex-range/download/to-regex-range-2.1.1.tgz",
+      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
+      }
+    },
+    "toidentifier": {
+      "version": "1.0.0",
+      "resolved": "https://registry.nlark.com/toidentifier/download/toidentifier-1.0.0.tgz",
+      "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM="
+    },
+    "toposort": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz",
+      "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
+      "dev": true
+    },
+    "tough-cookie": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz",
+      "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=",
+      "requires": {
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
+      }
+    },
+    "tr46": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/tr46/download/tr46-1.0.1.tgz",
+      "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+      "dev": true,
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "tryer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/tryer/download/tryer-1.0.1.tgz",
+      "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=",
+      "dev": true
+    },
+    "ts-pnp": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/ts-pnp/download/ts-pnp-1.2.0.tgz",
+      "integrity": "sha1-pQCtCEsHmPHDBxrzkeZZEshrypI=",
+      "dev": true
+    },
+    "tslib": {
+      "version": "2.0.3",
+      "resolved": "https://registry.nlark.com/tslib/download/tslib-2.0.3.tgz",
+      "integrity": "sha1-jgdBrEX8DCJuWKF7/D5kubxsphw="
+    },
+    "tty-browserify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz",
+      "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+      "dev": true
+    },
+    "tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "tweetnacl": {
+      "version": "0.14.5",
+      "resolved": "https://registry.nlark.com/tweetnacl/download/tweetnacl-0.14.5.tgz",
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+      "dev": true
+    },
+    "type-check": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz",
+      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+      "requires": {
+        "prelude-ls": "~1.1.2"
+      }
+    },
+    "type-detect": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npm.taobao.org/type-detect/download/type-detect-4.0.8.tgz",
+      "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=",
+      "dev": true
+    },
+    "type-fest": {
+      "version": "0.21.3",
+      "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.21.3.tgz?cache=0&sync_timestamp=1625745286088&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.21.3.tgz",
+      "integrity": "sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc=",
+      "dev": true
+    },
+    "type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz",
+      "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=",
+      "dev": true,
+      "requires": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      }
+    },
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz",
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+      "dev": true
+    },
+    "uglify-js": {
+      "version": "3.4.10",
+      "resolved": "https://registry.nlark.com/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1624812318797&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz",
+      "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=",
+      "dev": true,
+      "requires": {
+        "commander": "~2.19.0",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.19.0",
+          "resolved": "https://registry.nlark.com/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1624609533517&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz",
+          "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "unbox-primitive": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/unbox-primitive/download/unbox-primitive-1.0.1.tgz?cache=0&sync_timestamp=1616706427948&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funbox-primitive%2Fdownload%2Funbox-primitive-1.0.1.tgz",
+      "integrity": "sha1-CF4hViXsMWJXTciFmr7nilmxRHE=",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1",
+        "has-bigints": "^1.0.1",
+        "has-symbols": "^1.0.2",
+        "which-boxed-primitive": "^1.0.2"
+      }
+    },
+    "unescape": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/unescape/-/unescape-1.0.1.tgz",
+      "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==",
+      "requires": {
+        "extend-shallow": "^2.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz",
+          "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+        }
+      }
+    },
+    "unicode-canonical-property-names-ecmascript": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+      "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=",
+      "dev": true
+    },
+    "unicode-match-property-ecmascript": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz",
+      "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=",
+      "dev": true,
+      "requires": {
+        "unicode-canonical-property-names-ecmascript": "^1.0.4",
+        "unicode-property-aliases-ecmascript": "^1.0.4"
+      }
+    },
+    "unicode-match-property-value-ecmascript": {
+      "version": "1.2.0",
+      "resolved": "https://registry.nlark.com/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz",
+      "integrity": "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE=",
+      "dev": true
+    },
+    "unicode-property-aliases-ecmascript": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz",
+      "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ=",
+      "dev": true
+    },
+    "union-value": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz",
+      "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^2.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz",
+          "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+          "dev": true
+        }
+      }
+    },
+    "uniq": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz",
+      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+      "dev": true
+    },
+    "uniqs": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz",
+      "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+      "dev": true
+    },
+    "unique-filename": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz",
+      "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=",
+      "dev": true,
+      "requires": {
+        "unique-slug": "^2.0.0"
+      }
+    },
+    "unique-slug": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz",
+      "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=",
+      "dev": true,
+      "requires": {
+        "imurmurhash": "^0.1.4"
+      }
+    },
+    "universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.nlark.com/universalify/download/universalify-0.1.2.tgz",
+      "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY="
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+    },
+    "unquote": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz",
+      "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+      "dev": true
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz?cache=0&sync_timestamp=1616088640915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funset-value%2Fdownload%2Funset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "dev": true,
+      "requires": {
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "has-value": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz",
+          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+          "dev": true,
+          "requires": {
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
+          },
+          "dependencies": {
+            "isobject": {
+              "version": "2.1.0",
+              "resolved": "https://registry.nlark.com/isobject/download/isobject-2.1.0.tgz",
+              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+              "dev": true,
+              "requires": {
+                "isarray": "1.0.0"
+              }
+            }
+          }
+        },
+        "has-values": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz",
+          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+          "dev": true
+        }
+      }
+    },
+    "upath": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz",
+      "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=",
+      "dev": true
+    },
+    "upper-case": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz?cache=0&sync_timestamp=1606859943902&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupper-case%2Fdownload%2Fupper-case-1.1.3.tgz",
+      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+      "dev": true
+    },
+    "uri-js": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237530009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz",
+      "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=",
+      "dev": true,
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+      "dev": true
+    },
+    "url": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz",
+      "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+      "dev": true,
+      "requires": {
+        "punycode": "1.3.2",
+        "querystring": "0.2.0"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz",
+          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+          "dev": true
+        }
+      }
+    },
+    "url-loader": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/url-loader/download/url-loader-2.3.0.tgz",
+      "integrity": "sha1-4OLvZY8APvuMpBsPP/v3a6uIZYs=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.2.3",
+        "mime": "^2.4.4",
+        "schema-utils": "^2.5.0"
+      }
+    },
+    "url-parse": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/url-parse/download/url-parse-1.5.1.tgz",
+      "integrity": "sha1-1fqYkK+KXh8nSiyYN2UQ9kJfbjs=",
+      "requires": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "urllib": {
+      "version": "2.40.0",
+      "resolved": "https://registry.npmmirror.com/urllib/-/urllib-2.40.0.tgz",
+      "integrity": "sha512-XDZjoijtzsbkXTXgM+A/sJM002nwoYsc46YOYr6MNH2jUUw1nCBf2ywT1WaPsVEWJX4Yr+9isGmYj4+yofFn9g==",
+      "requires": {
+        "any-promise": "^1.3.0",
+        "content-type": "^1.0.2",
+        "debug": "^2.6.9",
+        "default-user-agent": "^1.0.0",
+        "digest-header": "^1.0.0",
+        "ee-first": "~1.1.1",
+        "formstream": "^1.1.0",
+        "humanize-ms": "^1.2.0",
+        "iconv-lite": "^0.4.15",
+        "ip": "^1.1.5",
+        "proxy-agent": "^5.0.0",
+        "pump": "^3.0.0",
+        "qs": "^6.4.0",
+        "statuses": "^1.3.1",
+        "utility": "^1.16.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+        }
+      }
+    },
+    "use": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz",
+      "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=",
+      "dev": true
+    },
+    "util": {
+      "version": "0.11.1",
+      "resolved": "https://registry.nlark.com/util/download/util-0.11.1.tgz?cache=0&sync_timestamp=1622212943994&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil%2Fdownload%2Futil-0.11.1.tgz",
+      "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+          "dev": true
+        }
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/util-deprecate/download/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+    },
+    "util.promisify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz?cache=0&sync_timestamp=1610159885628&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.0.tgz",
+      "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "object.getownpropertydescriptors": "^2.0.3"
+      }
+    },
+    "utila": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz",
+      "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+      "dev": true
+    },
+    "utility": {
+      "version": "1.17.0",
+      "resolved": "https://registry.npmmirror.com/utility/-/utility-1.17.0.tgz",
+      "integrity": "sha512-KdVkF9An/0239BJ4+dqOa7NPrPIOeQE9AGfx0XS16O9DBiHNHRJMoeU5nL6pRGAkgJOqdOu8R4gBRcXnAocJKw==",
+      "requires": {
+        "copy-to": "^2.0.1",
+        "escape-html": "^1.0.3",
+        "mkdirp": "^0.5.1",
+        "mz": "^2.7.0",
+        "unescape": "^1.0.1"
+      }
+    },
+    "utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz",
+      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+      "dev": true
+    },
+    "uuid": {
+      "version": "3.4.0",
+      "resolved": "https://registry.nlark.com/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1622213086354&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz",
+      "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
+      "dev": true
+    },
+    "validate-npm-package-license": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=",
+      "dev": true,
+      "requires": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
+      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+      "dev": true
+    },
+    "vendors": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz?cache=0&sync_timestamp=1615203486079&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvendors%2Fdownload%2Fvendors-1.0.4.tgz",
+      "integrity": "sha1-4rgApT56Kbk1BsPPQRANFsTErY4=",
+      "dev": true
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.nlark.com/verror/download/verror-1.10.0.tgz",
+      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      }
+    },
+    "vm-browserify": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz",
+      "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=",
+      "dev": true
+    },
+    "vm2": {
+      "version": "3.9.14",
+      "resolved": "https://registry.npmmirror.com/vm2/-/vm2-3.9.14.tgz",
+      "integrity": "sha512-HgvPHYHeQy8+QhzlFryvSteA4uQLBCOub02mgqdR+0bN/akRZ48TGB1v0aCv7ksyc0HXx16AZtMHKS38alc6TA==",
+      "requires": {
+        "acorn": "^8.7.0",
+        "acorn-walk": "^8.2.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "8.8.2",
+          "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz",
+          "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw=="
+        },
+        "acorn-walk": {
+          "version": "8.2.0",
+          "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz",
+          "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA=="
+        }
+      }
+    },
+    "vue": {
+      "version": "3.2.37",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz",
+      "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==",
+      "requires": {
+        "@vue/compiler-dom": "3.2.37",
+        "@vue/compiler-sfc": "3.2.37",
+        "@vue/runtime-dom": "3.2.37",
+        "@vue/server-renderer": "3.2.37",
+        "@vue/shared": "3.2.37"
+      }
+    },
+    "vue-draggable-next": {
+      "version": "2.0.1",
+      "resolved": "https://registry.nlark.com/vue-draggable-next/download/vue-draggable-next-2.0.1.tgz",
+      "integrity": "sha1-u2TvswLHuOdZ/T8hQnhxeJtiTGc="
+    },
+    "vue-hot-reload-api": {
+      "version": "2.3.4",
+      "resolved": "https://registry.nlark.com/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz",
+      "integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=",
+      "dev": true
+    },
+    "vue-loader": {
+      "version": "15.9.7",
+      "resolved": "https://registry.nlark.com/vue-loader/download/vue-loader-15.9.7.tgz?cache=0&sync_timestamp=1624996813170&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.7.tgz",
+      "integrity": "sha1-FbBXdcPgw4QHZ5OTws5t9nOwEEQ=",
+      "dev": true,
+      "requires": {
+        "@vue/component-compiler-utils": "^3.1.0",
+        "hash-sum": "^1.0.2",
+        "loader-utils": "^1.1.0",
+        "vue-hot-reload-api": "^2.3.0",
+        "vue-style-loader": "^4.1.0"
+      },
+      "dependencies": {
+        "hash-sum": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+          "dev": true
+        }
+      }
+    },
+    "vue-qrcode": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmmirror.com/vue-qrcode/-/vue-qrcode-2.2.2.tgz",
+      "integrity": "sha512-SbrXq/mSb1g2tbDyXPe9gy9KiMYsvxWKRErlpij1BqiFoHwQckheZV63CTw6yRLLUVG2RXAVlX+APkpdCK7SQQ==",
+      "requires": {
+        "tslib": "^2.6.2"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "2.8.1",
+          "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
+          "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+        }
+      }
+    },
+    "vue-router": {
+      "version": "4.0.10",
+      "resolved": "https://registry.nlark.com/vue-router/download/vue-router-4.0.10.tgz?cache=0&sync_timestamp=1624286995690&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-router%2Fdownload%2Fvue-router-4.0.10.tgz",
+      "integrity": "sha1-7I/aAylJsqMdMnMXD483bobrUqw=",
+      "requires": {
+        "@vue/devtools-api": "^6.0.0-beta.14"
+      }
+    },
+    "vue-style-loader": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.3.tgz",
+      "integrity": "sha1-bVWGOlH6dXqyTonZNxRlByqnvDU=",
+      "dev": true,
+      "requires": {
+        "hash-sum": "^1.0.2",
+        "loader-utils": "^1.0.2"
+      },
+      "dependencies": {
+        "hash-sum": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+          "dev": true
+        }
+      }
+    },
+    "vue-template-es2015-compiler": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz",
+      "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
+      "dev": true
+    },
+    "vuex": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/vuex/download/vuex-4.0.2.tgz",
+      "integrity": "sha1-+Jbb1b8qDpY/AMZ+m2EN50nMrMk=",
+      "requires": {
+        "@vue/devtools-api": "^6.0.0-beta.11"
+      }
+    },
+    "w3c-hr-time": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz",
+      "integrity": "sha1-ConN9cwVgi35w2BUNnaWPgzDCM0=",
+      "dev": true,
+      "requires": {
+        "browser-process-hrtime": "^1.0.0"
+      }
+    },
+    "w3c-xmlserializer": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/w3c-xmlserializer/download/w3c-xmlserializer-1.1.2.tgz",
+      "integrity": "sha1-MEhcp9cKb9BSQgo9Ev2Q5jOc55Q=",
+      "dev": true,
+      "requires": {
+        "domexception": "^1.0.1",
+        "webidl-conversions": "^4.0.2",
+        "xml-name-validator": "^3.0.0"
+      }
+    },
+    "watchpack": {
+      "version": "1.7.5",
+      "resolved": "https://registry.nlark.com/watchpack/download/watchpack-1.7.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.5.tgz",
+      "integrity": "sha1-EmfmxV4Lm1vkTCAjrtVDeiwmxFM=",
+      "dev": true,
+      "requires": {
+        "chokidar": "^3.4.1",
+        "graceful-fs": "^4.1.2",
+        "neo-async": "^2.5.0",
+        "watchpack-chokidar2": "^2.0.1"
+      },
+      "dependencies": {
+        "binary-extensions": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz?cache=0&sync_timestamp=1610299322955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.2.0.tgz",
+          "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=",
+          "dev": true,
+          "optional": true
+        },
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.nlark.com/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "chokidar": {
+          "version": "3.5.2",
+          "resolved": "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz",
+          "integrity": "sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "anymatch": "~3.1.2",
+            "braces": "~3.0.2",
+            "fsevents": "~2.3.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"
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.nlark.com/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "fsevents": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+          "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+          "dev": true,
+          "optional": true
+        },
+        "glob-parent": {
+          "version": "5.1.2",
+          "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073303944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz",
+          "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "is-glob": "^4.0.1"
+          }
+        },
+        "is-binary-path": {
+          "version": "2.1.0",
+          "resolved": "https://registry.nlark.com/is-binary-path/download/is-binary-path-2.1.0.tgz",
+          "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "binary-extensions": "^2.0.0"
+          }
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true,
+          "optional": true
+        },
+        "readdirp": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.6.0.tgz",
+          "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "picomatch": "^2.2.1"
+          }
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.nlark.com/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
+      }
+    },
+    "watchpack-chokidar2": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.1.tgz?cache=0&sync_timestamp=1604989085906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack-chokidar2%2Fdownload%2Fwatchpack-chokidar2-2.0.1.tgz",
+      "integrity": "sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chokidar": "^2.1.8"
+      }
+    },
+    "wbuf": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz",
+      "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=",
+      "dev": true,
+      "requires": {
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "wcwidth": {
+      "version": "1.0.1",
+      "resolved": "https://registry.nlark.com/wcwidth/download/wcwidth-1.0.1.tgz",
+      "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+      "dev": true,
+      "requires": {
+        "defaults": "^1.0.3"
+      }
+    },
+    "webidl-conversions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz",
+      "integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=",
+      "dev": true
+    },
+    "webpack": {
+      "version": "4.46.0",
+      "resolved": "https://registry.nlark.com/webpack/download/webpack-4.46.0.tgz",
+      "integrity": "sha1-v5tEBOogoHNgXgoBHRiNd8tq1UI=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/wasm-edit": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
+        "acorn": "^6.4.1",
+        "ajv": "^6.10.2",
+        "ajv-keywords": "^3.4.1",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^4.5.0",
+        "eslint-scope": "^4.0.3",
+        "json-parse-better-errors": "^1.0.2",
+        "loader-runner": "^2.4.0",
+        "loader-utils": "^1.2.3",
+        "memory-fs": "^0.4.1",
+        "micromatch": "^3.1.10",
+        "mkdirp": "^0.5.3",
+        "neo-async": "^2.6.1",
+        "node-libs-browser": "^2.2.1",
+        "schema-utils": "^1.0.0",
+        "tapable": "^1.1.3",
+        "terser-webpack-plugin": "^1.4.3",
+        "watchpack": "^1.7.4",
+        "webpack-sources": "^1.4.1"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.4.2",
+          "resolved": "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1624526907659&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz",
+          "integrity": "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=",
+          "dev": true
+        },
+        "eslint-scope": {
+          "version": "4.0.3",
+          "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz",
+          "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=",
+          "dev": true,
+          "requires": {
+            "esrecurse": "^4.1.0",
+            "estraverse": "^4.1.1"
+          }
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1625484933876&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
+      }
+    },
+    "webpack-bundle-analyzer": {
+      "version": "3.9.0",
+      "resolved": "https://registry.nlark.com/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.9.0.tgz?cache=0&sync_timestamp=1621259036556&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack-bundle-analyzer%2Fdownload%2Fwebpack-bundle-analyzer-3.9.0.tgz",
+      "integrity": "sha1-9vlNsQj7V05BWtMT3kGicH0z7zw=",
+      "dev": true,
+      "requires": {
+        "acorn": "^7.1.1",
+        "acorn-walk": "^7.1.1",
+        "bfj": "^6.1.1",
+        "chalk": "^2.4.1",
+        "commander": "^2.18.0",
+        "ejs": "^2.6.1",
+        "express": "^4.16.3",
+        "filesize": "^3.6.1",
+        "gzip-size": "^5.0.0",
+        "lodash": "^4.17.19",
+        "mkdirp": "^0.5.1",
+        "opener": "^1.5.1",
+        "ws": "^6.0.0"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.20.3",
+          "resolved": "https://registry.nlark.com/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1624609533517&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz",
+          "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=",
+          "dev": true
+        },
+        "ws": {
+          "version": "6.2.2",
+          "resolved": "https://registry.nlark.com/ws/download/ws-6.2.2.tgz?cache=0&sync_timestamp=1625897053615&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fws%2Fdownload%2Fws-6.2.2.tgz",
+          "integrity": "sha1-3Vzb1XqZeZFgl2UtePHMX66gwy4=",
+          "dev": true,
+          "requires": {
+            "async-limiter": "~1.0.0"
+          }
+        }
+      }
+    },
+    "webpack-chain": {
+      "version": "6.5.1",
+      "resolved": "https://registry.npm.taobao.org/webpack-chain/download/webpack-chain-6.5.1.tgz",
+      "integrity": "sha1-TycoTLu2N+PI+970Pu9YjU2GEgY=",
+      "dev": true,
+      "requires": {
+        "deepmerge": "^1.5.2",
+        "javascript-stringify": "^2.0.1"
+      }
+    },
+    "webpack-dev-middleware": {
+      "version": "3.7.3",
+      "resolved": "https://registry.nlark.com/webpack-dev-middleware/download/webpack-dev-middleware-3.7.3.tgz",
+      "integrity": "sha1-Bjk3KxQyYuK4SrldO5GnWXBhwsU=",
+      "dev": true,
+      "requires": {
+        "memory-fs": "^0.4.1",
+        "mime": "^2.4.4",
+        "mkdirp": "^0.5.1",
+        "range-parser": "^1.2.1",
+        "webpack-log": "^2.0.0"
+      }
+    },
+    "webpack-dev-server": {
+      "version": "3.11.2",
+      "resolved": "https://registry.nlark.com/webpack-dev-server/download/webpack-dev-server-3.11.2.tgz",
+      "integrity": "sha1-aV687Xakkp8NXef9c/r+GF/jNwg=",
+      "dev": true,
+      "requires": {
+        "ansi-html": "0.0.7",
+        "bonjour": "^3.5.0",
+        "chokidar": "^2.1.8",
+        "compression": "^1.7.4",
+        "connect-history-api-fallback": "^1.6.0",
+        "debug": "^4.1.1",
+        "del": "^4.1.1",
+        "express": "^4.17.1",
+        "html-entities": "^1.3.1",
+        "http-proxy-middleware": "0.19.1",
+        "import-local": "^2.0.0",
+        "internal-ip": "^4.3.0",
+        "ip": "^1.1.5",
+        "is-absolute-url": "^3.0.3",
+        "killable": "^1.0.1",
+        "loglevel": "^1.6.8",
+        "opn": "^5.5.0",
+        "p-retry": "^3.0.1",
+        "portfinder": "^1.0.26",
+        "schema-utils": "^1.0.0",
+        "selfsigned": "^1.10.8",
+        "semver": "^6.3.0",
+        "serve-index": "^1.9.1",
+        "sockjs": "^0.3.21",
+        "sockjs-client": "^1.5.0",
+        "spdy": "^4.0.2",
+        "strip-ansi": "^3.0.1",
+        "supports-color": "^6.1.0",
+        "url": "^0.11.0",
+        "webpack-dev-middleware": "^3.7.2",
+        "webpack-log": "^2.0.0",
+        "ws": "^6.2.1",
+        "yargs": "^13.3.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "cliui": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz",
+          "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=",
+          "dev": true,
+          "requires": {
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.1.0",
+              "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            },
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz",
+              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.nlark.com/emoji-regex/download/emoji-regex-7.0.3.tgz",
+          "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+          "dev": true
+        },
+        "http-proxy-middleware": {
+          "version": "0.19.1",
+          "resolved": "https://registry.nlark.com/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-0.19.1.tgz",
+          "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=",
+          "dev": true,
+          "requires": {
+            "http-proxy": "^1.17.0",
+            "is-glob": "^4.0.0",
+            "lodash": "^4.17.11",
+            "micromatch": "^3.1.10"
+          }
+        },
+        "is-absolute-url": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-3.0.3.tgz",
+          "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=",
+          "dev": true
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1625484933876&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.1.0",
+              "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            },
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz",
+              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-6.1.0.tgz",
+          "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz",
+          "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.1.0",
+              "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            },
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz",
+              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
+        "ws": {
+          "version": "6.2.2",
+          "resolved": "https://registry.nlark.com/ws/download/ws-6.2.2.tgz?cache=0&sync_timestamp=1625897053615&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fws%2Fdownload%2Fws-6.2.2.tgz",
+          "integrity": "sha1-3Vzb1XqZeZFgl2UtePHMX66gwy4=",
+          "dev": true,
+          "requires": {
+            "async-limiter": "~1.0.0"
+          }
+        },
+        "yargs": {
+          "version": "13.3.2",
+          "resolved": "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz",
+          "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=",
+          "dev": true,
+          "requires": {
+            "cliui": "^5.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^3.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.1.2"
+          }
+        }
+      }
+    },
+    "webpack-log": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz?cache=0&sync_timestamp=1615477493300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz",
+      "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=",
+      "dev": true,
+      "requires": {
+        "ansi-colors": "^3.0.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "webpack-merge": {
+      "version": "4.2.2",
+      "resolved": "https://registry.nlark.com/webpack-merge/download/webpack-merge-4.2.2.tgz",
+      "integrity": "sha1-onxS6ng9E5iv0gh/VH17nS9DY00=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.15"
+      }
+    },
+    "webpack-sources": {
+      "version": "1.4.3",
+      "resolved": "https://registry.nlark.com/webpack-sources/download/webpack-sources-1.4.3.tgz",
+      "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=",
+      "dev": true,
+      "requires": {
+        "source-list-map": "^2.0.0",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "websocket-driver": {
+      "version": "0.7.4",
+      "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.4.tgz?cache=0&sync_timestamp=1591289007652&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.7.4.tgz",
+      "integrity": "sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A=",
+      "dev": true,
+      "requires": {
+        "http-parser-js": ">=0.5.1",
+        "safe-buffer": ">=5.1.0",
+        "websocket-extensions": ">=0.1.1"
+      }
+    },
+    "websocket-extensions": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz",
+      "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=",
+      "dev": true
+    },
+    "whatwg-encoding": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz",
+      "integrity": "sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA=",
+      "dev": true,
+      "requires": {
+        "iconv-lite": "0.4.24"
+      }
+    },
+    "whatwg-mimetype": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz",
+      "integrity": "sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78=",
+      "dev": true
+    },
+    "whatwg-url": {
+      "version": "7.1.0",
+      "resolved": "https://registry.nlark.com/whatwg-url/download/whatwg-url-7.1.0.tgz?cache=0&sync_timestamp=1624742873749&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-7.1.0.tgz",
+      "integrity": "sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY=",
+      "dev": true,
+      "requires": {
+        "lodash.sortby": "^4.7.0",
+        "tr46": "^1.0.1",
+        "webidl-conversions": "^4.0.2"
+      }
+    },
+    "when": {
+      "version": "3.6.4",
+      "resolved": "https://registry.npm.taobao.org/when/download/when-3.6.4.tgz",
+      "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=",
+      "dev": true
+    },
+    "which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dev": true,
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "which-boxed-primitive": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz",
+      "integrity": "sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY=",
+      "dev": true,
+      "requires": {
+        "is-bigint": "^1.0.1",
+        "is-boolean-object": "^1.1.0",
+        "is-number-object": "^1.0.4",
+        "is-string": "^1.0.5",
+        "is-symbol": "^1.0.3"
+      }
+    },
+    "which-module": {
+      "version": "2.0.0",
+      "resolved": "https://registry.nlark.com/which-module/download/which-module-2.0.0.tgz",
+      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+    },
+    "wide-align": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz",
+      "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=",
+      "dev": true,
+      "requires": {
+        "string-width": "^1.0.2 || 2"
+      }
+    },
+    "win-release": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/win-release/-/win-release-1.1.1.tgz",
+      "integrity": "sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw==",
+      "requires": {
+        "semver": "^5.0.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "word-wrap": {
+      "version": "1.2.3",
+      "resolved": "https://registry.nlark.com/word-wrap/download/word-wrap-1.2.3.tgz",
+      "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w="
+    },
+    "worker-farm": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz",
+      "integrity": "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag=",
+      "dev": true,
+      "requires": {
+        "errno": "~0.1.7"
+      }
+    },
+    "wrap-ansi": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz",
+      "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=",
+      "requires": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz",
+          "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U="
+        },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1618995547052&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI="
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&sync_timestamp=1618552469710&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0="
+        },
+        "string-width": {
+          "version": "4.2.2",
+          "resolved": "https://registry.nlark.com/string-width/download/string-width-4.2.2.tgz",
+          "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=",
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "6.0.0",
+          "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-6.0.0.tgz",
+          "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=",
+          "requires": {
+            "ansi-regex": "^5.0.0"
+          }
+        }
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+    },
+    "ws": {
+      "version": "7.5.3",
+      "resolved": "https://registry.nlark.com/ws/download/ws-7.5.3.tgz?cache=0&sync_timestamp=1625897053615&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fws%2Fdownload%2Fws-7.5.3.tgz",
+      "integrity": "sha1-Fgg1tjx9l7+rQY/BuKn87SrAGnQ="
+    },
+    "xml-name-validator": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz",
+      "integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=",
+      "dev": true
+    },
+    "xml2js": {
+      "version": "0.4.23",
+      "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz",
+      "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
+      "requires": {
+        "sax": ">=0.6.0",
+        "xmlbuilder": "~11.0.0"
+      }
+    },
+    "xmlbuilder": {
+      "version": "11.0.1",
+      "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+      "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
+    },
+    "xmlchars": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/xmlchars/download/xmlchars-2.2.0.tgz",
+      "integrity": "sha1-Bg/hvLf5x2/ioX24apvDq4lCEMs=",
+      "dev": true
+    },
+    "xregexp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/xregexp/-/xregexp-2.0.0.tgz",
+      "integrity": "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA=="
+    },
+    "xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.nlark.com/xtend/download/xtend-4.0.2.tgz",
+      "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q="
+    },
+    "y18n": {
+      "version": "4.0.3",
+      "resolved": "https://registry.nlark.com/y18n/download/y18n-4.0.3.tgz",
+      "integrity": "sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8="
+    },
+    "yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.nlark.com/yallist/download/yallist-3.1.1.tgz",
+      "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0="
+    },
+    "yargs": {
+      "version": "16.2.0",
+      "resolved": "https://registry.nlark.com/yargs/download/yargs-16.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-16.2.0.tgz",
+      "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=",
+      "dev": true,
+      "requires": {
+        "cliui": "^7.0.2",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.0",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^20.2.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz",
+          "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1618995547052&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "cliui": {
+          "version": "7.0.4",
+          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-7.0.4.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-7.0.4.tgz",
+          "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=",
+          "dev": true,
+          "requires": {
+            "string-width": "^4.2.0",
+            "strip-ansi": "^6.0.0",
+            "wrap-ansi": "^7.0.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&sync_timestamp=1618552469710&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "4.2.2",
+          "resolved": "https://registry.nlark.com/string-width/download/string-width-4.2.2.tgz",
+          "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "6.0.0",
+          "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-6.0.0.tgz",
+          "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^5.0.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz",
+          "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.0.0",
+            "string-width": "^4.1.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "y18n": {
+          "version": "5.0.8",
+          "resolved": "https://registry.nlark.com/y18n/download/y18n-5.0.8.tgz",
+          "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=",
+          "dev": true
+        },
+        "yargs-parser": {
+          "version": "20.2.9",
+          "resolved": "https://registry.nlark.com/yargs-parser/download/yargs-parser-20.2.9.tgz",
+          "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=",
+          "dev": true
+        }
+      }
+    },
+    "yargs-parser": {
+      "version": "13.1.2",
+      "resolved": "https://registry.nlark.com/yargs-parser/download/yargs-parser-13.1.2.tgz",
+      "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.nlark.com/camelcase/download/camelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        }
+      }
+    },
+    "yargs-unparser": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npm.taobao.org/yargs-unparser/download/yargs-unparser-1.6.0.tgz",
+      "integrity": "sha1-7yXCx2n/a9CeSw+dfGBfsnhG6p8=",
+      "dev": true,
+      "requires": {
+        "flat": "^4.1.0",
+        "lodash": "^4.17.15",
+        "yargs": "^13.3.0"
+      },
+      "dependencies": {
+        "cliui": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz",
+          "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=",
+          "dev": true,
+          "requires": {
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
+          }
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.nlark.com/emoji-regex/download/emoji-regex-7.0.3.tgz",
+          "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz",
+          "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
+          }
+        },
+        "yargs": {
+          "version": "13.3.2",
+          "resolved": "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz",
+          "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=",
+          "dev": true,
+          "requires": {
+            "cliui": "^5.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^3.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.1.2"
+          }
+        }
+      }
+    },
+    "yorkie": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz",
+      "integrity": "sha1-kkEZEtQ1IU4SxRwq4Qk+VLa7g9k=",
+      "dev": true,
+      "requires": {
+        "execa": "^0.8.0",
+        "is-ci": "^1.0.10",
+        "normalize-path": "^1.0.0",
+        "strip-indent": "^2.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "execa": {
+          "version": "0.8.0",
+          "resolved": "https://registry.nlark.com/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1622825859616&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz",
+          "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^5.0.1",
+            "get-stream": "^3.0.0",
+            "is-stream": "^1.1.0",
+            "npm-run-path": "^2.0.0",
+            "p-finally": "^1.0.0",
+            "signal-exit": "^3.0.0",
+            "strip-eof": "^1.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.nlark.com/get-stream/download/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "dev": true
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.nlark.com/lru-cache/download/lru-cache-4.1.5.tgz",
+          "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "normalize-path": {
+          "version": "1.0.0",
+          "resolved": "https://registry.nlark.com/normalize-path/download/normalize-path-1.0.0.tgz",
+          "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz",
+          "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^1.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz",
+          "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+          "dev": true
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz",
+          "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.nlark.com/yallist/download/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "zrender": {
+      "version": "5.0.4",
+      "resolved": "https://registry.nlark.com/zrender/download/zrender-5.0.4.tgz",
+      "integrity": "sha1-icNVr5CLn2SjAbOPdRt5UfLIqVo=",
+      "requires": {
+        "tslib": "2.0.3"
+      }
+    }
+  }
+}
diff --git a/WIDESEA_WMSClient/package.json b/WIDESEA_WMSClient/package.json
new file mode 100644
index 0000000..de53b45
--- /dev/null
+++ b/WIDESEA_WMSClient/package.json
@@ -0,0 +1,71 @@
+{
+  "name": "wideseawcs",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "server": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "test:unit": "vue-cli-service test:unit",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "@element-plus/icons-vue": "^2.1.0",
+    "@microsoft/signalr": "^6.0.4",
+    "ali-oss": "^6.17.1",
+    "axios": "^0.21.1",
+    "core-js": "^3.6.5",
+    "echarts": "^5.0.2",
+    "element-plus": "^2.2.14",
+    "jsbarcode": "^3.11.6",
+    "less": "^4.1.1",
+    "qrcode": "^1.5.4",
+    "vue": "^3.2.37",
+    "vue-barcode": "^1.3.0",
+    "vue-draggable-next": "^2.0.1",
+    "vue-qrcode": "^2.2.2",
+    "vue-router": "^4.0.0-0",
+    "vuex": "^4.0.0-0"
+  },
+  "devDependencies": {
+    "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+    "@vue/cli-plugin-babel": "~4.5.0",
+    "@vue/cli-plugin-eslint": "~4.5.0",
+    "@vue/cli-plugin-router": "~4.5.0",
+    "@vue/cli-plugin-unit-mocha": "~4.5.0",
+    "@vue/cli-plugin-vuex": "~4.5.0",
+    "@vue/cli-service": "~4.5.0",
+    "@vue/compiler-sfc": "^3.0.0",
+    "@vue/test-utils": "^2.0.0-0",
+    "babel-eslint": "^10.1.0",
+    "chai": "^4.1.2",
+    "cross-env": "^7.0.3",
+    "less": "^4.1.1",
+    "less-loader": "^7.3.0",
+    "sass": "^1.78.0",
+    "sass-loader": "^16.0.1",
+    "stylus": "^0.54.7",
+    "stylus-loader": "^3.0.2"
+  },
+  "eslintConfig": {
+    "root": true,
+    "env": {
+      "node": true
+    },
+    "extends": [
+      "plugin:vue/essential",
+      "@vue/standard"
+    ],
+    "rules": {
+      "indent": [
+        1,
+        4
+      ]
+    },
+    "parserOptions": {
+      "parser": "babel-eslint"
+    }
+  },
+  "eslintIgnore": [
+    "*"
+  ]
+}
diff --git a/WIDESEA_WMSClient/public/index.html b/WIDESEA_WMSClient/public/index.html
new file mode 100644
index 0000000..53f6fd4
--- /dev/null
+++ b/WIDESEA_WMSClient/public/index.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html lang="">
+
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width,initial-scale=1.0">
+  <meta name="keywords" content=".netccore,dotnet core,vue,element,element plus,vue3" />
+  <meta name="description" content="" />
+  <link rel="icon" href="<%= BASE_URL %>wms_d.png">
+  <title><%= htmlWebpackPlugin.options.title %></title>
+  <script src="webconfig.js"></script>
+</head>
+
+<body>
+  <noscript>
+    <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
+      Please enable it to continue.</strong>
+  </noscript>
+  <div id="app"></div>
+  <!-- built files will be auto injected -->
+</body>
+
+</html>
+<style>
+  html,
+  body {
+    margin: 0;
+    padding: 0;
+    height: 100%;
+    width: 100%;
+  }
+
+  * {
+    box-sizing: border-box;
+  }
+
+  .el-loading {
+    z-index: 999999;
+  }
+
+  .el-table th {
+    display: table-cell !important;
+  }
+
+  .el-loading .el-loading-spinner {
+    padding: 7px;
+    background: #ececec;
+    width: 200px;
+    color: red;
+    left: 0;
+    right: 0;
+    margin: 0 auto;
+    border-radius: 5px;
+    border: 1px solid #a0a0a0;
+
+  }
+
+  h1,
+  h2,
+  h3,
+  h4 {
+    margin: 0;
+  }
+
+  .v-dialog {
+    border-radius: 5px;
+    top: 50%;
+    /* margin-top: -220px !important; */
+  }
+
+  .v-dialog .el-dialog__header {
+    border-top-left-radius: 4px;
+    border-top-right-radius: 4px;
+    padding: 0px 13px;
+    line-height: 53px;
+    border-bottom: 1px solid #e2e2e2;
+    height: 50px;
+    color: white;
+    font-weight: bold;
+    font-size: 14px;
+    background-image: linear-gradient(135deg, #0cd7bd 10%, #50c3f7);
+  }
+
+  .v-dialog .el-dialog__header .el-dialog__headerbtn {
+    top: 3px;
+    right: 0px;
+  }
+
+  .v-dialog .el-dialog__header .el-dialog__headerbtn .el-dialog__close {
+    font-size: 19px;
+    color: white;
+  }
+
+  .v-dialog .el-dialog__body {
+    padding: 0;
+  }
+
+  .el-message {
+    z-index: 3500 !important;
+  }
+
+  .v-date-range .el-input__inner {
+    padding: 0 15px 0 8px
+  }
+
+  .v-date-range .el-input__suffix .el-input__icon {
+    display: table-caption;
+    background: white;
+    margin: 1px;
+    height: auto;
+    margin-right: -4px;
+    height: 33px;
+    width: 19px;
+    font-size: 13px;
+    border-top-right-radius: 3px;
+    border-bottom-right-radius: 3px;
+  }
+
+  .v-date-range .el-icon-circle-check {
+    display: none !important;
+  }
+
+  .v-dialog .el-dialog__header {
+    margin-right: 0;
+  }
+
+  .el-button {
+    font-size: 12px !important;
+  }
+
+  .el-button--small {
+    padding: 0px 15px !important;
+    height: 32px;
+  }
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/public/static/login_bg.png b/WIDESEA_WMSClient/public/static/login_bg.png
new file mode 100644
index 0000000..925a5da
--- /dev/null
+++ b/WIDESEA_WMSClient/public/static/login_bg.png
Binary files differ
diff --git a/WIDESEA_WMSClient/public/wcslogo.png b/WIDESEA_WMSClient/public/wcslogo.png
new file mode 100644
index 0000000..2ef8e9b
--- /dev/null
+++ b/WIDESEA_WMSClient/public/wcslogo.png
Binary files differ
diff --git a/WIDESEA_WMSClient/public/webconfig.js b/WIDESEA_WMSClient/public/webconfig.js
new file mode 100644
index 0000000..e6a730f
--- /dev/null
+++ b/WIDESEA_WMSClient/public/webconfig.js
@@ -0,0 +1,4 @@
+window.webConfig = {
+    "webApiBaseUrl": "http://localhost:9293/",
+    "webApiProduction":"http://localhost:9293/"
+}
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/public/wms_d.png b/WIDESEA_WMSClient/public/wms_d.png
new file mode 100644
index 0000000..1e198e9
--- /dev/null
+++ b/WIDESEA_WMSClient/public/wms_d.png
Binary files differ
diff --git a/WIDESEA_WMSClient/src/App.vue b/WIDESEA_WMSClient/src/App.vue
new file mode 100644
index 0000000..c46407f
--- /dev/null
+++ b/WIDESEA_WMSClient/src/App.vue
@@ -0,0 +1,67 @@
+<template>
+  <div id="nav"></div>
+  <el-config-provider :locale="locale">
+    <router-view />
+  </el-config-provider>
+</template>
+<script>
+import { ElConfigProvider } from "element-plus";
+import zhCn from "element-plus/lib/locale/lang/zh-cn";
+export default {
+  name: "vol_app",
+  components: {
+    [ElConfigProvider.name]: ElConfigProvider, //娣诲姞缁勪欢
+  },
+  data() {
+    return {
+      locale: zhCn,
+    };
+  },
+  created() {
+  },
+  methods: {
+  },
+};
+</script>
+<style lang="stylus">
+#app {
+  font-family: Avenir, Helvetica, Arial, sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  height: 100%;
+  width: 100%;
+}
+
+.el-alert--error.is-light {
+  border: 1px solid #ffe0e0;
+}
+
+.el-alert--error.is-light {
+  color: #f74444 !important;
+}
+
+.el-alert--warning.is-light {
+  border: 1px solid #ffe6c1;
+}
+
+.el-alert--info.is-light {
+  border: 1px solid #e6e5e5;
+}
+
+.el-alert--info .el-alert__description {
+  color: #6b6b6b !important;
+}
+
+.el-alert--warning.is-light {
+  background-color: #fdf6ec;
+  color: #d68409 !important;
+}
+
+.el-alert--success.is-light {
+  border: 1px solid #cdf7b8;
+}
+
+.el-alert--success.is-light .el-alert__description {
+  color: #3baf02 !important;
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/api/http.js b/WIDESEA_WMSClient/src/api/http.js
new file mode 100644
index 0000000..70a500f
--- /dev/null
+++ b/WIDESEA_WMSClient/src/api/http.js
@@ -0,0 +1,324 @@
+import axios from 'axios'
+import store from '../store/index'
+// import {getCurrentInstance} from 'vue'
+import { useRouter, useRoute } from 'vue-router'
+const router = useRouter();
+axios.defaults.timeout = 50000;
+axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
+
+import { ElLoading as Loading, ElMessage as Message } from 'element-plus';
+
+
+let loadingInstance;
+let loadingStatus = false;
+if (process.env.NODE_ENV == 'development') {
+    axios.defaults.baseURL = window.webConfig.webApiBaseUrl;
+}
+else if (process.env.NODE_ENV == 'debug') {
+    axios.defaults.baseURL = 'http://127.0.0.1:8098/';
+}
+
+else if (process.env.NODE_ENV == 'production') {
+    axios.defaults.baseURL = window.webConfig.webApiProduction;
+}
+if (!axios.defaults.baseURL.endsWith('/')) {
+    axios.defaults.baseURL+="/";
+}
+
+
+let ipAddress = axios.defaults.baseURL;
+axios.interceptors.request.use((config) => {
+    return config;
+}, (error) => {
+    return Promise.reject(error);
+});
+
+axios.interceptors.response.use((res) => {
+
+    closeLoading();
+
+    checkResponse(res);
+
+    return Promise.resolve(res);
+}, (error) => {
+    closeLoading();
+    let httpMessage = '';
+    if (error.response) {
+        if (error.response.status == '401') {
+            if (error.response.data && error.response.data.code == 401) {
+                if (!localStorage.getItem('user')) {
+                    Message.error({
+                        showClose: true,
+                        message: '鐧婚檰宸茶繃鏈�',
+                        type: 'error'
+                    });
+                }
+                toLogin();
+                return;
+            }
+
+        }
+        if (error.response.status == '404') {
+            httpMessage = "鏈壘鍒拌姹傚湴鍧�";
+        }
+        else if (error.response.data && error.response.data.message) {
+            httpMessage = error.response.data.message;
+        }
+    }
+    else {
+        httpMessage = '鏈嶅姟鍣ㄥ鐞嗗紓甯�'
+    }
+    redirect(httpMessage);
+    return Promise.reject(error.response || {}, httpMessage);
+});
+function closeLoading () {
+    if (loadingInstance) {
+        loadingInstance.close();
+    }
+    if (loadingStatus) {
+        loadingStatus = false;
+        if (loadingInstance) {
+            loadingInstance.close();
+        }
+    }
+
+}
+function checkResponse (res) {
+    //鍒锋柊token
+    if (!res.headers) {
+        if (res.getResponseHeader("widesea_exp") == "1") {
+            replaceToken();
+        }
+    }
+    else if (res.headers.widesea_exp == "1") {
+        replaceToken();
+    }
+}
+
+const _Authorization = 'Authorization';
+
+function showLoading (loading) {
+    if (!loading || loadingStatus) {
+        return;
+    }
+    loadingInstance = Loading.service({
+        lock: true,
+        text: 'Loading',
+        customClass:"http-loading",
+        background: typeof loading == "string" ? loading : '姝e湪澶勭悊.....',
+        background: 'rgba(58, 61, 63, 0.32)'
+    });
+}
+
+function getToken () {
+    return store.getters.getToken();
+}
+
+/*
+  url
+  params璇锋眰鍚庡彴鐨勫弬鏁�,濡傦細{name:123,values:['a','b','c']}
+  loading鏄惁鏄剧ず閬僵灞�,鍙互浼犲叆true.false.鍙婃彁绀烘枃鏈�
+  config閰嶇疆淇℃伅,濡倇timeout:3000,headers:{token:123}}
+*/
+function post (url, params, loading, config) {
+    showLoading(loading);
+    axios.defaults.headers[_Authorization] = getToken();
+    return new Promise((resolve, reject) => {
+        axios.post(url, params, config)
+            .then(response => {
+                resolve(response.data);
+            }, err => {
+                reject(err && err.data && err.data.message ? err.data.message : '鏈嶅姟鍣ㄥ鐞嗗紓甯�');
+            })
+            .catch((error) => {
+                reject(error)
+            })
+    })
+}
+
+//=true寮傛璇锋眰鏃朵細鏄剧ず閬僵灞�,=瀛楃涓诧紝寮傛璇锋眰鏃堕伄缃╁眰鏄剧ず褰撳墠瀛楃涓�
+function get (url, param, loading, config) {
+    showLoading(loading);
+    axios.defaults.headers[_Authorization] = getToken();
+    return new Promise((resolve, reject) => {
+        axios.get(url, config)
+            .then(response => {
+                // console.log(response)
+                resolve(response.data)
+            }, err => {
+                reject(err)
+            })
+            .catch((error) => {
+                reject(error)
+            })
+    })
+}
+
+//url:url鍦板潃
+//params:璇锋眰鍙傛暟
+//fileName:涓嬭浇鐨勬枃浠跺悕
+//loading:鏄惁鏄剧ず鍔犺浇鐘舵��
+function download (url, params, fileName, loading,callback) {
+    fileName = fileName.replace(">", "锛�").replace("<", "锛�");
+    post(url, params, loading, { responseType: 'blob' }).then(content => {
+        const blob = new Blob([content])
+        if ('download' in document.createElement('a')) { // 闈濱E涓嬭浇
+            const elink = document.createElement('a')
+            elink.download = fileName
+            elink.style.display = 'none'
+            elink.href = URL.createObjectURL(blob)
+            document.body.appendChild(elink)
+            elink.click()
+            URL.revokeObjectURL(elink.href) // 閲婃斁URL 瀵硅薄
+            document.body.removeChild(elink)
+        } else { // IE10+涓嬭浇
+            navigator.msSaveBlob(blob, fileName)
+        }
+        callback&&callback();
+    })
+}
+
+
+function createXHR () {
+    if (XMLHttpRequest) {
+        return new XMLHttpRequest();
+    }
+    if (ActiveXObject) {
+        if (typeof arguments.callee.activeXString != "string") {
+            var versions = [
+                "MSXML2.XMLHttp.6.0",
+                "MSXML2.XMLHttp",
+                "MSXML2.XMLHttp.3.0"
+            ];
+            for (var i = 0; i < versions.length; i++) {
+                try {
+                    new ActiveXObject(versions[i]);
+                    arguments.callee.activeXString = versions[i];
+                    break;
+                } catch (e) {
+                    console.log(e);
+                }
+            }
+        }
+        return new ActiveXObject(arguments.callee.activeXString);
+    }
+}
+
+function redirect (responseText, message) {
+    try {
+        let responseData = typeof responseText == 'string' ? JSON.parse(responseText) : responseText;
+        if ((responseData.hasOwnProperty('code') && responseData.code == 401)
+            || (responseData.data && responseData.data.code == 401)) {
+            closeLoading();
+            toLogin();
+        } else {
+            if (message) {
+                Message.error({
+                    showClose: true,
+                    message: message,
+                    type: 'error'
+                });
+            }
+        }
+    } catch (error) {
+        console.log(error);
+        Message.error({
+            showClose: true,
+            message: responseText,
+            type: 'error'
+        });
+    }
+}
+
+
+function toLogin () {
+    //  const vueinstance=  getCurrentInstance();
+    if (window.location.hash) {
+        window.location.href = window.location.origin + '/#/login'
+        return
+    }
+    window.location.href = window.location.origin + '/login'
+    //  router.push({ path: '/login', params: { r: Math.random() } });
+}
+//鍔ㄦ�佸埛鏂皌oken
+function replaceToken () {
+    ajax({
+        url: "/api/User/replaceToken",
+        param: {},
+        json: true,
+        success: function (x) {
+            if (x.status) {
+                let userInfo = store.getters.getUserInfo();
+                userInfo.token = x.data;
+                store.commit('setUserInfo', userInfo);
+            } else {
+                console.log(x.message);
+                toLogin();
+            }
+        },
+        errror: function (ex) {
+            console.log(ex);
+            toLogin();
+        },
+        type: "post",
+        async: false
+    });
+
+
+}
+
+function ajax (param) {
+    let httpParam =
+        Object.assign({
+            url: '', headers: {},
+            param: {}, json: true,
+            success: function () { },
+            errror: function () { },
+            type: 'post', async: true
+        }, param);
+
+    httpParam.url = axios.defaults.baseURL + httpParam.url.replace(/\/?/, '');
+    httpParam.headers[_Authorization] = getToken();
+    var xhr = createXHR();
+    xhr.onreadystatechange = function () {
+        if (xhr.status == 403 || xhr.status == 401) {
+            redirect(xhr.responseText);
+            return;
+        }
+        checkResponse(xhr);
+        if (xhr.readyState == 4 && xhr.status == 200) {
+            httpParam.success(httpParam.json ? JSON.parse(xhr.responseText) : xhr.responseText);
+            return;
+        }
+        if (xhr.status != 0 && xhr.readyState != 1) {
+            httpParam.errror(xhr);
+        }
+    };
+    //鍒濆鍖栬姹�
+    xhr.open(
+        httpParam.type,
+        httpParam.url,
+        httpParam.async
+    );
+    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+    for (const key in httpParam.headers) {
+        xhr.setRequestHeader(key, httpParam.headers[key]);
+    }
+    let dataStr = '';
+    for (const key in httpParam.param) {
+        dataStr += key + "=" + httpParam.param[key];
+    }
+    try {
+        xhr.send(dataStr);
+    } catch (error) {
+        toLogin();
+    }
+}
+
+ajax.post = function (url, param, success, errror) {
+    ajax({ url: url, param: param, success: success, error: errror, type: 'post' })
+}
+ajax.get = function (url, param, success, errror) {
+    ajax({ url: url, param: param, success: success, error: errror, type: 'get' })
+}
+export default { post, get,download, ajax, ipAddress }
diff --git a/WIDESEA_WMSClient/src/api/permission.js b/WIDESEA_WMSClient/src/api/permission.js
new file mode 100644
index 0000000..8dc7b02
--- /dev/null
+++ b/WIDESEA_WMSClient/src/api/permission.js
@@ -0,0 +1,53 @@
+
+import http from '@/../src/api/http.js'
+import buttons from '@/../config/buttons.js'
+import store from '../store/index'
+import { useRouter } from 'vue-router'
+let permission = {
+    getMenu() {
+        return http.get("/api/getTreeMenu");
+    }, getButtons(path, extra, table, tableName) {//extra鑷畾棰濆鎸夐挳
+       //extra鑷畾棰濆鎸夐挳
+    //table鑾峰彇鎸囧畾琛ㄧ殑鏉冮檺
+    if (table) {
+        table = '/' + table;
+      }
+      let permission = store.getters.getPermission(table || path);
+      if (!permission) {
+        permission = store.getters.getPermission(path.substring(1));
+        if (!permission) {
+          if ((tableName || '').indexOf('/') != -1) {
+            let arr = tableName.split('/');
+            tableName = arr[arr.length - 1];
+          }
+          permission = store.getters.getPermission('/' + tableName);
+          if (!permission) {
+            permission = (store.state.permission||[]).find(x => x.tableName ==tableName);
+            if (!permission) {
+              to401();
+              return;
+            }
+          }
+        }
+      }
+  
+      let permissions = permission.permission; //.split(',');
+      let gridButtons = buttons.filter((item) => {
+        return !item.value || permissions.indexOf(item.value) != -1;
+      });
+      if (extra && extra instanceof Array) {
+        gridButtons.push(...extra);
+      }
+      return gridButtons;
+    }, to401() {
+        to401();
+    }
+}
+function to401() {
+    const router = useRouter();
+    router.push({
+        path: '/401'
+    });
+}
+
+export default permission;
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/api/useTest.js b/WIDESEA_WMSClient/src/api/useTest.js
new file mode 100644
index 0000000..d4d7be1
--- /dev/null
+++ b/WIDESEA_WMSClient/src/api/useTest.js
@@ -0,0 +1,9 @@
+const tipxx = {
+    install: function (vue) {
+        alert(1);
+        vue.prototype.$tip = function () {
+            alert('娴嬭瘯use')
+        };
+    }
+}
+export default { tipxx }
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/assets/css/common.less b/WIDESEA_WMSClient/src/assets/css/common.less
new file mode 100644
index 0000000..ac7a179
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/css/common.less
@@ -0,0 +1,75 @@
+*{
+    box-sizing:border-box;
+    -moz-box-sizing:border-box; /* Firefox */
+    -webkit-box-sizing:border-box; /* Safari */
+}
+.el-pager li{
+    font-weight: 100;
+    margin-right: 9px;
+    border: 1px solid #eee;
+    border-radius: 3px;
+    min-width: 28px;
+}
+.el-pager li.active,.el-pager li:hover{
+    background: #ed4014;
+    color: white;
+}
+.el-pagination__editor.el-input .el-input__inner{
+    height: 23px;
+}
+
+
+.animated {
+    -webkit-animation-duration: 0.5s;
+    animation-duration: 0.5s;
+    -webkit-animation-fill-mode: both;
+    animation-fill-mode: both;
+  }
+  
+  @media (print), (prefers-reduced-motion) {
+    .animated {
+      -webkit-animation: unset !important;
+      animation: unset !important;
+      -webkit-transition: none !important;
+      transition: none !important;
+    }
+  }
+  
+  @-webkit-keyframes fadeInDown {
+    from {
+      opacity: 1;
+      -webkit-transform: translate3d(0, -100%, 0);
+      transform: translate3d(0, -100%, 0);
+    }
+  
+    to {
+      opacity: 1;
+      -webkit-transform: translate3d(0, 0, 0);
+      transform: translate3d(0, 0, 0);
+    }
+  }
+  
+  @keyframes fadeInDown {
+    from {
+      opacity: 0;
+      -webkit-transform: translate3d(0, -100%, 0);
+      transform: translate3d(0, -100%, 0);
+    }
+  
+    to {
+      opacity: 1;
+      -webkit-transform: translate3d(0, 0, 0);
+      transform: translate3d(0, 0, 0);
+    }
+  }
+  
+  .fadeInDown {
+    -webkit-animation-name: fadeInDown;
+    animation-name: fadeInDown;
+  }
+  .ivu-message{
+    z-index: 999999999 !important;
+  }
+  .ivu-form-item-content{
+    text-align: left;
+  }
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/assets/element-icon/fonts/element-icons.ttf b/WIDESEA_WMSClient/src/assets/element-icon/fonts/element-icons.ttf
new file mode 100644
index 0000000..91b74de
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/element-icon/fonts/element-icons.ttf
Binary files differ
diff --git a/WIDESEA_WMSClient/src/assets/element-icon/fonts/element-icons.woff b/WIDESEA_WMSClient/src/assets/element-icon/fonts/element-icons.woff
new file mode 100644
index 0000000..02b9a25
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/element-icon/fonts/element-icons.woff
Binary files differ
diff --git a/WIDESEA_WMSClient/src/assets/element-icon/icon.css b/WIDESEA_WMSClient/src/assets/element-icon/icon.css
new file mode 100644
index 0000000..bf3ae3e
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/element-icon/icon.css
@@ -0,0 +1 @@
+@font-face{font-family:element-icons;src:url(fonts/element-icons.woff) format("woff"),url(fonts/element-icons.ttf) format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:"\e6a0"}.el-icon-ice-cream-square:before{content:"\e6a3"}.el-icon-lollipop:before{content:"\e6a4"}.el-icon-potato-strips:before{content:"\e6a5"}.el-icon-milk-tea:before{content:"\e6a6"}.el-icon-ice-drink:before{content:"\e6a7"}.el-icon-ice-tea:before{content:"\e6a9"}.el-icon-coffee:before{content:"\e6aa"}.el-icon-orange:before{content:"\e6ab"}.el-icon-pear:before{content:"\e6ac"}.el-icon-apple:before{content:"\e6ad"}.el-icon-cherry:before{content:"\e6ae"}.el-icon-watermelon:before{content:"\e6af"}.el-icon-grape:before{content:"\e6b0"}.el-icon-refrigerator:before{content:"\e6b1"}.el-icon-goblet-square-full:before{content:"\e6b2"}.el-icon-goblet-square:before{content:"\e6b3"}.el-icon-goblet-full:before{content:"\e6b4"}.el-icon-goblet:before{content:"\e6b5"}.el-icon-cold-drink:before{content:"\e6b6"}.el-icon-coffee-cup:before{content:"\e6b8"}.el-icon-water-cup:before{content:"\e6b9"}.el-icon-hot-water:before{content:"\e6ba"}.el-icon-ice-cream:before{content:"\e6bb"}.el-icon-dessert:before{content:"\e6bc"}.el-icon-sugar:before{content:"\e6bd"}.el-icon-tableware:before{content:"\e6be"}.el-icon-burger:before{content:"\e6bf"}.el-icon-knife-fork:before{content:"\e6c1"}.el-icon-fork-spoon:before{content:"\e6c2"}.el-icon-chicken:before{content:"\e6c3"}.el-icon-food:before{content:"\e6c4"}.el-icon-dish-1:before{content:"\e6c5"}.el-icon-dish:before{content:"\e6c6"}.el-icon-moon-night:before{content:"\e6ee"}.el-icon-moon:before{content:"\e6f0"}.el-icon-cloudy-and-sunny:before{content:"\e6f1"}.el-icon-partly-cloudy:before{content:"\e6f2"}.el-icon-cloudy:before{content:"\e6f3"}.el-icon-sunny:before{content:"\e6f6"}.el-icon-sunset:before{content:"\e6f7"}.el-icon-sunrise-1:before{content:"\e6f8"}.el-icon-sunrise:before{content:"\e6f9"}.el-icon-heavy-rain:before{content:"\e6fa"}.el-icon-lightning:before{content:"\e6fb"}.el-icon-light-rain:before{content:"\e6fc"}.el-icon-wind-power:before{content:"\e6fd"}.el-icon-baseball:before{content:"\e712"}.el-icon-soccer:before{content:"\e713"}.el-icon-football:before{content:"\e715"}.el-icon-basketball:before{content:"\e716"}.el-icon-ship:before{content:"\e73f"}.el-icon-truck:before{content:"\e740"}.el-icon-bicycle:before{content:"\e741"}.el-icon-mobile-phone:before{content:"\e6d3"}.el-icon-service:before{content:"\e6d4"}.el-icon-key:before{content:"\e6e2"}.el-icon-unlock:before{content:"\e6e4"}.el-icon-lock:before{content:"\e6e5"}.el-icon-watch:before{content:"\e6fe"}.el-icon-watch-1:before{content:"\e6ff"}.el-icon-timer:before{content:"\e702"}.el-icon-alarm-clock:before{content:"\e703"}.el-icon-map-location:before{content:"\e704"}.el-icon-delete-location:before{content:"\e705"}.el-icon-add-location:before{content:"\e706"}.el-icon-location-information:before{content:"\e707"}.el-icon-location-outline:before{content:"\e708"}.el-icon-location:before{content:"\e79e"}.el-icon-place:before{content:"\e709"}.el-icon-discover:before{content:"\e70a"}.el-icon-first-aid-kit:before{content:"\e70b"}.el-icon-trophy-1:before{content:"\e70c"}.el-icon-trophy:before{content:"\e70d"}.el-icon-medal:before{content:"\e70e"}.el-icon-medal-1:before{content:"\e70f"}.el-icon-stopwatch:before{content:"\e710"}.el-icon-mic:before{content:"\e711"}.el-icon-copy-document:before{content:"\e718"}.el-icon-full-screen:before{content:"\e719"}.el-icon-switch-button:before{content:"\e71b"}.el-icon-aim:before{content:"\e71c"}.el-icon-crop:before{content:"\e71d"}.el-icon-odometer:before{content:"\e71e"}.el-icon-time:before{content:"\e71f"}.el-icon-bangzhu:before{content:"\e724"}.el-icon-close-notification:before{content:"\e726"}.el-icon-microphone:before{content:"\e727"}.el-icon-turn-off-microphone:before{content:"\e728"}.el-icon-position:before{content:"\e729"}.el-icon-postcard:before{content:"\e72a"}.el-icon-message:before{content:"\e72b"}.el-icon-chat-line-square:before{content:"\e72d"}.el-icon-chat-dot-square:before{content:"\e72e"}.el-icon-chat-dot-round:before{content:"\e72f"}.el-icon-chat-square:before{content:"\e730"}.el-icon-chat-line-round:before{content:"\e731"}.el-icon-chat-round:before{content:"\e732"}.el-icon-set-up:before{content:"\e733"}.el-icon-turn-off:before{content:"\e734"}.el-icon-open:before{content:"\e735"}.el-icon-connection:before{content:"\e736"}.el-icon-link:before{content:"\e737"}.el-icon-cpu:before{content:"\e738"}.el-icon-thumb:before{content:"\e739"}.el-icon-female:before{content:"\e73a"}.el-icon-male:before{content:"\e73b"}.el-icon-guide:before{content:"\e73c"}.el-icon-news:before{content:"\e73e"}.el-icon-price-tag:before{content:"\e744"}.el-icon-discount:before{content:"\e745"}.el-icon-wallet:before{content:"\e747"}.el-icon-coin:before{content:"\e748"}.el-icon-money:before{content:"\e749"}.el-icon-bank-card:before{content:"\e74a"}.el-icon-box:before{content:"\e74b"}.el-icon-present:before{content:"\e74c"}.el-icon-sell:before{content:"\e6d5"}.el-icon-sold-out:before{content:"\e6d6"}.el-icon-shopping-bag-2:before{content:"\e74d"}.el-icon-shopping-bag-1:before{content:"\e74e"}.el-icon-shopping-cart-2:before{content:"\e74f"}.el-icon-shopping-cart-1:before{content:"\e750"}.el-icon-shopping-cart-full:before{content:"\e751"}.el-icon-smoking:before{content:"\e752"}.el-icon-no-smoking:before{content:"\e753"}.el-icon-house:before{content:"\e754"}.el-icon-table-lamp:before{content:"\e755"}.el-icon-school:before{content:"\e756"}.el-icon-office-building:before{content:"\e757"}.el-icon-toilet-paper:before{content:"\e758"}.el-icon-notebook-2:before{content:"\e759"}.el-icon-notebook-1:before{content:"\e75a"}.el-icon-files:before{content:"\e75b"}.el-icon-collection:before{content:"\e75c"}.el-icon-receiving:before{content:"\e75d"}.el-icon-suitcase-1:before{content:"\e760"}.el-icon-suitcase:before{content:"\e761"}.el-icon-film:before{content:"\e763"}.el-icon-collection-tag:before{content:"\e765"}.el-icon-data-analysis:before{content:"\e766"}.el-icon-pie-chart:before{content:"\e767"}.el-icon-data-board:before{content:"\e768"}.el-icon-data-line:before{content:"\e76d"}.el-icon-reading:before{content:"\e769"}.el-icon-magic-stick:before{content:"\e76a"}.el-icon-coordinate:before{content:"\e76b"}.el-icon-mouse:before{content:"\e76c"}.el-icon-brush:before{content:"\e76e"}.el-icon-headset:before{content:"\e76f"}.el-icon-umbrella:before{content:"\e770"}.el-icon-scissors:before{content:"\e771"}.el-icon-mobile:before{content:"\e773"}.el-icon-attract:before{content:"\e774"}.el-icon-monitor:before{content:"\e775"}.el-icon-search:before{content:"\e778"}.el-icon-takeaway-box:before{content:"\e77a"}.el-icon-paperclip:before{content:"\e77d"}.el-icon-printer:before{content:"\e77e"}.el-icon-document-add:before{content:"\e782"}.el-icon-document:before{content:"\e785"}.el-icon-document-checked:before{content:"\e786"}.el-icon-document-copy:before{content:"\e787"}.el-icon-document-delete:before{content:"\e788"}.el-icon-document-remove:before{content:"\e789"}.el-icon-tickets:before{content:"\e78b"}.el-icon-folder-checked:before{content:"\e77f"}.el-icon-folder-delete:before{content:"\e780"}.el-icon-folder-remove:before{content:"\e781"}.el-icon-folder-add:before{content:"\e783"}.el-icon-folder-opened:before{content:"\e784"}.el-icon-folder:before{content:"\e78a"}.el-icon-edit-outline:before{content:"\e764"}.el-icon-edit:before{content:"\e78c"}.el-icon-date:before{content:"\e78e"}.el-icon-c-scale-to-original:before{content:"\e7c6"}.el-icon-view:before{content:"\e6ce"}.el-icon-loading:before{content:"\e6cf"}.el-icon-rank:before{content:"\e6d1"}.el-icon-sort-down:before{content:"\e7c4"}.el-icon-sort-up:before{content:"\e7c5"}.el-icon-sort:before{content:"\e6d2"}.el-icon-finished:before{content:"\e6cd"}.el-icon-refresh-left:before{content:"\e6c7"}.el-icon-refresh-right:before{content:"\e6c8"}.el-icon-refresh:before{content:"\e6d0"}.el-icon-video-play:before{content:"\e7c0"}.el-icon-video-pause:before{content:"\e7c1"}.el-icon-d-arrow-right:before{content:"\e6dc"}.el-icon-d-arrow-left:before{content:"\e6dd"}.el-icon-arrow-up:before{content:"\e6e1"}.el-icon-arrow-down:before{content:"\e6df"}.el-icon-arrow-right:before{content:"\e6e0"}.el-icon-arrow-left:before{content:"\e6de"}.el-icon-top-right:before{content:"\e6e7"}.el-icon-top-left:before{content:"\e6e8"}.el-icon-top:before{content:"\e6e6"}.el-icon-bottom:before{content:"\e6eb"}.el-icon-right:before{content:"\e6e9"}.el-icon-back:before{content:"\e6ea"}.el-icon-bottom-right:before{content:"\e6ec"}.el-icon-bottom-left:before{content:"\e6ed"}.el-icon-caret-top:before{content:"\e78f"}.el-icon-caret-bottom:before{content:"\e790"}.el-icon-caret-right:before{content:"\e791"}.el-icon-caret-left:before{content:"\e792"}.el-icon-d-caret:before{content:"\e79a"}.el-icon-share:before{content:"\e793"}.el-icon-menu:before{content:"\e798"}.el-icon-s-grid:before{content:"\e7a6"}.el-icon-s-check:before{content:"\e7a7"}.el-icon-s-data:before{content:"\e7a8"}.el-icon-s-opportunity:before{content:"\e7aa"}.el-icon-s-custom:before{content:"\e7ab"}.el-icon-s-claim:before{content:"\e7ad"}.el-icon-s-finance:before{content:"\e7ae"}.el-icon-s-comment:before{content:"\e7af"}.el-icon-s-flag:before{content:"\e7b0"}.el-icon-s-marketing:before{content:"\e7b1"}.el-icon-s-shop:before{content:"\e7b4"}.el-icon-s-open:before{content:"\e7b5"}.el-icon-s-management:before{content:"\e7b6"}.el-icon-s-ticket:before{content:"\e7b7"}.el-icon-s-release:before{content:"\e7b8"}.el-icon-s-home:before{content:"\e7b9"}.el-icon-s-promotion:before{content:"\e7ba"}.el-icon-s-operation:before{content:"\e7bb"}.el-icon-s-unfold:before{content:"\e7bc"}.el-icon-s-fold:before{content:"\e7a9"}.el-icon-s-platform:before{content:"\e7bd"}.el-icon-s-order:before{content:"\e7be"}.el-icon-s-cooperation:before{content:"\e7bf"}.el-icon-bell:before{content:"\e725"}.el-icon-message-solid:before{content:"\e799"}.el-icon-video-camera:before{content:"\e772"}.el-icon-video-camera-solid:before{content:"\e796"}.el-icon-camera:before{content:"\e779"}.el-icon-camera-solid:before{content:"\e79b"}.el-icon-download:before{content:"\e77c"}.el-icon-upload2:before{content:"\e77b"}.el-icon-upload:before{content:"\e7c3"}.el-icon-picture-outline-round:before{content:"\e75f"}.el-icon-picture-outline:before{content:"\e75e"}.el-icon-picture:before{content:"\e79f"}.el-icon-close:before{content:"\e6db"}.el-icon-check:before{content:"\e6da"}.el-icon-plus:before{content:"\e6d9"}.el-icon-minus:before{content:"\e6d8"}.el-icon-help:before{content:"\e73d"}.el-icon-s-help:before{content:"\e7b3"}.el-icon-circle-close:before{content:"\e78d"}.el-icon-circle-check:before{content:"\e720"}.el-icon-circle-plus-outline:before{content:"\e723"}.el-icon-remove-outline:before{content:"\e722"}.el-icon-zoom-out:before{content:"\e776"}.el-icon-zoom-in:before{content:"\e777"}.el-icon-error:before{content:"\e79d"}.el-icon-success:before{content:"\e79c"}.el-icon-circle-plus:before{content:"\e7a0"}.el-icon-remove:before{content:"\e7a2"}.el-icon-info:before{content:"\e7a1"}.el-icon-question:before{content:"\e7a4"}.el-icon-warning-outline:before{content:"\e6c9"}.el-icon-warning:before{content:"\e7a3"}.el-icon-goods:before{content:"\e7c2"}.el-icon-s-goods:before{content:"\e7b2"}.el-icon-star-off:before{content:"\e717"}.el-icon-star-on:before{content:"\e797"}.el-icon-more-outline:before{content:"\e6cc"}.el-icon-more:before{content:"\e794"}.el-icon-phone-outline:before{content:"\e6cb"}.el-icon-phone:before{content:"\e795"}.el-icon-user:before{content:"\e6e3"}.el-icon-user-solid:before{content:"\e7a5"}.el-icon-setting:before{content:"\e6ca"}.el-icon-s-tools:before{content:"\e7ac"}.el-icon-delete:before{content:"\e6d7"}.el-icon-delete-solid:before{content:"\e7c9"}.el-icon-eleme:before{content:"\e7c7"}.el-icon-platform-eleme:before{content:"\e7ca"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/assets/imgs/error-img.png b/WIDESEA_WMSClient/src/assets/imgs/error-img.png
new file mode 100644
index 0000000..d479f96
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/imgs/error-img.png
Binary files differ
diff --git a/WIDESEA_WMSClient/src/assets/imgs/error.png b/WIDESEA_WMSClient/src/assets/imgs/error.png
new file mode 100644
index 0000000..d479f96
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/imgs/error.png
Binary files differ
diff --git a/WIDESEA_WMSClient/src/assets/imgs/wcs_x.png b/WIDESEA_WMSClient/src/assets/imgs/wcs_x.png
new file mode 100644
index 0000000..df6e40c
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/imgs/wcs_x.png
Binary files differ
diff --git a/WIDESEA_WMSClient/src/assets/imgs/wms_d.png b/WIDESEA_WMSClient/src/assets/imgs/wms_d.png
new file mode 100644
index 0000000..1e198e9
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/imgs/wms_d.png
Binary files differ
diff --git a/WIDESEA_WMSClient/src/assets/imgs/wms_x.png b/WIDESEA_WMSClient/src/assets/imgs/wms_x.png
new file mode 100644
index 0000000..a6a28ca
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/imgs/wms_x.png
Binary files differ
diff --git a/WIDESEA_WMSClient/src/assets/logo.png b/WIDESEA_WMSClient/src/assets/logo.png
new file mode 100644
index 0000000..f3d2503
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/logo.png
Binary files differ
diff --git a/WIDESEA_WMSClient/src/assets/script/common.js b/WIDESEA_WMSClient/src/assets/script/common.js
new file mode 100644
index 0000000..8e8e8eb
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/script/common.js
@@ -0,0 +1,2 @@
+var test1 = function () { alert(11) }
+export { test1 }
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/assets/script/extend.js b/WIDESEA_WMSClient/src/assets/script/extend.js
new file mode 100644
index 0000000..d34da65
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/script/extend.js
@@ -0,0 +1,5 @@
+//瀵箆ue鍙傛暟杩涜鎵╁睍
+var extend = function (param) { 
+    console.log(param)
+ }
+export { extend }
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/assets/script/testFormExtend.js b/WIDESEA_WMSClient/src/assets/script/testFormExtend.js
new file mode 100644
index 0000000..67216df
--- /dev/null
+++ b/WIDESEA_WMSClient/src/assets/script/testFormExtend.js
@@ -0,0 +1,15 @@
+//瀵箆ue鍙傛暟杩涜鎵╁睍
+var extend = function ($vueParam) {
+    $vueParam.methods.volBoxFrom = function () {
+        this.$Message.info("鎵╁睍js,澧炲姞寮瑰嚭娑堟伅");
+        this.$refs.volBoxFrom.show();
+    }
+    //淇敼data灞炴��:
+    let data = $vueParam.data();
+    data.formFileds['extend'] = "鍔ㄦ�佹墿灞曞瓧娈�";
+    data.formOptions.splice(0,0,{ filed: "extend", title: "鍔ㄦ�佸鍔犲瓧娈�", type: "text", required: true });
+    $vueParam.data = function () {
+        return data;
+    }
+}
+export { extend }
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/AsyncLoading.vue b/WIDESEA_WMSClient/src/components/basic/AsyncLoading.vue
new file mode 100644
index 0000000..1ccf5c7
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/AsyncLoading.vue
@@ -0,0 +1,10 @@
+<template>
+  <div style="text-align: center;font-size: 16px;padding: 20px;">姝e湪鍔犺浇璧勬簮...</div>
+</template>
+<script>
+export default {
+  created() {
+    //  console.log('loading')
+  }
+};
+</script>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/Audit.vue b/WIDESEA_WMSClient/src/components/basic/Audit.vue
new file mode 100644
index 0000000..431d6c5
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/Audit.vue
@@ -0,0 +1,59 @@
+<template>
+  <el-alert
+    :title="'褰撳墠閫変腑' + auditParam.rows + '鏉¤褰曞緟瀹℃牳..'"
+    type="success"
+    :closable="false"
+  >
+  </el-alert>
+  <div class="item">
+    <label>瀹℃牳缁撴灉锛�</label>
+    <el-radio-group v-model="auditParam.status">
+      <el-radio
+        v-for="item in auditParam.data"
+        :key="item.status"
+        :label="item.status"
+      >
+        <span>{{ item.text }}</span>
+      </el-radio>
+    </el-radio-group>
+  </div>
+  <div class="item">
+    <label style="margin-right: 13px;">澶�&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 娉細</label>
+    <el-input
+      v-model="auditParam.reason"
+      type="textarea"
+      style="margin-right: 13px;"
+      :autosize="{ minRows: 4, maxRows: 10 }"
+      placeholder="瀹℃牳澶囨敞..."
+    ></el-input>
+  </div>
+</template>
+<script>
+export default {
+  props: {
+    auditParam: {
+      type: Object,
+      default: () => {
+        return {
+          auditParam: {
+            rows: 0,
+            model: false,
+            status: -1,
+            reason: "",
+            data: [], //[{ text: "閫氳繃", status: 1 }, { text: "鎷掔粷", status: 2 }]
+          },
+        };
+      },
+    },
+  },
+};
+</script>
+<style lang="less" scoped>
+.item{
+  margin-top: 20px;
+  display: flex;
+  > label{
+    width: 86px;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/Empty.vue b/WIDESEA_WMSClient/src/components/basic/Empty.vue
new file mode 100644
index 0000000..e5e6a79
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/Empty.vue
@@ -0,0 +1,3 @@
+<template>
+  <div></div>
+</template>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/ErrorMsg.vue b/WIDESEA_WMSClient/src/components/basic/ErrorMsg.vue
new file mode 100644
index 0000000..3885ed5
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/ErrorMsg.vue
@@ -0,0 +1,3 @@
+<template>
+    <div id="test"></div>
+</template>
diff --git a/WIDESEA_WMSClient/src/components/basic/Icons.vue b/WIDESEA_WMSClient/src/components/basic/Icons.vue
new file mode 100644
index 0000000..a5c6cf6
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/Icons.vue
@@ -0,0 +1,345 @@
+<template>
+  <div data-v-394040b0 class="icons">
+    <div
+      @click="select(index)"
+      v-for="(item, index) in icons"
+      :key="index"
+      class="icons-item"
+    >
+      <i
+        :class="[item, selectIndex == index ? 'active' : '']"
+        style="font-size: 32px"
+      ></i>
+      <p>{{ item }}</p>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  props: {
+    onSelect: {
+      type: Function,
+      default: () => {
+        return "";
+      },
+    },
+  },
+  methods: {
+    select(index) {
+      this.selectIndex = index;
+      this.onSelect(index < 0 ? "" : this.icons[index]);
+    },
+  },
+  data() {
+    return {
+      selectIndex: -1,
+      icons: [
+        //ivu-icon ivu-icon-ios-add
+        "el-icon-menu",
+        "el-icon-platform-eleme",
+        "el-icon-eleme",
+        "el-icon-delete-solid",
+        "el-icon-delete",
+        "el-icon-s-tools",
+        "el-icon-setting",
+        "el-icon-user-solid",
+        "el-icon-user",
+        "el-icon-phone",
+        "el-icon-phone-outline",
+        "el-icon-more",
+        "el-icon-more-outline",
+        "el-icon-star-on",
+        "el-icon-star-off",
+        "el-icon-s-goods",
+        "el-icon-goods",
+        "el-icon-warning",
+        "el-icon-warning-outline",
+        "el-icon-question",
+        "el-icon-info",
+        "el-icon-remove",
+        "el-icon-circle-plus",
+        "el-icon-success",
+        "el-icon-error",
+        "el-icon-zoom-in",
+        "el-icon-zoom-out",
+        "el-icon-remove-outline",
+        "el-icon-circle-plus-outline",
+        "el-icon-circle-check",
+        "el-icon-circle-close",
+        "el-icon-s-help",
+        "el-icon-help",
+        "el-icon-minus",
+        "el-icon-plus",
+        "el-icon-check",
+        "el-icon-close",
+        "el-icon-picture",
+        "el-icon-picture-outline",
+        "el-icon-picture-outline-round",
+        "el-icon-upload",
+        "el-icon-upload2",
+        "el-icon-download",
+        "el-icon-camera-solid",
+        "el-icon-camera",
+        "el-icon-video-camera-solid",
+        "el-icon-video-camera",
+        "el-icon-message-solid",
+        "el-icon-bell",
+        "el-icon-s-cooperation",
+        "el-icon-s-order",
+        "el-icon-s-platform",
+        "el-icon-s-fold",
+        "el-icon-s-unfold",
+        "el-icon-s-operation",
+        "el-icon-s-promotion",
+        "el-icon-s-home",
+        "el-icon-s-release",
+        "el-icon-s-ticket",
+        "el-icon-s-management",
+        "el-icon-s-open",
+        "el-icon-s-shop",
+        "el-icon-s-marketing",
+        "el-icon-s-flag",
+        "el-icon-s-comment",
+        "el-icon-s-finance",
+        "el-icon-s-claim",
+        "el-icon-s-custom",
+        "el-icon-s-opportunity",
+        "el-icon-s-data",
+        "el-icon-s-check",
+        "el-icon-s-grid",
+        "el-icon-share",
+        "el-icon-d-caret",
+        "el-icon-caret-left",
+        "el-icon-caret-right",
+        "el-icon-caret-bottom",
+        "el-icon-caret-top",
+        "el-icon-bottom-left",
+        "el-icon-bottom-right",
+        "el-icon-back",
+        "el-icon-right",
+        "el-icon-bottom",
+        "el-icon-top",
+        "el-icon-top-left",
+        "el-icon-top-right",
+        "el-icon-arrow-left",
+        "el-icon-arrow-right",
+        "el-icon-arrow-down",
+        "el-icon-arrow-up",
+        "el-icon-d-arrow-left",
+        "el-icon-d-arrow-right",
+        "el-icon-video-pause",
+        "el-icon-video-play",
+        "el-icon-refresh",
+        "el-icon-refresh-right",
+        "el-icon-refresh-left",
+        "el-icon-finished",
+        "el-icon-sort",
+        "el-icon-sort-up",
+        "el-icon-sort-down",
+        "el-icon-rank",
+        "el-icon-loading",
+        "el-icon-view",
+        "el-icon-c-scale-to-original",
+        "el-icon-date",
+        "el-icon-edit",
+        "el-icon-edit-outline",
+        "el-icon-folder",
+        "el-icon-folder-opened",
+        "el-icon-folder-add",
+        "el-icon-folder-remove",
+        "el-icon-folder-delete",
+        "el-icon-folder-checked",
+        "el-icon-tickets",
+        "el-icon-document-remove",
+        "el-icon-document-delete",
+        "el-icon-document-copy",
+        "el-icon-document-checked",
+        "el-icon-document",
+        "el-icon-document-add",
+        "el-icon-printer",
+        "el-icon-paperclip",
+        "el-icon-takeaway-box",
+        "el-icon-search",
+        "el-icon-monitor",
+        "el-icon-attract",
+        "el-icon-mobile",
+        "el-icon-scissors",
+        "el-icon-umbrella",
+        "el-icon-headset",
+        "el-icon-brush",
+        "el-icon-mouse",
+        "el-icon-coordinate",
+        "el-icon-magic-stick",
+        "el-icon-reading",
+        "el-icon-data-line",
+        "el-icon-data-board",
+        "el-icon-pie-chart",
+        "el-icon-data-analysis",
+        "el-icon-collection-tag",
+        "el-icon-film",
+        "el-icon-suitcase",
+        "el-icon-suitcase-1",
+        "el-icon-receiving",
+        "el-icon-collection",
+        "el-icon-files",
+        "el-icon-notebook-1",
+        "el-icon-notebook-2",
+        "el-icon-toilet-paper",
+        "el-icon-office-building",
+        "el-icon-school",
+        "el-icon-table-lamp",
+        "el-icon-house",
+        "el-icon-no-smoking",
+        "el-icon-smoking",
+        "el-icon-shopping-cart-full",
+        "el-icon-shopping-cart-1",
+        "el-icon-shopping-cart-2",
+        "el-icon-shopping-bag-1",
+        "el-icon-shopping-bag-2",
+        "el-icon-sold-out",
+        "el-icon-sell",
+        "el-icon-present",
+        "el-icon-box",
+        "el-icon-bank-card",
+        "el-icon-money",
+        "el-icon-coin",
+        "el-icon-wallet",
+        "el-icon-discount",
+        "el-icon-price-tag",
+        "el-icon-news",
+        "el-icon-guide",
+        "el-icon-male",
+        "el-icon-female",
+        "el-icon-thumb",
+        "el-icon-cpu",
+        "el-icon-link",
+        "el-icon-connection",
+        "el-icon-open",
+        "el-icon-turn-off",
+        "el-icon-set-up",
+        "el-icon-chat-round",
+        "el-icon-chat-line-round",
+        "el-icon-chat-square",
+        "el-icon-chat-dot-round",
+        "el-icon-chat-dot-square",
+        "el-icon-chat-line-square",
+        "el-icon-message",
+        "el-icon-postcard",
+        "el-icon-position",
+        "el-icon-turn-off-microphone",
+        "el-icon-microphone",
+        "el-icon-close-notification",
+        "el-icon-bangzhu",
+        "el-icon-time",
+        "el-icon-odometer",
+        "el-icon-crop",
+        "el-icon-aim",
+        "el-icon-switch-button",
+        "el-icon-full-screen",
+        "el-icon-copy-document",
+        "el-icon-mic",
+        "el-icon-stopwatch",
+        "el-icon-medal-1",
+        "el-icon-medal",
+        "el-icon-trophy",
+        "el-icon-trophy-1",
+        "el-icon-first-aid-kit",
+        "el-icon-discover",
+        "el-icon-place",
+        "el-icon-location",
+        "el-icon-location-outline",
+        "el-icon-location-information",
+        "el-icon-add-location",
+        "el-icon-delete-location",
+        "el-icon-map-location",
+        "el-icon-alarm-clock",
+        "el-icon-timer",
+        "el-icon-watch-1",
+        "el-icon-watch",
+        "el-icon-lock",
+        "el-icon-unlock",
+        "el-icon-key",
+        "el-icon-service",
+        "el-icon-mobile-phone",
+        "el-icon-bicycle",
+        "el-icon-truck",
+        "el-icon-ship",
+        "el-icon-basketball",
+        "el-icon-football",
+        "el-icon-soccer",
+        "el-icon-baseball",
+        "el-icon-wind-power",
+        "el-icon-light-rain",
+        "el-icon-lightning",
+        "el-icon-heavy-rain",
+        "el-icon-sunrise",
+        "el-icon-sunrise-1",
+        "el-icon-sunset",
+        "el-icon-sunny",
+        "el-icon-cloudy",
+        "el-icon-partly-cloudy",
+        "el-icon-cloudy-and-sunny",
+        "el-icon-moon",
+        "el-icon-moon-night",
+        "el-icon-dish",
+        "el-icon-dish-1",
+        "el-icon-food",
+        "el-icon-chicken",
+        "el-icon-fork-spoon",
+        "el-icon-knife-fork",
+        "el-icon-burger",
+        "el-icon-tableware",
+        "el-icon-sugar",
+        "el-icon-dessert",
+        "el-icon-ice-cream",
+        "el-icon-hot-water",
+        "el-icon-water-cup",
+        "el-icon-coffee-cup",
+        "el-icon-cold-drink",
+        "el-icon-goblet",
+        "el-icon-goblet-full",
+        "el-icon-goblet-square",
+        "el-icon-goblet-square-full",
+        "el-icon-refrigerator",
+        "el-icon-grape",
+        "el-icon-watermelon",
+        "el-icon-cherry",
+        "el-icon-apple",
+        "el-icon-pear",
+        "el-icon-orange",
+        "el-icon-coffee",
+        "el-icon-ice-tea",
+        "el-icon-ice-drink",
+        "el-icon-milk-tea",
+        "el-icon-potato-strips",
+        "el-icon-lollipop",
+        "el-icon-ice-cream-square",
+        "el-icon-ice-cream-round",
+      ],
+    };
+  },
+};
+</script>
+
+
+<style lang="less" scoped>
+.icons-item {
+  float: left;
+  margin: 6px 6px 6px 0;
+  width: 115px;
+  text-align: center;
+  list-style: none;
+  cursor: pointer;
+  height: 100px;
+  color: #5c6b77;
+  transition: all 0.2s ease;
+  position: relative;
+  padding-top: 10px;
+}
+.active {
+  border: 1px solid;
+  background: #f44336;
+  color: white;
+  font-size: 32px;
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/components/basic/QuickSearch.vue b/WIDESEA_WMSClient/src/components/basic/QuickSearch.vue
new file mode 100644
index 0000000..185cbf2
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/QuickSearch.vue
@@ -0,0 +1,152 @@
+<template>
+  <div>
+    <el-select
+      style="width: 150px"
+      v-if="['select', 'selectList'].indexOf(singleSearch.type) != -1"
+      v-model="searchFormFields[singleSearch.field]"
+      :filterable="
+        singleSearch.filter || singleSearch.data.length > 10 ? true : false
+      "
+      :placeholder="'璇烽�夋嫨' + singleSearch.title"
+      clearable
+    >
+      <el-option
+        v-for="item in singleSearch.data"
+        :key="item.key"
+        :label="item.value"
+        :value="item.key"
+      >
+      </el-option>
+    </el-select>
+    <div
+      class="date-range"
+      v-else-if="['date', 'datetime'].indexOf(singleSearch.type) != -1"
+    >
+      <el-date-picker
+        style="width: 210px"
+        :clearable="false"
+        unlink-panels
+        v-model="searchFormFields[singleSearch.field]"
+        type="daterange"
+        :value-format="getDateFormat(singleSearch)"
+        :placeholder="singleSearch.title"
+      >
+      </el-date-picker>
+      <i
+        class="el-icon-circle-close"
+        @click="dateRangeClear(singleSearch.field)"
+      ></i>
+    </div>
+    <el-cascader
+      style="width: 210px"
+      clearable
+      v-model="searchFormFields[singleSearch.field]"
+      v-else-if="singleSearch.type == 'cascader'"
+      :options="singleSearch.data"
+      :props="{ checkStrictly: true }"
+    >
+    </el-cascader>
+    <el-input
+      clearable
+      v-else
+      style="width: 150px"
+      size="default"
+      v-model="searchFormFields[singleSearch.field]"
+      :placeholder="singleSearch.title"
+      @keypress="tiggerPress"
+    />
+  </div>
+</template>
+<script>
+export default {
+  props: {
+    singleSearch: {
+      type: Object,
+      default: {},
+    },
+    searchFormFields: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    tiggerPress: {
+      type: Function,
+      default: () => {},
+    },
+  },
+  methods: {
+    compareDate(date1, date2) {
+      if (!date2) {
+        return true;
+      }
+      return (
+        date1.valueOf() <
+        (typeof date2 == "number" ? date2 : new Date(date2).valueOf())
+      );
+    },
+    getDateFormat(item) {
+      //瑙乭ttps://day.js.org/docs/zh-CN/display/format
+      return item.type == "date" ? "YYYY-MM-DD" : "YYYY-MM-DD HH:mm:ss";
+    },
+    getDateOptions(date, item) {
+      if ((!item.min && !item.max) || !date) {
+        return false;
+      }
+      if (item.min && item.min.indexOf(" ") == -1) {
+        //涓嶈缃椂鍒嗙锛屽悗闈細鑷姩鍔犱笂 08:00
+        item.min = item.min + " 00:00:000";
+      }
+      return (
+        this.compareDate(date, item.min) || !this.compareDate(date, item.max)
+      );
+    },
+    dateRangeClear(field) {
+      this.searchFormFields[field]=[undefined,undefined];
+    },
+  },
+  created() {
+    this.singleSearch.dateType = this.singleSearch.type + "range";
+    if (
+      this.singleSearch.type == "date" ||
+      this.singleSearch.type == "datetime"
+    ) {
+      var _dateVal = this.searchFormFields[this.singleSearch.field];
+      if (
+        typeof this.singleSearch.range == "boolean" &&
+        !this.singleSearch.range
+      ) {
+        this.searchFormFields[this.singleSearch.field] = "";
+        this.singleSearch.dateType = this.singleSearch.type;
+        return this.singleSearch.dateType;
+      } else if (!(_dateVal instanceof Array)) {
+        this.searchFormFields[this.singleSearch.field] = ["", ""];
+      } else if (_dateVal.length != 2) {
+        _dateVal.splice(0);
+        _dateVal.push(...["", ""]);
+      }
+    }
+  },
+};
+</script>
+<style lang="less" scoped>
+.date-range{
+  position: relative;
+  > i{
+    display: none;
+    height: 27px;
+    line-height: 27px;
+    right: 1px;
+    top: 3px;
+    font-size: 13px;
+    color: #b4adad;
+    position: absolute;
+    padding: 0 6px 0 3px;
+    background: #ffff;
+    cursor: pointer;
+  }
+}
+.date-range:hover > i{
+  display: inline-block;
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/RouterLoading.vue b/WIDESEA_WMSClient/src/components/basic/RouterLoading.vue
new file mode 100644
index 0000000..134a454
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/RouterLoading.vue
@@ -0,0 +1,105 @@
+<template>
+  <div class="router-loading" style="background: #eeeeee5c;">
+    <div class="spanner">
+      <span></span>
+      <span></span>
+      <span></span>
+      <span></span>
+      <span></span>
+      <span></span>
+      <span></span>
+      <span></span>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  }
+};
+</script>
+<style scoped>
+.router-loading {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  font-size: 100px;
+  text-align: center;
+  padding-top: 200px;
+  color: #808080;
+  z-index: 9999;
+}
+.spanner {
+  width: 100px;
+  height: 100px;
+  position: relative;
+  margin: 0 auto;
+}
+.router-loading span {
+  display: inline-block;
+  width: 20px;
+  height: 20px;
+  border-radius: 50%;
+  background: #66b1ff;
+  position: absolute;
+  animation: r_load 1.04s ease infinite;
+}
+@keyframes r_load {
+  0% {
+    transform: scale(1.2);
+    opacity: 1;
+  }
+  100% {
+    transform: scale(0.3);
+    opacity: 0.5;
+  }
+}
+.router-loading span:nth-child(1) {
+  left: 0;
+  top: 50%;
+  margin-top: -10px;
+  animation-delay: 0.13s;
+}
+.router-loading span:nth-child(2) {
+  left: 14px;
+  top: 14px;
+  animation-delay: 0.26s;
+}
+.router-loading span:nth-child(3) {
+  left: 50%;
+  top: 0;
+  margin-left: -10px;
+  animation-delay: 0.39s;
+}
+.router-loading span:nth-child(4) {
+  top: 14px;
+  right: 14px;
+  animation-delay: 0.52s;
+}
+.router-loading span:nth-child(5) {
+  right: 0;
+  top: 50%;
+  margin-top: -10px;
+  animation-delay: 0.65s;
+}
+.router-loading span:nth-child(6) {
+  right: 14px;
+  bottom: 14px;
+  animation-delay: 0.78s;
+}
+.router-loading span:nth-child(7) {
+  bottom: 0;
+  left: 50%;
+  margin-left: -10px;
+  animation-delay: 0.91s;
+}
+.router-loading span:nth-child(8) {
+  bottom: 14px;
+  left: 14px;
+  animation-delay: 1.04s;
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/components/basic/UploadExcel.vue b/WIDESEA_WMSClient/src/components/basic/UploadExcel.vue
new file mode 100644
index 0000000..230fdad
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/UploadExcel.vue
@@ -0,0 +1,221 @@
+<template>
+  <div class="upload-container">
+    <a :href="template.url" ref="template"></a>
+    <div class="button-group">
+      <el-upload
+        style="float: left"
+        ref="uploadFile"
+        :max-size="maxSize"
+        :on-change="clearMsg"
+        :before-upload="beforeUpload"
+        :action="url"
+      >
+        <el-button size="small"
+          ><i class="el-icon-folder-opened"></i>閫夋嫨鏂囦欢</el-button
+        >
+      </el-upload>
+      <el-button
+        v-if="template.url"
+        style="margin-left: 10px"
+        type="primary"
+        size="small"
+        @click="dowloadTemplate"
+        :loading="loadingStatus"
+      >
+     <i class="el-icon-bottom"></i>
+        涓嬭浇妯℃澘</el-button
+      >
+      <el-button
+        type="success"
+        size="small"
+        @click="upload"
+        :loading="loadingStatus"
+      >
+          <i class="el-icon-top"></i>
+        涓婁紶鏂囦欢</el-button
+      >
+    </div>
+    <div class="alert">
+      <el-alert title="涓婁紶璇存槑" type="warning" :closable="false" show-icon
+        >鍙兘涓婁紶excel鏂囦欢,鏂囦欢澶у皬涓嶈秴杩噞{ maxSize }}M</el-alert
+      >
+    </div>
+
+    <div v-if="file">
+      <h3>鏂囦欢鍒楄〃</h3>
+      <div class="file-info">
+        <span>鏂囦欢鍚嶏細{{ file.name }}</span>
+        <span>澶у皬{{ (file.size / 1024).toFixed(2) }}KB</span>
+      </div>
+    </div>
+    <div v-show="message" class="v-r-message">
+      <h3 class="title">涓婁紶缁撴灉</h3>
+      <div class="text" :class="resultClass" v-html="message"></div>
+    </div>
+    <slot></slot>
+  </div>
+</template>
+<script>
+//鐩墠鍙敮鎸佸崟涓狤xcel涓婁紶锛屽叾浠栧姛鑳藉紑鍙戜腑...
+export default {
+  components: {},
+  props: {
+    url: {
+      type: String,
+      default: ''
+    },
+    template: {
+      //涓嬭浇妯℃澘閰嶇疆
+      type: Object,
+      default: () => {
+        return {
+          url: '', //妯℃澘涓嬭浇璺緞锛屽鏋滄病鏈夋ā鏉胯矾寰勶紝鍒欎笉鏄剧ず涓嬭浇妯℃澘鍔熻兘
+          fileName: '鏈畾涔夋枃浠跺悕' //涓嬭浇妯℃澘鐨勬枃浠跺悕
+        };
+      }
+    },
+    importExcelBefore: {
+      type: Function,
+      default: (file) => {
+        return true;
+      }
+    }
+  },
+  data() {
+    return {
+      maxSize: 100,
+      model: true,
+      file: null,
+      loadingStatus: false,
+      message: '',
+      resultClass: ''
+    };
+  },
+  methods: {
+    clearMsg() {
+      this.message = '';
+    },
+    reset() {
+      this.file = null;
+      this.message = '';
+      this.resultClass = '';
+    },
+    getFileType() {
+      let fileName =
+        this.file.name
+          .split('.')
+          .pop()
+          .toLocaleLowerCase() || '';
+      if (['numbers', 'csv', 'xls', 'xlsx'].indexOf(fileName) == -1) {
+        this.$Message.error('鍙兘閫夋嫨excel鏂囦欢');
+        return false;
+      }
+      return true;
+    },
+    beforeUpload(file) {
+      this.file = file;
+      if (!this.getFileType()) {
+        return false;
+      }
+      return false;
+    },
+    upload() {
+      let _url = this.url;
+      if (!_url) {
+        return this.$Message.error('娌℃湁閰嶇疆濂経rl');
+      }
+
+      if (!this.file) {
+        return this.$Message.error('璇烽�夋嫨鏂囦欢');
+      }
+      var formData = new FormData();
+      formData.append('fileInput', this.file);
+      if (!this.importExcelBefore(formData)) {
+        return;
+      }
+      this.loadingStatus = true;
+      this.http.post(_url, formData).then(
+        (x) => {
+          // this.$refs.uploadFile.clearFiles();
+          this.loadingStatus = false;
+          this.file = null;
+          if (x.status) {
+            this.$emit('importExcelAfter', x);
+          }
+
+          this.message = x.message;
+          this.resultClass = x.status ? 'v-r-success' : 'v-r-error';
+        },
+        (error) => {
+          this.loadingStatus = false;
+        }
+      );
+    },
+    dowloadTemplate() {
+      let url = this.template.url;
+      let xmlResquest = new XMLHttpRequest();
+      xmlResquest.open('GET', url, true);
+      xmlResquest.setRequestHeader('Content-type', 'application/json');
+      xmlResquest.setRequestHeader(
+        'Authorization',
+        this.$store.getters.getToken()
+      );
+      let fileName = this.template.fileName + '.xlsx';
+      let elink = this.$refs.template;
+      xmlResquest.responseType = 'blob';
+      let $_vue = this;
+      this.loadingStatus = true;
+      xmlResquest.onload = function(oEvent) {
+        $_vue.loadingStatus = false;
+        if (xmlResquest.response.type == 'application/json') {
+          return $_vue.message.error('鏈壘鍒颁笅杞芥枃浠�');
+        }
+        let content = xmlResquest.response;
+        elink.download = fileName;
+        let blob = new Blob([content]);
+        elink.href = URL.createObjectURL(blob);
+        elink.click();
+      };
+      xmlResquest.send();
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.upload-container {
+  min-height: 270px !important;
+  display: inline-block;
+  width: 100%;
+  padding: 10px;
+  border: 1px dashed #989898;
+  min-height: 250px;
+  border-radius: 5px;
+  .alert {
+    margin-top: 12px;
+  }
+  .el-button-group > * {
+    display: flex;
+  }
+  h3 {
+    margin: 9px 0px;
+  }
+  .file-info > span {
+    margin-right: 20px;
+  }
+  .v-r-message {
+    margin-top: 10px;
+    .title {
+      margin-bottom: 2px;
+    }
+    > .text {
+      font-size: 13px;
+    }
+    .v-r-success {
+      color: #02b702;
+    }
+    .v-r-error {
+      color: #dc0909;
+    }
+  }
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/components/basic/ViewGrid/AuditHis.vue b/WIDESEA_WMSClient/src/components/basic/ViewGrid/AuditHis.vue
new file mode 100644
index 0000000..d1fcb48
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/ViewGrid/AuditHis.vue
@@ -0,0 +1,46 @@
+<template>
+  <vol-table
+    :tableData="tableData"
+    :columns="columns"
+    :height="411"
+    :pagination-hide="true"
+    :load-key="false"
+    :text-inline="false"
+    :ck="false"
+  ></vol-table>
+</template>
+<script>
+import VolTable from '@/components/basic/VolTable.vue';
+import {
+  defineComponent,
+  ref,
+  reactive,
+  toRefs,
+  getCurrentInstance
+} from 'vue';
+export default defineComponent({
+  components: {
+    VolTable
+  },
+  props: {
+    tableData: {
+      type: Array,
+      default: () => {
+        return [];
+      }
+    }
+  },
+  setup() {
+    const columns = reactive([
+      { title: '鑺傜偣', field: 'stepName' },
+      { title: '瀹℃壒浜�', field: 'auditor' },
+      { title: '瀹℃壒缁撴灉', field: 'auditStatus' },
+      { title: '瀹℃壒鏃堕棿', field: 'auditDate',width:150 },
+      { title: '澶囨敞', field: 'remark' }
+    ]);
+    return {
+        columns
+    }
+  }
+});
+</script>
diff --git a/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGrid.less b/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGrid.less
new file mode 100644
index 0000000..adc13c3
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGrid.less
@@ -0,0 +1,178 @@
+.view-container {
+  // padding: 15px;
+  background: white;
+  .grid-search {
+    padding-top: 15px;
+    //padding: 15px 15px 0 15px;
+  }
+  .grid-container,
+  .grid-body {
+    padding: 0 15px;
+  }
+  .view-header {
+    padding-left: 15px;
+    padding-right: 15px;
+  }
+  .fs-line {
+    height: 9px;
+    background: #f1f1f1;
+    margin-top: -10px;
+    margin-bottom: 10px;
+  }
+}
+.view-header {
+  height: 45px;
+  position: relative;
+  padding-bottom: 11px;
+  display: flex;
+  .search-line {
+    min-width: 150px;
+  }
+  .search-line > div {
+    margin-left: 5px;
+    margin-right: 10px;
+  }
+  .search-line > div > div {
+    width: 200px;
+    text-align: left;
+  }
+  .search-line > div:first-child {
+    flex: 1;
+  }
+  .search-line > div .ivu-select-dropdown {
+    max-height: 300px;
+  }
+  .btn-group {
+    white-space: nowrap;
+    button {
+      margin-left: 10px;
+      // padding: 5px 16px;
+    }
+  }
+  .btn-group .ivu-dropdown-item {
+    text-align: left !important;
+  }
+  .btn-group .ivu-dropdown-item:not(:last-child) {
+    border-bottom: 1px dotted #eee;
+  }
+  .desc-text {
+    margin-top: 5px;
+    font-weight: bold;
+    margin-bottom: 3px;
+    font-size: 14px;
+    color: #313131;
+    white-space: nowrap;
+    border-bottom: 2px solid #646565;
+    i {
+      font-size: 16px;
+      position: relative;
+      top: 1px;
+      margin-right: 2px;
+    }
+  }
+  .search-box {
+    background: #fefefe;
+    margin-top: 45px;
+    border: 1px solid #ececec;
+    position: absolute;
+    z-index: 999;
+    left: 0;
+    right: 0;
+    padding: 25px 40px;
+    padding-bottom: 0;
+    box-shadow: 0px 7px 18px -12px #bdc0bb;
+  }
+  .notice {
+    font-size: 13px;
+    color: #6b6b6b;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    position: relative;
+    top: 12px;
+    flex: 1;
+    left: 10px;
+    margin-right: 20px;
+  }
+}
+
+.table-info-cell-title {
+  background-color: #f5f5f5 !important;
+}
+.box-com {
+  > div.item {
+    // margin-bottom: 10px;
+    padding: 15px 17px 0 8px;
+    margin-bottom: 12px;
+    background: white;
+  }
+  > div.form-item {
+    padding: 19px 16px 0px 5px;
+    //box-shadow: 0 1px 7px rgb(199, 199, 199);
+  }
+  > div.table-item {
+    padding: 0 10px;
+    border-top: 1.5px solid #eaeaea;
+  }
+  .v-text {
+    line-height: 27px;
+  }
+  .form-text {
+    position: relative;
+    border-bottom: 1px solid #eee;
+    font-size: 14px;
+    margin-bottom: 14px;
+  }
+}
+
+.form-closex {
+  text-align: right;
+  padding-bottom: 24px;
+}
+.form-closex button {
+  margin-left: 10px;
+  padding: 4px 13px;
+}
+.toolbar {
+  padding: 3px 0px;
+  width: 100%;
+  display: flex;
+  .title {
+    line-height: 29px;
+    border-bottom: none;
+    font-size: 13px;
+    font-weight: bolder;
+    margin-bottom: 0;
+    color: #5d5c5c;
+    .icon {
+      color: #009688;
+      font-size: 18px;
+    }
+
+    i {
+      line-height: 29px;
+      border-bottom: none;
+      font-weight: bolder;
+      margin-bottom: 0;
+      color: #5d5c5c;
+      position: relative;
+      margin-top: -4px;
+      font-size: 14px;
+    }
+  }
+  .btns {
+    line-height: 28px;
+    flex: 1;
+    text-align: right;
+    button {
+      // border: none;
+      // margin-left:15px;
+      border: 0px;
+      padding: 0px 9px;
+      color: #292929;
+    }
+    button:hover{
+      color: #0089f6;
+    }
+  }
+}
diff --git a/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGrid.vue b/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGrid.vue
new file mode 100644
index 0000000..e4bbcd3
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGrid.vue
@@ -0,0 +1,806 @@
+<template>
+  <div class="layout-container">
+    <a :href="exportHref" ref="export"></a>
+    <!--寮�鍚噿鍔犺浇2020.12.06 -->
+    <vol-box
+      :on-model-close="closeCustomModel"
+      v-model="viewModel"
+      :height="520"
+      :width="500"
+      :padding="0"
+      :lazy="true"
+      title="璁剧疆"
+    >
+      <template #content>
+        <custom-column :view-columns="viewColumns"></custom-column>
+      </template>
+      <template #footer>
+        <div style="text-align: center">
+          <el-button type="default" size="small" @click="closeCustomModel"
+            ><i class="el-icon-close"></i>鍙栨秷</el-button
+          >
+          <el-button type="success" size="small" @click="initViewColumns(true)"
+            ><i class="el-icon-refresh"></i>閲嶇疆</el-button
+          >
+          <el-button type="primary" size="small" @click="saveColumnConfig"
+            ><i class="el-icon-check"></i>纭畾</el-button
+          >
+        </div>
+      </template>
+    </vol-box>
+    <ViewGridAudit @auditClick="saveAudit" :option="table" ref="audit">
+
+    </ViewGridAudit>
+    <!--寮�鍚噿鍔犺浇2020.12.06 -->
+    <!--瀹℃牳(寮傛鐐瑰嚮鎸夐挳鏃舵墠鍔犺浇寰呭畬)-->
+    <!-- <vol-box
+      v-model="auditParam.model"
+      :height="auditParam.height"
+      :width="750"
+      :lazy="true"
+      :padding="0"
+      title="瀹℃壒"
+    >
+      <template #content>
+        <el-tabs type="card">
+          <el-tab-pane label="褰撳墠瀹℃壒">
+            <div class="v-steps">
+              <div
+                :class="{ 'step-current': item.isCurrent }"
+                class="step-item"
+                v-for="(item, index) in workFlowSteps"
+                :key="index"
+              >
+                <div class="left-item">
+                  <div>瀹℃壒鏃堕棿</div>
+                  <div class="left-date">{{ item.auditDate || '寰呭鎵�' }}</div>
+                </div>
+                <div class="right-item">
+                  <div class="step-line"></div>
+                  <i class="step-circle"></i>
+                  <div class="step-title">
+                    {{ item.stepName }}
+                  </div>
+                  <div class="step-text">瀹℃壒浜猴細{{ item.auditor }}</div>
+                  <div class="step-text">
+                    鐘� 鎬侊細 {{ getAuditStatus(item.auditStatus) }}
+                  </div>
+                  <div class="step-text">澶� 娉細 {{ item.remark || '-' }}</div>
+                </div>
+              </div>
+              <div
+                :style="{
+                  'margin-top': workFlowSteps.length ? '20px' : '-17px'
+                }"
+                class="audit-content"
+                v-show="auditParam.showAction"
+              >
+                <div style="margin-bottom:10px;">
+                  瀹℃壒锛�
+                  <el-radio-group
+                    style="margin-left:15px"
+                    v-model="auditParam.value"
+                  >
+                    <el-radio
+                      v-for="item in auditParam.data"
+                      :key="item.value"
+                      :label="item.value"
+                    >
+                      <span>{{ item.text }}</span>
+                    </el-radio>
+                  </el-radio-group>
+                </div>
+
+                <el-input
+                  v-model="auditParam.reason"
+                  type="textarea"
+                  style="margin-right: 13px;"
+                  :autosize="{ minRows: 4, maxRows: 10 }"
+                  placeholder="璇疯緭鍏ュ娉�..."
+                ></el-input>
+              </div>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane v-if="workFlowSteps.length" label="瀹℃壒璁板綍">
+            <audit-his :table-data="auditParam.auditHis"></audit-his>
+          </el-tab-pane>
+        </el-tabs>
+      </template>
+      <template #footer>
+        <div style="text-align: center;">
+          <el-button size="small" @click="auditParam.model = false"
+            ><i class="el-icon-close"></i>鍏抽棴</el-button
+          >
+          <el-button
+            type="primary"
+            v-show="auditParam.showAction"
+            size="small"
+            @click="saveAudit"
+            ><i class="el-icon-check"></i>瀹℃牳</el-button
+          >
+        </div>
+      </template>
+    </vol-box> -->
+
+    <!--瀵煎叆excel鍔熻兘-->
+    <!--2020.10.31娣诲姞瀵煎叆鍓嶇殑鏂规硶-->
+    <!--寮�鍚噿鍔犺浇2020.12.06 -->
+    <!-- 2022.01.08澧炲姞鏄庣粏琛ㄥ鍏ュ垽鏂� -->
+    <vol-box
+      v-if="upload.url"
+      v-model="upload.excel"
+      :height="350"
+      :width="600"
+      :lazy="true"
+      :title="(boxModel ? detailOptions.cnName : table.cnName) + '-瀵煎叆'"
+    >
+      <UploadExcel
+        ref="upload_excel"
+        @importExcelAfter="importExcelAfter"
+        :importExcelBefore="importExcelBefore"
+        :url="upload.url"
+        :template="upload.template"
+      ></UploadExcel>
+    </vol-box>
+    <!--澶撮儴鑷畾涔夌粍浠�-->
+    <component
+      :is="dynamicComponent.gridHeader"
+      ref="gridHeader"
+      @parentCall="parentCall"
+    ></component>
+    <!--涓荤晫闈㈡煡璇笌table琛ㄥ崟甯冨眬-->
+    <div class="view-container">
+      <!-- 2020.09.11澧炲姞鍥哄畾鏌ヨ琛ㄥ崟 -->
+      <!--鏌ヨ鏉′欢-->
+      <div class="grid-search">
+        <div
+          :class="[fiexdSearchForm ? 'fiexd-search-box' : 'search-box']"
+          v-show="searchBoxShow"
+        >
+          <!-- 2020.09.13澧炲姞formFileds鎷煎啓閿欒鍏煎澶勭悊 -->
+          <vol-form
+            ref="searchForm"
+            :load-key="false"
+            style="padding: 0 15px"
+            :label-width="labelWidth"
+            :formRules="searchFormOptions"
+            :formFields="searchFormFields"
+            :select2Count="select2Count"
+          >
+            <template #footer>
+              <div v-if="!fiexdSearchForm" class="form-closex">
+                <el-button size="small" type="primary" plain @click="search">
+                  <i class="el-icon-search" />鏌ヨ
+                </el-button>
+
+                <el-button
+                  size="small"
+                  type="success"
+                  plain
+                  @click="resetSearch"
+                >
+                  <i class="el-icon-refresh-right" />閲嶇疆
+                </el-button>
+                <el-button
+                  size="small"
+                  plain
+                  @click="searchBoxShow = !searchBoxShow"
+                >
+                  <i class="el-icon-switch-button" />鍏抽棴
+                </el-button>
+              </div>
+            </template>
+          </vol-form>
+          <div v-if="fiexdSearchForm" class="fs-line"></div>
+        </div>
+        <div class="view-header">
+          <div class="desc-text">
+            <i class="el-icon-s-grid" />
+            <span>{{ table.cnName }}</span>
+          </div>
+          <div class="notice">
+            <a class="text" :title="extend.text">{{ extend.text }}</a>
+          </div>
+          <!--蹇�熸煡璇㈠瓧娈�-->
+          <div class="search-line" v-if="!fiexdSearchForm">
+            <QuickSearch
+              v-if="singleSearch"
+              :singleSearch="singleSearch"
+              :searchFormFields="searchFormFields"
+              :tiggerPress="quickSearchKeyPress"
+            ></QuickSearch>
+          </div>
+          <!--鎿嶄綔鎸夐挳缁�-->
+          <!-- 2020.11.29澧炲姞鏌ヨ鐣岄潰hidden灞炴�� -->
+
+          <div class="btn-group">
+            <template
+              :key="bIndex"
+              v-for="(btn, bIndex) in buttons.slice(0, maxBtnLength)"
+            >
+              <el-dropdown size="small" v-if="btn.data" :split-button="false">
+                <el-button
+                  :color="btn.color"
+                  :dark="false"
+                  :type="btn.type"
+                  :plain="btn.plain"
+                >
+                  {{ btn.name }}<i class="el-icon-arrow-down el-icon--right"></i
+                ></el-button>
+                <template #dropdown>
+                  <el-dropdown-menu>
+                    <el-dropdown-item
+                      v-for="(item, index) in btn.data"
+                      :key="index"
+                    >
+                      <div @click="onClick(item.onClick)">
+                        <i :class="item.icon"></i>
+                        {{ item.name }}
+                      </div>
+                    </el-dropdown-item>
+                  </el-dropdown-menu>
+                </template>
+              </el-dropdown>
+              <el-button
+                v-else
+                :type="btn.type"
+                size="small"
+                :color="btn.color"
+                :dark="false"
+                :class="btn.class"
+                :plain="btn.plain"
+                v-show="!btn.hidden"
+                @click="onClick(btn.onClick)"
+              >
+                <i :class="btn.icon"></i> {{ btn.name }}
+              </el-button>
+            </template>
+            <!-- 璁剧疆鍒楁寜閽� -->
+            <el-button
+              type="default"
+              style="padding: 0px 10px"
+              size="small"
+              :plain="true"
+              v-if="showCustom"
+              @click="showCustomModel"
+            >
+              <i class="el-icon-s-grid"></i>
+            </el-button>
+            <el-dropdown
+              size="small"
+              @click="changeDropdown"
+              v-if="buttons.length > maxBtnLength"
+            >
+              <el-button type="primary" plain size="small">
+                鏇村<i class="el-icon-arrow-down el-icon--right"></i>
+              </el-button>
+              <template #dropdown>
+                <el-dropdown-menu>
+                  <el-dropdown-item
+                    @click="changeDropdown(item.name)"
+                    :name="item.name"
+                    v-show="!item.hidden"
+                    v-for="(item, dIndex) in buttons.slice(
+                      maxBtnLength,
+                      buttons.length
+                    )"
+                    :key="dIndex"
+                  >
+                    <i :class="item.icon"></i> {{ item.name }}</el-dropdown-item
+                  >
+                </el-dropdown-menu>
+              </template>
+            </el-dropdown>
+          </div>
+        </div>
+
+        <!-- 鍒嗗壊浣嶇疆 -->
+        <vol-box
+          v-if="boxInit"
+          v-model="boxModel"
+          :title="boxOptions.title"
+          :width="boxOptions.width"
+          :height="boxOptions.height"
+          :modal="boxOptions.modal"
+          :draggable="boxOptions.draggable"
+          :padding="0"
+          :on-model-close="onGridModelClose"
+          @fullscreen="fullscreen"
+        >
+          <!--鏄庣粏澶撮儴鑷畾涔夌粍浠�-->
+          <template #content>
+            <div class="box-com">
+              <component
+                :is="dynamicComponent.modelHeader"
+                ref="modelHeader"
+                @parentCall="parentCall"
+              ></component>
+              <!-- <div v-show="isBoxAudit" class="flow-step">
+                <div v-for="(item, index) in workFlowSteps" :key="index">
+                  {{ item.stepName }}
+                </div>
+              </div> -->
+              <div class="item form-item">
+                <vol-form
+                  ref="form"
+                  :editor="editor"
+                  :load-key="false"
+                  :label-width="boxOptions.labelWidth"
+                  :formRules="editFormOptions"
+                  :formFields="editFormFields"
+                  :select2Count="select2Count"
+                ></vol-form>
+              </div>
+              <!--鏄庣粏body鑷畾涔夌粍浠�-->
+              <component
+                :is="dynamicComponent.modelBody"
+                ref="modelBody"
+                @parentCall="parentCall"
+              ></component>
+              <div
+                v-show="hasDetail"
+                v-if="detail.columns && detail.columns.length > 0"
+                class="grid-detail table-item item"
+              >
+                <div class="toolbar">
+                  <div class="title form-text">
+                    <span>
+                      <i class="el-icon-menu" />
+                      {{ detail.cnName }}
+                    </span>
+                  </div>
+                  <!--鏄庣粏琛ㄦ牸鎸夐挳-->
+                  <div class="btns" v-show="!isBoxAudit">
+                    <el-button
+                      v-for="(btn, bIndex) in detailOptions.buttons"
+                      :key="bIndex"
+                      :plain="btn.plain"
+                      v-show="!(typeof btn.hidden == 'boolean' && btn.hidden)"
+                      @click="onClick(btn.onClick)"
+                      size="small"
+                      ><i :class="btn.icon"></i>{{ btn.name }}</el-button
+                    >
+                  </div>
+                </div>
+                <vol-table
+                  ref="detail"
+                  @loadBefore="loadInternalDetailTableBefore"
+                  @loadAfter="loadDetailTableAfter"
+                  @rowChange="detailRowOnChange"
+                  @rowClick="detailRowOnClick"
+                  :url="detailOptions.url"
+                  :load-key="false"
+                  :index="true"
+                  :tableData="detailOptions.data"
+                  :columns="detailOptions.columns"
+                  :pagination="detailOptions.pagination"
+                  :height="detailOptions.height"
+                  :single="detailOptions.single"
+                  :pagination-hide="false"
+                  :defaultLoadPage="detailOptions.load"
+                  :beginEdit="detailOptions.beginEdit"
+                  :endEditBefore="detailOptions.endEditBefore"
+                  :endEditAfter="detailOptions.endEditAfter"
+                  :summary="detailOptions.summary"
+                  :click-edit="detailOptions.clickEdit"
+                  :double-edit="detailOptions.doubleEdit"
+                  :column-index="detailOptions.columnIndex"
+                  :ck="detailOptions.ck"
+                  :text-inline="detailOptions.textInline"
+                  :select2Count="select2Count"
+                  :selectable="detailSelectable"
+                ></vol-table>
+              </div>
+              <!--鏄庣粏footer鑷畾涔夌粍浠�-->
+              <component
+                :is="dynamicComponent.modelFooter"
+                ref="modelFooter"
+                @parentCall="parentCall"
+              ></component>
+            </div>
+          </template>
+          <template #footer>
+            <div style="text-align: center;" v-show="isBoxAudit">
+              <el-button
+                size="small"
+                type="primary"
+                plain
+                @click="onGridModelClose(false)"
+              >
+                <i class="el-icon-close">鍏抽棴</i>
+              </el-button>
+              <el-button
+                size="small"
+                type="primary"
+                v-show="auditParam.showViewButton"
+                @click="auditParam.model = true"
+              >
+                <i class="el-icon-view">瀹℃壒</i>
+              </el-button>
+            </div>
+            <div v-show="!isBoxAudit">
+              <el-button
+                v-for="(btn, bIndex) in boxButtons"
+                :key="bIndex"
+                :type="btn.type"
+                size="small"
+                :plain="btn.plain"
+                v-show="!(typeof btn.hidden == 'boolean' && btn.hidden)"
+                :disabled="btn.hasOwnProperty('disabled') && !!btn.disabled"
+                @click="onClick(btn.onClick)"
+              >
+                <i :class="btn.icon"> {{ btn.name }}</i>
+              </el-button>
+              <el-button
+                size="small"
+                type="primary"
+                plain
+                @click="onGridModelClose(false)"
+              >
+                <i class="el-icon-close">鍏抽棴</i>
+              </el-button>
+            </div>
+          </template>
+        </vol-box>
+      </div>
+      <!--body鑷畾涔夌粍浠�-->
+      <div class="grid-body">
+        <component
+          :is="dynamicComponent.gridBody"
+          ref="gridBody"
+          @parentCall="parentCall"
+        ></component>
+      </div>
+
+      <!--table琛ㄦ牸-->
+      <div class="grid-container">
+        <!-- 2021.05.02澧炲姞鏍戝舰缁撴瀯 rowKey -->
+        <vol-table
+          ref="table"
+          :single="single"
+          :rowKey="rowKey"
+          :loadTreeChildren="loadTreeTableChildren"
+          @loadBefore="loadTableBefore"
+          @loadAfter="loadTableAfter"
+          @rowChange="rowOnChange"
+          @rowClick="rowOnClick"
+          @rowDbClick="rowOnDbClick"
+          :tableData="[]"
+          :linkView="linkData"
+          :columns="columns"
+          :pagination="pagination"
+          :height="height"
+          :max-height="tableMaxHeight"
+          :pagination-hide="false"
+          :url="url"
+          :load-key="false"
+          :defaultLoadPage="load"
+          :summary="summary"
+          :double-edit="doubleEdit"
+          :index="doubleEdit"
+          :beginEdit="tableBeginEdit"
+          :endEditBefore="tableEndEditBefore"
+          :click-edit="true"
+          :column-index="columnIndex"
+          :text-inline="textInline"
+          :ck="ck"
+          :select2Count="select2Count"
+          :selectable="selectable"
+        ></vol-table>
+      </div>
+    </div>
+
+    <!--footer鑷畾涔夌粍浠�-->
+    <component
+      :is="dynamicComponent.gridFooter"
+      ref="gridFooter"
+      @parentCall="parentCall"
+    ></component>
+  </div>
+</template>
+
+<script>
+const _const = {
+  EDIT: 'update',
+  ADD: 'Add',
+  VIEW: 'view',
+  PAGE: 'getPageData',
+  AUDIT: 'audit',
+  DEL: 'del',
+  EXPORT: 'Export', //瀵煎嚭鎿嶄綔杩斿洖鍔犲瘑鍚庣殑璺緞
+  DOWNLOAD: 'DownLoadFile', //瀵煎嚭鏂囦欢
+  DOWNLOADTEMPLATE: 'DownLoadTemplate', //涓嬭浇瀵煎叆妯℃澘
+  IMPORT: 'Import', //瀵煎叆(瀵煎叆琛ㄧ殑Excel鍔熻兘)
+  UPLOAD: 'Upload' //涓婁紶鏂囦欢
+};
+import Empty from '@/components/basic/Empty.vue';
+
+import VolTable from '@/components/basic/VolTable.vue';
+import VolForm from '@/components/basic/VolForm.vue';
+import {
+  defineAsyncComponent,
+  defineComponent,
+  ref,
+  shallowRef,
+  toRaw
+} from 'vue';
+var vueParam = {
+  components: {
+    'vol-form': VolForm,
+    'vol-table': VolTable,
+    VolBox: defineAsyncComponent(() => import('@/components/basic/VolBox.vue')),
+    QuickSearch: defineAsyncComponent(() =>
+      import('@/components/basic/QuickSearch.vue')
+    ),
+    Audit: defineAsyncComponent(() => import('@/components/basic/Audit.vue')),
+    UploadExcel: defineAsyncComponent(() =>
+      import('@/components/basic/UploadExcel.vue')
+    ),
+    'custom-column': defineAsyncComponent(() =>
+      import('./ViewGridCustomColumn.vue')
+    ),
+    'vol-header': defineAsyncComponent(() => import('./../VolHeader.vue')),
+     ViewGridAudit: defineAsyncComponent(() => import('./ViewGridAudit.vue'))
+  },
+  props: {},
+  setup(props) {
+    //2021.07.17璋冩暣鎵╁睍缁勪欢缁勪欢
+    const dynamicCom = {
+      gridHeader: Empty,
+      gridBody: Empty,
+      gridFooter: Empty,
+      modelHeader: Empty,
+      modelBody: Empty,
+      modelFooter: Empty
+    };
+    //鍚堝苟鎵╁睍缁勪欢
+    if (props.extend.components) {
+      for (const key in props.extend.components) {
+        if (props.extend.components[key]) {
+          dynamicCom[key] = toRaw(props.extend.components[key]);
+        }
+      }
+    }
+    const dynamicComponent = shallowRef(dynamicCom);
+    return { dynamicComponent };
+  },
+  data() {
+    return {
+      isBoxAudit: false,
+      formFieldsType: [],
+      workFlowSteps: [],
+      //鏍戝舰缁撴瀯鐨勪富閿瓧娈碉紝濡傛灉璁剧疆鍊奸粯璁や細寮�鍚爲褰able锛涙敞鎰弐owKey瀛楁鐨勫�煎繀椤绘槸鍞竴锛�2021.05.02锛�
+      rowKey: undefined,
+      fiexdSearchForm: false, //2020.09.011鏄惁鍥哄畾鏌ヨ琛ㄥ崟锛宼rue鏌ヨ琛ㄥ崟灏嗗浐瀹氭樉绀哄湪琛ㄥ崟鐨勬渶涓婇潰
+      _inited: false,
+      doubleEdit: false, //2021.03.19鏄惁寮�鍚煡璇㈢晫闈㈣〃鏍煎弻鍑荤紪杈�
+      single: false, //琛ㄦ槸鍚﹀崟閫�
+      const: _const, //澧炲垹鏀规煡瀵煎叆瀵煎嚭绛夊搴旂殑action
+      boxInit: false, //鏂板缓鎴栫紪杈戠殑寮瑰嚭妗嗗垵鍖栫姸鎬侊紝榛樿涓嶅仛鍒濆鍖栵紝鐐瑰嚮鏂板缓鎴栫紪杈戞墠鍒濆鍖栧脊鍑烘
+      searchBoxShow: false, //楂樼骇鏌ヨ(鐣岄潰鏌ヨ鍚庣殑涓嬫媺妗嗙偣鍑昏Е鍙�)
+      singleSearch: {}, //蹇�熸煡璇㈠瓧娈�
+      exportHref: '',
+      currentAction: _const.ADD, //褰撴柊寤烘垨缂栬緫鏃讹紝璁板綍褰撳墠鐨勭姸鎬�:濡傚綋鍓嶆搷浣滄槸鏂板缓
+      currentRow: {}, //褰撳墠缂栬緫鎴栨煡鐪嬫暟鎹殑琛�
+      closable: false,
+      boxModel: false, //寮瑰嚭鏂板缓銆佺紪杈戞
+      width: 700, //寮瑰嚭妗嗘煡鐪嬭〃鏁版嵁缁撴瀯
+      labelWidth: 100, //楂樼骇鏌ヨ鐨勬爣绛惧搴�
+      viewModel: false, //鏌ョ湅琛ㄧ粨鏋勭殑寮瑰嚭妗�
+      viewColumns: [], //鏌ョ湅琛ㄧ粨鏋勭殑鍒楁暟鎹�
+      viewColumnsClone: [],
+      showCustom: true, //鏄惁鏄剧ず鑷畾涔夐厤缃垪鎸夐挳2022.05.27
+      // viewData: [], //鏌ョ湅琛ㄧ粨鏋勪俊鎭�
+      maxBtnLength: 8, //鐣岄潰鎸夐挳鏈�澶氭樉绀虹殑涓暟锛岃秴杩囩殑鏁伴噺閮芥樉绀哄湪鏇村涓�
+      buttons: [], //鏌ヨ鐣岄潰鎸夐挳  濡傞渶瑕佸叾浠栨搷浣滄寜閽紝鍙湪琛ㄥ搴旂殑.js涓坊鍔�(濡�:Sys_User.js涓璪uttons娣诲姞鍏朵粬鎸夐挳)
+      splitButtons: [],
+      uploadfiled: [], //涓婁紶鏂囦欢鍥剧墖鐨勫瓧娈�
+      boxButtons: [], //寮瑰嚭妗嗘寜閽� 濡傞渶瑕佸叾浠栨搷浣滄寜閽紝鍙湪琛ㄥ搴旂殑.js涓坊鍔�
+      dicKeys: [], //褰撳墠鐣岄潰鎵�鏈夌殑涓嬫媺妗嗗瓧鍏哥紪鍙峰強鏁版嵁婧�
+      hasKeyField: [], //鏈夊瓧鍏告暟鎹簮鐨勫瓧娈�
+      keyValueType: { _dinit: false },
+      url: '', //鐣岄潰琛ㄦ煡璇㈢殑鏁版嵁婧愮殑url
+      hasDetail: false, //鏄惁鏈変粠琛�(鏄庣粏)琛ㄦ牸鏁版嵁
+      initActivated: false,
+      load: true, //鏄惁榛樿鍔犺浇琛ㄦ暟鎹�
+      activatedLoad: false, //椤甸潰瑙﹀彂actived鏃舵槸鍚﹀埛鏂伴〉闈㈡暟鎹�
+      summary: false, //鏌ヨ鐣岄潰table鏄惁鏄剧ず鍚堣
+      //闇�瑕佷粠杩滅▼缁戝畾鏁版嵁婧愮殑瀛楀吀缂栧彿,濡傛灉瀛楀吀鏁版嵁婧愮殑鏌ヨ缁撴灉杈冨锛岃鍦╫nInit涓皢瀛楀吀缂栧彿娣诲姞杩涙潵
+      //鍙鑷畾sql鏈夋晥
+      remoteKeys: [],
+      columnIndex: true, //2020.11.01鏄惁鏄剧ず琛屽彿
+      ck: true, //2020.11.01鏄惁鏄剧ずcheckbox
+      continueAdd: false, //2021.04.11鏂板缓鏃舵槸鍚﹀彲浠ヨ繛缁柊寤烘搷浣�
+      continueAddName: '淇濆瓨鍚庣户缁坊鍔�', //2021.04.11鎸夐挳鍚嶇О
+      // detailUrl: "",
+      detailOptions: {
+        //寮瑰嚭妗嗕粠琛�(鏄庣粏)瀵硅薄
+        //浠庤〃閰嶇疆
+        buttons: [], //寮瑰嚭妗嗕粠琛ㄨ〃鏍兼搷浣滄寜閽�,鐩墠鏈夊垹闄よ锛屾坊鍔犺锛屽埛鏂版搷浣滐紝濡傞渶瑕佸叾浠栨搷浣滄寜閽紝鍙湪琛ㄥ搴旂殑.js涓坊鍔�
+        cnName: '', //浠庤〃鍚嶇О
+        key: '', //浠庤〃涓婚敭鍚�
+        data: [], //鏁版嵁婧�
+        columns: [], //浠庤〃鍒椾俊鎭�
+        edit: true, //鏄庣粏鏄惁鍙互缂栬緫
+        single: false, //鏄庣粏琛ㄦ槸鍚﹀崟閫�
+        load: false, //
+        delKeys: [], //褰撶紪杈戞椂鍒犻櫎褰撳墠鏄庣粏鐨勮涓婚敭鍊�
+        url: '', //浠庤〃鍔犺浇鏁版嵁鐨剈rl
+        pagination: { total: 0, size: 100, sortName: '' }, //浠庤〃鍒嗛〉閰嶇疆鏁版嵁
+        height: 0, //榛樿浠庤〃楂樺害
+        textInline: true, //鏄庣粏琛ㄨ鍐呭鏄剧ず鍦ㄤ竴琛屼笂锛屽鏋滈渶瑕佹崲琛屾樉绀猴紝璇疯缃负false
+        doubleEdit: true, //浣跨敤鍙屽嚮缂栬緫
+        clickEdit: false, //鏄惁寮�鍚偣鍑诲崟鍏冩牸缂栬緫锛岀偣鍑诲叾浠栬鏃剁粨鏉熺紪杈�
+        currentReadonly: false, //褰撳墠鐢ㄦ埛娌℃湁缂栬緫鎴栨柊寤烘潈闄愭椂锛岃〃鍗曞彧璇�(鍙敤浜庡垽鏂敤鎴锋槸鍚︽湁缂栬緫鎴栨柊寤烘潈闄�)
+        //寮�鍚紪杈戞椂
+        beginEdit: (row, column, index) => {
+          return true;
+        },
+        //缁撴潫缂栬緫鍓�
+        endEditBefore: (row, column, index) => {
+          return true;
+        },
+        //缁撴潫缂栬緫鍚�
+        endEditAfter: (row, column, index) => {
+          return true;
+        },
+        columnIndex: false, //2020.11.01鏄庣粏鏄惁鏄剧ず琛屽彿
+        ck: true //2020.11.01鏄庣粏鏄惁鏄剧ずcheckbox
+      },
+      auditParam: {
+        //瀹℃牳瀵硅薄
+        rows: 0, //褰撳墠閫変腑瀹℃牳鐨勮鏁�
+        model: false, //瀹℃牳寮瑰嚭妗�
+        value: -1, //瀹℃牳缁撴灉
+        status: -1,
+        reason: '', //瀹℃牳鍘熷洜
+        height: 500,
+        showViewButton: true,
+        auditHis: [],
+        showAction: false, //鏄惁鏄剧ず瀹℃壒鎿嶄綔(褰撳墠鑺傜偣涓虹敤鎴峰鎵规椂鏄剧ず)
+        //瀹℃牳閫夐」(鍙嚜琛屽啀娣诲姞)
+        data: [
+          { text: '閫氳繃', value: 1 },
+          { text: '鎷掔粷', value: 2 },
+          { text: '椹冲洖', value: 3 }
+        ]
+      },
+      upload: {
+        //瀵煎叆涓婁紶excel瀵硅薄
+        excel: false, //瀵煎叆鐨勫脊鍑烘鏄惁鏄剧ず
+        url: '', //瀵煎叆鐨勮矾寰�,濡傛灉娌℃湁鍊硷紝鍒欎笉娓叉煋瀵煎叆鍔熻兘
+        template: {
+          //涓嬭浇妯℃澘瀵硅薄
+          url: '', //涓嬭浇妯℃澘璺緞
+          fileName: '' //妯℃澘涓嬭浇鐨勪腑鏂囧悕
+        },
+        init: false //鏄惁鏈夊鍏ユ潈闄愶紝鏈夋墠娓叉煋瀵煎叆缁勪欢
+      },
+      height: 0, //琛ㄩ珮搴�
+      tableHeight: 0, //鏌ヨ椤甸潰table鐨勯珮搴�
+      tableMaxHeight: 0, //鏌ヨ椤甸潰table鐨勬渶澶ч珮搴�
+      textInline: true, //table鍐呭瓒呭嚭鍚庢槸鍚︿笉鎹㈣2020.01.16
+      pagination: { total: 0, size: 30, sortName: '' }, //浠庡垎椤甸厤缃暟鎹�
+      boxOptions: {
+        title: '', //寮瑰嚭妗嗘樉绀虹殑鏍囬2022.08.01
+        saveClose: true,
+        labelWidth: 100,
+        height: 0,
+        width: 0,
+        summary: false, //寮瑰嚭妗嗘槑缁唗able鏄惁鏄剧ず鍚堣
+        draggable: false, //2022.09.12寮瑰嚭妗嗘嫋鍔ㄥ姛鑳�
+        modal: true //2022.09.12寮瑰嚭妗嗚儗鏅伄缃╁眰
+      }, //saveClose鏂板缓鎴栫紪杈戞垚鍔熷悗鏄惁鍏抽棴寮瑰嚭妗�//寮瑰嚭妗嗙殑鏍囩瀹藉害labelWidth
+      editor: {
+        uploadImgUrl: '', //涓婁紶璺緞
+        upload: null //涓婁紶鏂规硶
+      },
+      numberFields: [],
+      //2022.09.26澧炲姞鑷畾涔夊鍑烘枃浠跺悕
+      downloadFileName: null,
+      select2Count: 500 //瓒呭嚭500鏁伴噺鏄剧ずselect2缁勪欢
+    };
+  },
+  methods: {},
+  activated() {
+     this.initFlowQuery();
+    //2020.06.25澧炲姞activated鏂规硶
+    this.onActivated && this.onActivated();
+    if (!this._inited) {
+      this._inited = true;
+      return;
+    }
+    if (this.activatedLoad) {
+      this.refresh();
+    }
+  },
+  mounted() {
+    this.mounted();
+    // this.$refs.searchForm.forEach()
+  },
+  unmounted() {
+    this.destroyed();
+  },
+  created: function() {
+    //鍚堝苟鑷畾涔変笟鍔℃墿灞曟柟娉�
+    Object.assign(this, this.extend.methods);
+    //濡傛灉娌℃湁鎸囧畾鎺掑簭瀛楁锛屽垯鐢ㄤ富閿綔涓洪粯璁ゆ帓搴忓瓧娈�
+    this.pagination.sortName = this.table.sortName || this.table.key;
+    this.initBoxButtons(); //鍒濆鍖栧脊鍑烘涓庢槑缁嗚〃鏍兼寜閽�
+    this.initAuditColumn();
+    this.onInit(); //鍒濆鍖栧墠锛屽鏋滈渶瑕佸仛鍏朵粬澶勭悊鍦ㄦ墿灞曟柟娉曚腑瑕嗙洊姝ゆ柟娉�
+    this.getButtons();
+    //鍒濆鍖栬嚜瀹氫箟琛ㄦ牸鍒�
+    this.initViewColumns();
+    //鍒濆缂栬緫妗嗙瓑鏁版嵁
+    this.initBoxHeightWidth();
+    this.initDicKeys(); //鍒濆涓嬫鏁版嵁婧�
+    this.onInited(); //鍒濆鍖栧悗锛屽鏋滈渶瑕佸仛鍏朵粬澶勭悊鍦ㄦ墿灞曟柟娉曚腑瑕嗙洊姝ゆ柟娉�
+  },
+  beforeUpdate: function() {},
+  updated: function() {}
+};
+
+import props from './props.js';
+import methods from './methods.js';
+
+//鍚堝苟灞炴��
+vueParam.props = Object.assign(vueParam.props, props);
+//鍚堝苟鏂规硶
+vueParam.methods = Object.assign(
+  vueParam.methods,
+  methods,
+  props.extend.methods
+);
+export default defineComponent(vueParam);
+</script>
+<style lang="less" scoped>
+@import './ViewGrid.less';
+</style>
+<style lang="less" scoped>
+.btn-group ::v-deep(.ivu-select-dropdown) {
+  padding: 0px !important;
+  right: 3px;
+}
+
+.btn-group ::v-deep(.ivu-select-dropdown .ivu-dropdown-menu) {
+  min-width: 100px;
+  right: -2px;
+  position: absolute;
+  background: white;
+  width: 130px;
+  border-radius: 5px;
+  border: 1px solid #e7e5e5;
+}
+
+.vertical-center-modal ::v-deep(.srcoll-content) {
+  padding: 0;
+}
+
+.view-model-content {
+  background: #eee;
+}
+
+.grid-detail ::v-deep(.v-table .el-table__header th) {
+  height: 44px;
+}
+</style>
+<style lang="less" scoped>
+.grid-search {
+  position: relative;
+
+  .search-box {
+    background: #fefefe;
+    margin-top: 33px;
+    border: 1px solid #eae8e8;
+    position: absolute;
+    z-index: 999;
+    left: 15px;
+    right: 15px;
+    padding: 25px 20px;
+    padding-bottom: 0;
+    border-top: 0;
+    box-shadow: 0 7px 18px -12px #bdc0bb;
+  }
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGridAudit.vue b/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGridAudit.vue
new file mode 100644
index 0000000..24cddc7
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGridAudit.vue
@@ -0,0 +1,427 @@
+<template>
+  <vol-box :footer="false" v-model="model" :height="height" :width="width" :padding="0" :lazy="true" title="瀹℃牳">
+
+    <div class="audit-model-content" :style="{ height: height - 100 + 'px' }">
+      <el-descriptions class="desc-top" :column="3" size="default" :border="true">
+        <el-descriptions-item v-for="(item, index) in formData" :key="index">
+          <template #label>
+            <div class="cell-item">
+              {{ item.name }}
+            </div>
+          </template>
+          {{ item.value }}
+        </el-descriptions-item>
+      </el-descriptions>
+      <el-radio-group v-show="hasFlow" style="padding-left: 15px;" v-model="activeName" class="ml-4">
+        <el-radio label="audit" size="large">瀹℃牳</el-radio>
+        <el-radio label="log" size="large">瀹℃牳璁板綍</el-radio>
+      </el-radio-group>
+      <div v-show="activeName == 'audit' || !hasFlow" class="audit-content">
+        <div class="fx-left" v-if="hasFlow">
+          <div class="v-steps">
+            <div v-for="(item, index) in workFlowSteps" :key="index">
+              <div class="step-item" :class="{'step-item-ad':item.auditId||item.stepAttrType=='start'}" v-if="item.stepAttrType == 'start'">
+                <div class="left-item">
+                  <div>娴佺▼寮�濮�</div>
+                  <div class="left-date">{{ item.createDate }}</div>
+                </div>
+                <div class="right-item">
+                  <div class="step-line"></div>
+                  <i class="step-circle"></i>
+                  <div class="step-title">
+                    {{ item.stepName }}
+                  </div>
+                  <div class="step-text">鍙戣捣浜猴細{{ item.creator }}</div>
+                </div>
+              </div>
+              <div class="step-item" v-else-if="item.stepAttrType == 'end'">
+                <div class="left-item">
+                  <div>娴佺▼缁撴潫</div>
+                </div>
+                <div class="right-item">
+                  <div class="step-line"></div>
+                  <i class="step-circle"></i>
+                  <div class="step-title">
+                    {{ item.stepName }}
+                  </div>
+                </div>
+              </div>
+              <div v-else :class="{ 'step-current': item.isCurrent }" class="step-item">
+                <div class="left-item">
+                  <div>瀹℃壒鏃堕棿</div>
+                  <div class="left-date">{{ item.auditDate || '寰呭鎵�' }}</div>
+                </div>
+                <div class="right-item">
+                  <div class="step-line"></div>
+                  <i class="step-circle"></i>
+                  <div class="step-title">
+                    {{ item.stepName }}
+                  </div>
+                  <div class="step-text">瀹℃壒浜猴細{{ item.auditor }}</div>
+                  <div class="step-text">
+                    鐘� 鎬侊細 {{ getAuditStatus(item.auditStatus) }}
+                  </div>
+                  <div class="step-text">澶� 娉細 {{ item.remark || '-' }}</div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="fx-right" :style="{ width: !hasFlow ? '100%' : '400px' }" v-if="isCurrentUser || !hasFlow">
+
+          <div v-if="!hasFlow">
+            <el-alert :title="'褰撳墠閫変腑銆�' + rowLen + '銆戞潯璁板綍寰呭鏍�..'" type="success" :closable="false" />
+          </div>
+          <div class="rd">
+            <span>瀹℃壒锛�</span>
+            <el-radio-group style="margin-left:15px" v-model="auditParam.value">
+              <el-radio v-for="item in auditParam.data" :key="item.value" :label="item.value">
+                <span>{{ item.text }}</span>
+              </el-radio>
+            </el-radio-group>
+          </div>
+          <el-input style="padding-top: 10px;" v-model="auditParam.reason" type="textarea"
+            :autosize="{ minRows: 4, maxRows: 10 }" placeholder="璇疯緭鍏ュ娉�..."></el-input>
+          <div class="btn">
+            <el-button type="primary" @click="auditClick" icon="Check">瀹℃壒</el-button>
+          </div>
+        </div>
+      </div>
+      <div v-show="activeName == 'log'">
+        <vol-table :tableData="tableData" :columns="columns" :height="height - 250" :pagination-hide="true"
+          :load-key="false" :text-inline="false" :ck="false"></vol-table>
+      </div>
+    </div>
+  </vol-box>
+</template>
+<script>
+import VolTable from '@/components/basic/VolTable.vue';
+import VolBox from '@/components/basic/VolBox.vue';
+import http from '@/../src/api/http.js';
+import { defineComponent, ref, reactive, getCurrentInstance } from 'vue';
+export default defineComponent({
+  components: {
+    VolTable,
+    VolBox
+  },
+  props: {
+    option: { //鐢熸垚vue鏂囦欢鐨則able鍙傛暟
+      type: Object,
+      default: {
+        key: '',
+        cnName: '',
+        name: '',
+        url: ""
+      }
+    }
+  },
+  setup(props, { emit }) {
+    const height = ref(500);
+    const width = ref(820);
+    const model = ref(false)
+    const workFlowSteps = reactive([]);
+
+    const hasFlow = ref(false)
+    const formData = reactive([]);
+
+    const auditParam = reactive({
+      //瀹℃牳瀵硅薄
+      rows: 0, //褰撳墠閫変腑瀹℃牳鐨勮鏁�
+      model: false, //瀹℃牳寮瑰嚭妗�
+      value: -1, //瀹℃牳缁撴灉
+      reason: '', //瀹℃牳鍘熷洜
+      //瀹℃牳閫夐」(main.js閲岄潰鍙互娣诲姞鍏朵粬閫夐」)
+      data: []
+    })
+    const { proxy } = getCurrentInstance();
+    auditParam.data = proxy.$global.audit.data;
+    const tableData = reactive([]);
+    const columns = reactive([
+      { title: '鑺傜偣', field: 'stepName', width: 100 },
+      { title: '瀹℃壒浜�', field: 'auditor', width: 80 },
+      { title: '瀹℃壒缁撴灉', field: 'auditStatus', width: 70, bind: { data: [] } },
+      { title: '瀹℃壒鏃堕棿', field: 'auditDate', width: 145 },
+      { title: '澶囨敞', field: 'remark', width: 120 }
+    ]);
+
+    const isCurrentUser = ref(null);
+    const activeName = ref('audit')
+
+    const auditDic = reactive([]);
+    const getAuditStatus = (key) => {
+      return (auditDic.find(x => { return x.key === key + '' }) || { value: key }).value;
+    }
+    const rowLen = ref(0)
+    let currentRows = []
+    const getAuditInfo = (option) => {
+      const table = option.table; //props.option.url.replaceAll('/', '');
+      const url = `api/Sys_WorkFlow/getSteps?tableName=${table}`
+      //  let ids = currentRows.map(x => { return x[props.option.key] });
+      let ids = currentRows.map(x => { return x[option.key] });
+      // ['498043c1-fbd0-4a35-a870-523823912a9b']
+      http.post(url, ids, true).then(result => {
+        if (!result.status) {
+          proxy.$message.error(result.message);
+          return;
+        }
+
+        hasFlow.value = !!(result.list || []).length;
+        if (!hasFlow.value) {
+
+          let auditStatus = Object.keys(currentRows[0]).find(x => { return x.toLowerCase() === 'auditstatus' });
+
+          let checkStatus = currentRows.every((x) => {
+            return proxy.$global.audit.status.some(c => { return c === x[auditStatus] || !x[auditStatus] })
+          });
+          if (!checkStatus) {
+            proxy.$message.error('鍙兘閫夋嫨寰呭鎵规垨瀹℃牳涓殑鏁版嵁');
+            return;
+          }
+          rowLen.value = currentRows.length;
+          model.value = true;
+          width.value = 430;
+          height.value = 330;
+          isCurrentUser.value = true;
+          //娌℃湁瀹℃壒娴佺▼鐨勬暟鎹彧鏄剧ず
+          return;
+        }
+        model.value = true;
+        height.value = document.body.clientHeight * 0.95;
+        width.value = 820;
+        if (!auditDic.length) {
+          auditDic.push(...(result.auditDic || []))
+          columns.forEach(item => {
+            if (item.field == 'auditStatus') {
+              item.bind.data = auditDic;
+            }
+          })
+        }
+        isCurrentUser.value = result.list.some(x => { return x.isCurrentUser })
+        workFlowSteps.length = 0;
+        workFlowSteps.push(...result.list);
+        tableData.length = 0;
+        tableData.push(...result.log)
+        formData.length = 0;
+        formData.push(...(result.form || []))
+      })
+    }
+    //
+
+    const auditClick = () => {
+      if (auditParam.value == -1) {
+        proxy.$message.error('璇烽�夋嫨瀹℃壒椤�');
+        return;
+      }
+
+      if (!isFlow.value) {
+        emit("auditClick", auditParam, currentRows, (result) => {
+          if (result.status) {
+            model.value = false;
+            tableData.length = 0;
+          }
+        });
+        return;
+      }
+      //鎴戠殑娴佺▼涓偣鍑诲鎵�
+      //淇濆瓨瀹℃牳
+      let keys = currentRows.map(x => { return x[currentOption.key] });
+      let url = `api/${currentOption.table}/audit?auditReason=${auditParam.reason}&auditStatus=${auditParam.value}`
+      http.post(url, keys, '瀹℃牳涓�....').then((x) => {
+        if (!x.status) {
+          proxy.$message.error(x.message);
+          return;
+        }
+        model.value = false;
+        proxy.$parent.search()
+        proxy.$message.success(x.message)
+      });
+    }
+    const isFlow = ref(false);
+    let currentOption = {};
+    const open = (rows, flow) => {
+      isFlow.value = !!flow;
+      currentRows = rows;
+      activeName.value = 'audit'
+      auditParam.reason = '';
+      auditParam.value = -1;
+
+      if (flow) {
+        currentOption = {
+          table: rows[0].WorkTable,
+          key: "WorkTableKey"// rows[0].WorkTableKey
+        }
+      } else {
+        currentOption = {
+          table: props.option.url.replaceAll('/', ''),
+          key: props.option.key
+        }
+      }
+      getAuditInfo(currentOption);
+
+    }
+
+    return {
+      columns,
+      height,
+      width,
+      model,
+      workFlowSteps,
+      getAuditInfo,
+      getAuditStatus,
+      activeName,
+      reactive,
+      tableData,
+      auditParam,
+      auditClick,
+      open,
+      isCurrentUser,
+      hasFlow,
+      rowLen,
+      formData,
+      isFlow
+    }
+  }
+});
+</script>
+  
+<style lang="less" scoped>
+.audit-model-content {
+  padding: 10px;
+}
+
+.step-item {
+  background: #fff;
+  display: flex;
+}
+
+.left-item {
+  min-width: 180px;
+  text-align: right;
+  padding-right: 25px;
+  padding-top: 8px;
+
+  .left-date {
+    font-size: 13px;
+    padding-top: 7px;
+    color: #6c6c6c;
+  }
+}
+
+.right-item {
+  cursor: pointer;
+  position: relative;
+  border-bottom: 1px solid #f3f3f3;
+  padding: 5px 0 5px 5px;
+}
+
+.left-item,
+.right-item {
+  padding-bottom: 10px;
+}
+
+.right-item:last-child {
+  border-bottom: 0;
+}
+
+.step-line {
+  top: 16px;
+  left: -10px;
+  width: 1px;
+  height: 100%;
+  position: absolute;
+  background-color: #ebedf0;
+}
+
+.step-circle {
+  position: absolute;
+  top: 17px;
+  left: -9px;
+  z-index: 2;
+  font-size: 12px;
+  line-height: 1;
+  transform: translate(-50%, -50%);
+  width: 7px;
+  height: 7px;
+  background-color: #a1a1a1;
+  border-radius: 50%;
+}
+
+.right-item::before {
+  content: '';
+}
+
+.step-content {
+  padding-top: 2px;
+  font-size: 14px;
+  color: #828282;
+  line-height: 1.5;
+}
+
+.step-title {
+  font-weight: bold;
+  padding-top: 3px;
+}
+
+.step-text {
+  font-size: 13px;
+  color: #999999;
+  padding-top: 6px;
+}
+
+.step-current {
+  * {
+    color: #2f95ff !important;
+  }
+
+  .step-circle {
+    background: #2f95ff !important;
+  }
+
+  // border-radius: 5px;
+  // border: 1px solid #d6eaff;
+  font-size: 13px;
+  padding-top: 6px;
+  // background-color: #eff7ffd9;
+  color: black;
+}
+
+.audit-content {
+  // background: #f9f9f9;
+  padding: 10px;
+  border-radius: 4px;
+  display: flex;
+
+  .fx-left {
+    flex: 1;
+    width: 0;
+
+    .rd {
+      display: flex;
+      align-items: baseline;
+    }
+  }
+
+  .fx-right {
+    // width: 400px;
+
+    .btn {
+      margin-top: 10px;
+      text-align: center;
+    }
+  }
+
+}
+
+.cell-item {
+  font-weight: 500;
+}
+
+.desc-top {
+  padding: 5px 10px 0 10px;
+}
+.step-item-ad{
+  *{
+    color: #9f9898 !important;
+  }
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGridCustomColumn.js b/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGridCustomColumn.js
new file mode 100644
index 0000000..16a49e0
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGridCustomColumn.js
@@ -0,0 +1,151 @@
+export default {
+  initViewColumns(isReset) {
+    //鍒濆鍖栬嚜瀹氬垪閰嶇疆
+    if (isReset) {
+      this.resetViewColumns();
+    }
+    if (!this.orginColumnFields) {
+      this.orginColumnFields = this.columns.map((c) => {
+        return c.field;
+      });
+    }
+    this.viewColumns = this.columns
+      .filter((c) => {
+        return !c.hidden && !c.render;
+      })
+      .map((c) => {
+        return { field: c.field, title: c.title, show: !c.hidden };
+      });
+    if (isReset) {
+      return;
+    }
+    this.getCacheViewColumn();
+  },
+  getViewCacheKey(){
+    return 'custom:column'+this.table.name;
+  },
+  getCacheViewColumn() {
+    try {
+      let columns = localStorage.getItem(this.getViewCacheKey());
+      if (!columns) return;
+      columns = JSON.parse(columns);
+      if (columns.some(x=>{return !this.viewColumns.some(c=> {return c.field==x.field})})||
+          this.viewColumns.some(x=>{return !columns.some(c=> {return c.field==x.field})})
+      ) {
+          localStorage.removeItem(this.getViewCacheKey())
+          return;
+      }
+      let sortTableColumns = [];
+      //寮瑰嚭妗嗙殑鍒�
+      let _viewColumns = [];
+      columns.forEach((column) => {
+        let _column = this.viewColumns.find((c) => {
+          return c.field == column.field;
+        });
+        if (_column) {
+          _column.show = column.show;
+          _viewColumns.push(_column);
+        }
+        let tableColumn = this.columns.find((c) => {
+          return c.field == column.field;
+        });
+        if (tableColumn) {
+          tableColumn.hidden = !column.show;
+          sortTableColumns.push(tableColumn);
+        }
+      });
+      //閲嶆柊鎺掔増寮瑰嚭妗嗚嚜瀹氫箟鍒�
+      let otherColumns = this.viewColumns.filter((c) => {
+        return !_viewColumns.some((s) => {
+          return c.field == s.field;
+        });
+      });
+            //閲嶆柊鎺掔増寮瑰嚭妗嗚嚜瀹氫箟鍒�
+      _viewColumns.push(...otherColumns);
+      this.viewColumns.splice(0);
+      this.viewColumns.push(..._viewColumns);
+
+      this.sortViewColumns(sortTableColumns);
+    } catch (error) {
+      console.log('璁剧疆榛樿鑷畾涔夊垪寮傚父:' + error.message);
+    }
+  },
+  sortViewColumns(sortColumns) {
+    if (sortColumns.length) {
+      let hiddenColumns = this.columns.filter((c) => {
+        return !sortColumns.some((s) => {
+          return c.field == s.field;
+        });
+      });
+      sortColumns.push(...hiddenColumns);
+      this.columns.splice(0);
+      this.columns.push(...sortColumns);
+    }
+  },
+  resetViewColumns() {
+    if (!this.orginColumnFields) {
+      return;
+    }
+    let _columns = [];
+    this.orginColumnFields.forEach((x) => {
+      _columns.push(
+        this.columns.find((c) => {
+          return c.field == x;
+        })
+      );
+    });
+    let otherColumns = this.columns.filter((c) => {
+      return !this.orginColumnFields.some((s) => {
+        return c.field == s;
+      });
+    });
+    _columns.push(...otherColumns);
+    this.columns.splice(0);
+    this.columns.push(..._columns);
+  },
+  showCustomModel() {
+    if (!this.viewColumns.length) {
+      this.initViewColumns();
+    }
+    this.viewColumnsClone = JSON.parse(JSON.stringify(this.viewColumns));
+    this.viewModel = true;
+  },
+  closeCustomModel() {
+    this.viewModel=false;
+    if (this.checkColumnChanged()) {
+      this.viewColumns = JSON.parse(JSON.stringify(this.viewColumnsClone));
+    }
+  },
+  checkColumnChanged() {
+    return (
+      JSON.stringify(this.viewColumns) != JSON.stringify(this.viewColumnsClone)
+    );
+  },
+  saveColumnConfig() {
+    let hasShowColumn = this.viewColumns.some((x) => {
+      return x.show;
+    });
+    if (!hasShowColumn) {
+      return this.$message.error('鑷冲皯閫夋嫨涓�鍒楁樉绀�');
+    }
+    this.viewModel = false;
+    if (this.checkColumnChanged()) {
+      let sortColumns = [];
+      this.viewColumns.forEach((column) => {
+        let _column = this.columns.find((c) => {
+          return c.field == column.field;
+        });
+        if (_column) {
+          _column.hidden = !column.show;
+          sortColumns.push(_column);
+        }
+      });
+      this.sortViewColumns(sortColumns);
+    }
+    try {
+      localStorage.setItem(this.getViewCacheKey(), JSON.stringify(this.viewColumns));
+    } catch (error) {
+      console.log('鑾峰彇鑷畾涔夊垪寮傚父:' + error.message);
+    }
+  }
+};
diff --git a/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGridCustomColumn.vue b/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGridCustomColumn.vue
new file mode 100644
index 0000000..97feb80
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/ViewGrid/ViewGridCustomColumn.vue
@@ -0,0 +1,95 @@
+<template>
+  <el-alert
+    title="鎷栧姩鍒楀悕鍙皟鏁磋〃鏍煎垪鏄剧ず椤哄簭"
+    type="success"
+    :show-icon="false"
+  >
+  </el-alert>
+  <div class="view-column view-column-title">
+    <div class="view-column-index">#</div>
+    <div class="view-column-left">鍒楀悕</div>
+    <div class="view-column-right">鏄惁鏄剧ず</div>
+  </div>
+  <draggable
+    class="list-group"
+    tag="transition-group"
+    :component-data="componentData"
+    :list="viewColumns"
+    v-bind="dragOptions"
+    item-key="order"
+  >
+    <transition-group class="drag-center-item">
+      <div
+        class="view-column"
+        v-for="(column, index) in viewColumns"
+        :key="index"
+      >
+        <div class="view-column-index">{{ index + 1 }}</div>
+        <div class="view-column-left">{{ column.title }}</div>
+        <div class="view-column-right">
+          <el-checkbox v-model="column.show">
+            <div style="height: 100%; width: 250px"></div
+          ></el-checkbox>
+        </div>
+      </div>
+    </transition-group>
+  </draggable>
+</template>
+<script>
+import { VueDraggableNext } from 'vue-draggable-next';
+import { defineComponent, ref, reactive } from 'vue';
+
+export default defineComponent({
+  props: {
+    viewColumns: {
+      type: Array,
+      default: () => {
+        return [];
+      }
+    }
+  },
+  components: {
+    draggable: VueDraggableNext
+  },
+  data() {
+    return {};
+  },
+  setup(props, context) {
+    const dragOptions = reactive({
+      animation: 200,
+      group: 'description',
+      disabled: false,
+      ghostClass: 'ghost'
+    });
+    const componentData = reactive({
+      tag: 'ul',
+      type: 'transition-group'
+    });
+    return { dragOptions, componentData };
+  }
+});
+</script>
+<style lang="less" scoped>
+.view-column {
+  cursor: pointer;
+  display: flex;
+  padding: 10px;
+  border-bottom: 1px solid #f3f3f3;
+  .view-column-index {
+    width: 50px;
+  }
+  .view-column-left {
+    width: 120px;
+    padding: 0 10px;
+  }
+  .view-column-right {
+    flex: 1;
+  }
+}
+.view-column-title {
+  font-weight: bold;
+}
+.view-column:last-child {
+  border-bottom: 0;
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/components/basic/ViewGrid/detailMethods.js b/WIDESEA_WMSClient/src/components/basic/ViewGrid/detailMethods.js
new file mode 100644
index 0000000..77d3907
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/ViewGrid/detailMethods.js
@@ -0,0 +1,102 @@
+//浠庤〃鏂规硶
+let detailMethods = {
+  //鏌ヨ浠庤〃鍓嶅厛鍋氬唴閮ㄥ鐞�
+  loadInternalDetailTableBefore(param, callBack) {
+    //鍔犺浇鏄庣粏琛ㄦ暟鎹箣鍓�,闇�瑕佽瀹氭煡璇㈢殑涓昏〃鐨処D
+    //姣忔鍙鍔犺浇鏄庣粏琛ㄦ牸鏁版嵁灏遍噸缃垹闄ゆ槑缁嗙殑鍊�
+    if (this.detailOptions.delKeys.length > 0) {
+      this.detailOptions.delKeys = [];
+    }
+    let key = this.table.key;
+    if (this.currentRow && this.currentRow.hasOwnProperty(key)) {
+      param.value = this.currentRow[key];
+    }
+    return this.loadDetailTableBefore(param, callBack);
+  },
+  detailRowOnChange(row) {
+    this.detailRowChange(row);
+  },
+  detailRowChange(row) {
+    //checkbox閫変腑琛屼簨浠�
+  },
+  detailRowOnClick({ row, column, event }) {
+    //鏄庣粏琛ㄧ偣鍑昏浜嬩欢2020.11.07
+    this.detailRowClick({ row, column, event });
+  },
+  detailRowClick({ row, column, event }) {},
+  resetDetailTable(row) {
+    //缂栬緫鍜屾煡鐪嬫槑缁嗘椂閲嶇疆浠庤〃鏁版嵁
+    if (!this.detailOptions.columns || this.detailOptions.columns.length == 0) {
+      return;
+    }
+    let key = this.table.key;
+    let query = { value: row ? row[key] : this.currentRow[key] };
+    this.$nextTick(() => {
+      if (this.$refs.detail) {
+        this.$refs.detail.reset();
+        this.$refs.detail.load(query);
+      }
+    });
+  },
+  //浠庡悗闈㈠姞杞戒粠琛ㄦ暟鎹�
+  refreshRow() {
+    this.resetDetailTable();
+  },
+  addRow() {
+    this.$refs.detail.addRow({});
+    this.$refs.detail.edit.rowIndex=-1;
+    this.updateDetailTableSummaryTotal();
+  },
+  delRow() {
+    let rows = this.$refs.detail.getSelected();
+    if (!rows || rows.length == 0) {
+      return this.$message.error('璇烽�夋嫨瑕佸垹闄ょ殑琛�!');
+    }
+    if (!this.delDetailRow(rows)) {
+      return false;
+    }
+
+    let tigger = false;
+    this.$confirm('纭瑕佸垹闄ら�夋嫨鐨勬暟鎹悧?', '璀﹀憡', {
+      confirmButtonText: '纭畾',
+      cancelButtonText: '鍙栨秷',
+      type: 'warning',
+      center: true
+    }).then(() => {
+      if (tigger) return;
+      tigger = true;
+      rows = this.$refs.detail.delRow();
+      let key = this.detailOptions.key;
+      //璁板綍鍒犻櫎鐨勮鏁版嵁
+      rows.forEach((x) => {
+        if (x.hasOwnProperty(key) && x[key]) {
+          this.detailOptions.delKeys.push(x[key]);
+        }
+      });
+      this.updateDetailTableSummaryTotal();
+    });
+  },
+  updateDetailTableSummaryTotal() {
+    //2021.09.25澧炲姞鏄庣粏琛ㄥ垹闄ゃ�佷慨鏀规椂閲嶆柊璁$畻琛屾暟涓庢眹鎬�
+    //2021.12.12澧炲姞鏄庣粏琛ㄥ垽鏂�(寮哄埗鍒锋柊鍚堣鏃朵細鐢ㄥ埌)
+    if (!this.$refs.detail) {
+      return;
+    }
+    //鍒犻櫎鎴栨柊澧炶鏃堕噸鏂拌缃樉绀虹殑鎬昏鏁�
+    this.$refs.detail.paginations.total = this.$refs.detail.rowData.length;
+    //閲嶆柊璁剧疆鍚堣
+    if (this.$refs.detail.summary) {
+      this.$refs.detail.columns.forEach((column) => {
+        if (column.summary) {
+          this.$refs.detail.getInputSummaries(null, null, null, column);
+        }
+      });
+    }
+  },
+  detailSelectable(row, index){
+    //鏄庣粏琛–heckBox 鏄惁鍙互鍕鹃��
+       return true;
+  }
+};
+
+export default detailMethods;
diff --git a/WIDESEA_WMSClient/src/components/basic/ViewGrid/index.js b/WIDESEA_WMSClient/src/components/basic/ViewGrid/index.js
new file mode 100644
index 0000000..bd90205
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/ViewGrid/index.js
@@ -0,0 +1,7 @@
+import Grid from './ViewGrid.vue'
+const ViewGrid = {
+    install: function (app) {
+        app.component('ViewGrid', Grid)
+    }
+}
+export default ViewGrid
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/ViewGrid/methods.js b/WIDESEA_WMSClient/src/components/basic/ViewGrid/methods.js
new file mode 100644
index 0000000..fa02eca
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/ViewGrid/methods.js
@@ -0,0 +1,1684 @@
+import detailMethods from './detailMethods.js';
+//涓氬姟澶勭悊鏂规硶,鍏ㄩ儴鍙互鐢卞紑鍙戣鐩�
+import serviceFilter from './serviceFilter.js';
+let methods = {
+  //褰撴坊鍔犳墿灞曠粍浠秅ridHeader/gridBody/gridFooter鍙婃槑缁唌odelHeader/modelBody/modelFooter鏃讹紝
+  //濡傛灉瑕佽幏鍙栫埗绾ue瀵硅薄,璇蜂娇鐢ㄦ鏂规硶杩涜鍥炶皟
+  parentCall(fun) {
+    if (typeof fun != 'function') {
+      return console.log('鎵╁睍缁勪欢闇�瑕佷紶鍏ヤ竴涓洖璋冩柟娉曟墠鑳借幏鍙栫埗绾ue瀵硅薄');
+    }
+    fun(this);
+  },
+  getCurrentAction() {
+    if (this.currentReadonly) {
+      return '';
+    }
+    return '--' + (this.currentAction == this.const.ADD ? '鏂板' : '缂栬緫');
+  },
+  quickSearchKeyPress($event) {
+    //鏌ヨ瀛楁涓篿nput鏃讹紝鎸夊洖杞︽煡璇�
+    if ($event.keyCode == 13) {
+      if (this.searchFormFields[this.singleSearch.field] != '') {
+        this.search();
+      }
+    }
+  },
+  getButtons() {
+    //鐢熸垚ViewGrid鐣岄潰鐨勬搷浣滄寜閽強鏇村閫夐」
+    let searchIndex = this.buttons.findIndex((x) => {
+      return x.value == 'Search';
+    });
+    //娣诲姞楂樼骇鏌ヨ
+    let hasOneFormItem =
+      this.searchFormOptions.length == 1 &&
+      this.searchFormOptions[0].length == 1;
+    if (searchIndex != -1 && !hasOneFormItem) {
+      this.buttons.splice(searchIndex + 1, 0, {
+        icon: this.fiexdSearchForm ? 'el-icon-refresh-left' : 'el-icon-search',
+        name: this.fiexdSearchForm ? '閲嶇疆' : '楂樼骇鏌ヨ',
+        plain: true,
+        type: this.buttons[searchIndex].type,
+        onClick: () => {
+          if (this.fiexdSearchForm) {
+            return this.resetSearch();
+          }
+          this.searchBoxShow = !this.searchBoxShow;
+        }
+      });
+    }
+    if (hasOneFormItem) {
+      this.fiexdSearchForm = false;
+    }
+    this.maxBtnLength += searchIndex == -1 ? 0 : 1;
+    // if (this.buttons.length <= this.maxBtnLength) {
+    //   return this.buttons;
+    // }
+    // let btns = this.buttons.slice(0, this.maxBtnLength);
+    // btns[this.maxBtnLength - 1].last = true;
+    // return btns;
+  },
+  extendBtn(btns, source) {
+    //btns鏉冮檺鎸夐挳锛宻ource涓烘墿灞曟寜閽�
+    if (!btns || !(source && source instanceof Array)) {
+      return;
+    }
+    //source閫氳繃鍦ㄨ〃鐨勬墿灞昷s鏂囦欢涓璪uttons瀵瑰簲鎸夐挳鐨勫睘鎬ndex鍐冲畾鎸夐挳鎵�鏀句綅缃�
+    source.forEach((x) => {
+      //閫氳繃鎸夐挳鐨処ndex灞炴�э紝鏀惧埌鎸囧畾鐨勪綅缃�
+      btns.splice(x.index == undefined ? btns.length : x.index, 0, x);
+    });
+    // if (this.extend.buttons.view) {
+    //     this.extend.buttons.view.forEach((x) => {
+    //         //閫氳繃鎸夐挳鐨処ndex灞炴�э紝鏀惧埌鎸囧畾鐨勪綅缃�
+    //         this.buttons.splice(x.index == undefined ? this.buttons.length : x.index, 0, x);
+    //     })
+    // }
+  },
+  initBoxButtons() {
+    //鍒濆鍖朧iewGird涓庡脊鍑烘/鏄庣粏琛ㄦ寜閽�
+    let path = this.$route.path;
+    //閫氳繃鑿滃崟鑾峰彇鐢ㄦ埛鎵�瀵瑰簲鑿滃崟闇�瑕佹樉绀虹殑鎸夐挳
+    let permissionButtons = this.permission.getButtons(
+      path,
+      null,
+      this.extend.tableAction,
+      this.table.name
+    );
+    if (permissionButtons) {
+      //2020.03.31娣诲姞娣辨嫹璐濇寜閽粍
+      permissionButtons.forEach((p) => {
+        let _obj = {};
+        for (const key in p) {
+          _obj[key] = p[key];
+        }
+        this.buttons.push(_obj);
+      });
+      // this.buttons.push(...permissionButtons);
+    }
+    if (!this.extend) {
+      this.extend = {};
+    }
+    if (!this.extend.buttons) {
+      this.extend.buttons = {};
+    }
+    //鏌ヨ鐣岄潰鎵╁睍鎸夐挳(鎵╁睍鎸夐挳鍙嚜琛岄�氳繃璁剧疆鎸夐挳鐨処ndex灞炴�ф樉绀哄埌鍏蜂綋浣嶇疆)
+    if (this.extend.buttons.view) {
+      this.extendBtn(this.buttons, this.extend.buttons.view);
+    }
+
+    //寮瑰嚭妗嗘寜閽�
+    let boxButtons = [];
+
+    let saveBtn = this.buttons.some((x) => {
+      if (
+        x.value &&
+        (x.value.toLowerCase() == this.const.ADD.toLowerCase() ||
+          x.value.toLowerCase() == this.const.EDIT.toLowerCase())
+      )
+        return true;
+    });
+    this.currentReadonly = !saveBtn;
+    //浠庤〃琛ㄦ牸鎿嶄綔鎸夐挳
+    let detailGridButtons = {
+      name: '鍒锋柊',
+      type: 'info',
+      icon: 'el-icon-refresh',
+      onClick() {
+        //濡傛灉鏄庣粏琛ㄥ綋鍓嶇殑鐘舵�佷负鏂板缓鏃讹紝绂佹鍒锋柊
+        if (this.currentAction == this.const.ADD) {
+          return;
+        }
+        this.refreshRow();
+      }
+    };
+
+    let importExcel = this.buttons.some((x) => {
+      if (x.value == this.const.IMPORT) return true;
+    });
+    //濡傛灉鏈夊鍏ユ潈闄�,鍒欓渶瑕佸垵濮嬪寲瀵煎叆缁勪欢
+    if (importExcel) {
+      this.upload.url = this.getUrl(this.const.IMPORT);
+      //瀹氫箟涓嬭浇妯℃澘鐨勬枃浠跺悕
+      this.upload.template.fileName = this.table.cnName;
+      //瀹氫箟涓嬭浇妯℃澘鐨刄rl璺緞
+      this.upload.template.url =
+        this.http.ipAddress + this.getUrl(this.const.DOWNLOADTEMPLATE, true);
+    }
+
+    // disabled
+    //濡傛灉褰撳墠瑙掕壊娌℃湁缂栬緫鎴栨柊寤哄姛鑳斤紝鏌ョ湅鏄庣粏鏃跺瓧娈佃缃叏閮ㄥ彧璇�
+    //鍙湁鏄庣粏琛紝灏嗘槑缁嗚〃涔熻缃负涓嶅彲鑳界紪杈戯紝骞朵笖涓嶆樉绀烘坊鍔犺銆佸垹闄よ
+    if (!saveBtn) {
+      this.editFormOptions.forEach((row) => {
+        row.forEach((x) => {
+          x.disabled = true;
+        });
+      });
+      //娌℃湁鏂板缂栬緫鏉冮檺鐨勶紝寮瑰嚭妗嗛兘璁剧疆涓哄彧璇�
+      this.detail.columns.forEach((column) => {
+        if (column.hasOwnProperty('edit')) {
+          column.readonly = true;
+          // row['edit'] = false;
+        }
+      });
+      //寮瑰嚭妗嗘墿灞曟寜閽�
+      this.extendBtn(boxButtons, this.extend.buttons.box);
+      //寮瑰嚭寮规鎸夐挳(2020.04.21),娌℃湁缂栬緫鎴栨柊寤烘潈闄愭椂锛屼篃鍙互閫氳繃buttons灞炴�ф坊鍔犺嚜瀹氫箟寮瑰嚭妗嗘寜閽�
+      this.boxButtons.push(...boxButtons);
+      this.detailOptions.buttons.push(detailGridButtons);
+      this.detailOptions.buttons.forEach((button) => {
+        if (!button.hasOwnProperty('hidden')) {
+          button.hidden = false;
+        }
+      });
+      //寮瑰嚭妗嗘墿灞曟槑缁嗚〃鎸夐挳
+      this.extendBtn(this.detailOptions.buttons, this.extend.buttons.detail);
+
+      return boxButtons;
+    }
+
+    this.detailOptions.edit = true;
+    boxButtons.push(
+      ...[
+        {
+          name: '淇� 瀛�',
+          icon: 'el-icon-check',
+          type: 'danger',
+          disabled: false,
+          value: 'save',
+          onClick() {
+            this.save();
+          }
+        }
+        // {
+        //   name: '閲� 缃�',
+        //   icon: 'el-icon-refresh-right',
+        //   type: 'primary',
+        //   disabled: false,
+        //   onClick() {
+        //     this.resetEdit();
+        //   }
+        // }
+      ]
+    );
+    //浠庤〃琛ㄦ牸鎿嶄綔鎸夐挳
+    this.detailOptions.buttons.push(
+      ...[
+        {
+          name: '娣诲姞琛�',
+          icon: 'el-icon-plus',
+          type: 'primary',
+          hidden: false,
+          plain: true,
+          onClick() {
+            this.addRow();
+          }
+        },
+        {
+          type: 'danger',
+          plain: true,
+          name: '鍒犻櫎琛�',
+          hidden: false,
+          icon: 'el-icon-delete',
+          onClick() {
+            this.delRow();
+          }
+        },
+        //2022.01.08澧炲姞鏄庣粏琛ㄥ鍏ュ鍑哄姛鑳�
+        //娉ㄦ剰闇�瑕侀噸鍐欏悗鍙版槑缁嗚〃鎺ュ彛鐨勫鍏ヤ笌涓嬭浇妯℃澘銆佸鍑虹殑鏉冮檺,Sys_DictionaryListController.cs/SellOrderListController.cs
+        {
+          type: 'danger',
+          plain: true,
+          name: '瀵煎叆',
+          value: 'import',
+          hidden: false,
+          icon: 'el-icon-upload2',
+          onClick() {
+            this.upload.url = `${this.http.ipAddress}api/${this.detail.table}/${this.const.IMPORT}?table=1`;
+            this.upload.template.url = `${this.http.ipAddress}api/${this.detail.table}/${this.const.DOWNLOADTEMPLATE}`;
+            //瀹氫箟涓嬭浇妯℃澘鐨勬枃浠跺悕
+            this.upload.template.fileName = this.detail.cnName;
+            this.upload.excel = true;
+          }
+        },
+        {
+          type: 'danger',
+          plain: true,
+          name: '瀵煎嚭',
+          value: 'export',
+          icon: 'el-icon-download',
+          hidden: false,
+          onClick() {
+            this.export(true);
+          }
+        }
+      ]
+    );
+    this.detailOptions.buttons.forEach((button) => {
+      if (button.hasOwnProperty('hidden')) {
+        button.hidden = false;
+      }
+    });
+    //寮瑰嚭妗嗘墿灞曟寜閽�
+    this.extendBtn(boxButtons, this.extend.buttons.box);
+
+    //寮瑰嚭妗嗘墿灞曟槑缁嗚〃鎸夐挳
+    this.detailOptions.buttons.push(detailGridButtons);
+    this.extendBtn(this.detailOptions.buttons, this.extend.buttons.detail);
+
+    //寮瑰嚭寮规鎸夐挳
+    this.boxButtons.push(...boxButtons);
+  },
+  onClick(click) {
+    click.apply(this);
+  },
+  changeDropdown(btnName, v1) {
+    let button = this.buttons.filter((x) => {
+      return x.name == btnName;
+    });
+    if (button && button.length > 0) {
+      button[0].onClick.apply(this);
+    }
+  },
+  emptyValue(value) {
+    if (typeof value == 'string' && value.trim() === '') {
+      return true;
+    }
+    if (value instanceof Array && !value.length) {
+      return true;
+    }
+    return value === null || value === undefined || value === '';
+  },
+  getSearchParameters() {
+    //鑾峰彇鏌ヨ鍙傛暟
+    // 2020.09.11澧炲姞鍥哄畾鏌ヨ琛ㄥ崟,濡傛灉璁剧疆鍥哄畾浜嗘煡璇㈣〃鍗曪紝鐐瑰嚮鏌ヨ鏃讹紝涓嶅啀鍏抽棴
+    if (!this.fiexdSearchForm) {
+      this.searchBoxShow = false;
+    }
+
+    let query = { wheres: [] };
+    for (const key in this.searchFormFields) {
+      let value = this.searchFormFields[key];
+      if (this.emptyValue(value)) continue;
+
+      if (typeof value == 'number') {
+        value = value + '';
+      }
+      let displayType = this.getSearchItem(key);
+
+      //鑱旂骇鍙繚鐣欓�変腑鑺傜偣鐨勬渶鍚庝竴涓��
+      if (displayType == 'cascader') {
+        //鏌ヨ涓嬮潰鎵�鏈夌殑瀛愯妭鐐癸紝濡傦細閫変腑鐨勬槸鐖惰妭鐐癸紝搴旇鏌ヨ涓嬮潰鎵�鏈夌殑鑺傜偣鏁版嵁--寰呭畬
+        value = value.length ? value[value.length - 1] + '' : '';
+      }
+      //2021.05.02澧炲姞鍖洪棿鏌ヨ
+      if (
+        typeof value == 'string' ||
+        ['date', 'datetime', 'range'].indexOf(displayType) == -1
+      ) {
+        query.wheres.push({
+          name: key,
+          value:
+            typeof value == 'string' ? (value + '').trim() : value.join(','),
+          displayType: displayType
+        });
+        continue;
+      }
+      for (let index = 0; index < value.length; index++) {
+        if (!this.emptyValue(value[index])) {
+          query.wheres.push({
+            name: key,
+            value: (value[index] + '').trim(),
+            displayType: (() => {
+              if (['date', 'datetime', 'range'].indexOf(displayType) != -1) {
+                return index ? 'lessorequal' : 'thanorequal';
+              }
+              return displayType;
+            })()
+          });
+        }
+      }
+    }
+    return query;
+  },
+  search() {
+    //鏌ヨ
+    // let query = this.getSearchParameters();
+    // this.$refs.table.load(query, true);
+    this.$refs.table.load(null, true);
+  },
+  loadTableBefore(param, callBack) {
+    //鏌ヨ鍓嶈缃煡璇㈡潯浠跺強鍒嗛〉淇℃伅
+    let query = this.getSearchParameters();
+    if (query) {
+      param = Object.assign(param, query);
+    }
+
+    if (this.$route.query.viewflow && this.$route.query.id) {
+      param.wheres.push({
+        name: this.table.key,
+        value: this.$route.query.id
+      });
+    }
+    // if (this.isViewFlow() && data && data.length) {
+    //   let query = JSON.parse(JSON.stringify(this.$route.query));
+    //   query.viewflow = 0;
+    //   this.$router.replace({ path: this.$route.path, query: query });
+    //   this.$nextTick(() => {
+    //     this.getWorkFlowSteps(data[0]);
+    //   });
+    // }
+    let status = this.searchBefore(param);
+    callBack(status);
+  },
+
+  loadTableAfter(data, callBack, result) {
+    //鏌ヨ鍚�
+    //2020.10.30澧炲姞鏌ヨ鍚庤繑鍥炴墍鏈夌殑鏌ヨ淇℃伅
+    let status = this.searchAfter(data, result);
+    callBack(status);
+    //鑷姩寮瑰嚭妗嗗鎵硅鎯�
+  },
+  loadDetailTableBefore(param, callBack) {
+    //鏄庣粏鏌ヨ鍓�
+    //鏂板缓鏃剁姝㈠姞杞芥槑缁�
+    if (this.currentAction == this.const.ADD) {
+      callBack(false);
+      return false;
+    }
+    let status = this.searchDetailBefore(param);
+    callBack(status);
+  },
+  loadDetailTableAfter(data, callBack) {
+    //鏄庣粏鏌ヨ鍚�
+    let status = this.searchDetailAfter(data);
+    callBack(status);
+  },
+  getSearchItem(field) {
+    //鑾峰彇鏌ヨ鐨勫弬鏁�
+    let data;
+    for (let index = 0; index < this.searchFormOptions.length; index++) {
+      if (data) return data.type;
+      const item = this.searchFormOptions[index];
+      data = item.find((x) => {
+        return x.field == field;
+      });
+    }
+
+    return (data || {}).type;
+  },
+  resetSearch() {
+    //閲嶇疆鏌ヨ瀵硅薄
+    this.resetSearchForm();
+    //2020.10.17澧炲姞閲嶇疆鍚庢柟娉�
+    this.resetSearchFormAfter && this.resetSearchFormAfter();
+  },
+  resetEdit() {
+    //閲嶇疆缂栬緫鐨勬暟鎹�
+    let isEdit = this.currentAction != this.const.ADD;
+    //閲嶇疆涔嬪墠
+    if (!this[isEdit ? 'resetUpdateFormBefore' : 'resetAddFormBefore']()) {
+      return;
+    }
+    let objKey = {};
+    //缂栬緫鐘舵�佷笅,涓嶉渶瑕侀噸缃富閿�,鍒涘缓鏃堕棿鍒涘缓浜�
+    if (isEdit) {
+      objKey[this.table.key] = this.editFormFields[this.table.key];
+    }
+    this.resetEditForm(objKey);
+    //閲嶇疆涔嬪悗
+
+    if (!this[isEdit ? 'resetUpdateFormAfter' : 'resetAddFormAfter']()) {
+      return;
+    }
+  },
+  resetSearchForm(sourceObj) {
+    //閲嶇疆鏌ヨ琛�
+    this.resetForm('searchForm', sourceObj);
+  },
+  resetEditForm(sourceObj) {
+    if (this.hasDetail && this.$refs.detail) {
+      // this.$refs.detail.rowData.splice(0);
+      this.$refs.detail.reset();
+    }
+    this.resetForm('form', sourceObj);
+    if (this.$refs.form && this.$refs.form.$refs.volform) {
+      setTimeout(() => {
+        this.$refs.form.$refs.volform.clearValidate();
+      }, 100);
+    }
+  },
+  getKeyValueType(formData, isEditForm) {
+    try {
+      let keyLeft = (isEditForm ? 'e' : 's') + '_b_';
+      formData.forEach((item) => {
+        item.forEach((x) => {
+          if (this.keyValueType.hasOwnProperty(keyLeft + x.field)) {
+            return true;
+          }
+          let data;
+          if (x.type == 'switch') {
+            this.keyValueType[x.field] = 1;
+          } else if (x.bind && x.bind.data) {
+            data = x.bind.data;
+          } else if (x.data) {
+            if (x.data instanceof Array) {
+              data = x.data;
+            } else if (x.data.data && x.data.data instanceof Array) {
+              data = x.data.data;
+            }
+          }
+          if (
+            data &&
+            data.length > 0 &&
+            !this.keyValueType.hasOwnProperty(x.field)
+          ) {
+            this.keyValueType[x.field] = data[0].key;
+            this.keyValueType[keyLeft + x.field] = x.type;
+          }
+        });
+      });
+    } catch (error) {
+      console.log(error.message);
+    }
+  },
+  resetForm(formName, sourceObj) {
+    //   return;
+    //閲嶇疆琛ㄥ崟鏁版嵁
+    if (this.$refs[formName]) {
+      this.$refs[formName].reset();
+    }
+
+    if (!sourceObj) return;
+    let form, keyLeft;
+    if (formName == 'searchForm') {
+      form = this.searchFormFields;
+      keyLeft = 's' + '_b_';
+    } else {
+      form = this.editFormFields;
+      keyLeft = 'e' + '_b_';
+    }
+    //鑾峰彇鏁版嵁婧愮殑data绫诲瀷锛屽惁鍒欏鏋滄暟鎹簮data鐨刱ey鏄暟瀛楋紝閲嶇疆鐨勫�兼槸瀛楃涓插氨鏃犳硶缁戝畾鍊�
+    if (!this.keyValueType._dinit) {
+      this.getKeyValueType(this.editFormOptions, true);
+      this.getKeyValueType(this.searchFormOptions, false);
+      this.keyValueType._dinit = true;
+    }
+    var _cascaderParentTree;
+    for (const key in form) {
+      if (sourceObj.hasOwnProperty(key)) {
+        let newVal = sourceObj[key];
+        let kv_type = this.keyValueType[keyLeft + key];
+
+        if (
+          kv_type == 'selectList' ||
+          kv_type == 'checkbox' ||
+          kv_type == 'cascader' ||
+          kv_type == 'treeSelect'
+        ) {
+          // 2020.05.31澧炲姞iview缁勪欢Cascader
+          // 2020.11.01澧炲姞iview缁勪欢Cascader琛ㄥ崟閲嶇疆鏃舵煡璇㈡墍鏈夌殑鐖惰妭鐐�
+          if (kv_type == 'cascader' || kv_type == 'treeSelect') {
+            var treeDic = this.dicKeys.find((dic) => {
+              return dic.fileds && dic.fileds.indexOf(key) != -1;
+            });
+
+            if (treeDic && treeDic.orginData && treeDic.orginData.length) {
+              let keyIsNum = typeof treeDic.orginData[0].id == 'number';
+
+              if (kv_type == 'cascader') {
+                newVal = keyIsNum ? newVal * 1 || 0 : newVal + '';
+                if (kv_type == 'cascader') {
+                  _cascaderParentTree = this.base.getTreeAllParent(
+                    newVal,
+                    treeDic.orginData
+                  );
+                  if (_cascaderParentTree) {
+                    newVal = _cascaderParentTree.map((x) => {
+                      return x.id;
+                    });
+                  }
+                }
+              } else {
+                if (newVal === null || newVal === undefined) {
+                  newVal = [];
+                } else if (typeof newVal == 'string') {
+                  newVal = newVal.split(',');
+                }
+                if (keyIsNum) {
+                  if (Array.isArray(newVal)) {
+                    newVal = newVal.map((x) => {
+                      return x * 1 || 0;
+                    });
+                  }
+                } else if (typeof newVal == 'number') {
+                  newVal = [newVal + ''];
+                }
+              }
+            } else {
+              newVal = [newVal];
+            }
+          } else if (
+            newVal != '' &&
+            newVal != undefined &&
+            typeof newVal == 'string'
+          ) {
+            newVal = newVal.split(',');
+          } else if (kv_type == 'checkbox') {
+            newVal = [];
+          }
+        } else if (
+          this.keyValueType.hasOwnProperty(key) &&
+          typeof this.keyValueType[key] == 'number' &&
+          newVal * 1 == newVal
+        ) {
+          newVal = newVal * 1;
+        } else {
+          if (newVal == null || newVal == undefined) {
+            newVal = '';
+          } else if (this.numberFields.indexOf(key) != -1) {
+            newVal = newVal * 1 || 0;
+          } else {
+            newVal += '';
+          }
+        }
+        if (newVal instanceof Array) {
+          if (form[key]) {
+            form[key] = [];
+          }
+          form[key] = newVal;
+        } else {
+          form[key] = newVal;
+        }
+      } else {
+        form[key] = form[key] instanceof Array ? [] : '';
+      }
+    }
+  },
+  onBtnClick(param) {
+    this[param.method](param.data);
+  },
+  refresh() {
+    //鍒锋柊
+    this.search();
+    // this.$refs.table.load();
+  },
+  saveBefore(formData) {
+    return true;
+  },
+  saveAfter(formData, result) {
+    return true;
+  },
+  save() {
+    //鏂板鎴栫紪杈戞椂淇濆瓨
+    // if (!this.$refs.form.validate()) return;
+    this.$refs.form.validate((result) => {
+      if (result) {
+        this.saveExecute();
+      }
+    });
+  },
+  async saveExecute() {
+    let editFormFields = {};
+    //涓婁紶鏂囦欢浠ラ�楀彿闅斿紑
+    for (const key in this.editFormFields) {
+      if (
+        this.uploadfiled &&
+        this.uploadfiled.length > 0 &&
+        this.uploadfiled.indexOf(key) != -1 &&
+        this.editFormFields[key] instanceof Array
+      ) {
+        let allPath = this.editFormFields[key].map((x) => {
+          return x.path;
+        });
+        editFormFields[key] = allPath.join(',');
+      } else if (typeof this.editFormFields[key] == 'function') {
+        try {
+          editFormFields[key] = this.editFormFields[key]();
+        } catch (error) { }
+      } else {
+        //2021.05.30淇涓嬫媺妗嗘竻闄ゆ暟鎹悗鍚庡彴涓嶈兘淇濆瓨鐨勯棶棰�
+        if (
+          this.editFormFields[key] === undefined &&
+          this.dicKeys.some((x) => {
+            return x.fileds && x.fileds.indexOf(key) != -1;
+          })
+        ) {
+          editFormFields[key] = null;
+        } else {
+          editFormFields[key] = this.editFormFields[key];
+        }
+      }
+    }
+    //灏嗘暟缁勮浆鎹㈡垚string
+    //2020.11.01澧炲姞绾ц仈澶勭悊
+    for (const key in editFormFields) {
+      if (editFormFields[key] instanceof Array) {
+        var iscascader = this.dicKeys.some((x) => {
+          return (
+            x.type == 'cascader' && x.fileds && x.fileds.indexOf(key) != -1
+          );
+        });
+        if (iscascader && editFormFields[key].length) {
+          editFormFields[key] =
+            editFormFields[key][editFormFields[key].length - 1];
+        } else {
+          editFormFields[key] = editFormFields[key].join(',');
+        }
+      }
+    }
+
+    let formData = {
+      mainData: editFormFields,
+      detailData: null,
+      delKeys: null
+    };
+
+    //鑾峰彇鏄庣粏鏁版嵁(鍓嶅彴鏁版嵁鏄庣粏鏈仛鏍¢獙锛屽緟瀹�.鍚庡彴宸茬粡鏍¢獙)
+    if (this.hasDetail) {
+      formData.detailData = this.$refs.detail.rowData;
+      let _fields = this.detail.columns
+        .filter((c) => {
+          return (
+            c.type == 'selectList' || (c.edit && c.edit.type == 'selectList')
+          );
+        })
+        .map((c) => {
+          return c.field;
+        });
+      //2022.06.20澧炲姞淇濆瓨鏃跺鏄庣粏琛ㄤ笅鎷夋澶氶�夌殑鍒ゆ柇
+      if (_fields.length) {
+        formData.detailData = JSON.parse(JSON.stringify(formData.detailData));
+        formData.detailData.forEach((row) => {
+          for (let index = 0; index < _fields.length; index++) {
+            const _field = _fields[index];
+            if (Array.isArray(row[_field])) {
+              row[_field] = row[_field].join(',');
+            }
+          }
+        });
+      }
+    }
+    if (this.detailOptions.delKeys.length > 0) {
+      formData.delKeys = this.detailOptions.delKeys;
+    }
+    //淇濆瓨鍓嶆嫤鎴�
+    let _currentIsAdd = this.currentAction == this.const.ADD;
+    if (_currentIsAdd) {
+      //2020.12.06澧炲姞鏂板缓鍓嶅紓姝ュ鐞嗘柟娉�
+      //2021.08.16淇寮傛璇硶鍐欓敊鐨勯棶棰�
+      if (!this.addBefore(formData) || !(await this.addBeforeAsync(formData)))
+        return;
+    } else {
+      //2020.12.06澧炲姞淇敼鍓嶅紓姝ュ鐞嗘柟娉�
+      if (
+        !this.updateBefore(formData) ||
+        !(await this.updateBeforeAsync(formData))
+      )
+        return;
+    }
+    let url = this.getUrl(this.currentAction);
+    this.http.post(url, formData, true).then((x) => {
+      //淇濆瓨鍚�
+      if (_currentIsAdd) {
+        if (!this.addAfter(x)) return;
+        //杩炵画娣诲姞
+        if (this.continueAdd && x.status) {
+          this.$success(x.message);
+          //鏂板缓
+          this.currentAction = this.const.ADD;
+          this.currentRow = {};
+          this.resetAdd();
+          this.refresh();
+          return;
+        }
+      } else {
+        if (!this.updateAfter(x)) return;
+      }
+      if (!x.status) return this.$error(x.message);
+      this.$success(x.message || '鎿嶄綔鎴愬姛');
+      //濡傛灉淇濆瓨鎴愬姛鍚庨渶瑕佸叧闂紪杈戞锛岀洿鎺ヨ繑鍥炰笉澶勭悊鍚庨潰
+      if (this.boxOptions.saveClose) {
+        this.boxModel = false;
+        //2020.12.27濡傛灉鏄紪杈戜繚瀛樺悗涓嶉噸缃垎椤甸〉鏁帮紝鍒锋柊椤甸潰鏃惰繕鏄樉绀哄綋鍓嶉〉鐨勬暟鎹�
+        this.$refs.table.load(null, _currentIsAdd);
+        //this.refresh();
+        return;
+      }
+      let resultRow;
+      if (typeof x.data == 'string' && x.data != '') {
+        resultRow = JSON.parse(x.data);
+      } else {
+        resultRow = x.data;
+      }
+
+      if (this.currentAction == this.const.ADD) {
+        //  this.currentRow=x.data;
+        this.editFormFields[this.table.key] = '';
+        this.currentAction = this.const.EDIT;
+        this.currentRow = resultRow.data;
+      }
+      this.resetEditForm(resultRow.data);
+      // console.log(resultRow);
+      if (this.hasDetail) {
+        this.detailOptions.delKeys = [];
+        if (resultRow.list) {
+          this.$refs.detail.rowData.push(...resultRow.list);
+        }
+      }
+      this.$refs.table.load(null, _currentIsAdd);
+      // this.refresh();
+    });
+  },
+  del(rows) {
+    if (rows) {
+      if (!(rows instanceof Array)) {
+        rows = [rows];
+      }
+    } else {
+      rows = this.$refs.table.getSelected();
+    }
+    //鍒犻櫎鏁版嵁
+
+    if (!rows || rows.length == 0) return this.$error('璇烽�夋嫨瑕佸垹闄ょ殑琛�!');
+    let delKeys = rows.map((x) => {
+      return x[this.table.key];
+    });
+    if (!delKeys || delKeys.length == 0)
+      return this.$error('娌℃湁鑾峰彇瑕佸垹闄ょ殑琛屾暟鎹�!');
+    //鍒犻櫎鍓�
+    if (!this.delBefore(delKeys, rows)) {
+      return;
+    }
+    let tigger = false;
+    this.$confirm('纭瑕佸垹闄ら�夋嫨鐨勬暟鎹悧?', '璀﹀憡', {
+      confirmButtonText: '纭畾',
+      cancelButtonText: '鍙栨秷',
+      type: 'warning',
+      center: true
+    }).then(() => {
+      if (tigger) return;
+      tigger = true;
+      let url = this.getUrl(this.const.DEL);
+      this.http.post(url, delKeys, '姝e湪鍒犻櫎鏁版嵁....').then((x) => {
+        if (!x.status) return this.$error(x.message);
+        this.$success("鍒犻櫎鎴愬姛");
+        //鍒犻櫎鍚�
+        if (!this.delAfter(x)) {
+          return;
+        }
+        this.refresh();
+      });
+    });
+  },
+  async modelOpenBeforeAsync(row) {
+    return true;
+  },
+  async initBox() {
+    //2022.01.08澧炲姞鏂板缓鏃堕殣钘忔槑缁嗚〃瀵煎嚭鍔熻兘
+    this.detailOptions.buttons.forEach((x) => {
+      if (x.value == 'export') {
+        x.hidden = this.currentAction == 'Add';
+      }
+    });
+    //鍒濆鍖栨柊寤恒�佺紪杈戠殑寮瑰嚭妗�
+    if (!(await this.modelOpenBeforeAsync(this.currentRow))) return false;
+    this.modelOpenBefore(this.currentRow);
+    if (!this.boxInit) {
+      this.boxInit = true;
+      this.boxModel = true;
+      // this.detailUrl = this.url;
+    }
+    return true;
+  },
+  setEditForm(row) {
+    // if (this.remoteColumns.length == 0 || !rows || rows.length == 0) return;
+    let remoteColumns = this.$refs.table.remoteColumns;
+    remoteColumns.forEach((column) => {
+      this.editFormOptions.forEach((option) => {
+        option.forEach((x) => {
+          if (x.field == column.field) {
+            x.data.data = Object.assign([], x.data, column.bind.data);
+          }
+        });
+      });
+    });
+    this.editFormFields;
+    //閲嶇疆缂栬緫琛ㄥ崟鏁版嵁
+    this.editFormFields[this.table.key] = row[this.table.key];
+
+    this.resetEditForm(row);
+    this.currentAction = this.const.EDIT;
+    this.boxModel = true;
+  },
+  async linkData(row, column) {
+    this.boxOptions.title = this.table.cnName + '(缂栬緫)';
+    //鐐瑰嚮table鍗曞厓鏍煎揩鎹烽摼鎺ユ樉绀虹紪杈戞暟鎹�
+    this.currentAction = this.const.EDIT;
+    this.currentRow = row;
+    if (!(await this.initBox())) return;
+    this.resetDetailTable(row);
+    this.setEditForm(row);
+    this.setContinueAdd(false);
+    //璁剧疆杩滅▼鏌ヨ琛ㄥ崟鐨勯粯璁ey/value
+    this.getRemoteFormDefaultKeyValue();
+    //鐐瑰嚮缂栬緫鎸夐挳寮瑰嚭妗嗗悗锛屽彲浠ュ湪姝ゅ鍐欓�昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+    this.modelOpenProcess(row);
+  },
+  setContinueAdd(isAdd) {
+    if (!this.continueAdd) return;
+    var _button = this.boxButtons.find((x) => {
+      return x.value == 'save';
+    });
+    if (_button) {
+      _button.name = isAdd ? this.continueAddName : '淇� 瀛�';
+    }
+  },
+  resetAdd() {
+    if (this.hasDetail) {
+      this.$refs.detail &&
+        //  this.$refs.detail.rowData &&
+        this.$refs.detail.reset();
+    }
+    let obj = {};
+    //濡傛灉鏈塻witch鏍囩锛岄粯璁ら兘璁剧疆涓哄惁
+    this.editFormOptions.forEach((x) => {
+      x.forEach((item) => {
+        if (item.type == 'switch') {
+          obj[item.field] = 0;
+        }
+      });
+    });
+    this.resetEditForm(obj);
+  },
+  async add() {
+    this.boxOptions.title = this.table.cnName + '(鏂板缓)';
+    //鏂板缓
+    this.currentAction = this.const.ADD;
+    this.currentRow = {};
+    if (!(await this.initBox())) return;
+
+    this.resetAdd();
+    this.setContinueAdd(true);
+    //  this.resetEditForm();
+    this.boxModel = true;
+    //鐐瑰嚮鏂板缓鎸夐挳寮瑰嚭妗嗗悗锛屽彲浠ュ湪姝ゅ鍐欓�昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+    this.modelOpenProcess();
+    // this.modelOpenAfter();
+  },
+  async edit(rows) {
+    this.boxOptions.title = '缂栬緫';
+    //缂栬緫
+    this.currentAction = this.const.EDIT;
+    if (rows) {
+      if (!(rows instanceof Array)) {
+        rows = [rows];
+      }
+    } else {
+      rows = this.$refs.table.getSelected();
+    }
+    if (rows.length == 0) {
+      return this.$error('璇烽�夋嫨瑕佺紪杈戠殑琛�!');
+    }
+    if (rows.length != 1) {
+      return this.$error('鍙兘閫夋嫨涓�琛屾暟鎹繘琛岀紪杈�!');
+    }
+    //璁板綍褰撳墠缂栬緫鐨勮
+    this.currentRow = rows[0];
+    //鍒濆鍖栧脊鍑烘
+    if (!(await this.initBox())) return;
+    this.setContinueAdd(false);
+    //閲嶇疆琛ㄥ崟
+    this.resetDetailTable();
+
+    //璁剧疆褰撳墠鐨勬暟鎹埌琛ㄥ崟涓�
+    this.setEditForm(rows[0]);
+    //璁剧疆杩滅▼鏌ヨ琛ㄥ崟鐨勯粯璁ey/value
+    this.getRemoteFormDefaultKeyValue();
+    //鐐瑰嚮缂栬緫鎸夐挳寮瑰嚭妗嗗悗锛屽彲浠ュ湪姝ゅ鍐欓�昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+    this.modelOpenProcess(rows[0]);
+    // this.modelOpenAfter(rows[0]);
+  },
+  getRemoteFormDefaultKeyValue() {
+    //璁剧疆琛ㄥ崟杩滅▼鏁版嵁婧愮殑榛樿key.value
+    if (this.currentAction != this.const.EDIT || this.remoteKeys.length == 0)
+      return;
+    this.editFormOptions.forEach((x, xIndex) => {
+      x.forEach((item, yIndex) => {
+        if (item.remote) {
+          let column = this.columns.find((x) => {
+            return x.bind && x.bind.key == item.dataKey;
+          });
+          if (!column) return;
+          let key = this.currentRow[item.field];
+          let obj = column.bind.data.find((x) => {
+            return x.key == key;
+          });
+          // obj ? obj.value : key濡傛灉娌℃湁鏌ュ埌鏁版嵁婧愶紝鐩存帴浣跨敤鍘熸暟鎹�
+          item.data = [{ key: key, value: obj ? obj.value : key }];
+          this.editFormOptions[xIndex].splice(yIndex, 1, item);
+          // this.$set(item, 'data', [{ key: key + '', value: obj.value }])
+          //  item.data = [{ key: key + '', value: obj.value }];
+        }
+      });
+    });
+  },
+  modelOpenProcess(row) {
+    this.$nextTick(() => {
+      this.modelOpenAfter(row);
+    });
+    return;
+    // if (!this.$refs.form) {
+    //     let timeOut = setTimeout(x => {
+    //         this.modelOpenAfter(row);
+    //     }, 500)
+    //     return;
+    // }
+    // this.modelOpenAfter(row);
+  },
+  import() {
+    //瀵煎叆(涓婁紶excel),寮瑰嚭瀵煎叆缁勪欢UploadExcel.vue
+    this.upload.excel = true;
+    this.$refs.upload_excel && this.$refs.upload_excel.reset();
+  },
+  download(url, fileName) {
+    //涓嬭浇瀵煎嚭鐨勬枃浠�
+    let xmlResquest = new XMLHttpRequest();
+    xmlResquest.open('GET', url, true);
+    xmlResquest.setRequestHeader('Content-type', 'application/json');
+    xmlResquest.setRequestHeader(
+      'Authorization',
+      this.$store.getters.getToken()
+    );
+    let elink = this.$refs.export;
+    xmlResquest.responseType = 'blob';
+    xmlResquest.onload = function (oEvent) {
+      if (xmlResquest.status != 200) {
+        this.$error('涓嬭浇鏂囦欢鍑洪敊浜�..');
+        return;
+      }
+      let content = xmlResquest.response;
+      //  let elink = this.$refs.export;//document.createElement("a");
+      elink.download = fileName; //+".xlsx";
+      // elink.style.display = "none";
+      let blob = new Blob([content]);
+      elink.href = URL.createObjectURL(blob);
+      //  document.body.appendChild(elink);
+      elink.click();
+      //  document.body.removeChild(elink);
+    };
+    xmlResquest.send();
+  },
+  getFileName(isDetail) {
+    //2021.01.08澧炲姞瀵煎嚭excel鏃惰嚜瀹氫箟鏂囦欢鍚�
+    if (isDetail) {
+      return this.detail.cnName + '.xlsx';
+    }
+    return this.table.cnName + '.xlsx';
+  },
+  export(isDetail) {
+    //瀵煎嚭
+    let url, query, param;
+    if (isDetail) {
+      //鏄庣粏琛ㄥ鍑烘椂濡傛灉鏄柊寤虹姸鎬侊紝绂佹瀵煎嚭
+      if (this.currentAction == 'Add') {
+        return;
+      }
+      url = `api/${this.detail.table}/${this.const.EXPORT}`;
+      param = {
+        wheres: [
+          { name: this.table.key, value: this.editFormFields[this.table.key] }
+        ]
+      };
+    } else {
+      //涓昏〃瀵煎嚭
+      url = this.getUrl(this.const.EXPORT);
+      query = this.getSearchParameters();
+      param = { order: this.pagination.order, wheres: query.wheres || [] };
+    }
+    //2020.06.25澧炲姞瀵煎嚭鍓嶅鐞�
+    if (!isDetail && !this.exportBefore(param)) {
+      return;
+    }
+
+    if (param.wheres && typeof param.wheres == 'object') {
+      param.wheres = JSON.stringify(param.wheres);
+    }
+    let $http = this.http;
+    //2022.09.26澧炲姞鑷畾涔夊鍑烘枃浠跺悕
+    let fileName = this.downloadFileName || this.getFileName(isDetail);
+    //2021.01.08浼樺寲瀵煎嚭鍔熻兘
+    $http
+      .post(url, param, '姝e湪瀵煎嚭鏁版嵁....', { responseType: 'blob' })
+      .then((content) => {
+        const blob = new Blob([content]);
+        if ('download' in document.createElement('a')) {
+          // 闈濱E涓嬭浇
+          const elink = document.createElement('a');
+          elink.download = fileName;
+          elink.style.display = 'none';
+          elink.href = URL.createObjectURL(blob);
+          document.body.appendChild(elink);
+          elink.click();
+          URL.revokeObjectURL(elink.href);
+          document.body.removeChild(elink);
+        } else {
+          // IE10+涓嬭浇
+          navigator.msSaveBlob(blob, fileName);
+        }
+      });
+    //.then(result => {
+    // if (!result.status) {
+    //   return this.$error(result.message);
+    // }
+    // let path = this.getUrl(this.const.DOWNLOAD);
+    // path = path[0] == "/" ? path.substring(1) : path;
+    // this.download(
+    //   $http.ipAddress + path + "?path=" + result.data,
+    //   this.table.cnName + ".xlsx" // filePath
+    // );
+    ///  window.open($http.ipAddress + path + "?fileName=" + filePath, "_self");
+    // });
+  },
+  getSelectRows() {
+    //鑾峰彇閫変腑鐨勮
+    return this.$refs.table.getSelected();
+  },
+  getDetailSelectRows() {
+    //鎴栬幏鍙栨槑缁嗛�変腑鐨勮
+    if (!this.$refs.detail) {
+      return [];
+    }
+    return this.$refs.detail.getSelected();
+  },
+  audit() {
+    //瀹℃牳寮瑰嚭妗�
+    let rows = this.$refs.table.getSelected();
+    if (rows.length == 0) return this.$error('璇烽�夋嫨瑕佸鏍哥殑琛�!');
+    let auditStatus = Object.keys(rows[0]).find(x => { return x.toLowerCase() === 'auditstatus' });
+    if (!auditStatus) {
+      return this.$message.error(`琛ㄥ繀椤诲寘鎷鏍稿瓧娈点�怉uditStatus銆�,骞朵笖鏄痠nt绫诲瀷`)
+    }
+    // let checkStatus = rows.every((x) => {
+    //   return this.$global.audit.status.some(c => { return c === x[auditStatus] || !x[auditStatus] })
+    // });
+    // if (!checkStatus) return this.$error('鍙兘閫夋嫨寰呭鎵规垨瀹℃牳涓殑鏁版嵁!');
+    this.$refs.audit.open(rows);
+  },
+  saveAudit(params, rows, callback) {
+
+    //淇濆瓨瀹℃牳
+    let keys = rows.map(x => { return x[this.table.key] });
+    if (!this.auditBefore(keys, rows)) {
+      return;
+    }
+    let url = `${this.getUrl(this.const.AUDIT)}?auditReason=${params.reason}&auditStatus=${params.value}`
+    this.http.post(url, keys, '瀹℃牳涓�....').then((x) => {
+      if (!this.auditAfter(x, keys)) {
+        return;
+      }
+      if (!x.status) return this.$error(x.message);
+
+      callback && callback(x);
+      this.$success(x.message);
+      this.refresh();
+    });
+  },
+  viewModelCancel() {
+    //鏌ョ湅琛ㄧ粨鏋�
+    this.viewModel = false;
+  },
+  initFormOptions(formOptions, keys, formFields, isEdit) {
+    //鍒濆鍖栨煡璇€�佺紪杈戝璞$殑涓嬫媺妗嗘暟鎹簮銆佸浘鐗囦笂浼犻摼鎺ュ湴鍧�
+    //let defaultOption = { key: "", value: "璇烽�夋嫨" };
+    //鏈変笂浼犵殑瀛楁
+    //2020.05.03鏂板
+    //缂栬緫鏁版嵁婧愮殑绫诲瀷
+    formOptions.forEach((item) => {
+      item.forEach((d) => {
+        if (d.type == 'number') {
+          //2022.08.22浼樺寲琛ㄥ崟绫诲瀷涓簄umber鏃剁殑榛樿鍊�
+          if (formFields[d.field] === '') {
+            formFields[d.field] = undefined;
+          }
+          this.numberFields.push(d.field);
+        }
+        if (
+          d.type == 'img' ||
+          d.type == 'excel' ||
+          d.type == 'file' ||
+          d.columnType == 'img'
+        ) {
+          d.url = this.http.ipAddress + 'api' + this.table.url + 'Upload';
+          this.uploadfiled.push(d.field);
+        }
+        if (!d.dataKey) return true;
+        //2022.02.20寮哄埗寮�鍚仈绾у彲浠ラ�夋嫨鏌愪釜鑺傜偣
+        if (d.type == 'cascader' && !d.hasOwnProperty('changeOnSelect')) {
+          //寮哄埗寮�鍚仈绾у彲浠ラ�夋嫨鏌愪釜鑺傜偣
+          d.changeOnSelect = true;
+        }
+        //寮�鍚繙绋嬫悳绱�
+        if (d.remote) {
+          this.remoteKeys.push(d.dataKey);
+          d.data = []; //{ dicNo: d.dataKey, data: [] };
+          return true;
+        }
+        //2020.05.03澧炲姞缂栬緫琛ㄥ崟瀵筩heckbox鐨勬敮鎸�
+        if (d.type == 'checkbox' && !(formFields[d.field] instanceof Array)) {
+          formFields[d.field] = [];
+        }
+        if (keys.indexOf(d.dataKey) == -1) {
+          //2020.05.03澧炲姞璁板綍缂栬緫瀛楁鐨勬暟鎹簮绫诲瀷
+
+          keys.push(d.dataKey);
+          //2020.05.03淇鏌ヨ琛ㄥ崟涓庣紪杈戣〃鍗晅ype绫诲瀷鍙樻垚寮轰竴鑷存�х殑闂
+          //this.dicKeys.push({ dicNo: d.dataKey, data: [], type: d.type });
+          //  2020.11.01澧炲姞iview缁勪欢Cascader鏁版嵁婧愬瓨鍌�
+          let _dic = {
+            dicNo: d.dataKey,
+            data: [],
+            fileds: [d.field],
+            orginData: []
+          };
+          if (d.type == 'cascader') {
+            _dic.type = 'cascader';
+          }
+          if (isEdit) {
+            _dic['e_type'] = d.type;
+          }
+          this.dicKeys.push(_dic);
+        } else if (d.type == 'cascader') {
+          this.dicKeys.forEach((x) => {
+            if (x.dicNo == d.dataKey) {
+              x.type = 'cascader';
+              x.fileds.push(d.field);
+            }
+          });
+        }
+        if (d.type != 'cascader') {
+          //2020.01.30绉婚櫎鍐呴儴琛ㄥ崟formOptions鏁版嵁婧愰厤缃牸寮廳ata.data锛屾墍鏈夊弬鏁版敼涓轰笌缁勪欢api鏍煎紡鐩稿悓
+          Object.assign(
+            d,
+            this.dicKeys.filter((f) => {
+              return f.dicNo == d.dataKey;
+            })[0],
+            { type: d.type }
+          );
+        }
+      });
+    });
+  },
+  //鍒濆table涓庢槑缁嗚〃鐨勬暟鎹簮鎸囧悜dicKeys瀵硅薄锛屽啀鍘诲悗鍙板姞杞芥暟鎹簮
+  initColumns(scoure, dicKeys, keys) {
+    if (!scoure || !(scoure instanceof Array)) return;
+    scoure.forEach((item) => {
+      if (!item.bind || (item.bind.data && item.bind.data.length > 0))
+        return true;
+      let key = item.bind.key || item.bind.dicNo;
+      if (this.remoteKeys.indexOf(key) != -1) {
+        item.bind.remote = true;
+        return true;
+      }
+      if (this.hasKeyField.indexOf(item.field) == -1) {
+        this.hasKeyField.push(item.field);
+      }
+      var dic = dicKeys.filter((x) => {
+        return x.dicNo == key;
+      });
+      if (!dic || dic.length == 0) {
+        dicKeys.push({ dicNo: key, data: [] });
+        dic = [dicKeys[dicKeys.length - 1]];
+        keys.push(key);
+      }
+      //2020.11.01澧炲姞绾ц仈澶勭悊
+      if (dic[0].type == 'cascader' || dic[0].type == 'treeSelect') {
+        item.bind = { data: dic[0].orginData, type: 'select', key: key };
+      } else {
+        item.bind = dic[0];
+      }
+      //2020.05.03浼樺寲table鏁版嵁婧恈heckbox涓巗elect绫诲瀷浠庣紪杈戝垪涓�夊彇
+      item.bind.type = item.bind.e_type || 'string';
+    });
+  },
+  bindOptions(dic) {
+    //缁戝畾涓嬫媺妗嗙殑鏁版嵁婧�
+    //缁戝畾鍚庡彴鐨勫瓧鍏告暟鎹�
+    dic.forEach((d) => {
+      if (d.data.length >= (this.select2Count || 500)) {
+        if (
+          !this.dicKeys.some((x) => {
+            return (
+              x.dicNo == d.dicNo &&
+              (x.type == 'cascader' || x.type == 'treeSelect')
+            );
+          })
+        ) {
+          d.data.forEach((item) => {
+            item.label = item.value;
+            item.value = item.key;
+          });
+        }
+      }
+      this.dicKeys.forEach((x) => {
+        if (x.dicNo != d.dicNo) return true;
+        //2020.10.26澧炲姞绾ц仈鏁版嵁婧愮粦瀹氬鐞�
+        if (x.type == 'cascader' || x.type == 'treeSelect') {
+          // x.data=d.data;
+          //鐢熸垚tree缁撴瀯
+          let _data = JSON.parse(JSON.stringify(d.data));
+          //2022.04.04澧炲姞绾ц仈瀛楀吀鏁版嵁婧愬埛鏂板悗table娌℃湁鍙樺寲鐨勯棶棰�
+          this.columns.forEach((column) => {
+            if (column.bind && column.bind.key == d.dicNo) {
+              column.bind.data = d.data;
+            }
+          });
+          let arr = this.base.convertTree(_data, (node, data, isRoot) => {
+            if (!node.inited) {
+              node.inited = true;
+              node.label = node.value;
+              node.value = node.key;
+            }
+          });
+          x.data.push(...arr);
+          x.orginData.push(...d.data);
+          //2021.10.17淇鏌ヨ绾ц仈涓嶈兘缁戝畾鏁版嵁婧愮殑闂
+          this.searchFormOptions.forEach((searhcOption) => {
+            searhcOption.forEach((_option) => {
+              if (_option.type == 'cascader' && _option.dataKey == x.dicNo) {
+                _option.data = arr;
+                _option.orginData = d.data;
+              }
+            });
+          });
+          //2021.10.17淇绾ц仈涓嶈兘浜岀骇鍒锋柊鐨勯棶棰�
+          this.editFormOptions.forEach((editOption) => {
+            editOption.forEach((_option) => {
+              if (
+                (_option.type == 'cascader' || _option.type == 'treeSelect') &&
+                _option.dataKey == x.dicNo
+              ) {
+                _option.data = arr;
+                _option.orginData = d.data;
+              }
+            });
+          });
+        } else if (d.data.length > 0 && !d.data[0].hasOwnProperty('key')) {
+          let source = d.data,
+            newSource = new Array(source.length);
+          for (let index = 0; index < source.length; index++) {
+            newSource[index] = {
+              //榛樿浠庡瓧鍏告暟鎹鍑烘潵鐨刱ey閮芥槸string绫诲瀷,浣嗗鏋滄暟鎹粠sql涓煡璇㈢殑鍙兘涓洪潪string,鍚︽槸async-validator闇�瑕侀噸缃缃牸寮�
+              key: source['key'] + '', //source[index][x.config.valueField] + "",
+              value: source['value'] //source[index][x.config.textField]
+            };
+          }
+
+          x.data.push(...newSource);
+        } else {
+          //2020.06.06锛屽鏋滄槸selectList鏁版嵁婧愪娇鐢ㄧ殑鑷畾涔塻ql骞朵笖key鏄暟瀛楋紝寮哄埗杞崲鎴愬瓧绗︿覆
+          if (
+            x.e_type == 'selectList' &&
+            d.data.length > 0 &&
+            typeof d.data[0].key == 'number'
+          ) {
+            d.data.forEach((c) => {
+              c.key = c.key + '';
+            });
+          }
+          x.data.push(...d.data);
+        }
+        if (
+          this.singleSearch &&
+          this.singleSearch.dataKey &&
+          this.singleSearch.dataKey == x.dicNo
+        ) {
+          this.singleSearch.data.splice(0, 1, ...x.data);
+        }
+      });
+    });
+  },
+  getUrl(action, ingorPrefix) {
+    //鏄惁蹇界暐鍓嶇紑/  鑾峰彇鎿嶄綔鐨剈rl
+    return (!ingorPrefix ? '/' : '') + 'api' + this.table.url + action;
+  },
+
+  initDicKeys() {
+    //鍒濆鍖栧瓧鍏告暟鎹�
+    let keys = [];
+    //2022.04.17浼樺寲閲嶆柊鍔犺浇鏁版嵁婧�
+    this.dicKeys.forEach((item) => {
+      item.data.splice(0);
+      item.orginData && item.orginData.splice(0);
+    });
+    //this.dicKeys.splice(0);
+    //鍒濆鍖栫紪杈戞暟鎹簮,榛樿涓轰竴涓┖鏁扮粍锛屽鏋滆姹傚繀濉缃畉ype=number/decimal鐨勬渶灏忓��
+    this.initFormOptions(this.editFormOptions, keys, this.editFormFields, true);
+    //鍒濆鍖栨煡璇㈡暟鎹簮,榛樿涓轰竴涓┖鏁扮粍
+    this.initFormOptions(
+      this.searchFormOptions,
+      keys,
+      this.searchFormFields,
+      false
+    );
+    //鏌ヨ鏃ユ湡璁剧疆涓哄彲閫夊紑濮嬩笌缁撴灉鏃ユ湡
+    this.searchFormOptions.forEach((item) => {
+      item.forEach((x) => {
+        if (x.type == 'date' || x.type == 'datetime') x.range = true;
+      });
+    });
+    //鍒濆鍖杁atatable琛ㄦ暟鎹簮,榛樿涓轰竴涓┖鏁扮粍,dicKeys涓虹晫闈㈡墍鏈夌殑鏁版嵁瀛楀吀缂栧彿
+    this.initColumns(this.columns, this.dicKeys, keys);
+    //2021.05.23榛樿寮�鍚煡璇㈤〉闈㈡墍鏈夊瓧娈垫帓搴�,濡傛灉涓嶉渶瑕佹帓搴忥紝鍦╫nInited閬嶅巻columns璁剧疆sort=false
+    //2021.09.25绉婚櫎寮哄埗鎺掑簭鍔熻兘
+    // this.columns.forEach(x => {
+    //   x.sort = x.render ? false : true;
+    // })
+    if (this.detailOptions && this.detailOptions.columns) {
+      this.initColumns(this.detailOptions.columns, this.dicKeys, keys);
+    }
+    //鍒濆鍖栧揩閫熸煡璇㈠瓧娈�,榛樿浣跨敤浠g爜鐢熸垚鍣ㄩ厤缃殑绗竴涓煡璇㈠瓧娈�
+    if (this.searchFormOptions.length > 0) {
+      this.singleSearch = {
+        dataKey: this.searchFormOptions[0][0].dataKey,
+        dicNo: this.searchFormOptions[0][0].dicNo,
+        field: this.searchFormOptions[0][0].field,
+        title: this.searchFormOptions[0][0].title,
+        type: this.searchFormOptions[0][0].type,
+        data: []
+      };
+      // this.singleSearch = this.searchFormOptions[0][0];
+    }
+    if (keys.length == 0) return;
+    let $this = this;
+    this.http.post('/api/Sys_Dictionary/GetVueDictionary', keys).then((dic) => {
+
+      $this.bindOptions(dic);
+      //2022.04.04澧炲姞瀛楀吀鍔犺浇瀹屾垚鏂规硶
+      $this.dicInited && $this.dicInited(dic);
+    });
+  },
+  setFiexdColumn(columns, containerWidth) {
+    //璁$畻鏁翠釜table鐨勫搴︼紝鏍规嵁瀹藉害鍐冲畾鏄惁鍚敤绗竴琛屾樉绀虹殑鍒椾负鍥哄畾鍒�
+    //2021.09.21绉婚櫎寮哄埗鍥哄畾绗竴鍒�
+    // let columnsWidth = 0;
+    // columns.forEach(x => {
+    //   if (!x.hidden && x.width) {
+    //     columnsWidth += x.width;
+    //   }
+    // });
+    // //鍚敤绗竴鍒椾负鍥哄畾鍒�
+    // if (columnsWidth > containerWidth) {
+    //   let firstColumn = columns.find(x => !x.hidden);
+    //   if (firstColumn) {
+    //     firstColumn.fixed = true;
+    //   }
+    // }
+  },
+  initBoxHeightWidth() {
+    //鍒濆鍖栧脊鍑烘鐨勯珮搴︿笌瀹藉害
+    let clientHeight = document.documentElement.clientHeight;
+    //寮瑰嚭妗嗛珮搴﹁嚦灏�250px
+    clientHeight = clientHeight < 250 ? 250 : clientHeight;
+    let clientWidth = document.documentElement.clientWidth;
+    if (
+      this.editFormOptions.some((x) => {
+        return x.some((item) => {
+          return item.type == 'editor';
+        });
+      })
+    ) {
+      this.editor.uploadImgUrl = this.getUrl('upload');
+      this.boxOptions.height = clientHeight * 0.8;
+      this.boxOptions.width = clientWidth * 0.8;
+    } else {
+      if (this.boxOptions.height) {
+        //濡傛灉楂樺害涓庡搴﹁秴杩囦簡鑾峰彇鍒扮殑鍙楂樺搴︼紝鍒欒涓洪粯璁ょ殑90%楂樺
+        if (this.boxOptions.height > clientHeight * 0.8) {
+          this.boxOptions.height = clientHeight * 0.8;
+        }
+      }
+      if (this.boxOptions.width) {
+        //濡傛灉楂樺害涓庡搴﹁秴杩囦簡鑾峰彇鍒扮殑鍙楂樺搴︼紝鍒欒涓洪粯璁ょ殑90%楂樺
+        if (this.boxOptions.width > clientWidth * 0.8) {
+          this.boxOptions.width = clientWidth * 0.8;
+        }
+      }
+    }
+    //璁$畻鏁翠釜table鐨勫搴︼紝鏍规嵁瀹藉害鍐冲畾鏄惁鍚敤绗竴琛屾樉绀虹殑鍒椾负鍥哄畾鍒�
+    let maxTableWidth = clientWidth - 270;
+    this.setFiexdColumn(this.columns, maxTableWidth);
+
+    this.height = this.tableHeight || clientHeight - 206;
+    this.url = this.getUrl(this.const.PAGE);
+    //璁$畻寮瑰嚭妗嗙殑楂樹笌瀹藉害
+    //濡傛灉鏈夋槑缁嗚〃锛岄珮搴︿笌瀹藉甫璁剧疆涓�0.9/0.82
+    if (this.detail.columns && this.detail.columns.length > 0) {
+      this.hasDetail = true;
+      clientWidth = clientWidth * 0.8;
+      clientHeight = clientHeight * 0.85;
+      if (!this.detailOptions.height) {
+        this.detailOptions.height =
+          clientHeight - this.editFormOptions.length * 36 - 234;
+        this.detailOptions.height =
+          this.detailOptions.height < 240 ? 240 : this.detailOptions.height;
+      }
+
+      this.detailOptions.columns = this.detail.columns;
+      this.detailOptions.pagination.sortName = this.detail.sortName;
+      this.detailOptions.cnName = this.detail.cnName;
+      this.detailOptions.key = this.detail.key;
+      this.detailOptions.url = this.getUrl('getDetailPage');
+      //璁$畻寮瑰嚭妗嗘暣涓猼able鐨勫搴︼紝鏍规嵁瀹藉害鍐冲畾鏄惁鍚敤绗竴琛屾樉绀虹殑鍒椾负鍥哄畾鍒�
+      this.setFiexdColumn(this.detail.columns, clientWidth);
+    } else {
+      let maxColumns = 1; //鏈�澶у垪鏁帮紝鏍规嵁鍒楄绠楀脊妗嗙殑瀹藉害
+      this.editFormOptions.forEach((x) => {
+        if (x.length > maxColumns) maxColumns = x.length;
+      });
+      let maxHeightRate = 0.7,
+        maxWidthRate = 0.5;
+      maxWidthRate = maxColumns / 10 + 0.3;
+      maxHeightRate = (this.editFormOptions.length || 1) * 0.1 + 0.03;
+      maxHeightRate = maxHeightRate > 0.9 ? 0.9 : maxHeightRate;
+      clientWidth = clientWidth * maxWidthRate;
+      clientHeight = clientHeight * maxHeightRate;
+      // this.boxOptions.width = clientWidth * maxWidthRate;
+      // this.boxOptions.height = clientHeight * maxHeightRate;
+    }
+    if (!this.boxOptions.height) {
+      this.boxOptions.height = clientHeight + 10;
+    }
+    if (!this.boxOptions.width) {
+      this.boxOptions.width = clientWidth + 30;
+    }
+  },
+  rowOnChange(row) {
+    this.rowChange(row);
+  },
+  rowChange(row) {
+    //閫変腑琛宑heckbox琛屼簨浠�
+  },
+  rowOnClick({ row, column, event }) {
+    this.rowClick({ row, column, event });
+  },
+  rowClick({ row, column, event }) {
+    // 鐐瑰嚮琛屼簨浠�(2020.11.07)
+  },
+  rowOnDbClick({ row, column, event }) {
+    this.rowDbClick({ row, column, event });
+  },
+  rowDbClick({ row, column, event }) {
+    // 鍙屽嚮鍑昏浜嬩欢(2021.05.23)
+  },
+  $error(message) {
+    this.$message.error(message);
+    // this.$message({
+    //   type: 'error',
+    //   content: message,
+    //   duration: 5
+    // });
+  },
+  $success(message) {
+    this.$message.success(message);
+  },
+  setFiexdSearchForm(visiable) {
+    //2020.09.011澧炲姞鍥哄畾鏌ヨ琛ㄥ崟鍔熻兘,visiable=true榛樿灏嗘煡璇㈣〃鍗曞睍寮�
+    this.fiexdSearchForm = true;
+    let refreshBtn = this.buttons.find((x) => x.name == '鍒� 鏂�');
+    if (visiable) {
+      this.searchBoxShow = true;
+    }
+    if (refreshBtn) {
+      refreshBtn.name = '閲� 缃�';
+      refreshBtn.onClick = function () {
+        this.resetSearch();
+      };
+    }
+  },
+  tableBeginEdit(row, column, index) {
+    //2021.03.19鏄惁寮�鍚煡璇㈢晫闈㈣〃鏍煎弻鍑荤紪杈戠粨鏉熸柟娉�,杩斿洖false涓嶄細缁撴潫缂栬緫
+    return this.beginEdit(row, column, index);
+  },
+  beginEdit(row, column, index) {
+    //2021.03.19鏄惁寮�鍚煡璇㈢晫闈㈣〃鏍煎弻鍑荤紪杈戠粨鏉熸柟娉�,杩斿洖false涓嶄細缁撴潫缂栬緫
+    return true;
+  },
+  tableEndEditBefore(row, column, index) {
+    return this.endEditBefore(row, column, index);
+  },
+  endEditBefore(row, column, index) {
+    //2021.03.19鏄惁寮�鍚煡璇㈢晫闈㈣〃鏍煎弻鍑荤紪杈戠粨鏉熸柟娉�,杩斿洖false涓嶄細缁撴潫缂栬緫
+    return true;
+  },
+  filterPermission(tableName, permission) {
+    //2021.03.19鍒ゆ柇鏄惁鏈夋煇涓〃鐨勬寜閽潈闄�
+    //:["Search","Add","Delete","Update","Import","Export","Upload","Audit"]
+    const _result = (this.$store.state.permission || []).find((x) => {
+      return x.url == '/' + tableName;
+    });
+    return _result && _result.permission.some((x) => x == permission);
+  },
+  destroyed() {
+    //2021.04.11澧炲姞vue椤甸潰閿�姣佹柟娉�,璺敱蹇呴』璁剧疆keepLive:false锛岃缃柟娉曡锛氬墠绔紑鍙戞枃妗�-銆媅绂佺敤椤甸潰缂撳瓨keepAlive]
+  },
+  loadTreeTableChildren(tree, treeNode, resolve) {
+    this.loadTreeChildren.call(this, tree, treeNode, resolve);
+  },
+  loadTreeChildren(tree, treeNode, resolve) {
+    //鏍戝舰缁撴瀯鍔犺浇瀛愯妭鐐�(2021.05.02),鍦╫nInit涓缃簡rowKey涓婚敭瀛楁鍚庢墠浼氱敓鏁�
+    return resolve([]);
+  },
+  importDetailAfter(data) {
+    //2022.01.08澧炲姞鏄庣粏琛ㄥ鍏ュ悗澶勭悊
+  },
+  importExcelAfter(data) {
+    //2022.01.08澧炲姞鏄庣粏琛ㄥ鍏ュ悗鏂规硶鍒ゆ柇
+
+    if (!data.status) {
+      return; // this.$message.error(data.message);
+    }
+    //鏄庣粏琛ㄥ鍏�
+    if (this.boxModel) {
+      if (data.data) {
+        data.data = JSON.parse(data.data);
+      } else {
+        data.data = [];
+      }
+      data.data.forEach((x) => {
+        x[this.detail.key] = undefined;
+        x[this.table.key] = undefined;
+      });
+      this.importDetailAfter(data); //澧炲姞鏄庣粏琛ㄥ鍏ュ悗澶勭悊
+      this.$refs.detail.rowData.unshift(...data.data);
+      this.upload.excel = false;
+      return;
+    }
+    this.importAfter(data);
+  },
+  onGridModelClose(iconClick) {
+    if (this.isBoxAudit) {
+      this.initFormOptionType(false);
+    }
+    this.isBoxAudit = false;
+    this.onModelClose(iconClick);
+  },
+  initAuditColumn() {
+
+  },
+  getWorkFlowSteps(row) {
+    let table = this.table.url.replaceAll('/', '');
+    let url = `api/Sys_WorkFlow/getSteps?tableName=${table}&id=${row[this.table.key]
+      }`;
+    this.http.get(url, {}, true).then((result) => {
+      this.workFlowSteps.splice(0);
+      //鏈夊彲鑳芥病鏈夐厤缃鎵规祦绋�
+      if (!result.list || !result.list.length) {
+        result.list = [];
+        this.auditParam.showAction = true;
+        this.auditParam.height = 240;
+        this.auditParam.showViewButton = row.AuditStatus == 0;
+      } else {
+        this.auditParam.showAction = result.list.some((c) => {
+          return c.isCurrentUser;
+        });
+        this.auditParam.height = 511;
+        this.auditParam.showViewButton = true;
+      }
+      this.auditParam.reason = '';
+      this.auditParam.status = -1;
+      this.auditParam.value = -1;
+      if (result.his) {
+        result.his.forEach((item) => {
+          item.auditStatus = this.getAuditStatus(item.auditStatus);
+        });
+      }
+
+      this.auditParam.auditHis = result.his;
+      this.workFlowSteps.push(...result.list);
+      this.isBoxAudit = true;
+      this.initFormOptionType(true);
+      this.edit(row);
+      this.boxOptions.title = '瀹℃牳';
+    });
+  },
+  initFormOptionType(isReadonly) {
+    this.editFormOptions.forEach((options) => {
+      options.forEach((option) => {
+        if (isReadonly) {
+          if (!option.readonly) {
+            this.formFieldsType.push(option.field);
+            option.readonly = true;
+          }
+        } else {
+          if (this.formFieldsType.indexOf(option.field) != -1) {
+            option.readonly = false;
+          }
+        }
+      });
+    });
+  },
+  getAuditStatus(status) {
+    let data = this.auditParam.data.find((x) => {
+      return x.value == status;
+    });
+    if (!data) {
+      return '-';
+      //   return `瀹℃牳鍊间笉姝g‘:${status}`
+    }
+    return data.text;
+  },
+  initFlowQuery() {
+    if (this.$route.query.viewflow) {
+      this.$refs.table && this.search();
+    }
+  },
+  fullscreen(full) { //寮瑰嚭妗嗗叏灞忔柟娉�
+
+  }
+};
+import customColumns from './ViewGridCustomColumn.js';
+//鍚堝苟鎵╁睍鏂规硶
+methods = Object.assign(methods, detailMethods, serviceFilter, customColumns);
+export default methods;
diff --git a/WIDESEA_WMSClient/src/components/basic/ViewGrid/props.js b/WIDESEA_WMSClient/src/components/basic/ViewGrid/props.js
new file mode 100644
index 0000000..5d0ebc6
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/ViewGrid/props.js
@@ -0,0 +1,55 @@
+let props = {
+  columns: {//褰撳墠琛ㄧ殑閰嶇疆淇℃伅
+    type: Array,
+    default: () => {
+      return [];
+    }
+  },
+  detail: {//浠庤〃鏄庣粏閰嶇疆
+    type: Object,
+    default: () => {
+      return {
+        columns: [],//浠庤〃鍒�
+        sortName: ""//浠庤〃鎺掑簭瀛楁
+      };
+    }
+  },
+  editFormFields: {//鏂板缓銆佺紪杈戝瓧娈�(key/value)
+    type: Object,
+    default: () => {
+      return {};
+    }
+  },
+  editFormOptions: {//鏂板缓銆佺紪杈戦厤缃俊鎭�
+    type: Array,
+    default: () => {
+      return [];
+    }
+  },
+  searchFormFields: {//鏌ヨ瀛楁(key/value)
+    type: Object,
+    default: () => {
+      return {};
+    }
+  },
+  searchFormOptions: {//鏌ヨ閰嶇疆淇℃伅(key/value)
+    type: Array,
+    default: () => {
+      return [];
+    }
+  },
+  table: {//琛ㄧ殑閰嶇疆淇℃伅锛氫富閿�佹帓搴忕瓑
+    type: Object,
+    default: () => {
+      return {};
+    }
+  },
+  extend: {//琛ㄧ殑鎵╁睍鏂规硶涓庣粍浠堕兘鍚堝苟鍒版灞炴�т腑
+    type: Object,
+    default: () => {
+      return {};
+    }
+  }
+}
+
+export default props;
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/ViewGrid/serviceFilter.js b/WIDESEA_WMSClient/src/components/basic/ViewGrid/serviceFilter.js
new file mode 100644
index 0000000..5d3b21f
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/ViewGrid/serviceFilter.js
@@ -0,0 +1,109 @@
+
+
+let serviceFilter = {
+  onInit () { //瀵瑰簲created
+    console.log('Create鎵ц鍓�')
+  },
+  onInited () { //瀵瑰簲created锛屽湪onInit涓巓nInited涓棿浼氬垵濮嬪寲鐣岄潰鏁版嵁瀵硅薄
+    console.log('Create鎵ц鍚�')
+  },
+  mounted () {
+    console.log('mounted');
+  },
+  searchBefore (param) { //鏌ヨViewGird琛ㄦ暟鎹墠,param鏌ヨ鍙傛暟
+    // console.log('琛�' + this.table.cnName + '瑙﹀彂loadTableBefore');
+    return true;
+  },
+  //2020.10.30澧炲姞鏌ヨ鍚庤繑鍥炴墍鏈夌殑鏌ヨ淇℃伅
+  searchAfter (param, result) { //鏌ヨViewGird琛ㄦ暟鎹悗param鏌ヨ鍙傛暟,result鍥炶繑鏌ヨ鐨勭粨鏋�
+    // console.log('琛�' + this.table.cnName + '瑙﹀彂loadTableAfter');
+    return true;
+  },
+  searchDetailBefore (param) {//鏌ヨ浠庤〃琛ㄦ暟鎹墠,param鏌ヨ鍙傛暟
+    //console.log(this.detailOptions.cnName + '瑙﹀彂loadDetailTableBefore');
+    return true;
+  },
+  searchDetailAfter (param, data) {//鏌ヨ浠庤〃鍚巔aram鏌ヨ鍙傛暟,result鍥炶繑鏌ヨ鐨勭粨鏋�
+    // console.log(this.detailOptions.cnName + '瑙﹀彂loadDetailTableAfter');
+    return true;
+  },
+  delBefore (ids, rows) { //鏌ヨ鐣岄潰鐨勮〃鍒犻櫎鍓� ids涓哄垹闄ょ殑id鏁扮粍,,rows鍒犻櫎鐨勮
+    return true;
+  },
+  delAfter (result) {//鏌ヨ鐣岄潰鐨勮〃鍒犻櫎鍚�
+    return true;
+  },
+  delDetailRow (rows) { //寮瑰嚭妗嗗垹闄ゆ槑缁嗚〃鐨勮鏁版嵁(鍙槸瀵箃able鎿嶄綔锛屽苟娌℃湁鎿嶄綔鍚庡彴)
+    return true;
+  },
+  addBefore (formData) { //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛�
+    return true;
+  },
+  async addBeforeAsync (formData) { //寮傛澶勭悊,鍔熻兘鍚屼笂(2020.12.06)
+    return true;
+  },
+  addAfter (result) {//鏂板缓淇濆瓨鍚巖esult杩斿洖鐨勭姸鎬佸強琛ㄥ崟瀵硅薄
+    return true;
+  },
+  updateBefore (formData) { //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+    return true;
+  },
+  async updateBeforeAsync (formData) { //寮傛澶勭悊,鍔熻兘鍚屼笂(2020.12.06)
+    return true;
+  },
+  updateAfter (result) {//缂栬緫淇濆瓨鍚巖esult杩斿洖鐨勭姸鎬佸強琛ㄥ崟瀵硅薄
+    return true;
+  },
+  auditBefore (ids, rows) {//瀹℃牳鍓�
+    return true;
+  },
+  auditAfter (result, rows) {// 瀹℃牳鍚�
+    return true;
+  },
+  resetAddFormBefore () { //閲嶇疆鏂板缓琛ㄥ崟鍓嶇殑鍐呭
+    return true;
+  },
+  resetAddFormAfter () { //閲嶇疆鏂板缓琛ㄥ崟鍚庣殑鍐呭
+    return true;
+  },
+  resetUpdateFormBefore () { //閲嶇疆缂栬緫琛ㄥ崟鍓嶇殑鍐呭
+    return true;
+  },
+  resetUpdateFormAfter () { //閲嶇疆缂栬緫琛ㄥ崟鍚庣殑鍐呭
+    return true;
+  },
+  modelOpenBefore (row) { //鐐瑰嚮缂栬緫/鏂板缓鎸夐挳寮瑰嚭妗嗗墠锛屽彲浠ュ湪姝ゅ鍐欓�昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+
+  },
+  modelOpenAfter (row) {  //鐐瑰嚮缂栬緫/鏂板缓鎸夐挳寮瑰嚭妗嗗悗锛屽彲浠ュ湪姝ゅ鍐欓�昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+
+  },
+  importAfter (data) { //瀵煎叆excel鍚庡埛鏂皌able琛ㄦ牸鏁版嵁
+    this.search();
+  },
+  //2020.10.31娣诲姞瀵煎叆鍓嶇殑鏂规硶
+  importExcelBefore (formData) { //瀵煎叆excel瀵煎叆鍓�
+    //寰�formData鍐欎竴浜涘叾浠栧弬鏁版彁浜ゅ埌鍚庡彴锛�
+    // formData.append("val2", "xxx");
+    //鍚庡彴鎸変笅闈㈡柟娉曡幏鍙栬姹傜殑鍙傛暟
+    // Core.Utilities.HttpContext.Current.Request("val2");
+    return true;
+  },
+  reloadDicSource () { //閲嶆柊鍔犺浇瀛楀吀缁戝畾鐨勬暟鎹簮
+    this.initDicKeys();
+  },
+  exportBefore (param) { //2020.06.25澧炲姞瀵煎嚭鍓嶅鐞�
+    return true;
+  },
+  onModelClose(iconClick){
+    //iconClick=true涓虹偣鍑诲乏涓笂瑙扻瑙﹀彂鐨勫叧闂簨浠�
+    //濡傛灉杩斿洖 false涓嶄細鍏抽棴寮瑰嚭妗� 
+    //return false;
+    this.boxModel=false;
+  },
+  selectable(row, index){
+    //琛–heckBox 鏄惁鍙互鍕鹃��
+       return true;
+  }
+}
+export default serviceFilter;
diff --git a/WIDESEA_WMSClient/src/components/basic/VolBox.vue b/WIDESEA_WMSClient/src/components/basic/VolBox.vue
new file mode 100644
index 0000000..8893643
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolBox.vue
@@ -0,0 +1,200 @@
+<template>
+  <div class="vol-dialog">
+
+    <el-dialog v-model="vmodel" :close-on-click-modal="false" :close-on-press-escape="false" :width="width"
+      :fullscreen="fullscreen" :draggable="draggable" :modal="modal" :before-close="handleClose">
+      <template #header>
+        <i :class="icon"></i> {{ title }}
+        <button class="el-dialog__headerbtn" type="button" style="right: 35px; color: var(--el-color-info)" @click="handleFullScreen">
+          <i class="el-icon el-icon-full-screen"></i>
+        </button>
+      </template>
+      <el-scrollbar :max-height="contentHeight">
+        <div v-if="inited" style="min-height: 50px;" class="srcoll-content" :style="{ padding: padding + 'px' }">
+          <slot name="content"></slot>
+          <slot></slot>
+        </div>
+      </el-scrollbar>
+      <template #footer>
+        <div class="dia-footer" v-if="footer">
+          <slot name="footer"></slot>
+          <el-button type="primary" v-if="!footer" size="mini" @click="handleClose()"><i
+              class="el-icon-close"></i>鍏抽棴</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { defineComponent, ref, watch, watchEffect } from 'vue';
+
+export default defineComponent({
+  props: {
+    modelValue: false,
+    lazy: {
+      //鏄惁寮�鍚噿鍔犺浇2020.12.06
+      type: Boolean,
+      default: false,
+    },
+    icon: {
+      type: String,
+      default: "el-icon-warning-outline",
+    },
+    title: {
+      type: String,
+      default: "鍩烘湰淇℃伅",
+    },
+    height: {
+      type: Number,
+      default: 200,
+    },
+    width: {
+      type: Number,
+      default: 650,
+    },
+    padding: {
+      type: Number,
+      default: 16,
+    },
+    modal: {
+      //鏄惁闇�瑕侀伄缃╁眰
+      type: Boolean,
+      default: true,
+    },
+    draggable: {
+      //鍚敤鍙嫋鎷藉姛鑳�
+      type: Boolean,
+      default: false,
+    },
+    mask: {
+      type: Boolean,
+      default: true,
+    },
+    onModelClose: {
+      //2021.07.11澧炲姞寮瑰嚭妗嗗叧闂簨浠�
+      type: Function,
+      default: (iconClick) => {
+        return true;        
+      }
+    },
+    footer:{ //鏄惁鏄剧ず搴曢儴鎸夐挳
+      type: Boolean,
+      default: true
+    }
+
+  },
+  setup(props, context) {
+    const clientHeight = document.body.clientHeight * 0.95 - 60;
+    const inited = ref(true);
+    const vmodel = ref(false);
+    const footer = ref(false);
+    const top = ref(100);
+    vmodel.value = props.modelValue;
+    footer.value = !!context.slots.footer;
+    const contentHeight = ref(200);
+    contentHeight.value = props.height;
+    const handleClose = (done, iconClose) => {
+      let result = props.onModelClose(!!iconClose);
+      if (result === false) return;
+      vmodel.value = false;
+      context.emit("update:modelValue", false);
+      done && done();
+    };
+    const calcHeight = (val) => {
+    //  if (props.height > clientHeight) {
+    //  if(true){
+        contentHeight.value = clientHeight - 30;
+        return clientHeight / -2 + 'px';
+    //  }
+      // contentHeight.value = val || props.height;
+      // return (props.height + 56) / -2 + 'px';
+    };
+    top.value = calcHeight();
+    watch(
+      () => props.modelValue,
+      (newVal, oldVal) => {
+        vmodel.value = newVal;
+      }
+    );
+    watch(
+      () => props.height,
+      (newVal, oldVal) => {
+        top.value = calcHeight();
+      }
+    );
+    const fullscreen=ref(false);
+    const handleFullScreen=()=> {
+      fullscreen.value = !fullscreen.value;
+      context.emit("fullscreen", fullscreen.value);
+    }
+    return {
+      handleClose,
+      inited,
+      vmodel,
+      footer,
+      top,
+      calcHeight,
+      contentHeight,
+      fullscreen,
+      handleFullScreen
+    };
+  }
+});
+</script>
+
+<style lang="less" scoped>
+.dia-footer {
+  text-align: right;
+  width: 100%;
+  border-top: 1px solid #e2e2e2;
+  text-align: right;
+  padding: 6px 8px;
+}
+</style>
+
+<style scoped lang="less">
+.vol-dialog ::v-deep(.el-overlay-dialog) {
+  display: flex !important;
+}
+
+.vol-dialog ::v-deep(.el-dialog) {
+  margin: auto;
+}
+
+.vol-dialog ::v-deep(.el-dialog) {
+  border-top-left-radius: 4px;
+  border-top-right-radius: 4px;
+}
+
+.vol-dialog ::v-deep(.el-dialog__header) {
+  border-top-left-radius: 4px;
+  border-top-right-radius: 4px;
+  padding: 0px 13px;
+  line-height: 53px;
+  border-bottom: 1px solid #e6e6e6;
+  height: 50px;
+  color: rgb(79, 79, 79);
+  font-weight: bold;
+  font-size: 14px;
+  margin: 0;
+  // background-image: linear-gradient(135deg, #0cd7bd 10%, #50c3f7);
+}
+
+.vol-dialog ::v-deep(.el-dialog__footer),
+.vol-dialog ::v-deep(.el-dialog__body) {
+  padding: 0;
+}
+
+.vol-dialog ::v-deep(.el-dialog__headerbtn) {
+  top: 0;
+  padding-top: 8px;
+  height: 50px;
+  width: 0;
+  padding-right: 30px;
+  padding-left: 5px;
+}
+// .vol-dialog ::v-deep(.el-dialog__headerbtn .el-dialog__close) {
+//   color: #fff;
+// }
+</style>
diff --git a/WIDESEA_WMSClient/src/components/basic/VolElementMenu.vue b/WIDESEA_WMSClient/src/components/basic/VolElementMenu.vue
new file mode 100644
index 0000000..66a9779
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolElementMenu.vue
@@ -0,0 +1,198 @@
+<template>
+  <div class="vol-el-menu">
+    <el-menu
+      close="vol-el-menu--vertical"
+      :default-openeds="openedIds"
+      :default-active="defaultActive"
+      :unique-opened="true"
+      @select="select"
+      :collapse="isCollapse"
+      @open="handleOpen"
+      @close="handleClose"
+      @contextmenu.prevent="bindRightClickMenu"
+    >
+      <template v-for="item in convertTree(list)">
+        <el-sub-menu
+          :key="item.id"
+          :index="'' + item.id"
+          v-if="item.children.length && (!enable || item.enable == 1)"
+        >
+          <template #title>
+            <i class="menu-icon" :class="item.icon"></i>
+            <span> {{ item.name }}</span>
+          </template>
+          <vol-element-menu-child
+            :enable="enable"
+            :list="item.children"
+          ></vol-element-menu-child>
+        </el-sub-menu>
+        <template v-else>
+          <el-menu-item
+            class="menu-item-lv1"
+            v-if="!enable || item.enable == 1"
+            :key="item.id"
+            :index="'' + item.id"
+          >
+            <i :class="item.icon"></i>
+            <span> {{ item.name }}</span>
+          </el-menu-item>
+        </template>
+      </template>
+    </el-menu>
+  </div>
+</template>
+
+<script>
+import VolElementMenuChild from './VolElementMenuChild';
+import { useRouter } from 'vue-router';
+
+import {
+  defineComponent,
+  reactive,
+  watch,
+  ref,
+  toRef,
+  toRefs,
+  getCurrentInstance
+  // onMounted,
+} from 'vue';
+export default defineComponent({
+  components: {
+    'vol-element-menu-child': VolElementMenuChild
+  },
+  props: {
+    enable: {
+      type: Boolean,
+      default: false //鏄惁鍒ゆ柇enable=1
+    },
+    isCollapse: {
+      type: Boolean,
+      default: false
+    },
+    onSelect: {
+      type: Function,
+      default: (x) => {}
+    },
+    openSelect: {
+      //鎵撳紑鐨勬椂鍊欐槸鍚﹁Е鍙戦�変腑浜嬩欢
+      type: Boolean,
+      default: true
+    },
+    list: {
+      type: Array,
+      default: []
+    },
+    rootId: {
+      type: String,
+      default: '0'
+    },
+    currentMenuId: {
+      type: Number,
+      default: 0
+    }
+  },
+  setup(props) {
+    // const { list } = toRefs(props);
+    //  const treeList = ref([]);
+    const getTree = (id, node, data) => {
+      if (!node.children) {
+        node.children = [];
+      }
+      data.forEach((x) => {
+        if (x.parentId == id && !node.children.some((c) => c.id === x.id)) {
+          node.children.push(x);
+          getTree(x.id, x, data);
+        }
+      });
+    };
+    let rootTreeId = !isNaN(props.rootId) ? ~~props.rootId : props.rootId;
+    props.list.forEach((x) => {
+      if (!x.icon || x.icon.substring(0, 3) != 'el-') {
+        x.icon = 'el-icon-menu';
+      }
+      x.children = [];
+      x.isRoot = x.parentId === rootTreeId;
+    });
+    const convertTree = (data) => {
+      var root_data = [];
+      data.forEach((x) => {
+        if (x.parentId === rootTreeId) {
+          if (!x.hasOwnProperty('enable')) x.enable = 1;
+          root_data.push(x);
+          getTree(x.id, x, data);
+        }
+      });
+      return root_data;
+    };
+    const openedIds = reactive([props.currentMenuId]);
+    const defaultActive = ref(props.currentMenuId + '');
+    let _base = getCurrentInstance().appContext.config.globalProperties.base;
+    watch(
+      () => props.currentMenuId,
+      (newVal, oldVal) => {
+        defaultActive.value = newVal + '';
+        openedIds.splice(0);
+        openedIds.push(
+          ..._base.getTreeAllParent(newVal, props.list).map((c) => {
+            return c.id;
+          })
+        );
+      }
+    );
+    const router = useRouter();
+    let eventSelect = false;
+    const select = (index, path) => {
+      if (eventSelect) {
+        return;
+      }
+      eventSelect = true;
+      setTimeout(() => {
+        eventSelect = false;
+      }, 20);
+
+      let _item = props.list.find((x) => {
+        return x.id == index;
+      });
+      props.onSelect(index, _item);
+      router.push({ path: _item.path || '' });
+    };
+
+    const handleOpen = (index, path) => {
+      if (props.openSelect) {
+        select(index, path);
+      }
+    };
+    const handleClose = () => {};
+
+    /**
+     * 鑿滃崟瀵艰埅鍙抽敭浜嬩欢
+     * @param {*} enable 鏄惁鍚敤鍙抽敭浜嬩欢[true:鍚敤;false:绂佺敤;]
+     */
+    const bindRightClickMenu = (enable) => {
+      if (!enable) return;
+    };
+
+    return {
+      // treeList,
+      // list,
+      select,
+      convertTree,
+      handleOpen,
+      handleClose,
+      bindRightClickMenu,
+      openedIds,
+      defaultActive
+    };
+  }
+});
+</script>
+<style lang="less" scoped>
+.vol-el-menu {
+  box-sizing: content-box;
+  width: 100%;
+  .menu-icon {
+    font-size: 18px;
+    margin-right: 6px;
+  }
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/components/basic/VolElementMenuChild.vue b/WIDESEA_WMSClient/src/components/basic/VolElementMenuChild.vue
new file mode 100644
index 0000000..ccea321
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolElementMenuChild.vue
@@ -0,0 +1,56 @@
+<template>
+  <div class="vol-el-menu-item">
+    <template v-for="(item) in list">
+      <template v-if="item.children&&item.children.length">
+        <el-menu-item :key="item.id"
+                      :index="'' + item.id"
+                      v-if="!item.children.length && (!enable || item.enable == 1)">
+          <template #title></template>
+          <span> {{ item.name }}</span>
+        </el-menu-item>
+        <el-sub-menu :key="item.id"
+                    :index="'' + item.id"
+                    v-if="item.children.length && (!enable || item.enable == 1)">
+          <template #title>
+            <span> {{ item.name }}</span>
+          </template>
+          <vol-element-menu-child :enable="enable" :list="item.children" />
+        </el-sub-menu>
+      </template>
+      <template v-else>
+        <el-menu-item :key="item.id"
+                      :index="'' + item.id"
+                      v-if="(!enable || item.enable == 1)">
+          <template #title></template>
+          <span> {{item.name }}</span>
+        </el-menu-item>
+      </template>
+    </template>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "vol-element-menu-child",
+  props: {
+    list: {
+      type: Array,
+      default: [],
+    },
+    enable: {
+      type: Boolean,
+      default: false, //鏄惁鍒ゆ柇enable=1
+    },
+  },
+};
+</script>
+
+<style scoped lang="less">
+.vol-el-menu-item ::v-deep(.el-menu-item) {
+  height: 42px !important;
+  line-height: 42px !important;
+}
+</style>
+
+
+
diff --git a/WIDESEA_WMSClient/src/components/basic/VolForm.vue b/WIDESEA_WMSClient/src/components/basic/VolForm.vue
new file mode 100644
index 0000000..3c54951
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolForm.vue
@@ -0,0 +1,1487 @@
+<template>
+  <el-form
+    style="display: inline-block; width: 100%"
+    :inline="true"
+    ref="volform"
+    @submit.prevent
+    :model="formFields"
+    :label-width="labelWidth"
+    :rules="rules"
+  >
+    <template v-for="(row, findex) in formRules" :key="findex">
+      <div class="vol-form-item">
+        <el-form-item
+          :label="item.title ? item.title + '锛�' : ''"
+          v-show="!item.hidden"
+          v-for="(item, index) in row"
+          :prop="item.field"
+          :key="item.field + index"
+          :style="{ width: getColWidth(item) + '%' }"
+        >
+          <!-- render -->
+          <form-expand
+            v-if="item.render && typeof item.render == 'function'"
+            :render="item.render"
+            :par="12"
+          ></form-expand>
+          <!-- 2021.10.17澧炲姞琛ㄥ崟瀹炴椂鏂规硶璁$畻 -->
+          <span
+            v-else-if="
+              item.readonly && typeof formFields[item.field] == 'function'
+            "
+            >{{ formFields[item.field]() }}</span
+          >
+          <!-- 鍙鍥剧墖鎴栨枃浠�  -->
+          <div v-else-if="isReadonlyImgFile(item, formFields)">
+            <div v-if="item.type == 'img'" class="form-imgs">
+              <div
+                class="img-item"
+                v-for="(img, imgIndex) in formFields[item.field]"
+                :key="imgIndex"
+              >
+                <img
+                  :src="getSrc(img.path)"
+                  :onerror="errorImg"
+                  @click="previewImg(img.path)"
+                />
+              </div>
+            </div>
+            <div
+              v-else
+              class="form-file-list"
+              v-for="(file, fileIndex) in formFields[item.field]"
+              :key="fileIndex"
+            >
+              <a @click="dowloadFile(formFields[item.field][fileIndex])">{{
+                file.name
+              }}</a>
+            </div>
+          </div>
+
+          <div v-else :class="{ 'form-item-extra': item.extra }">
+            <!-- 鍙灞炴�� -->
+            <label
+              :style="item.inputStyle"
+              v-if="item.type == 'label'"
+              class="readonly-input"
+              >{{ getText(formFields, item) }}</label
+            >
+            <!-- 20223.05.13闆嗘垚el-tree-select -->
+            <!-- :filter-method="(value)=>{filterMethod(value,item.data)}" -->
+            <!-- :filterable="true" -->
+            <el-tree-select
+              style="width: 100%"
+              v-else-if="item.type == 'treeSelect'"
+              v-model="formFields[item.field]"
+              :data="item.data"
+              :multiple="item.multiple"
+              :render-after-expand="false"
+              :show-checkbox="false"
+              :check-strictly="true"
+              check-on-click-node
+              node-key="key"
+              :props="{ label: 'label' }"
+            >
+              <template #default="{data,node }">
+                <!-- <el-checkbox v-model="node.checked"></el-checkbox> -->
+               <!-- {{getNode(node, data)}} -->
+               <!-- {{node.checked}} -->
+               <!-- 杩欓噷杩樻湁鐐归棶棰橈紝鍚庨潰澶勭悊 -->
+                {{  data.label}}</template
+              >
+            </el-tree-select>
+            <template
+              v-else-if="['select', 'selectList'].indexOf(item.type) != -1"
+            >
+              <el-select-v2
+                :disabled="item.readonly || item.disabled"
+                v-show="!item.hidden"
+                style="width: 100%"
+                :size="size"
+                v-if="item.data.length > select2Count"
+                v-model="formFields[item.field]"
+                filterable
+                :multiple="item.type == 'select' ? false : true"
+                :placeholder="item.placeholder ? item.placeholder : item.title"
+                :allow-create="item.autocomplete"
+                :options="item.data"
+                @change="
+                  (val) => {
+                    item.onChange(val, item.data);
+                  }
+                "
+                clearable
+              >
+                <template #default="{ item }">
+                  {{ item.label }}
+                </template>
+              </el-select-v2>
+              <el-select
+                :disabled="item.readonly || item.disabled"
+                v-show="!item.hidden"
+                style="width: 100%"
+                :size="size"
+                v-else-if="item.remote || item.url"
+                v-model="formFields[item.field]"
+                filterable
+                :multiple="item.type == 'select' ? false : true"
+                :placeholder="item.placeholder ? item.placeholder : item.title"
+                clearable
+                :remote-method="
+                  (val) => {
+                    remoteSearch(item, formFields, val);
+                  }
+                "
+              >
+                <el-option
+                  v-for="item in item.data"
+                  :key="item.key"
+                  :label="item.value"
+                  :value="item.key"
+                >
+                </el-option>
+              </el-select>
+              <el-select
+                :disabled="item.readonly || item.disabled"
+                v-show="!item.hidden"
+                style="width: 100%"
+                :size="size"
+                v-else
+                v-model="formFields[item.field]"
+                filterable
+                :multiple="item.type == 'select' ? false : true"
+                :placeholder="item.placeholder ? item.placeholder : item.title"
+                :allow-create="item.autocomplete"
+                @change="
+                  (val) => {
+                    item.onChange(val, item.data);
+                  }
+                "
+                clearable
+              >
+                <el-option
+                  v-show="!item.hidden"
+                  :disabled="item.disabled"
+                  v-for="item in item.data"
+                  :key="item.key"
+                  :label="item.value"
+                  :value="item.key"
+                >
+                </el-option>
+              </el-select>
+            </template>
+
+            <el-switch
+              v-show="!item.hidden"
+              v-else-if="item.type == 'switch'"
+              v-model="formFields[item.field]"
+              :disabled="item.readonly || item.disabled"
+              active-color="#0f84ff"
+              @change="item.onChange"
+              inactive-color="rgb(194 194 194)"
+              :active-value="
+                typeof formFields[item.field] == 'boolean'
+                  ? true
+                  : typeof formFields[item.field] == 'string'
+                  ? '1'
+                  : 1
+              "
+              :inactive-value="
+                typeof formFields[item.field] == 'boolean'
+                  ? false
+                  : typeof formFields[item.field] == 'string'
+                  ? '0'
+                  : 0
+              "
+            >
+            </el-switch>
+
+            <el-radio-group
+              :disabled="item.readonly || item.disabled"
+              v-show="!item.hidden"
+              v-model="formFields[item.field]"
+              v-else-if="item.type == 'radio'"
+              @change="item.onChange"
+            >
+              <el-radio
+                v-for="kv in item.data"
+                :disabled="item.readonly || item.disabled"
+                :key="kv.key"
+                :label="kv.key"
+                >{{ kv.value }}</el-radio
+              >
+            </el-radio-group>
+
+            <el-checkbox-group
+              :disabled="item.readonly || item.disabled"
+              v-show="!item.hidden"
+              v-model="formFields[item.field]"
+              v-else-if="item.type == 'checkbox'"
+              @change="item.onChange"
+            >
+              <el-checkbox
+                v-for="kv in item.data"
+                :key="kv.key"
+                :disabled="item.readonly || item.disabled"
+                :label="kv.key"
+                >{{ kv.value }}</el-checkbox
+              >
+            </el-checkbox-group>
+            <div
+              class="v-date-range"
+              style="display: flex"
+              v-else-if="
+                ['date', 'datetime'].indexOf(item.type) != -1 && item.range
+              "
+            >
+              <el-date-picker
+                :size="size"
+                :disabled="item.readonly || item.disabled"
+                style="flex: 1; width: auto"
+                v-model="formFields[item.field][0]"
+                :type="item.type == 'date' ? 'date' : 'datetime'"
+                :disabledDate="(val) => getDateOptions(val, item)"
+                placeholder="寮�濮嬫椂闂�"
+                @change="
+                  (val) => {
+                    dateRangeChange(val, item);
+                  }
+                "
+                :value-format="getDateFormat(item)"
+              >
+              </el-date-picker>
+              <span style="margin: 0px 5px; font-size: 13px; color: #6f6b6b"
+                >鑷�</span
+              >
+              <el-date-picker
+                :size="size"
+                :disabled="item.readonly || item.disabled"
+                style="flex: 1; width: auto"
+                v-model="formFields[item.field][1]"
+                placeholder="缁撴潫鏃堕棿"
+                :type="item.type == 'date' ? 'date' : 'datetime'"
+                :disabledDate="(val) => getDateOptions(val, item)"
+                @change="
+                  (val) => {
+                    dateRangeChange(val, item);
+                  }
+                "
+                :value-format="getDateFormat(item)"
+              >
+              </el-date-picker>
+            </div>
+            <!-- v-show涓嶆坊鍔犳牴鑺傜偣灏变細鎶ラ敊娌℃湁鏍圭偣鑺� -->
+            <div
+              v-show="!item.hidden"
+              style="width: 100%"
+              v-else-if="['date', 'datetime', 'month'].indexOf(item.type) != -1"
+            >
+              <el-date-picker
+                :size="size"
+                clearable
+                :disabled="item.readonly || item.disabled"
+                style="width: 100%"
+                v-model="formFields[item.field]"
+                @change="item.onChange"
+                :type="item.type"
+                :placeholder="
+                  item.placeholder ? item.placeholder : '璇烽�夋嫨' + item.title
+                "
+                :disabledDate="(val) => getDateOptions(val, item)"
+                :value-format="getDateFormat(item)"
+              >
+              </el-date-picker>
+            </div>
+
+            <el-time-picker
+              :size="size"
+              v-else-if="item.type == 'time'"
+              v-model="formFields[item.field]"
+              :disabled="item.readonly || item.disabled"
+              placeholder="璇烽�夋嫨鏃堕棿"
+              :value-format="item.format || 'HH:mm:ss'"
+              :format="item.format"
+              style="width: 100%"
+            >
+            </el-time-picker>
+
+            <el-scrollbar
+              style="border: 1px solid #c7d8db; border-radius: 5px"
+              :height="item.height || 150"
+              v-else-if="
+                item.type == 'editor' && (item.readonly || item.disabled)
+              "
+            >
+              <div ref="editor" v-html="formFields[item.field]"></div>
+            </el-scrollbar>
+
+            <vol-wang-editor
+              ref="editor"
+              v-else-if="item.type == 'editor'"
+              :url="item.url || editor.uploadImgUrl"
+              :upload="item.upload || editor.upload"
+              v-model="formFields[item.field]"
+              :height="item.height || 350"
+            ></vol-wang-editor>
+
+            <vol-upload
+              v-show="!item.hidden"
+              v-else-if="isFile(item, formFields)"
+              :desc="item.desc"
+              :multiple="item.multiple"
+              :max-file="item.maxFile"
+              :max-size="item.maxSize"
+              :autoUpload="item.autoUpload"
+              :fileInfo="formFields[item.field]"
+              :url="item.url"
+              :img="item.type == 'img' || item.columnType == 'img'"
+              :excel="item.type == 'excel'"
+              :fileTypes="item.fileTypes ? item.fileTypes : []"
+              :upload-before="item.uploadBefore"
+              :upload-after="item.uploadAfter"
+              :append="item.multiple"
+              :on-change="
+                (files) => {
+                  return fileOnChange(files, item);
+                }
+              "
+              :file-click="item.fileClick"
+              :remove-before="item.removeBefore"
+              :downLoad="item.downLoad ? true : false"
+            ></vol-upload>
+            <el-cascader
+              :size="size"
+              clearable
+              style="width: 100%; margin-top: -3px"
+              v-model="formFields[item.field]"
+              :disabled="item.readonly || item.disabled"
+              v-else-if="item.type == 'cascader'"
+              :options="item.data"
+              :props="{
+                checkStrictly: item.changeOnSelect || item.checkStrictly
+              }"
+              @change="item.onChange"
+            >
+            </el-cascader>
+            <el-rate
+              v-else-if="item.type == 'rate'"
+              @change="
+                (val) => {
+                  item.onChange && item.onChange(val);
+                }
+              "
+              :max="item.max"
+              v-model="formFields[item.field]"
+            />
+            <div
+              style="display: flex"
+              v-else-if="item.type == 'range' || item.range"
+            >
+              <el-input
+                :size="size"
+                :disabled="item.readonly || item.disabled"
+                style="flex: 1"
+                v-model="formFields[item.field][0]"
+                clearable
+              />
+              <span style="margin: 0 5px">-</span>
+              <el-input
+                :size="size"
+                :disabled="item.readonly || item.disabled"
+                style="flex: 1"
+                v-model="formFields[item.field][1]"
+                clearable
+              />
+            </div>
+            <el-input
+              :size="size"
+              clearable
+              :ref="item.field"
+              :input-style="item.inputStyle"
+              :disabled="item.readonly || item.disabled"
+              v-else-if="item.type == 'textarea'"
+              v-model="formFields[item.field]"
+              type="textarea"
+              :autosize="{
+                minRows: item.minRows || 2,
+                maxRows: item.maxRows || 10
+              }"
+              :placeholder="item.placeholder ? item.placeholder : item.title"
+            />
+            <el-input-number
+              :size="size"
+              style="width: 100%"
+              :ref="item.field"
+              :input-style="item.inputStyle"
+              v-else-if="item.type == 'number'"
+              v-model="formFields[item.field]"
+              :min="item.min"
+              :disabled="item.readonly || item.disabled"
+              :max="item.max"
+              controls-position="right"
+            />
+            <el-input
+              :size="size"
+              clearable
+              :input-style="item.inputStyle"
+              v-else-if="item.type == 'password'"
+              type="password"
+              v-model="formFields[item.field]"
+              :disabled="item.readonly || item.disabled"
+              v-show="!item.hidden"
+              :placeholder="item.placeholder ? item.placeholder : item.title"
+            />
+            <!-- 2021.11.18淇el-input娌℃湁榛樿enter浜嬩欢鏃跺洖杞﹀紓甯� -->
+            <el-input
+              :size="size"
+              clearable
+              :ref="item.field"
+              :input-style="item.inputStyle"
+              v-else-if="item.onKeyPress"
+              :placeholder="item.placeholder ? item.placeholder : item.title"
+              :disabled="item.readonly || item.disabled"
+              v-show="!item.hidden"
+              v-model="formFields[item.field]"
+              @keypress="
+                ($event) => {
+                  onKeyPress($event, item);
+                }
+              "
+              @change="item.onKeyPress"
+              @keyup.enter="item.onKeyPress"
+            ></el-input>
+            <el-input
+              :size="size"
+              clearable
+              v-else
+              :ref="item.field"
+              :input-style="item.inputStyle"
+              :placeholder="item.placeholder ? item.placeholder : item.title"
+              :disabled="item.readonly || item.disabled"
+              v-show="!item.hidden"
+              v-model="formFields[item.field]"
+            ></el-input>
+
+            <div class="form-extra" v-if="item.extra">
+              <form-expand
+                v-if="item.extra.render"
+                :render="item.extra.render"
+              ></form-expand>
+              <a
+                v-else-if="item.extra.click"
+                :style="item.extra.style"
+                @click="item.extra.click(item, formFields[item.field])"
+              >
+                <i v-if="item.extra.icon" :class="item.extra.icon" />
+                {{ item.extra.text }}
+              </a>
+              <a v-else :style="item.extra.style">
+                <i v-if="item.extra.icon" :class="item.extra.icon" />
+                {{ item.extra.text }}
+              </a>
+            </div>
+          </div>
+        </el-form-item>
+      </div>
+    </template>
+    <slot></slot>
+    <div style="width: 100%">
+      <slot name="footer"></slot>
+    </div>
+  </el-form>
+</template>
+<script>
+const rule = {
+  change: [
+    'checkbox',
+    'select',
+    'date',
+    'datetime',
+    'drop',
+    'radio',
+    'cascader'
+  ], // 2020.05.31澧炲姞绾ц仈绫诲瀷
+  phone: /^[1][3,4,5,6,7,8,9][0-9]{9}$/,
+  decimal: /(^[\-0-9][0-9]*(.[0-9]+)?)$/,
+  number: /(^[\-0-9][0-9]*([0-9]+)?)$/
+};
+const inputTypeArr = ['text', 'string', 'mail', 'textarea', 'password'];
+const types = {
+  int: 'number',
+  byte: 'number',
+  decimal: 'number', // "float",
+  string: 'string',
+  bool: 'boolean',
+  date: 'datetime',
+  date: 'date',
+  mail: 'email'
+};
+//琛ㄥ崟楠岃瘉娉ㄦ剰锛氭瘡娆¢獙璇侀兘蹇呴』鎵цcallback,鍚﹀垯楠岃瘉涓嶆墽琛屽洖璋冩柟娉�
+const colPow = Math.pow(10, 3);
+import FormExpand from './VolForm/VolFormRender';
+import {
+  defineAsyncComponent,
+  defineComponent,
+  ref,
+  reactive,
+  toRefs,
+  getCurrentInstance,
+  onMounted,
+  watch
+} from 'vue';
+export default defineComponent({
+  components: {
+    FormExpand,
+    'vol-upload': defineAsyncComponent(() =>
+      import('@/components/basic/VolUpload.vue')
+    ),
+    // 'vol-wang-editor': defineAsyncComponent(() =>
+    //   import('@/components/editor/VolWangEditor.vue')
+    // )
+  },
+  props: {
+    loadKey: {
+      // 鏄惁鍔犺浇formRules瀛楁閰嶇疆鐨勬暟鎹簮
+      type: Boolean,
+      default: true
+    },
+    width: {
+      // 琛ㄥ崟瀹藉害
+      type: Number,
+      default: 0
+    },
+    labelWidth: {
+      // 琛ㄥ崟宸﹁竟label鏂囧瓧鏍囩鐨勫搴�
+      type: Number,
+      default: 100
+    },
+    formRules: {
+      // 琛ㄥ崟閰嶇疆瑙勫垯锛屽瀛楁绫诲瀷锛屾槸鍚﹀繀濉�
+      type: Array,
+      default: []
+    },
+    formFields: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    editor: {
+      // 2021.01.16缂栬緫鍣ㄤ俊鎭� {uploadImgUrl:"",upload:null//涓婁紶鏂规硶}
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    size: {
+      type: String, //large / default / small
+      default: 'large'
+    },
+    select2Count: {
+      //瓒呭嚭鏁伴噺鏄剧ずselect2缁勪欢
+      type: Number,
+      default: 500
+    }
+  },
+  computed: {
+    rules() {
+      let ruleResult = {};
+      this.formRules.forEach((option, xIndex) => {
+        option.forEach((item) => {
+          ruleResult[item.field] = [this.getRule(item, this.formFields)];
+        });
+      });
+      if (this.$refs.volform) {
+        setTimeout(() => {
+          this.$refs.volform.clearValidate();
+        }, 100);
+      }
+      return ruleResult;
+    }
+  },
+  setup(props, context) {
+    const { appContext, proxy } = getCurrentInstance();
+    const remoteCall = ref(true);
+    const span = ref(1);
+    const rangeFields = toRefs([]);
+    const volform = ref(null);
+    const numberFields = toRefs([]);
+    onMounted(() => {});
+    const initFormRules = (init) => {
+      if (props.loadKey) {
+        initSource();
+      }
+      props.formRules.forEach((row, xIndex) => {
+        if (row.length > span.value) span.value = row.length;
+        let _count = 0,
+          _size = 0;
+        row.forEach((x) => {
+          if (x.colSize > 0) {
+            _size = _size + x.colSize;
+            _count++;
+          }
+        });
+        if (_count > 0 && row.length - _count > 0) {
+          let _cellSize = (12 - _size) / (row.length - _count);
+          row.forEach((x) => {
+            if (!x.colSize) {
+              x.colSize = _cellSize;
+            }
+          });
+        }
+        row.forEach((item, yIndex) => {
+          if (item.type == 'number') {
+            numberFields.push(item.field);
+          }
+          // 鐩墠鍙敮鎸乻elect鍗曢�夎繙绋嬫悳绱紝remote杩滅▼浠庡悗鍙板瓧鍏告暟鎹簮杩涜鎼滅储锛寀rl浠庢寚瀹氱殑url鎼滅储
+          if (item.remote || item.url) {
+            // item.remoteData = [];
+            item.loading = false;
+            item.point = { x: xIndex, y: yIndex };
+          }
+          // 鍒濆鍖栦笂浼犳枃浠朵俊鎭�
+          initUpload(item, init);
+          // 鍒濆鍖栨暟鎹簮绌哄璞�
+          if (item.dataKey) {
+            // 涓嬫媺妗嗛兘寮哄埗璁剧疆涓哄瓧绗︿覆绫诲瀷
+            item.columnType = 'string';
+            if (!item.data) {
+              item.data = [];
+            }
+          }
+
+          if (item.range || item.type == 'range') {
+            if (
+              !(props.formFields[item.field] instanceof Array) ||
+              props.formFields[item.field].length != 2
+            ) {
+              props.formFields[item.field] = ['', ''];
+            }
+            rangeFields.push(item.field);
+          }
+        });
+      });
+    };
+
+    const initSource = () => {
+      let keys = [],
+        binds = [];
+      // 鍒濆鍖栧瓧鍏告暟鎹簮
+      props.formRules.forEach((item) => {
+        item.forEach((x) => {
+          if (x.dataKey && (!x.data || x.data.length == 0) && !x.remote) {
+            x.data = [];
+            binds.push({ key: x.dataKey, data: x.data, type: x.type });
+            if (keys.indexOf(x.dataKey) == -1) {
+              keys.push(x.dataKey);
+            }
+          }
+        });
+      });
+
+      if (keys.length == 0) return;
+      appContext.config.globalProperties.http
+        .post('/api/Sys_Dictionary/GetVueDictionary', keys)
+        .then((dic) => {
+          bindOptions(dic, binds);
+          proxy.$emit('dicInited', dic);
+        });
+    };
+    const bindOptions = (dic, binds) => {
+      dic.forEach((d) => {
+        if (d.data.length > props.select2Count) {
+          if (
+            !binds.some((x) => {
+              return x.key == d.dicNo && x.type == 'cascader';
+            })
+          ) {
+            d.data.forEach((item) => {
+              item.label = item.value;
+              item.value = item.key;
+            });
+          }
+        }
+        binds.forEach((x) => {
+          if (x.key != d.dicNo) return true;
+          // 濡傛灉鏈夋暟鎹殑鍒欎笉鏌ヨ
+          if (x.data.length > 0) return true;
+          //2022.03.13澧炲姞绾ц仈鏁版嵁婧愯嚜鍔ㄨ浆鎹�
+          if (x.type == 'cascader' || x.type == 'treeSelect') {
+            let _data = JSON.parse(JSON.stringify(d.data));
+            let cascaderArr = appContext.config.globalProperties.base.convertTree(
+              _data,
+              (node, data, isRoot) => {
+                if (!node.inited) {
+                  node.inited = true;
+                  node.label = node.value;
+                  node.value = node.key;
+                }
+              }
+            );
+            props.formRules.forEach((option) => {
+              option.forEach((item) => {
+                if (item.dataKey == x.key) {
+                  item.orginData = x.data;
+                  item.data = cascaderArr;
+                }
+              });
+            });
+          } else if (d.data.length > 0 && !d.data[0].hasOwnProperty('key')) {
+            let source = d.data,
+              newSource = new Array(source.length);
+            for (let index = 0; index < source.length; index++) {
+              newSource[index] = {
+                key: source['key'] + '',
+                value: source['value']
+              };
+            }
+            x.data.push(...newSource);
+          } else {
+            x.data.push(...d.data);
+          }
+        });
+      });
+    };
+
+    const initUpload = (item, init) => {
+      if (!init) return;
+      if (
+        ['img', 'excel', 'file'].indexOf(item.type != -1) ||
+        item.columnType == 'img'
+      ) {
+        // 鍙槸娌¤缃槸鍚﹁嚜鍔ㄤ笂浼犵殑锛岄粯璁ら兘鏄�夋嫨鏂囦欢鍚庤嚜鍔ㄤ笂浼�
+        if (!item.hasOwnProperty('autoUpload')) {
+          item.autoUpload = true;
+        }
+        if (!item.hasOwnProperty('fileList')) {
+          item.fileList = true;
+        }
+        if (!item.hasOwnProperty('downLoad')) {
+          item.downLoad = true;
+        }
+        if (!item.removeBefore) {
+          item.removeBefore = (index, file, files) => {
+            return true;
+          };
+        }
+        if (!item.fileClick) {
+          item.fileClick = (index, file, files) => {
+            return true;
+          };
+        }
+        if (!item.onChange) {
+          item.onChange = (files) => {
+            return true;
+          };
+        }
+        if (!item.uploadAfter) {
+          item.uploadAfter = (result, files) => {
+            return true;
+          };
+        }
+        if (!item.uploadBefore) {
+          item.uploadBefore = (files) => {
+            return true;
+          };
+        }
+      }
+    };
+    const validate = (callback) => {
+      let result = true;
+      volform.value.validate((valid) => {
+        if (!valid) {
+          appContext.config.globalProperties.$message.error('鏁版嵁楠岃瘉鏈�氳繃!');
+          result = false;
+        } else if (typeof callback === 'function') {
+          try {
+            callback(valid);
+          } catch (error) {
+            let msg = `琛ㄥ崟楠岃瘉鍥炶皟鏂规硶寮傚父锛�${error.message}`;
+            appContext.config.globalProperties.$message.error(msg);
+            console.log(msg);
+          }
+        }
+      });
+      return result;
+    };
+
+    initFormRules(true);
+    return {
+      remoteCall,
+      span,
+      rangeFields,
+      numberFields,
+      validate,
+      volform
+      //  initFormRules,
+      // initSource
+    };
+  },
+  created() {
+    this.formRules.forEach((rules) => {
+      rules.forEach((option) => {
+        if (option.type == 'treeSelect' && option.multiple === undefined) {
+          option.multiple = true;
+        }
+      });
+    });
+  },
+
+  data() {
+    return {
+      // remoteCall: true,
+      errorImg: 'this.src="' + require('@/assets/imgs/error-img.png') + '"'
+      // span: 1,
+      // rangeFields: [],
+    };
+  },
+  methods: {
+    getColWidth(item) {
+      //2021.08.30 澧炲姞鍔ㄦ�佽绠楄〃鍗曞搴�
+      let _span = 0;
+      this.formRules.forEach((row, xIndex) => {
+        //2022.05.06 杩藉姞琛ㄥ崟涓殣钘忕殑鍏冪礌涓嶅弬涓庡姩鎬佽绠楄〃鍗曞搴�
+        let rowLength = row.filter((item) => {
+          return !item.hidden;
+        }).length;
+        if (rowLength > _span) _span = rowLength;
+      });
+      let rete =
+        Math.round(((item.colSize || 12 / _span) / 0.12) * colPow, 10.0) /
+        colPow;
+      if (item.colSize) return rete.toFixed(3);
+      return rete.toFixed(3);
+      // return (100 - rete).toFixed(3);
+    },
+    previewImg(url) {
+      this.base.previewImg(url, this.http.ipAddress);
+    },
+    getSrc(path) {
+      if (!path) return;
+      if (!this.base.isUrl(path) && path.indexOf('.') != -1) {
+        return this.http.ipAddress + path;
+      }
+      return path;
+    },
+    // 鏄惁涓哄浘鐗囨枃浠剁瓑鏍煎紡骞跺瀛楁鐨勮浆鎹㈡垚鏁扮粍锛歔{name:'1.jpg',path:'127.0.0.1/ff/1.jpg'}]
+    isFile(item, formFields) {
+      if (
+        item.type == 'img' ||
+        item.columnType == 'img' ||
+        item.type == 'excel' ||
+        item.type == 'file'
+      ) {
+        this.convertFileToArray(item, formFields);
+        return true;
+      }
+      return false;
+    },
+    isReadonlyImgFile(item, formFields) {
+      if ((item.disabled || item.readonly) && this.isFile(item, formFields)) {
+        return true;
+      }
+      return false;
+    },
+    convertFileToArray(item, formFields) {
+      if (!item.maxFile) {
+        item.maxFile = 1; // 榛樿鍙兘涓婁紶涓�涓枃浠讹紝鍙互鍦╫nInit涓缃�
+      }
+
+      let fileInfo = formFields[item.field];
+      if (fileInfo instanceof Array) {
+        return;
+      }
+      if (fileInfo === null || fileInfo === undefined) {
+        formFields[item.field] = [];
+        return;
+      }
+      // 灏嗕互閫楀彿闅斿紑鐨勬枃浠跺垎鍓叉垚鏁扮粍127.0.0.1/aa/1.jpg,灏�127.0.0.1/aa/2.jpg
+      if (typeof fileInfo === 'string') {
+        if (fileInfo.trim() === '') {
+          formFields[item.field] = [];
+          return;
+        }
+        // 濡傛灉鏂囦欢璺緞鏄瓧绗︿覆锛屽垯浣跨敤锛屾媶鍒�
+        fileInfo = fileInfo.replace(/\\/g, '/');
+        let files = fileInfo.split(',');
+        formFields[item.field] = [];
+        for (let index = 0; index < files.length; index++) {
+          let file = files[index];
+          let splitFile = file.split('/');
+          formFields[item.field].push({
+            name: splitFile.length > 0 ? splitFile[splitFile.length - 1] : file,
+            path: file // this.base.isUrl(file) ? file : this.http.ipAddress + file,
+          });
+        }
+      }
+    },
+    dowloadFile(file) {
+      this.base.dowloadFile(
+        file.path,
+        file.name,
+        {
+          Authorization: this.$store.getters.getToken()
+        },
+        this.http.ipAddress
+      );
+    },
+    validatorPhone(ruleOption, value, callback) {
+      if (!ruleOption.required && !value && value != '0') {
+        return callback();
+      }
+      if (!rule.phone.test((value || '').trim())) {
+        return callback(new Error('璇疯緭鍏ユ纭殑鎵嬫満鍙�'));
+      }
+      callback();
+    },
+    validatorPwd(ruleOption, value, callback) {
+      if (!ruleOption.required && !value && value != '0') {
+        return callback();
+      }
+      if ((value + '').trim().length < 6) {
+        return callback(new Error('瀵嗙爜闀垮害涓嶈兘灏忎簬6浣�'));
+      }
+      callback();
+    },
+    convertArrayValue(data, val) {
+      // 2020.12.13澧炲姞琛ㄥ崟澶氶�夊彧杞崲瀛楀吀
+      // 缂栬緫澶氶�塼able鏄剧ず
+      //2023.04.20淇鍙涓簂abel鏃跺師鏁版嵁琚瓧鍏告浛鎹簡鐨勯棶棰�
+      let valArr = Array.isArray(val)
+        ? val.map((x) => {
+            return x;
+          })
+        : val.split(',');
+      for (let index = 0; index < valArr.length; index++) {
+        var _item = data.find((x) => {
+          return x.key && x.key != '0' && x.key + '' == valArr[index] + '';
+        });
+        if (_item) {
+          valArr[index] = _item.value;
+        }
+      }
+      return valArr.join(',');
+    },
+    getText(formFields, item) {
+      // 2019.10.24淇琛ㄥ崟select缁勪欢涓哄彧璇荤殑灞炴�ф椂娌℃湁缁戝畾鏁版嵁婧�
+      let text = formFields[item.field];
+      if (typeof text === 'function') return text(formFields);
+      if (text === 'null' || text === '' || text === null || text === undefined)
+        return '--';
+      //2021.03.02澧炲姞鍙鏃舵棩鏈熷鐞�
+      if (item.type == 'date') {
+        return text.replace('T', ' ').split(' ')[0];
+      }
+      //2021.03.31淇琛ㄥ崟switch鍙鏃舵病鏈夎浆鎹㈠�肩殑闂
+      if (item.type == 'switch') {
+        return text ? '鏄�' : '鍚�';
+      }
+      if (!item.data) return text;
+      if (item.type == 'selectList' || item.type == 'checkbox') {
+        return this.convertArrayValue(item.data, text);
+      }
+      var _item = item.data.find((x) => {
+        return x.key == text;
+      });
+      return _item ? _item.value : text;
+    },
+    onClear(item, formFields) {
+      // 杩滅▼select鏍囩娓呯┖閫夐」
+      item.data.splice(0);
+      // console.log(2);
+    },
+    onChange(item, value) {
+      if (item.onChange && typeof item.onChange === 'function') {
+        item.onChange(value, item);
+      }
+    },
+    onRemoteChange(item, value) {
+      // 绗簩娆℃墦寮�鏃讹紝榛樿鍊兼垚浜唘ndefined锛屽緟鏌iewgrid涓噸缃唬鐮�
+      if (value == undefined && item.data.length > 0) {
+        this.formFields[item.field] = item.data[0].key;
+        //  console.log('undefined');
+      }
+      this.remoteCall = false;
+      if (item.onChange && typeof item.onChange === 'function') {
+        item.onChange(value, item);
+      }
+    },
+    getData(item) {
+      return item.data;
+    },
+
+    // 杩滅▼鎼滅储(鎵撳紑寮瑰嚭妗嗘椂搴旇绂佹鎼滅储)
+    remoteSearch(item, formFields, val) {
+      if (!item.remote && !item.url) {
+        return;
+      }
+      if (
+        val == '' ||
+        (item.data.length == 1 &&
+          (val == item.data[0].key || val == item.data[0].value))
+      ) {
+        return;
+      }
+      // 寮瑰嚭妗嗘垨鍒濆鍖栬〃鍗曟椂缁檇ata璁剧疆鏁扮粍榛樿鍊�2
+      // 2020.09.26淇杩滅▼鎼滅储鑷畾涔塽rl涓嶈捣浣滅敤鐨勯棶棰�
+      let url;
+      if (typeof item.url === 'function') {
+        url = item.url(val, item.dataKey, item);
+      } else {
+        url =
+          (item.url || '/api/Sys_Dictionary/GetSearchDictionary') +
+          '?dicNo=' +
+          item.dataKey +
+          '&value=' +
+          val;
+      }
+      this.http.post(url).then((dicData) => {
+        //this.$set(item, "loading", false);
+        item.loading = false;
+        item.data = dicData;
+        this.formRules[item.point.x].splice(item.point.y, 1, item);
+      });
+    },
+    getObject(date) {
+      if (typeof date === 'object') {
+        return date;
+      }
+      return new Date(date);
+    },
+    reset(sourceObj) {
+      // 閲嶇疆琛ㄥ崟鏃讹紝绂佺敤杩滅▼鏌ヨ
+      this.$refs['volform'].resetFields();
+      if (this.rangeFields.length) {
+        this.rangeFields.forEach((key) => {
+          this.formFields[key].splice(0);
+          this.formFields[key] = [null, null];
+        });
+      }
+      if (!sourceObj) return;
+      for (const key in this.formFields) {
+        if (sourceObj.hasOwnProperty(key)) {
+          this.formFields[key] = sourceObj[key];
+          if (this.numberFields.indexOf(key) != -1) {
+            this.formFields[key] = sourceObj[key] * 1 || 0;
+          }
+        }
+      }
+      //  this.remoteCall = true;
+    },
+
+    fileOnChange(files, item) {
+      this.$refs.volform.clearValidate(item.field);
+      if (item.onChange) {
+        return item.onChange(files);
+      }
+      return true;
+    },
+    isReadonly(item) {
+      return item.readonly || item.disabled;
+    },
+    getRule(item, formFields) {
+      //2021.07.17澧炲姞鍙琛ㄥ崟涓嶉獙璇�
+      //range涓巗wtich鏆傛椂涓嶅仛鏍¢獙
+      if (
+        // item.readonly ||
+        // item.disabled ||
+        item.type == 'switch' ||
+        item.type == 'range'
+      )
+        return { required: false };
+      // 鐢ㄦ埛璁剧疆鐨勮嚜瀹氫箟鏂规硶
+      if (item.validator && typeof item.validator === 'function') {
+        return {
+          validator: (rule, val, callback) => {
+            // 鐢ㄦ埛鑷畾涔夌殑鏂规硶锛屽鏋滆繑鍥炰簡鍊硷紝鐩存帴鏄剧ず杩斿洖鐨勫�硷紝楠岃瘉涓嶉�氳繃
+            let message = item.validator(rule, val);
+            if (message) return callback(new Error(message + ''));
+            return callback();
+          },
+          required: item.required,
+          trigger: rule.change.indexOf(item.type) != -1 ? 'change' : 'blur'
+        };
+      }
+      if (['img', 'excel', 'file'].indexOf(item.type) != -1) {
+        return {
+          validator: (rule, val, callback) => {
+            //2021.09.05绉婚櫎鏂囦欢涓婁紶榛樿蹇呭~
+            if (
+              item.required &&
+              !this.isReadonly(item) &&
+              (!val || !val.length)
+            ) {
+              return callback(
+                new Error(item.type == 'img' ? '璇蜂笂浼犵収鐗�' : '璇蜂笂浼犳枃浠�')
+              );
+            }
+            return callback();
+          },
+          required: item.required,
+          trigger: 'change'
+        };
+      }
+      // 璁剧疆鏁板瓧鐨勬渶澶у�兼皯鏈�灏忓��
+      if (
+        item.type == 'number' ||
+        item.columnType == 'number' ||
+        item.columnType == 'int' ||
+        item.type == 'decimal'
+      ) {
+        // 濡傛灉鏄繀濉」鐨勬暟瀛楋紝璁剧疆涓�涓粯璁ゆ渶澶т笌鏈�鍊煎皬
+        if (item.required && typeof item.min !== 'number') {
+          item.min = 0; //item.type == "decimal" ? 0.1 : 1;
+        }
+
+        return {
+          required: item.required,
+          message: item.title + '鍙兘鏄暟瀛�',
+          title: item.title,
+          trigger: 'blur',
+          min: item.min,
+          max: item.max,
+          type: item.columnType || item.type,
+          validator: (ruleObj, value, callback) => {
+            if (!ruleObj.min && !ruleObj.max) {
+              if (ruleObj.required) {
+                if ((!value && value != '0') || !rule.decimal.test(value)) {
+                  return callback(new Error('鍙兘鏄暟瀛�'));
+                }
+              }
+              return callback();
+            }
+            if (this.isReadonly(item)) return callback();
+            if (ruleObj.type == 'number') {
+              if (!rule.number.test(value)) {
+                ruleObj.message = ruleObj.title + '鍙兘鏄暣鏁�';
+                return callback(new Error(ruleObj.message));
+              }
+            } else {
+              if (!rule.decimal.test(value)) {
+                ruleObj.message = ruleObj.title + '鍙兘鏄暟瀛�';
+                return callback(new Error(ruleObj.message));
+              }
+            }
+            if (
+              ruleObj.min !== undefined &&
+              typeof ruleObj.min === 'number' &&
+              value < ruleObj.min
+            ) {
+              ruleObj.message = ruleObj.title + '涓嶈兘灏忎簬' + ruleObj.min;
+              return callback(new Error(ruleObj.message));
+            }
+            if (
+              ruleObj.max !== undefined &&
+              typeof ruleObj.max === 'number' &&
+              value > ruleObj.max
+            ) {
+              ruleObj.message = ruleObj.title + '涓嶈兘澶т簬' + ruleObj.max;
+              return callback(new Error(ruleObj.message));
+            }
+            return callback();
+          }
+        };
+      }
+
+      // 鎵嬫満銆佸瘑鐮侀獙璇�
+      if (item.type == 'password' || item.type == 'phone') {
+        return {
+          validator:
+            item.type == 'phone' ? this.validatorPhone : this.validatorPwd,
+          required: item.required,
+          trigger: 'blur'
+        };
+      }
+
+      if (!item.required && item.type != 'mail') return { required: false };
+
+      if (!item.hasOwnProperty('type')) item.type = 'text';
+
+      if (inputTypeArr.indexOf(item.type) != -1) {
+        let message =
+          item.title +
+          (item.type == 'mail' ? '蹇呴』鏄竴涓偖绠卞湴鍧�' : '涓嶈兘涓虹┖');
+        let type = item.type == 'mail' ? 'email' : types[item.columnType];
+        let _rule = {
+          required: true,
+          message: message,
+          trigger: 'blur',
+          type: type,
+          validator: (ruleObj, value, callback) => {
+            if (
+              !this.isReadonly(item) &&
+              (value === '' || value === undefined || value === null)
+            ) {
+              return callback(new Error(ruleObj.message));
+            }
+            return callback();
+          }
+        };
+        if (item.type == 'mail') {
+          _rule.validator = undefined;
+          return _rule;
+        }
+        if (item.min) {
+          _rule.min = item.min;
+          _rule.message = item.title + '鑷冲皯' + item.min + '涓瓧绗�!';
+        }
+        if (item.max) {
+          return [
+            _rule,
+            {
+              max: item.max,
+              required: true,
+              message: item.title + '鏈�澶�' + item.max + '涓瓧绗�!',
+              trigger: 'blur'
+            }
+          ];
+        }
+        return _rule;
+      }
+
+      if (item.type == 'radio') {
+        return {
+          required: item.required,
+          message: '璇烽�夋嫨' + item.title,
+          trigger: 'change',
+          type: 'string'
+        };
+      }
+      if (
+        item.type == 'date' ||
+        item.type == 'datetime' ||
+        item.type == 'month' ||
+        item.type == 'time'
+      ) {
+        return {
+          required: true,
+          message: '璇烽�夋嫨' + item.title,
+          trigger: 'change',
+          type: item.range ? 'array' : 'string',
+          validator: (rule, val, callback) => {
+            if (this.isReadonly(item)) return callback();
+            // 鐢ㄦ埛鑷畾涔夌殑鏂规硶锛屽鏋滆繑鍥炰簡鍊硷紝鐩存帴鏄剧ず杩斿洖鐨勫�硷紝楠岃瘉涓嶉�氳繃
+            if (!val || (item.range && !val.length)) {
+              return callback(new Error('璇烽�夋嫨鏃ユ湡'));
+            }
+            return callback();
+          }
+        };
+      }
+
+      if (item.type == 'cascader') {
+        return {
+          type: 'array',
+          required: true,
+          min: item.min || 1,
+          // message: "璇烽�夋嫨" + item.title,
+          trigger: 'change',
+          validator: (rule, val, callback) => {
+            if (this.isReadonly(item)) return callback();
+            // 鐢ㄦ埛鑷畾涔夌殑鏂规硶锛屽鏋滆繑鍥炰簡鍊硷紝鐩存帴鏄剧ず杩斿洖鐨勫�硷紝楠岃瘉涓嶉�氳繃
+            let _arr = this.formFields[item.field];
+            if (!_arr || !_arr.length) {
+              return callback(new Error('璇烽�夋嫨' + item.title));
+            }
+            return callback();
+          }
+        };
+      }
+
+      if (
+        ['select', 'selectList', 'checkbox', 'cascader', 'treeSelect'].indexOf(
+          item.type
+        ) != -1
+      ) {
+        let _rule = {
+          type: item.type == 'select' ? 'string' : 'array',
+          required: true,
+          min: item.min || 1,
+          message: '璇烽�夋嫨' + item.title,
+          trigger: 'change',
+          validator: (rule, value, callback) => {
+            if (this.isReadonly(item)) return callback();
+            //2021.11.27淇澶氶�夋病鏈夋彁绀虹殑闂
+            if (value == undefined || value === '') {
+              return callback(new Error(rule.message));
+            } else if (
+              (item.type == 'checkbox' ||
+                item.type == 'selectList' ||
+                item.type == 'treeSelect') &&
+              (!(value instanceof Array) || !value.length)
+            ) {
+              return callback(new Error(rule.message));
+            }
+            return callback();
+          }
+        };
+
+        if (_rule.max) {
+          _rule.nax = item.max;
+          _rule.message = '鏈�澶氬彧鑳介�夋嫨' + item.max + '椤�';
+        }
+        return _rule;
+      }
+      return {};
+    },
+    compareDate(date1, date2) {
+      if (!date2) {
+        return true;
+      }
+      return (
+        date1.valueOf() <
+        (typeof date2 == 'number' ? date2 : new Date(date2).valueOf())
+      );
+    },
+    getDateOptions(date, item) {
+      //2021.07.17璁剧疆鏃堕棿鍙�夎寖鍥�
+      if ((!item.min && !item.max) || !date) {
+        return false;
+      }
+      if (item.min && item.min.indexOf(' ') == -1) {
+        //涓嶈缃椂鍒嗙锛屽悗闈細鑷姩鍔犱笂 08:00
+        item.min = item.min + ' 00:00:000';
+      }
+      return (
+        this.compareDate(date, item.min) || !this.compareDate(date, item.max)
+      );
+    },
+    getDateFormat(item) {
+      if (item.type == 'month') {
+        return 'YYYY-MM';
+      }
+      // if (item.type=='time') {
+      //     return 'HH:mm:ss'
+      // }
+      //瑙乭ttps://day.js.org/docs/zh-CN/display/format
+      return item.type == 'date' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss';
+    },
+    dateRangeChange(val, item) {
+      if (!val) {
+        this.$emit('update:formFields');
+        return;
+      }
+      item.onChange && item.onChange(val);
+    },
+    onKeyPress($event, item) {
+      if ($event.keyCode == 13) {
+        return;
+      }
+      item.onKeyPress($event);
+    },
+    filterMethod(value, data) {
+      return data.label.includes(value);
+    },
+    getNode( label,node, data){
+      console.log(label)
+    }
+  }
+});
+</script>
+<style lang="less" scoped>
+.el-form-item {
+  margin-right: 0;
+}
+.el-form-item {
+  .form-imgs {
+    img {
+      float: left;
+      cursor: pointer;
+      object-fit: cover;
+      margin: 0 10px 10px 0;
+      width: 65px;
+      height: 65px;
+      border: 1px solid #c7c7c7;
+      overflow: hidden;
+      border-radius: 5px;
+      box-sizing: content-box;
+    }
+  }
+}
+.el-form-item ::v-deep(.el-form-item__label) {
+  padding: 0 0px 0 4px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.el-form-item ::v-deep(.el-range-separator) {
+  text-align: center;
+  width: 13px;
+  padding: 0px 1px;
+  font-size: 12px;
+}
+.el-form-item ::v-deep(.el-range__close-icon) {
+  margin-right: -10px;
+}
+.form-item-extra {
+  > *:first-child {
+    flex: 1;
+  }
+  display: flex;
+  .form-extra {
+    padding-left: 7px;
+    line-height: 36px;
+  }
+}
+.vol-form-item {
+  width: 100%;
+}
+.vol-form-item ::v-deep(.el-form-item__content) {
+  display: unset !important;
+}
+.vol-form-item ::v-deep(.el-input--large .el-input__inner) {
+  height: 34px !important;
+}
+.vol-form-item ::v-deep(.el-input-number--large .el-input-number__increase) {
+  border-top: 1px solid #d4d4d4;
+}
+.vol-form-item ::v-deep(.el-input-number--large .el-input-number__decrease) {
+  border-bottom: 1px solid #d4d4d4;
+}
+.vol-form-item ::v-deep(.el-input--large.el-date-editor) {
+  height: 36px;
+}
+.v-date-range ::v-deep(.el-input__prefix) {
+  display: none;
+}
+.v-date-range ::v-deep(.el-input__inner) {
+  padding: 0;
+}
+
+.el-form-item ::v-deep(.el-checkbox) {
+  margin-right: 8px;
+}
+.el-form-item ::v-deep(.el-checkbox .el-checkbox__label) {
+  padding-left: 5px;
+}
+.el-form-item ::v-deep(textarea) {
+  font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB',
+    'Microsoft YaHei', '寰蒋闆呴粦', Arial, sans-serif !important;
+}
+.el-form-item ::v-deep(.el-select .el-select__tags > span) {
+  display: flex;
+}
+.el-form-item ::v-deep(.el-select-v2__combobox-input) {
+  height: 30px;
+}
+.el-form-item ::v-deep(.el-select__tags) {
+  overflow: hidden;
+  height: 30px;
+}
+.el-form-item ::v-deep(.el-select-tags-wrapper) {
+  position: absolute;
+}
+
+.el-form-item {
+  vertical-align: top !important;
+}
+.form-file-list {
+  a {
+    color: #3ea9ff;
+  }
+  a:hover {
+    cursor: pointer;
+    color: #0281e7;
+  }
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/components/basic/VolForm/VolFormRender.js b/WIDESEA_WMSClient/src/components/basic/VolForm/VolFormRender.js
new file mode 100644
index 0000000..ef7459e
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolForm/VolFormRender.js
@@ -0,0 +1,14 @@
+import { h } from 'vue';
+
+export default {
+  name: "FormExpand",
+  functional: true,
+  props: {
+    render: Function,
+    par: {}//娴嬭瘯鍙傛暟
+  },
+  render: ({ render, par }) => {
+    return render(h, { par }); //h();
+  }
+};
+
diff --git a/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/DownloadForm.js b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/DownloadForm.js
new file mode 100644
index 0000000..69bf098
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/DownloadForm.js
@@ -0,0 +1,156 @@
+import templateCode from './templateCode'
+export default function () {
+    let code = templateCode;
+    let _formOptions = this.options.formOptions.map(m => {
+        let _op = m.map((m1, i) => {
+            let _obj;
+            //.data[0].hasOwnProperty("key")
+            if (m1.data && m1.data.length && !m1.dataKey) {
+                let m2 = JSON.parse(JSON.stringify(m1));
+                m2.data = m2.data.map(c => {
+                    return { key: c.label || c.key, value: c.label }
+                })
+                _obj = JSON.stringify(m2)
+            } else {
+                _obj = JSON.stringify(m1)
+            }
+            return (i === 0 ? '' : '\n\t\t\t\t') + _obj
+        }).join(',');
+        //return JSON.stringify(m, null, '')
+        return _op;
+    })
+    code = code.replace('{#fields}', JSON.stringify(this.options.fields))
+        .replace('{#formOptions}', '[' + _formOptions.join('],\n\t\t\t\t[') + ']');
+    code = code.replace('}],', '\t\t\t\t\t}],')
+        .replace("[{#tableOptions}]", JSON.stringify(this.options.tables, null, '\t'))
+        .replace("[{#tabsOptions}]", JSON.stringify(this.options.tabs, null, '\t'))
+    // fields: {#fields}, 
+    //     formOptions: [{#formOptions}],
+    //     tables: [{#tables}],
+    //     tabs: [{#tabs}] 
+    var tabsText = this.options.tabs.length ? ` <div class="tables"
+     style="padding-bottom: 10px">
+  <el-tabs v-model="tabsModel"
+           @tab-click="() => {}">
+    <el-tab-pane style="padding: 0"
+                 class="table-item"
+                 v-for="(item, index) in tabs"
+                 :label="item.name"
+                 :name="index+''"
+                 :key="index">
+      <div class="table-header">
+        <div class="header-text">
+          {{ item.name }}
+        </div>
+        <div class="header-btns">
+          <el-button type="primary"
+                     size="mini"
+                     :key="bindex"
+                     :icon="btnItem.icon"
+                     plain
+                     @click="tabsTableBtnClick(item, bindex, index)"
+                     v-for="(btnItem, bindex) in item.buttons">
+            {{ btnItem.name }}
+          </el-button>
+        </div>
+      </div>
+      <vol-table :url="item.url"
+                 :load-key="false"
+                 :index="true"
+                 :ref="'tabsTable' + index"
+                 :tableData="item.tableData"
+                 :columns="item.columns"
+                 :max-height="250"
+                 :pagination-hide="item.pagination"
+                 :column-index="true"
+                 :ck="true"></vol-table>
+    </el-tab-pane>
+  </el-tabs>
+</div>`: ''
+    code = code.replace('{#tabs}', tabsText);
+    if (this.options.tables.length || this.options.tabs.length) {
+        code = code.replace("{import_VolTable}", "import VolTable from '@/components/basic/VolTable'")
+        code = code.replace(",{component_table}", ",'vol-table': VolTable")
+    } else {
+        code = code.replace("{import_VolTable}", '')
+        code = code.replace("{component_table}", '')
+    }
+
+    if (this.options.tables.length) {
+
+        code = code.replace('{table_ms}', `
+      tableBtnClick (item, btnIndex, index) {
+          if (item.buttons[btnIndex].value == "add") {
+              this.$refs["table" + index][0].addRow({});
+              return;
+          }
+          if (item.buttons[btnIndex].value == "del") {
+              this.$refs["table" + index][0].delRow();
+              return;
+          }
+      },
+      tabsTableBtnClick (item, btnIndex, index) {
+          if (item.buttons[btnIndex].value == "add") {
+              this.$refs["tabsTable" + index][0].addRow({});
+              return;
+          }
+          if (item.buttons[btnIndex].value == "del") {
+              this.$refs["tabsTable" + index][0].delRow();
+              return;
+          }
+      },`)
+        code = code.replace('{#tables}',
+            `
+      <!--table閰嶇疆 -->
+      <div class="tables">
+          <div class="table-item"
+              v-for="(item, index) in tables"
+              :key="index">
+          <div class="table-header">
+              <div class="header-text">
+              {{ item.name }}
+              </div>
+              <div class="header-btns">
+              <el-button type="primary"
+                          size="mini"
+                          :key="bindex"
+                          plain
+                          @click="tableBtnClick(item, bindex, index)"
+                          :icon="btnItem.icon"
+                          v-for="(btnItem, bindex) in item.buttons">
+                  {{ btnItem.name }}
+              </el-button>
+              </div>
+          </div>
+          <vol-table :url="item.url"
+                      :load-key="false"
+                      :index="true"
+                      :ref="'table' + index"
+                      :tableData="item.tableData"
+                      :columns="item.columns"
+                      :max-height="250"
+                      :pagination-hide="item.pagination"
+                      :column-index="true"
+                      :ck="true"></vol-table>
+          </div>
+      </div>`);
+
+    } else {
+
+        code = code.replace('{table_ms}', '')
+        code = code.replace('{#tables}', '');
+    }
+    const blob = new Blob([code], { type: "text/plain;charset=utf-8" })
+    if ('download' in document.createElement('a')) { // 闈濱E涓嬭浇
+        const elink = document.createElement('a')
+        elink.download = `code${new Date().valueOf()}.vue`;
+        elink.style.display = 'none'
+        elink.href = URL.createObjectURL(blob)
+        document.body.appendChild(elink)
+        elink.click()
+        URL.revokeObjectURL(elink.href) // 閲婃斁URL 瀵硅薄
+        document.body.removeChild(elink)
+    } else {
+        navigator.msSaveBlob(blob, fileName)
+    }
+}
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/VolFormDraggable.vue b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/VolFormDraggable.vue
new file mode 100644
index 0000000..1e64910
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/VolFormDraggable.vue
@@ -0,0 +1,1159 @@
+<template>
+  <div class="drag-container">
+    <!-- @start="onStart" -->
+    <div class="drag-left">
+      <div class="left-title">缁勪欢鍒楄〃</div>
+      <draggable
+        v-model="components"
+        @end="end1"
+        class="left-draggable-item"
+        :group="{ name: 'componentsGroup', pull: 'clone', put: false }"
+        animation="300"
+        @start="onStart"
+        :sort="false"
+        :move="onMove1"
+      >
+        <transition-group>
+          <div
+            :class="item.id == 1 ? 'item forbid' : 'item'"
+            v-for="item in components"
+            :key="item.id"
+          >
+            <i :class="item.icon"></i> {{ item.name }}
+          </div>
+        </transition-group>
+      </draggable>
+      <div class="example">
+        <div @click="example1">绀轰緥涓�<i class="el-icon-arrow-right"></i></div>
+        <div @click="example2">绀轰緥浜�<i class="el-icon-arrow-right"></i></div>
+        <div @click="example3">绀轰緥涓�<i class="el-icon-arrow-right"></i></div>
+      </div>
+    </div>
+
+    <div class="drag-center">
+      <div class="center-top">
+        <span>
+          <!-- <i class="el-icon-warning-outline"></i>楂樻晥鐨勮〃鍗曢厤缃� -->
+        </span>
+        <el-button type="primary" size="mini" plain @click="save"
+          ><i class="el-icon-check"> </i>淇濆瓨</el-button
+        >
+        <el-button type="primary" size="mini" plain @click="preview(true)"
+          ><i class="el-icon-view"> </i>棰勮</el-button
+        >
+        <el-button type="primary" size="mini" plain @click="download"
+          ><i class="el-icon-view"> </i>涓嬭浇</el-button
+        >
+        <el-button type="primary" @click="clearItems" size="mini" plain
+          ><i class="el-icon-delete"> </i>娓呯┖</el-button
+        >
+        <a
+          style="margin-left: 15px"
+          href="http://v2.volcore.xyz/document/api"
+          target="_blank"
+          >璁捐鍣ㄥ熀浜庢鏋秜olform銆乿oltable銆乿olupload銆乿olbox瀹氬埗寮�鍙�</a
+        >
+      </div>
+      <div>
+        <el-alert
+          title="鍏充簬琛ㄥ崟璁捐鍣�"
+          type="success"
+          :show-icon="true"
+          :closable="false"
+        >
+          <div>
+            1銆佽〃鍗曡璁″櫒鍩轰簬draggable寮�鍙�,涓烘湰妗嗘灦鑷畾涔夐〉闈㈠姛鑳界殑琛ュ厖,妗嗘灦浠嶄互鍙鍖栦唬鐮佺敓鎴愬櫒涓烘牳蹇�
+          </div>
+          <div>
+            2銆佹敮鎸佸彲瑙嗗寲璁捐1瀵�1銆�1瀵瑰鍙婅〃鍗曚笅鎷夋鑷姩缁戝畾銆乼able鑷姩鍔犺浇鏁版嵁(鍒嗛〉銆佺紪杈�)銆佽嚜鍔ㄤ笂浼犳枃浠躲�佸瘜鏂囨湰缂栬緫
+          </div>
+        </el-alert>
+      </div>
+      <el-scrollbar style="flex: 1">
+        <div class="tips" key="empty" v-show="!currentComponents.length">
+          璇峰皢宸﹁竟缁勪欢鎷栧叆姝ゅ鍣ㄤ腑
+        </div>
+        <el-form label-position="top">
+          <draggable
+            class="draggable-container"
+            v-model="currentComponents"
+            @end="end2"
+            animation="300"
+            :move="onMove"
+            group="componentsGroup"
+          >
+            <transition-group class="drag-center-item">
+              <div
+                class="item2"
+                :class="{ actived: index === currentIndex }"
+                @click="itemClick(item, index)"
+                :style="{ width: item.width + '%' }"
+                v-for="(item, index) in currentComponents"
+                :key="index"
+              >
+                <i
+                  class="el-icon-document-copy"
+                  @click.stop="copyItem(item)"
+                ></i>
+                <i class="el-icon-delete" @click.stop="removeItem(index)"> </i>
+                <el-form-item
+                  :required="item.required"
+                  label-position="top"
+                  style="width: 100%"
+                  :label="item.type == 'line' ? '' : item.name"
+                >
+                  <el-col>
+                    <!-- <div></div> -->
+                    <!-- {{ item.name }} -->
+                    <el-input
+                      v-if="item.type == 'text'"
+                      placeholder="璇疯緭鍏ュ唴瀹�"
+                      v-model="item.value"
+                      :disabled="item.readonly"
+                      size="medium"
+                    ></el-input>
+                    <el-input
+                      v-else-if="item.type == 'textarea'"
+                      type="textarea"
+                      v-model="item.value"
+                      :disabled="item.readonly"
+                      placeholder="璇疯緭鍏ュ唴瀹�"
+                    ></el-input>
+                    <el-date-picker
+                      v-else-if="item.type == 'date'"
+                      align="right"
+                      v-model="item.value"
+                      type="date"
+                      :disabled="item.readonly"
+                      size="medium"
+                      placeholder="閫夋嫨鏃ユ湡"
+                    >
+                    </el-date-picker>
+                    <el-radio-group
+                      :disabled="item.readonly"
+                      v-else-if="item.type == 'radio'"
+                      v-model="item.value"
+                    >
+                      <el-radio
+                        v-for="item in item.data"
+                        :key="item.key"
+                        :label="item.value"
+                        :value="item.key"
+                      >
+                      </el-radio>
+                      <!-- <el-radio :label="1">鏄�</el-radio>
+                      <el-radio :label="0">鍚�</el-radio> -->
+                    </el-radio-group>
+
+                    <el-checkbox-group
+                      v-model="item.values"
+                      :disabled="item.readonly"
+                      style="width: 100%; display: inline-block"
+                      v-else-if="item.type == 'checkbox'"
+                    >
+                      <el-checkbox
+                        v-for="item in item.data"
+                        :key="item.key"
+                        :label="item.value"
+                        :value="item.key"
+                      >
+                      </el-checkbox>
+                      <!-- <el-checkbox label="澶嶉�夋 A"></el-checkbox>
+                      <el-checkbox label="澶嶉�夋 B"></el-checkbox>
+                      <el-checkbox label="澶嶉�夋 C"></el-checkbox> -->
+                    </el-checkbox-group>
+
+                    <el-select
+                      style="width: 100%"
+                      :disabled="item.readonly"
+                      v-model="item.value"
+                      size="medium"
+                      v-else-if="item.type == 'select'"
+                      placeholder="璇烽�夋嫨"
+                    >
+                      <el-option
+                        v-for="item in item.data"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                      >
+                      </el-option>
+                    </el-select>
+                    <el-select
+                      style="width: 100%"
+                      :disabled="item.readonly"
+                      v-model="item.values"
+                      size="medium"
+                      :multiple="true"
+                      v-else-if="item.type == 'selectList'"
+                      placeholder="璇烽�夋嫨"
+                    >
+                      <el-option
+                        v-for="item in item.data"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                      >
+                      </el-option>
+                    </el-select>
+                    <el-cascader
+                      :disabled="item.readonly"
+                      style="width: 100%"
+                      v-else-if="item.type == 'cascader'"
+                      v-model="item.values"
+                      :options="item.data"
+                      @change="() => {}"
+                    ></el-cascader>
+
+                    <el-switch
+                      :disabled="item.readonly"
+                      v-model="item.value"
+                      style="width: 100%"
+                      v-else-if="item.type == 'switch'"
+                      active-color="#13ce66"
+                      inactive-color="#0e7ef3"
+                      :active-value="1"
+                      :inactive-value="0"
+                    >
+                    </el-switch>
+                    <div class="col-line" v-else-if="item.type == 'line'">
+                      {{ item.name }}
+                    </div>
+
+                    <vol-upload
+                      v-else-if="
+                        item.type == 'img' ||
+                        item.type == 'excel' ||
+                        item.type == 'file'
+                      "
+                      :fileInfo="item.fileInfo"
+                      :url="item.url"
+                      :img="item.type == 'img'"
+                      :excel="item.type == 'excel'"
+                      :multiple="item.multiple"
+                      :max-size="item.maxSize"
+                      :max-file="item.maxFile"
+                      :autoUpload="item.autoUpload"
+                    >
+                    </vol-upload>
+                    <vol-wang-editor
+                      v-else-if="item.type == 'editor'"
+                      :url="item.url"
+                      v-model="item.value"
+                      :height="item.height"
+                    ></vol-wang-editor>
+
+                    <vol-table
+                      v-else-if="item.type == 'table'"
+                      :url="item.url"
+                      :load-key="true"
+                      :index="item.edit"
+                      :tableData="item.tableData"
+                      :columns="item.columns"
+                      :height="item.height"
+                      :pagination-hide="true"
+                      :column-index="item.columnIndex"
+                      :ck="item.ck"
+                    ></vol-table>
+                    <el-button
+                      @click="model = true"
+                      v-else-if="item.type == 'box'"
+                      type="primary"
+                      size="small"
+                      >{{ item.name }}</el-button
+                    >
+                  </el-col>
+                </el-form-item>
+              </div>
+            </transition-group>
+          </draggable>
+        </el-form>
+      </el-scrollbar>
+    </div>
+    <div class="drag-right">
+      <div class="left-title">缁勪欢灞炴��</div>
+      <div class="attr" v-show="currentIndex != -1">
+        <div class="attr-item">
+          <div class="text">瀛楁鍚嶇О</div>
+          <el-input size="medium" v-model="currentItem.name" />
+        </div>
+        <div class="attr-item">
+          <div class="text">瀛楁(鍞竴瀛楁)</div>
+          <el-input size="medium" v-model="currentItem.field" />
+        </div>
+        <div class="attr-item" v-show="currentItem.type == 'table'">
+          <div class="text">鍚庡彴杩斿洖鏁版嵁鎺ュ彛鍦板潃</div>
+          <el-input
+            size="medium"
+            placeholder="渚�:api/琛ㄥ悕/getPageData"
+            v-model="currentItem.url"
+          />
+        </div>
+        <div
+          class="attr-item"
+          v-show="
+            currentItem.type != 'table' && currentItem.hasOwnProperty('url')
+          "
+        >
+          <div class="text">涓婁紶鎺ュ彛鍦板潃(鍚庡彴鎺ュ彛)</div>
+          <el-input
+            size="medium"
+            placeholder="鍙敤妗嗘灦鍦板潃:api/琛ㄥ悕/upload"
+            v-model="currentItem.url"
+          />
+          <div class="text" style="margin-top: 10px">鏂囦欢澶у皬闄愬埗(M)</div>
+          <el-input size="medium" v-model="currentItem.maxSize" />
+          <div class="text" style="margin-top: 10px">鏄惁澶氭枃浠朵笂浼�</div>
+          <el-switch
+            v-model="currentItem.multiple"
+            style="width: 100%"
+            active-color="#13ce66"
+            inactive-color="rgb(165 165 165)"
+            :active-value="true"
+            :inactive-value="false"
+          >
+          </el-switch>
+          <div class="text" style="margin-top: 10px">鏄惁鑷姩涓婁紶</div>
+          <el-switch
+            v-model="currentItem.autoUpload"
+            style="width: 100%"
+            active-color="#13ce66"
+            inactive-color="rgb(165 165 165)"
+            :active-value="true"
+            :inactive-value="false"
+          >
+          </el-switch>
+        </div>
+        <div class="attr-item" v-show="currentItem.data">
+          <div class="text">鏁版嵁婧�(涓嬫媺妗嗙粦瀹氳缃腑缁存姢)</div>
+
+          <!-- dicList -->
+          <el-select
+            style="width: 100%"
+            v-model="currentItem.key"
+            size="medium"
+            @change="dicChange"
+            placeholder="璇烽�夋嫨鏁版嵁婧愬瓧鍏�"
+          >
+            <el-option
+              v-for="item in dicList"
+              :key="item.key"
+              :label="item.value"
+              :value="item.key"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="attr-item" v-show="currentItem.type != 'table'">
+          <div class="text">鏍囩瀹藉害</div>
+          <el-slider
+            style="width: 90%"
+            :min="20"
+            v-model="colWidth"
+            :step="10"
+            show-stops
+          >
+          </el-slider>
+        </div>
+        <div class="attr-item attr2" v-show="currentItem.type != 'table'">
+          <div>
+            <div class="text">蹇呭~</div>
+            <el-switch
+              v-model="currentItem.required"
+              style="width: 100%"
+              active-color="#13ce66"
+              inactive-color="rgb(165 165 165)"
+              :active-value="true"
+              :inactive-value="false"
+            >
+            </el-switch>
+          </div>
+
+          <div>
+            <!-- active-text="鏄�"
+              inactive-text="鍚�" -->
+            <div class="text">鍙</div>
+            <el-switch
+              v-model="currentItem.readonly"
+              style="width: 100%"
+              active-color="#13ce66"
+              inactive-color="rgb(165 165 165)"
+              :active-value="true"
+              :inactive-value="false"
+            >
+            </el-switch>
+          </div>
+        </div>
+        <div v-show="currentItem.type == 'table'">
+          <div class="attr-item">
+            <div class="text">鏄惁浣跨敤閫夐」鍗�(tabs)</div>
+            <div>
+              <el-switch
+                v-model="currentItem.tabs"
+                style="width: 100%"
+                active-text="鏄�"
+                inactive-text="鍚�"
+                active-color="#13ce66"
+                inactive-color="rgb(165 165 165)"
+                :active-value="true"
+                :inactive-value="false"
+              >
+              </el-switch>
+            </div>
+          </div>
+          <div class="attr-item attr2">
+            <el-button
+              style="width: 100%"
+              @click="openTableModel"
+              type="primary"
+              size="medium"
+              >table閰嶇疆</el-button
+            >
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+  <vol-box
+    v-model="model"
+    :height="300"
+    :width="550"
+    :lazy="true"
+    title="寮瑰嚭妗�"
+  >
+    <template #content>
+      <div>寮瑰嚭妗嗗唴瀹�</div>
+    </template>
+    <template #footer>
+      <div>
+        <el-button type="primary" size="mini" @click="model = false"
+          ><i class="el-icon-close"></i>鐐瑰嚮鍏抽棴</el-button
+        >
+        <el-button size="mini" @click="model = false"
+          ><i class="el-icon-close"></i>鍏抽棴</el-button
+        >
+      </div>
+    </template>
+  </vol-box>
+
+  <vol-box
+    v-model="previewModel"
+    :height="600"
+    :width="1300"
+    :lazy="true"
+    :padding="1"
+    :close="false"
+    title="棰勮"
+  >
+    <preview style="height:600px" :options="viewFormData"></preview>
+  </vol-box>
+
+  <vol-box
+    v-model="tableModel"
+    :height="600"
+    :width="1300"
+    :lazy="true"
+    :padding="0"
+    :title="currentItem.name"
+  >
+    <template #content>
+      <div style="height:600px" >
+      <el-alert title="鍏充簬table閰嶇疆" type="info" :closable="false" show-icon>
+        姝ゅtable鏄妗嗘灦voltable鍩烘湰鎿嶄綔鐨勯厤缃�,濡傛灉闇�瑕佷簨浠惰Е鍙戙�佹暟鎹姞杞界瓑鏇村鍔熻兘锛岃鍦ㄧ敓鎴愬悗鐨勪唬鐮佹坊鍔犻渶瑕佺殑鍔熻兘锛屽畬鏁撮厤缃鏂囨。<a
+          href="http://v2.volcore.xyz/document/api"
+          style="color: #1e88e5; margin-left: 9px"
+          target="_blank"
+          >voltable</a
+        >
+      </el-alert>
+      <div class="btns">
+        <div class="btns-left">
+          琛ㄦ牸榛樿鍔熻兘鎸夐挳锛�
+          <el-checkbox
+            v-for="item in currentItem.buttons"
+            :label="item.name"
+            :key="item.name"
+            >{{ item.name }}</el-checkbox
+          >
+        </div>
+        <div class="btns-right">
+          <el-button type="primary" size="mini" @click="addRow"
+            ><i class="el-icon-plus"></i>娣诲姞瀛楁</el-button
+          >
+          <el-button type="primary" size="mini" @click="delRow"
+            ><i class="el-icon-delete"></i>鍒犻櫎瀛楁</el-button
+          >
+          <el-button type="primary" size="mini" @click="sortRow"
+            ><i class="el-icon-sort"></i>閲嶆柊鎺掑垪</el-button
+          >
+        </div>
+      </div>
+      <vol-table
+        :load-key="true"
+        :tableData="currnetTableData"
+        :columns="currentTableOption"
+        :height="448"
+        ref="table"
+        :index="true"
+        :pagination-hide="true"
+        :column-index="true"
+        :ck="true"
+      ></vol-table>
+    </div>
+    </template>
+    <template #footer>
+      <div style="text-align: center">
+        <el-button size="mini" @click="tableModel = false"
+          ><i class="el-icon-close"></i>鍏抽棴</el-button
+        >
+        <el-button type="primary" size="mini" @click="saveConfigOptions"
+          ><i class="el-icon-check"></i>淇濆瓨</el-button
+        >
+      </div>
+    </template>
+  </vol-box>
+</template>
+
+<script>
+import { h, resolveComponent } from "vue";
+// import draggable from "vuedraggable";
+import { VueDraggableNext } from "vue-draggable-next";
+// import VolWangEditor from "@/components/editor/VolWangEditor.vue";
+import VolUpload from "./../VolUpload";
+import VolTable from "./../VolTable";
+import VolBox from "./../VolBox";
+import VolFormPreview from "./VolFormPreview";
+import { components, tableOption } from "./options";
+import { options1, options2, options3 } from "./formTemplate";
+import downloadForm from "./DownloadForm";
+export default {
+  props: {
+    userComponents: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+  },
+  components: {
+    draggable: VueDraggableNext,
+    "vol-upload": VolUpload,
+    // "vol-wang-editor": VolWangEditor,
+    "vol-table": VolTable,
+    "vol-box": VolBox,
+    preview: VolFormPreview,
+  },
+  data() {
+    return {
+      options:{},
+      options1: options1,
+      options2: options2,
+      options3: options3,
+      colWidth: 100,
+      currentIndex: -1,
+      currentItem: {},
+      currnetTableData: [],
+      currentTableOption: tableOption,
+      //瀹氫箟瑕佽鎷栨嫿瀵硅薄鐨勬暟缁�
+      components: components,
+      currentComponents: [],
+      dicList: [],
+      model: false,
+      tableModel: false,
+      previewModel: false,
+      viewFormData: { fields: {}, formOptions: [], tables: [] },
+    };
+  },
+  watch: {
+    colWidth(newVal) {
+      if (this.currentIndex != -1) {
+        this.currentComponents[this.currentIndex].width = newVal;
+      }
+    },
+    userComponents: {
+      handler(newVal) {
+        this.currentComponents = newVal;
+      },
+      immediate: true,
+      deep: true,
+    },
+  },
+  created() {
+    this.currentComponents = this.userComponents;
+    this.http
+      .post("api/Sys_Dictionary/GetBuilderDictionary", {}, false)
+      .then((x) => {
+        this.dicList = x.map((c) => {
+          return { key: c, value: c };
+        });
+      });
+  },
+  methods: {
+    getFormOptions(item) {
+      let _option = {};
+      _option.field = item.field;
+      _option.title = item.name;
+      _option.type = item.type;
+      _option.required = item.required;
+      _option.readonly = item.readonly;
+      if (item.type == "line") {
+        _option.title = "";
+        let title = item.name;
+        _option.render = (h) => {
+          return h(
+            "div",
+            {
+              style: {
+                "line-height": "25px",
+                "font-weight": "bold",
+                "margin-left": "15px",
+                "border-bottom": "1px solid #dadada",
+              },
+            },
+            title
+            //涔熷彲浠ュ湪杩欓噷鏀句竴浜涚粍浠讹紝渚嬪锛�
+            // resolveComponent("el-tooltip"),
+            // {
+            //   content: "杩欓噷鏄彁绀虹殑鍐呭",
+            //   props: { effect: "dark", placement: "top-start" },
+            //   style: {},
+            // },
+            // [h("a", { style: { color: "#2a92ff" } }, "鎻愮ず淇℃伅")]
+          );
+        };
+      }
+      if (item.type == "editor") {
+        _option.height = item.height;
+      }
+      if (item.width == 100) {
+        _option.colSize = 12;
+      } else {
+        _option.colSize = (_option.width * 12) / 100;
+      }
+      if (["img", "excel", "file"].indexOf(item.type) != -1) {
+        _option.maxSize = item.maxSize;
+        _option.fileInfo = item.fileInfo;
+        _option.multiple = item.multiple;
+        _option.autoUpload = item.autoUpload;
+        _option.maxFile = item.maxFile;
+      }
+      if (
+        ["img", "excel", "file", "editor", "table"].indexOf(item.type) != -1
+      ) {
+        _option.url = item.url;
+      }
+      if (item.data) {
+        _option.data = item.data;
+        _option.dataKey = item.key;
+      }
+      return _option;
+    },
+    getLineFormOptions(index) {
+      let _index = index;
+      let endIndex = index;
+      let width = 0;
+      let _options = [];
+      for (index; index < this.filterCurrentComponents().length; index++) {
+        const item = this.currentComponents[index];
+        if (item.width + width <= 100) {
+          width = item.width + width;
+          endIndex = index;
+          _options.push(this.getFormOptions(item));
+        }
+      }
+      return { options: _options, index: _index, endIndex: endIndex };
+    },
+    filterCurrentComponents() {
+      return this.currentComponents.filter((x) => {
+        return x.type != "table";
+      });
+    },
+    setSpan() {},
+    preview(isPre) {
+      let _fields = {};
+      let _formOptions = [];
+      let endIndex = -1;
+      this.filterCurrentComponents().forEach((item, index) => {
+        if (item.hasOwnProperty("values")) {
+          _fields[item.field] = [];
+        } else {
+          _fields[item.field] = null;
+        }
+
+        if (item.width == 100) {
+          _formOptions.push([this.getFormOptions(item)]);
+        } else {
+          if (endIndex == -1) {
+            let lineOptions = this.getLineFormOptions(index);
+            endIndex = lineOptions.endIndex;
+            _formOptions.push(lineOptions.options);
+            endIndex--;
+          } else {
+            endIndex--;
+          }
+        }
+        // _fields[item.field] = null;xc
+        // let _option = {};
+        // _option.field = item.field;
+        // _option.title = item.name;
+        // _option.type = item.type;
+        // _option.required = item.required;
+        // _option.readonly = item.readonly;
+        // if (["img", "excel", "file"].indexOf(item.type) != -1) {
+        //   _option.maxSize = item.maxSize;
+        //   _option.fileInfo = item.fileInfo;
+        //   _option.multiple = item.multiple;
+        //   _option.autoUpload = item.autoUpload;
+        //   _option.maxFile = item.maxFile;
+        // }
+        // if (
+        //   ["img", "excel", "file", "editor", "table"].indexOf(item.type) != -1
+        // ) {
+        //   _option.url = item.url;
+        // }
+        // if (item.data) {
+        //   _option.data = item.data;
+        //   _option.dataKey = item.key;
+        // }
+        // _formOptions.push(_option);
+      });
+      this.viewFormData.fields = _fields;
+      // console.log(JSON.stringify(_formOptions))
+      this.viewFormData.formOptions = _formOptions;
+      if (isPre) {
+        this.previewModel = true;
+      }
+      let tableIndex = 0;
+      let keys = [];
+      let tables = this.currentComponents
+        .filter((x) => {
+          return x.type == "table";
+        })
+        .map((m) => {
+          m.pagination = !m.url;
+          if (m.name == "琛ㄦ牸") {
+            tableIndex++;
+          }
+          return {
+            name: m.name + (m.name == "琛ㄦ牸" ? tableIndex : ""),
+            url: m.url,
+            tabs: m.tabs,
+            pagination: m.pagination,
+            buttons: m.buttons,
+            columns: m.columns.map((c) => {
+              let obj = {
+                title: c.title,
+                field: c.field,
+                hidden: !c.show,
+                width: c.width,
+                required: c.required,
+              };
+
+              if (c.dataSource) {
+                obj.bind = { key: c.dataSource, data: [] };
+              }
+              if (c.dataSource) {
+                keys.push(c.dataSource);
+              }
+              if (c.edit) {
+                if (!obj.bind) {
+                  obj.bind = { key: "", data: [] };
+                }
+                obj.edit = { type: c.editType };
+              }
+              return obj;
+            }),
+            tableData: [{}, {}, {}],
+          };
+        });
+      this.viewFormData.tables = tables.filter((x) => {
+        return !x.tabs;
+      });
+      this.viewFormData.tabs = tables.filter((x) => {
+        return x.tabs;
+      });
+      this.getDicKeys(keys);
+          this.options = this.viewFormData;
+    },
+    getDicKeys(keys) {
+      if (!keys.length) {
+        return;
+      }
+      debugger
+      this.http
+        .post("api/Sys_Dictionary/GetVueDictionary", keys, true)
+        .then((result) => {
+          result.forEach((c) => {
+            this.viewFormData.tables.forEach((t) => {
+              let _option = t.columns.find((x) => {
+                return x.bind && x.bind.key == c.dicNo;
+              });
+              if (_option) {
+                _option.bind.data = c.data;
+              }
+            });
+            this.viewFormData.tabs.forEach((t) => {
+              let _option = t.columns.find((x) => {
+                return x.bind && x.bind.key == c.dicNo;
+              });
+              if (_option) {
+                _option.bind.data = c.data;
+              }
+            });
+          });
+        });
+    },
+    save() {
+      this.preview(false);
+      this.$emit("save", {
+        daraggeOptions: this.currentComponents,
+        formOptions: this.viewFormData,
+      });
+    },
+    download() {
+      this.preview(false);
+      downloadForm.call(this);
+    },
+    openTableModel() {
+      let dataSource = this.currentTableOption.find((x) => {
+        return x.field == "dataSource";
+      });
+      if (!dataSource.bind.data.length) {
+        dataSource.bind.data = this.dicList;
+      }
+      this.currnetTableData = JSON.parse(
+        JSON.stringify(this.currentItem.columns)
+      );
+      this.tableModel = true;
+    },
+    addRow() {
+      this.currnetTableData.push({ field: this.getField() });
+    },
+    delRow() {
+      this.$confirm("纭瑕佸垹闄ら�夋嫨鐨勬暟鎹悧?", "璀﹀憡", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+        center: true,
+      }).then(() => {
+        this.$refs.table.delRow();
+      });
+    },
+    sortRow() {
+      this.currnetTableData = this.currnetTableData.sort((a, b) => {
+        return a.orderNo - b.orderNo;
+      }); //.reverse();
+      this.$Message.success("鍒楁樉绀洪『搴忓凡閲嶆柊鎺掑垪,鐐瑰嚮棰勮鍙煡鐪�");
+    },
+    saveConfigOptions() {
+      this.currentItem.columns = JSON.parse(
+        JSON.stringify(this.currnetTableData)
+      );
+      this.tableModel = false;
+    },
+    copyItem(item) {
+      let itemClone = JSON.parse(JSON.stringify(item));
+      itemClone.field = "field" + new Date().valueOf();
+      this.currentComponents.push(itemClone);
+    },
+    removeItem(index) {
+      this.currentComponents.splice(index, 1);
+      this.colWidth = 100;
+      this.currentIndex = -1;
+      this.currentItem = {};
+    },
+    clearItems() {
+      this.currentComponents.length = 0;
+      this.colWidth = 100;
+      this.currentIndex = -1;
+      this.currentItem = {};
+    },
+    itemClick(item, index) {
+      this.currentIndex = index;
+      this.colWidth = this.currentComponents[this.currentIndex].width;
+      this.currentItem = this.currentComponents[this.currentIndex];
+    },
+    //寮�濮嬫嫋鎷戒簨浠�
+    onStart(e, e1) {
+      this.drag = true;
+    },
+    getField() {
+      return "field" + new Date().valueOf();
+    },
+    //宸﹁竟寰�鍙宠竟鎷栧姩鏃剁殑浜嬩欢
+    end1(e) {
+      if (1 == 1 && e.from !== e.to) {
+        let obj = JSON.parse(JSON.stringify(this.components[e.oldIndex]));
+        obj.field = this.getField();
+        obj.width = 100;
+        obj.readonly = false;
+        obj.required = false;
+        this.currentComponents.splice(e.newIndex, 1, obj);
+        this.userComponents.splice(0);
+        this.userComponents.push(...this.currentComponents);
+        // this.currentComponents = this.currentComponents.filter((x) => {
+        //   return x.hasOwnProperty("field");
+        // });
+        this.colWidth = 100;
+        this.currentIndex = e.newIndex; //this.currentComponents.length - 1;
+        this.currentItem = this.currentComponents[this.currentIndex];
+      }
+    },
+    //鍙宠竟寰�宸﹁竟鎷栧姩鏃剁殑浜嬩欢
+    end2(e) {},
+    onMove1(e, originalEvent) {
+      // this.moveId = e.relatedContext.element.id;
+      return true;
+    },
+    //move鍥炶皟鏂规硶
+    onMove(e, originalEvent) {
+      console.log(JSON.stringify(this.currentComponents));
+      return true;
+    },
+    dicChange(key) {
+      debugger
+      this.http
+        .post("api/Sys_Dictionary/GetVueDictionary", [key], true)
+        .then((result) => {
+          this.currentItem.data = result[0].data;
+          if (result[0].data.length) {
+            if (this.currentItem.type == "select") {
+              this.currentItem.value = result[0].data[0].value;
+            } else {
+              this.currentItem.values = [result[0].data[0].value];
+            }
+          }
+        });
+    },
+    example1() {
+      this.currentComponents = this.options1;
+    },
+    example2() {
+      this.currentComponents = this.options2;
+    },
+    example3() {
+      this.currentComponents = this.options3;
+    },
+  },
+  computed: {
+    tabsTable() {
+      return this.currentComponents.filter((x) => {
+        return x.type == "table" && x.tabs == true;
+      });
+    },
+  },
+};
+</script>
+<style lang="less" scoped>
+* {
+  box-sizing: border-box;
+}
+.drag-container {
+  /* padding: 20px; */
+  display: flex;
+  height: 100%;
+  position: absolute;
+  width: 100%;
+  box-sizing: border-box;
+}
+.drag-left {
+  width: 250px;
+  display: flex;
+  border-right: 1px solid #eee;
+  flex-direction: column;
+}
+.left-title {
+  height: 42px;
+  text-align: left;
+  border-right: 1px solid #eee;
+  padding: 10px 0 10px 11px;
+  border-bottom: 1px solid #eee;
+}
+.drag-center {
+  display: flex;
+  flex-direction: column;
+  flex: 1;
+}
+.left-draggable-item {
+  //   flex: 1;
+  display: inline-block;
+  padding: 5px;
+  //   border-right: 1px solid #eee;
+}
+
+.left-draggable-item .item {
+  cursor: move;
+  float: left;
+  width: 111px;
+  /* height: 20px; */
+  text-align: center;
+  border: 1px solid #eeeeee;
+  padding: 2px 13px;
+  text-align: left;
+  line-height: 28px;
+  margin: 4px;
+  border-radius: 3px;
+  background: #f0f9eb;
+  font-size: 13px;
+}
+// .drag-center-item {
+//   display: inline-block;
+//   width: 100%;
+//   height: calc(100vh - 122px);
+//   padding: 10px;
+// }
+.draggable-container {
+  display: inline-block;
+  width: 100%;
+  height: calc(100vh - 215px);
+  padding: 10px 0;
+}
+
+.item2 {
+  position: relative;
+  cursor: move;
+  padding: 18px 10px 10px 10px;
+  text-align: left;
+  float: left;
+  margin-bottom: 10px;
+}
+.item2 .el-icon-delete,
+.item2 .el-icon-document-copy {
+  position: absolute;
+  right: 10px;
+  top: 2px;
+  padding: 5px;
+  display: none;
+  color: red;
+  cursor: pointer;
+}
+.item2 .el-icon-document-copy {
+  right: 35px;
+}
+.item2:hover,
+.actived {
+  background: #f0f9eb;
+}
+.item:hover {
+  border: 1px dashed #787be8;
+  color: #787be8;
+}
+.item2:hover .el-icon-delete,
+.item2:hover .el-icon-document-copy {
+  display: block;
+}
+
+.drag-right {
+  background: #f7fbff3d;
+  width: 250px;
+  border-left: 1px solid #eee;
+}
+
+.center-top {
+  height: 42px;
+  line-height: 41px;
+  background: #f2f5fb;
+  border-bottom: 1px solid #eee;
+  text-align: left;
+  padding: 0 10px;
+  font-size: 12px;
+  color: #3391f3;
+}
+.center-top span {
+  margin-right: 10px;
+}
+.attr {
+  padding: 0px 15px 15px 15px;
+}
+.attr-item {
+  text-align: left;
+  margin-top: 12px;
+  font-size: 14px;
+}
+.attr-item .text {
+  padding: 0 0 5px 5px;
+}
+.attr2 {
+  display: flex;
+}
+.attr2 > div {
+  flex: 1;
+}
+.tips {
+  position: absolute;
+  font-size: 26px;
+  letter-spacing: 6px;
+  left: 0px;
+  right: 0px;
+  top: 150px;
+  width: 500px;
+  margin: auto;
+  color: #c5c5c5;
+}
+.col-line {
+  line-height: 25px;
+  font-weight: bold;
+  border-bottom: 1px solid rgb(218 218 218);
+}
+.drag-container ::v-deep(.el-col) {
+  width: 100%;
+}
+.drag-center ::v-deep(.el-form-item__label) {
+  line-height: 0 !important;
+}
+.drag-center ::v-deep(.el-scrollbar__wrap) {
+  overflow-x: hidden;
+}
+.drag-center ::v-deep(.el-form-item) {
+  margin-bottom: 10px;
+}
+.drag-center ::v-deep(.el-date-editor) {
+  width: 100%;
+}
+.drag-center ::v-deep(.el-checkbox) {
+  margin-right: 15px;
+}
+.drag-center ::v-deep(.el-checkbox__label) {
+  padding-left: 5px;
+}
+.drag-center ::v-deep(.hello > div) {
+  z-index: 500 !important;
+}
+.drag-center ::v-deep(th),
+.drag-center ::v-deep(td) {
+  padding: 6px 0;
+}
+.example {
+  margin-top: 8px;
+  > div {
+    cursor: pointer;
+    padding: 14px 20px;
+    border-top: 1px solid #eee;
+    font-size: 13px;
+    color: #646465;
+    position: relative;
+  }
+  > div:hover {
+    background: rgb(231, 231, 231);
+  }
+  i {
+    position: absolute;
+    right: 20px;
+  }
+}
+.btns {
+  padding: 8px 0;
+  display: flex;
+  > div {
+    flex: 1;
+  }
+  .btns-left {
+    padding-top: 8px;
+    color: black;
+    font-weight: bold;
+  }
+  .btns-right {
+    text-align: right;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/VolFormPreview.vue b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/VolFormPreview.vue
new file mode 100644
index 0000000..7d8aa93
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/VolFormPreview.vue
@@ -0,0 +1,206 @@
+<template>
+  <div style="padding: 15px 20px 15px 5px">
+    <div class="pre-text">{{ text }}</div>
+    <vol-form
+      ref="form"
+      :labelWidth="80"
+      :load-key="false"
+      :formFields="options.fields"
+      :formRules="options.formOptions"
+    >
+    </vol-form>
+    <div class="tables">
+      <div
+        class="table-item"
+        v-for="(item, index) in options.tables"
+        :key="index"
+      >
+        <div class="table-header">
+          <div class="header-text">
+            {{ item.name }}
+          </div>
+          <div class="header-btns">
+            <el-button
+              type="primary"
+              size="small"
+              :key="bindex"
+              plain
+              @click="tableBtnClick(item, bindex, index)"
+              :icon="btnItem.icon"
+              v-for="(btnItem, bindex) in item.buttons"
+            >
+              {{ btnItem.name }}
+            </el-button>
+          </div>
+        </div>
+        <vol-table
+          :url="item.url"
+          :load-key="false"
+          :index="true"
+          :ref="'table' + index"
+          :tableData="item.tableData"
+          :columns="item.columns"
+          :max-height="250"
+          :pagination-hide="item.pagination"
+          :column-index="true"
+          :ck="true"
+        ></vol-table>
+      </div>
+    </div>
+
+    <div class="tables" style="padding-bottom: 10px">
+      <el-tabs
+        v-model="tabsModel"
+        v-show="options.tabs.length"
+        @tab-click="() => {}"
+      >
+        <el-tab-pane
+          style="padding: 0"
+          class="table-item"
+          v-for="(item, index) in options.tabs"
+          :label="item.name"
+          :name="index"
+          :key="index"
+        >
+          <div class="table-header">
+            <div class="header-text">
+              {{ item.name }}
+            </div>
+            <div class="header-btns">
+              <el-button
+                type="primary"
+                size="small"
+                :key="bindex"
+                :icon="btnItem.icon"
+                plain
+                @click="tabsTableBtnClick(item, bindex, index)"
+                v-for="(btnItem, bindex) in item.buttons"
+              >
+                {{ btnItem.name }}
+              </el-button>
+            </div>
+          </div>
+          <vol-table
+            :url="item.url"
+            :load-key="false"
+            :index="true"
+            :ref="'tabsTable' + index"
+            :tableData="item.tableData"
+            :columns="item.columns"
+            :max-height="250"
+            :pagination-hide="item.pagination"
+            :column-index="true"
+            :ck="true"
+          ></vol-table>
+        </el-tab-pane>
+      </el-tabs>
+    </div>
+
+    <div class="form-btns">
+      <el-button type="primary" @click="submit" icon="el-icon-check" size="small"
+        >鎻愪氦</el-button
+      >
+      <el-button
+        type="primary"
+        @click="reset"
+        plain
+        icon="el-icon-refresh-right"
+        size="small"
+        >閲嶇疆</el-button
+      >
+      <el-button
+        type="primary"
+        @click="download"
+        plain
+        icon="el-icon-refresh-right"
+        size="small"
+        >涓嬭浇浠g爜</el-button
+      >
+    </div>
+  </div>
+</template>
+
+<script>
+import VolTable from "./../VolTable";
+import VolBox from "./../VolBox";
+import VolForm from "./../VolForm";
+import downloadForm from "./DownloadForm";
+export default {
+  props: {
+    options: {
+      type: Object,
+      default: () => {
+        return { fields: {}, formOptions: [], tables: [], tabs: [] };
+      },
+    },
+  },
+  data() {
+    return {
+      text: "",
+      tabsModel: 0,
+    };
+  },
+  created() {},
+  methods: {
+    tableBtnClick(item, btnIndex, index) {
+      if (item.buttons[btnIndex].value == "add") {
+        this.$refs["table" + index].addRow({});
+        return;
+      }
+      if (item.buttons[btnIndex].value == "del") {
+        this.$refs["table" + index].delRow();
+        return;
+      }
+    },
+    tabsTableBtnClick(item, btnIndex, index) {
+      if (item.buttons[btnIndex].value == "add") {
+        this.$refs["tabsTable" + index].addRow({});
+        return;
+      }
+      if (item.buttons[btnIndex].value == "del") {
+        this.$refs["tabsTable" + index].delRow();
+        return;
+      }
+    },
+    submit() {},
+    reset() {
+      this.$refs.form.reset();
+      this.$Message.success("琛ㄥ崟宸查噸缃�");
+    },
+    download() {
+      downloadForm.call(this);
+    },
+  },
+  components: {
+    "vol-table": VolTable,
+    "vol-box": VolBox,
+    "vol-form": VolForm,
+  },
+};
+
+VolForm;
+</script>
+<style lang="less" scoped>
+.form-btns {
+  text-align: center;
+}
+.tables {
+  padding-left: 15px;
+  .table-item {
+    padding: 10px;
+  }
+  .table-header {
+    display: flex;
+    margin-bottom: 8px;
+  }
+  .header-text {
+    position: relative;
+    bottom: -9px;
+    flex: 1;
+    font-weight: bold;
+  }
+  .header-btns {
+    text-align: right;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/formTemplate.js b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/formTemplate.js
new file mode 100644
index 0000000..e8dca27
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/formTemplate.js
@@ -0,0 +1,664 @@
+
+
+let options1 = [
+    {
+        "id": 1,
+        "name": "杈撳叆妗�",
+        "type": "text",
+        "value": "",
+        "icon": "el-icon-document",
+        "field": "field1630258884671",
+        "width": 20,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 3,
+        "name": "鏃ユ湡",
+        "type": "date",
+        "icon": "el-icon-date",
+        "value": null,
+        "field": "field1630258891760",
+        "width": 20,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 7,
+        "name": "涓嬫媺妗�",
+        "value": null,
+        "key": "",
+        "data": [
+            {
+                "label": "璇疯缃暟鎹簮",
+                "value": "璇疯缃暟鎹簮"
+            }
+        ],
+        "type": "select",
+        "icon": "el-icon-arrow-down",
+        "field": "field1630258904862",
+        "width": 30,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 8,
+        "name": "涓嬫媺澶氶��",
+        "type": "selectList",
+        "key": "",
+        "values": [],
+        "data": [
+            {
+                "label": "璇疯缃暟鎹簮",
+                "value": "璇疯缃暟鎹簮"
+            }
+        ],
+        "icon": "el-icon-arrow-down",
+        "field": "field1630258924442",
+        "width": 30,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 81,
+        "name": "绾ц仈",
+        "type": "cascader",
+        "icon": "el-icon-share",
+        "values": [],
+        "key": "",
+        "data": [
+            {
+                "value": "璇烽厤缃暟鎹簮",
+                "label": "璇烽厤缃暟鎹簮",
+                "children": [
+                    {
+                        "value": "鍏蜂綋",
+                        "label": "鑿滃崟:涓嬫媺妗嗙粦瀹氳缃�"
+                    },
+                    {
+                        "value": "color",
+                        "label": "鍙弬鐓у瓧鍏哥紪鍙穂tree_roles]"
+                    }
+                ]
+            }
+        ],
+        "field": "field1630259518082",
+        "width": 20,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 6,
+        "name": "澶氶��",
+        "values": [
+            "鍙戣揣"
+        ],
+        "type": "checkbox",
+        "key": "ordertype",
+        "data": [
+            {
+                "key": "1",
+                "value": "鍙戣揣"
+            },
+            {
+                "key": "2",
+                "value": "閫�璐�"
+            },
+            {
+                "key": "3",
+                "value": "杩斿崟"
+            }
+        ],
+        "icon": "el-icon-circle-check",
+        "field": "field1630259033241",
+        "width": 30,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 5,
+        "name": "鍗曢��",
+        "type": "radio",
+        "icon": "el-icon-aim",
+        "value": 0,
+        "data": [
+            {
+                "key": "0",
+                "value": "鍚�"
+            },
+            {
+                "key": "2",
+                "value": "xx11"
+            },
+            {
+                "key": "1",
+                "value": "鏄�"
+            }
+        ],
+        "key": "enable",
+        "field": "field1630259538490",
+        "width": 30,
+        "readonly": false,
+        "required": false,
+        "values": [
+            "鍚�"
+        ]
+    },
+    {
+        "id": 4,
+        "name": "switch",
+        "type": "switch",
+        "icon": "el-icon-turn-off",
+        "value": 0,
+        "field": "field1630259172794",
+        "width": 20,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 12,
+        "name": "鍒嗘淇℃伅",
+        "type": "line",
+        "icon": "el-icon-guide",
+        "field": "field1630259600186",
+        "width": 100,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 9,
+        "name": "鍥剧墖",
+        "type": "img",
+        "url": "api/SellOrder/upload",
+        "maxSize": 3,
+        "fileInfo": [],
+        "multiple": false,
+        "autoUpload": false,
+        "maxFile": 5,
+        "icon": "el-icon-picture-outline",
+        "field": "field1630259295154",
+        "width": 100,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 10,
+        "name": "excel",
+        "url": "api/SellOrder/upload",
+        "maxSize": 3,
+        "multiple": false,
+        "autoUpload": true,
+        "maxFile": 5,
+        "fileInfo": [],
+        "type": "excel",
+        "icon": "el-icon-upload",
+        "field": "field1630259610476",
+        "width": 100,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 5,
+        "name": "鍗曢��",
+        "type": "radio",
+        "icon": "el-icon-aim",
+        "value": 0,
+        "data": [
+            {
+                "key": "0",
+                "value": "瀹℃牳涓�"
+            },
+            {
+                "key": "1",
+                "value": "瀹℃牳閫氳繃"
+            },
+            {
+                "key": "2",
+                "value": "瀹℃牳鏈�氳繃"
+            }
+        ],
+        "key": "audit",
+        "field": "field1630258969346",
+        "width": 40,
+        "readonly": false,
+        "required": false,
+        "values": [
+            "瀹℃牳涓�"
+        ]
+    }
+];
+let options2=[
+    {
+        "id": 1,
+        "name": "杈撳叆妗�",
+        "type": "text",
+        "value": "",
+        "icon": "el-icon-document",
+        "field": "field1630258884671",
+        "width": 20,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 3,
+        "name": "鏃ユ湡",
+        "type": "date",
+        "icon": "el-icon-date",
+        "value": null,
+        "field": "field1630258891760",
+        "width": 20,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 7,
+        "name": "涓嬫媺妗�",
+        "value": null,
+        "key": "",
+        "data": [
+            {
+                "label": "璇疯缃暟鎹簮",
+                "value": "璇疯缃暟鎹簮"
+            }
+        ],
+        "type": "select",
+        "icon": "el-icon-arrow-down",
+        "field": "field1630258904862",
+        "width": 30,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 8,
+        "name": "涓嬫媺澶氶��",
+        "type": "selectList",
+        "key": "",
+        "values": [],
+        "data": [
+            {
+                "label": "璇疯缃暟鎹簮",
+                "value": "璇疯缃暟鎹簮"
+            }
+        ],
+        "icon": "el-icon-arrow-down",
+        "field": "field1630258924442",
+        "width": 30,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 2,
+        "name": "textarea",
+        "type": "textarea",
+        "value": "",
+        "icon": "el-icon-document-copy",
+        "field": "field1630260207393",
+        "width": 100,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 13,
+        "name": "琛ㄦ牸",
+        "type": "table",
+        "tabs": true,
+        "columns": [
+            {
+                "title": "杩愬崟鍙�",
+                "field": "TranNo",
+                "show": true,
+                "required": false,
+                "edit": true,
+                "dataType": null,
+                "dataSource": null,
+                "width": "140",
+                "orderNo": null,
+                "elementIndex": 0
+            },
+            {
+                "title": "閿�鍞鍗曞彿",
+                "field": "SellNo",
+                "show": true,
+                "required": false,
+                "edit": true,
+                "dataType": null,
+                "dataSource": null,
+                "width": "140",
+                "orderNo": null,
+                "elementIndex": 1
+            },
+            {
+                "title": "璁㈠崟绫诲瀷",
+                "field": "OrderType",
+                "show": true,
+                "required": false,
+                "edit": true,
+                "dataType": null,
+                "dataSource": "ordertype",
+                "width": 120,
+                "orderNo": null,
+                "elementIndex": 2,
+                "editType": "select"
+            },
+            {
+                "title": "閿�鍞暟閲�",
+                "field": "Qty",
+                "show": true,
+                "required": false,
+                "edit": true,
+                "dataType": null,
+                "dataSource": null,
+                "width": "80",
+                "orderNo": null,
+                "elementIndex": 3
+            },
+            {
+                "field": "CreateDate",
+                "elementIndex": 4,
+                "show": 1,
+                "required": 0,
+                "edit": 0,
+                "title": "璁㈠崟鏃堕棿",
+                "dataType": "date",
+                "width": "100"
+            }
+        ],
+        "tableData": [
+            {
+                "field1": "field1",
+                "field2": "field2",
+                "field3": "field3",
+                "field4": "field4"
+            },
+            {
+                "field1": "field1",
+                "field2": "field2",
+                "field3": "field3",
+                "field4": "field4"
+            },
+            {
+                "field1": "field1",
+                "field2": "field2",
+                "field3": "field3",
+                "field4": "field4"
+            }
+        ],
+        "height": 200,
+        "icon": "el-icon-c-scale-to-original",
+        "url": "api/SellOrder/getPageData",
+        "index": false,
+        "columnIndex": false,
+        "ck": true,
+        "buttons": [
+            {
+                "name": "娣诲姞琛�",
+                "ck": false,
+                "icon": "el-icon-plus",
+                "value": "add"
+            },
+            {
+                "name": "鍒犻櫎琛�",
+                "ck": false,
+                "icon": "el-icon-delete",
+                "value": "del"
+            },
+            {
+                "name": "鍒锋柊",
+                "ck": false,
+                "icon": "el-icon-refresh-right",
+                "value": "ref"
+            }
+        ],
+        "field": "field1630260242867",
+        "width": 100,
+        "readonly": false,
+        "required": false,
+        "pagination": false
+    },
+    {
+        "id": 13,
+        "name": "琛ㄦ牸",
+        "type": "table",
+        "tabs": true,
+        "columns": [
+            {
+                "title": "瀛楁1",
+                "field": "field1",
+                "show": true,
+                "required": false,
+                "edit": false,
+                "dataType": null,
+                "dataSource": null,
+                "width": 120,
+                "orderNo": null
+            },
+            {
+                "title": "瀛楁2",
+                "field": "field2",
+                "show": true,
+                "required": false,
+                "edit": false,
+                "dataType": null,
+                "dataSource": null,
+                "width": 120,
+                "orderNo": null
+            },
+            {
+                "title": "瀛楁3",
+                "field": "field3",
+                "show": true,
+                "required": false,
+                "edit": false,
+                "dataType": null,
+                "dataSource": null,
+                "width": 120,
+                "orderNo": null
+            },
+            {
+                "title": "瀛楁4",
+                "field": "field4",
+                "show": true,
+                "required": false,
+                "edit": false,
+                "dataType": null,
+                "dataSource": null,
+                "width": 120,
+                "orderNo": null
+            }
+        ],
+        "tableData": [
+            {
+                "field1": "field1",
+                "field2": "field2",
+                "field3": "field3",
+                "field4": "field4"
+            },
+            {
+                "field1": "field1",
+                "field2": "field2",
+                "field3": "field3",
+                "field4": "field4"
+            },
+            {
+                "field1": "field1",
+                "field2": "field2",
+                "field3": "field3",
+                "field4": "field4"
+            }
+        ],
+        "height": 200,
+        "icon": "el-icon-c-scale-to-original",
+        "url": null,
+        "index": false,
+        "columnIndex": false,
+        "ck": true,
+        "buttons": [
+            {
+                "name": "娣诲姞琛�",
+                "ck": false,
+                "icon": "el-icon-plus",
+                "value": "add"
+            },
+            {
+                "name": "鍒犻櫎琛�",
+                "ck": false,
+                "icon": "el-icon-delete",
+                "value": "del"
+            },
+            {
+                "name": "鍒锋柊",
+                "ck": false,
+                "icon": "el-icon-refresh-right",
+                "value": "ref"
+            }
+        ],
+        "field": "field1630260481283",
+        "width": 100,
+        "readonly": false,
+        "required": false,
+        "pagination": true
+    }
+]
+
+let options3=[
+    {
+        "id": 1,
+        "name": "杈撳叆妗�",
+        "type": "text",
+        "value": "",
+        "icon": "el-icon-document",
+        "field": "field1630258884671",
+        "width": 20,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 3,
+        "name": "鏃ユ湡",
+        "type": "date",
+        "icon": "el-icon-date",
+        "value": null,
+        "field": "field1630258891760",
+        "width": 20,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 7,
+        "name": "涓嬫媺妗�",
+        "value": null,
+        "key": "",
+        "data": [
+            {
+                "label": "璇疯缃暟鎹簮",
+                "value": "璇疯缃暟鎹簮"
+            }
+        ],
+        "type": "select",
+        "icon": "el-icon-arrow-down",
+        "field": "field1630258904862",
+        "width": 30,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 8,
+        "name": "涓嬫媺澶氶��",
+        "type": "selectList",
+        "key": "",
+        "values": [],
+        "data": [
+            {
+                "label": "璇疯缃暟鎹簮",
+                "value": "璇疯缃暟鎹簮"
+            }
+        ],
+        "icon": "el-icon-arrow-down",
+        "field": "field1630258924442",
+        "width": 30,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 5,
+        "name": "鍗曢��",
+        "type": "radio",
+        "icon": "el-icon-aim",
+        "value": 0,
+        "data": [
+            {
+                "key": "0",
+                "value": "鍚�"
+            },
+            {
+                "key": "2",
+                "value": "xx11"
+            },
+            {
+                "key": "1",
+                "value": "鏄�"
+            }
+        ],
+        "key": "enable",
+        "field": "field1630260669595",
+        "width": 50,
+        "readonly": false,
+        "required": false,
+        "values": [
+            "鍚�"
+        ]
+    },
+    {
+        "id": 6,
+        "name": "澶氶��",
+        "values": [
+            "鍚�"
+        ],
+        "type": "checkbox",
+        "key": "enable",
+        "data": [
+            {
+                "key": "0",
+                "value": "鍚�"
+            },
+            {
+                "key": "2",
+                "value": "xx11"
+            },
+            {
+                "key": "1",
+                "value": "鏄�"
+            }
+        ],
+        "icon": "el-icon-circle-check",
+        "field": "field1630260695322",
+        "width": 50,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 2,
+        "name": "textarea",
+        "type": "textarea",
+        "value": "",
+        "icon": "el-icon-document-copy",
+        "field": "field1630260207393",
+        "width": 100,
+        "readonly": false,
+        "required": false
+    },
+    {
+        "id": 13,
+        "name": "缂栬緫鍣�",
+        "type": "editor",
+        "value": "",
+        "url": "",
+        "height": 200,
+        "icon": "el-icon-notebook-2",
+        "field": "field1630260646842",
+        "width": 100,
+        "readonly": false,
+        "required": false
+    }
+]
+export { options1, options2,options3 }
diff --git a/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/index.js b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/index.js
new file mode 100644
index 0000000..9872583
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/index.js
@@ -0,0 +1,3 @@
+import VolFormDraggable from './VolFormDraggable'
+
+ export default VolFormDraggable;
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/options.js b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/options.js
new file mode 100644
index 0000000..c60047c
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/options.js
@@ -0,0 +1,226 @@
+const components = [
+    {
+        id: 1,
+        name: "杈撳叆妗�",
+        type: "text",
+        value: "",
+        icon: "el-icon-document",
+    },
+    {
+        id: 2,
+        name: "textarea",
+        type: "textarea",
+        value: "",
+        icon: "el-icon-document-copy",
+    },
+    {
+        id: 3,
+        name: "鏃ユ湡",
+        type: "date",
+        icon: "el-icon-date",
+        value: null,
+    },
+    {
+        id: 4,
+        name: "switch",
+        type: "switch",
+        icon: "el-icon-turn-off",
+        value: 0,
+    },
+    { id: 5, name: "鍗曢��", type: "radio", icon: "el-icon-aim", value: 0, data: [{ label: "0", value: "璇疯缃暟鎹簮1" }, { label: "1", value: "璇疯缃暟鎹簮2" }], key: "" },
+    {
+        id: 6,
+        name: "澶氶��",
+        values: [],
+        type: "checkbox",
+        key: "",
+        data: [{ label: "璇疯缃暟鎹簮", value: "璇疯缃暟鎹簮" }],
+        icon: "el-icon-circle-check",
+    },
+    {
+        id: 7,
+        name: "涓嬫媺妗�",
+        value: null,
+        key: "",
+        data: [{ label: "璇疯缃暟鎹簮", value: "璇疯缃暟鎹簮" }],
+        type: "select",
+        icon: "el-icon-arrow-down",
+    },
+    {
+        id: 8,
+        name: "涓嬫媺妗嗗閫�",
+        type: "selectList",
+        key: "",
+        values: [],
+        data: [{ label: "璇疯缃暟鎹簮", value: "璇疯缃暟鎹簮" }],
+        icon: "el-icon-arrow-down",
+    },
+    {
+        id: 81,
+        name: "绾ц仈",
+        type: "cascader",
+        icon: "el-icon-share",
+        values: [],
+        key: "",
+        data: [
+            {
+                value: "璇烽厤缃暟鎹簮",
+                label: "璇烽厤缃暟鎹簮",
+                children: [
+                    {
+                        value: "鍏蜂綋",
+                        label: "鑿滃崟:涓嬫媺妗嗙粦瀹氳缃�",
+                    },
+                    {
+                        value: "color",
+                        label: "鍙弬鐓у瓧鍏哥紪鍙穂tree_roles]",
+                    }
+                ],
+            },
+        ],
+    },
+    {
+        id: 9,
+        name: "鍥剧墖涓婁紶",
+        type: "img",
+        url: "",
+        maxSize: 3,
+        fileInfo: [],
+        multiple: false,
+        autoUpload: false,
+        maxFile: 5,
+        icon: "el-icon-picture-outline",
+    },
+    {
+        id: 10,
+        name: "excel涓婁紶",
+        url: "",
+        maxSize: 3,
+        multiple: false,
+        autoUpload: false,
+        maxFile: 5, //鏈�澶氬彲涓婁紶5涓枃浠� 
+        fileInfo: [],
+        type: "excel",
+        icon: "el-icon-upload",
+    },
+    {
+        id: 11,
+        name: "鏂囦欢涓婁紶",
+        type: "file",
+        url: "",
+        maxSize: 3,
+        multiple: false,
+        autoUpload: false,
+        maxFile: 5,
+        fileInfo: [],
+        icon: "el-icon-folder-opened",
+    },
+    {
+        id: 12,
+        name: "鍒嗘淇℃伅",
+        type: "line",
+        icon: "el-icon-guide",
+    },
+    {
+        id: 13,
+        name: "缂栬緫鍣�",
+        type: "editor",
+        value: "",
+        url: "",
+        height: 200,
+        icon: "el-icon-notebook-2",
+    },
+    {
+        id: 13,
+        name: "寮瑰嚭妗�",
+        type: "box",
+        value: "",
+        url: "",
+        height: 250,
+        icon: "el-icon-notebook-2",
+    },
+    {
+        id: 13,
+        name: "琛ㄦ牸",
+        type: "table",
+        tabs: false,
+        columns: [
+            { title: "瀛楁1", field: "field1", show: true, required: false, edit: false, dataType: null, dataSource: null, width: 120, orderNo: null },
+            { title: "瀛楁2", field: "field2", show: true, required: false, edit: false, dataType: null, dataSource: null, width: 120, orderNo: null },
+            { title: "瀛楁3", field: "field3", show: true, required: false, edit: false, dataType: null, dataSource: null, width: 120, orderNo: null },
+            { title: "瀛楁4", field: "field4", show: true, required: false, edit: false, dataType: null, dataSource: null, width: 120, orderNo: null },
+            // { title: "瀛楁5", field: "Field5", width: 120 },
+        ],
+        tableData: [
+            {
+                field1: "field1",
+                field2: "field2",
+                field3: "field3",
+                field4: "field4",
+            },
+            {
+                field1: "field1",
+                field2: "field2",
+                field3: "field3",
+                field4: "field4",
+            },
+            {
+                field1: "field1",
+                field2: "field2",
+                field3: "field3",
+                field4: "field4",
+            },
+        ],
+        height: 150,
+        icon: "el-icon-c-scale-to-original",
+        url: null,
+        index: false, //item.index,
+        height: 200,
+        index: false,
+        columnIndex: false,
+        ck: true,
+        buttons: [
+            { name: '娣诲姞琛�', ck: false, icon: 'el-icon-plus',value:'add' },
+        { name: '鍒犻櫎琛�', ck: false, icon: 'el-icon-delete',value:'del' }, 
+        { name: '鍒锋柊', ck: false ,icon:'el-icon-refresh-right',value:'ref'}],
+    },
+]
+const tableOption = [
+    { field: 'field', title: '瀛楁', edit: { type: "text", keep: true }, width: 160 },
+    { field: 'title', title: '瀛楁涓枃鍚�', edit: { type: "text", keep: true }, width: 120 },
+    { field: 'show', title: '鏄惁鏄剧ず', edit: { type: "switch", keep: true }, width: 90 },
+    {
+        field: 'dataType', title: '鏄剧ず绫诲瀷', edit: { type: "select", keep: true }, width: 120, bind: {
+            key: '', data: [
+                { "key": "switch", "value": "鍗曢��" },
+                { "key": "date", "value": "骞存湀鏃�" },
+                { "key": "img", "value": "鍥剧墖" },
+                { "key": "excel", "value": "excel" },
+                { "key": "file", "value": "鏂囦欢" }
+            ]
+        }
+    },
+
+    { field: 'required', title: '鏄惁蹇呭~', edit: { type: "switch", keep: true }, width: 90 },
+    { field: 'edit', title: '鏄惁鍙紪杈�', edit: { type: "switch", keep: true }, width: 90 },
+    {
+        field: 'editType', title: '缂栬緫绫诲瀷', edit: { type: "select", keep: true, }, width: 120, bind: {
+            key: '', data: [{ "key": "text", "value": "杈撳叆妗�" },
+            { "key": "switch", "value": "鍗曢��" },
+            { "key": "select", "value": "涓嬫媺妗�" },
+            { "key": "selectList", "value": "涓嬫媺妗嗗閫�" },
+            { "key": "date", "value": "鏃ユ湡" },
+            { "key": "datetime", "value": "鏃ユ湡鏃跺垎绉�" },
+            { "key": "checkbox", "value": "澶嶉�夋澶氶��" },
+            { "key": "mail", "value": "閭鍦板潃" },
+            { "key": "number", "value": "鏁板瓧" },
+            { "key": "decimal", "value": "灏忔暟" },
+            { "key": "phone", "value": "鎵嬫満鍙�" },
+            ]
+        }
+    },
+    { field: 'dataSource', title: '鏁版嵁婧�', edit: { type: "select", keep: true, data: [] }, bind: { key: '', data: [] }, width: 120 },
+    { field: 'width', title: '鍒楀搴�', edit: { type: "text", keep: true }, width: 80 },
+    { field: 'orderNo', title: '鍒楁樉绀洪『搴�', edit: { type: "text", keep: true }, width: 100 }
+];
+export { components, tableOption }
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/templateCode.js b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/templateCode.js
new file mode 100644
index 0000000..41b8744
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolFormDraggable/templateCode.js
@@ -0,0 +1,95 @@
+var code = `<template>
+<div style="padding: 15px 20px 15px 5px">
+  <div class="pre-text">{{ text }}</div>
+  <vol-form ref="form"
+            :labelWidth="80"
+            :load-key="false"
+            :formFields="fields"
+            :formRules="formOptions">
+  </vol-form>
+ {#tables}
+ {#tabs}
+
+  <div class="form-btns">
+    <el-button type="primary"
+               @click="submit"
+               icon="el-icon-check"
+               size="mini">鎻愪氦</el-button>
+    <el-button type="primary"
+               @click="reset"
+               plain
+               icon="el-icon-refresh-right"
+               size="mini">閲嶇疆</el-button>
+  </div>
+</div>
+</template>
+
+<script>
+// 浣跨敤鏂瑰紡锛�
+// 1銆佹柊寤轰竴涓獀ue椤甸潰锛屾妸姝ら〉闈㈠唴瀹瑰鍒惰繘鍘�
+// 2銆乺outer->index.js閰嶇疆璺敱锛岄〉闈笂杈撳叆鍦板潃鍗冲彲鐪嬪埌鏁版嵁(涔熷彲浠ユ妸鑿滃崟閰嶇疆涓�)
+// 3銆佹垨鑰呭弬鐓ц〃鍗曡璁¢〉闈㈠仛鍔ㄦ�侀〉闈�
+//**琛ㄥ崟璁捐鍣ㄧ殑table涓嬭浇杩樺湪寮�鍙戜腑
+{import_VolTable}
+import VolForm from '@/components/basic/VolForm'
+export default {
+    components: {"vol-form": VolForm,{component_table}},
+    data () {
+        return {
+            text: "",
+            tabsModel: "0",
+            fields: {#fields}, 
+            formOptions: [{#formOptions}],
+            tables: [{#tableOptions}],
+            tabs: [{#tabsOptions}] 
+        };
+    },
+    created () { 
+
+    },
+    methods: {{table_ms}
+        submit () {
+            this.$Message.success("submit")
+            return;
+            this.http.post("url",this.fields,true).then(result=>{
+
+            })
+        },
+        reset () {
+            this.$refs.form.reset();
+            this.$Message.success("琛ㄥ崟宸查噸缃�")
+        },
+        download () {
+            this.$Message.info("111")
+        }
+    }
+};
+
+VolForm;
+</script>
+<style lang="less" scoped>
+.form-btns {
+text-align: center;
+}
+.tables {
+padding-left: 15px;
+.table-item {
+  padding: 10px;
+}
+.table-header {
+  display: flex;
+  margin-bottom: 8px;
+}
+.header-text {
+  position: relative;
+  bottom: -9px;
+  flex: 1;
+  font-weight: bold;
+}
+.header-btns {
+  text-align: right;
+}
+}
+</style>`
+
+export default code
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/components/basic/VolHeader.vue b/WIDESEA_WMSClient/src/components/basic/VolHeader.vue
new file mode 100644
index 0000000..cbe64e7
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolHeader.vue
@@ -0,0 +1,67 @@
+<template>
+  <div class="v-header">
+    <div class="v-left-text">
+      <!-- <i size="20" :class="icon" class="h-icon"/> -->
+      <span>{{ title || text }}</span>
+    </div>
+    <div class="content">
+      <slot name="content"></slot>
+    </div>
+    <div class="v-right-content">
+      <slot></slot>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  props: {
+    icon: {
+      type: String,
+      default: ''
+    },
+    title: {
+      type: String,
+      default: ''
+    },
+    text: {
+      type: String,
+      default: '鏈畾涔夊悕绉�'
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.v-header {
+  display: flex;
+  border-bottom: 1px solid #dcdee2;
+  .v-left-text {
+    margin-top: 3px;
+    padding-bottom: 6px;
+    font-weight: bold;
+    font-size: 15px;
+    color: #484848;
+    white-space: nowrap;
+    border-bottom: 2px solid #676767;
+    margin-bottom: -1px;
+    letter-spacing: 1px;
+    > span {
+      position: relative;
+      top: 2px;
+    }
+  }
+  .content {
+    line-height: 25px;
+    padding-left: 10px;
+    padding: 6px 0 0 10px;
+  }
+  .v-right-content {
+    flex: 1;
+    text-align: right;
+  }
+  .h-icon {
+    position: relative;
+    top: 2px;
+    margin-right: 3px;
+  }
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/components/basic/VolTable.vue b/WIDESEA_WMSClient/src/components/basic/VolTable.vue
new file mode 100644
index 0000000..0622c7c
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolTable.vue
@@ -0,0 +1,1874 @@
+<template>
+  <!-- 2021.11.18绉婚櫎voltable鏂规硶@cell-mouse-leave="rowEndEdit" -->
+  <div
+    class="vol-table"
+    :class="[
+      textInline ? 'text-inline' : '',
+      fxRight ? 'fx-right' : '',
+      isChrome ? 'chrome' : '',
+    ]"
+  >
+    <div class="mask" v-show="loading"></div>
+    <div class="message" v-show="loading">鍔犺浇涓�.....</div>
+    <el-table
+      :show-summary="summary"
+      :summary-method="getSummaryData"
+      :row-key="rowKey"
+      :key="randomTableKey"
+      lazy
+      stripe
+      :load="loadTreeChildren"
+      @select="userSelect"
+      @select-all="userSelect"
+      @selection-change="selectionChange"
+      @row-dblclick="rowDbClick"
+      @row-click="rowClick"
+      @header-click="headerClick"
+      :highlight-current-row="highlightCurrentRow"
+      ref="table"
+      class="v-table"
+      @sort-change="sortChange"
+      tooltip-effect="dark"
+      :height="realHeight"
+      :max-height="realMaxHeight"
+      :data="url ? rowData : tableData"
+      border
+      :row-class-name="initIndex"
+      :cell-style="getCellStyle"
+      style="width: 100%"
+      :scrollbar-always-on="true"
+    >
+      <el-table-column
+        v-if="ck"
+        type="selection"
+        :fixed="fixed"
+        :selectable="selectable"
+        width="55"
+      ></el-table-column>
+      <el-table-column
+        v-if="columnIndex"
+        type="index"
+        :fixed="fixed"
+        label="搴忓彿"
+        width="55"
+      ></el-table-column>
+
+      <!-- 2020.10.10绉婚櫎table绗竴琛屽己鍒舵帓搴� -->
+      <el-table-column
+        v-for="(column, cindex) in filterColumns"
+        :prop="column.field"
+        :label="column.title"
+        :min-width="column.width"
+        :formatter="formatter"
+        :fixed="column.fixed"
+        :key="column.field + cindex"
+        :align="column.align"
+        :sortable="column.sort ? 'custom' : false"
+        :show-overflow-tooltip="true"
+      >
+        <template #header>
+          <span
+            v-if="(column.require || column.required) && column.edit"
+            class="column-required"
+            >*</span
+          >{{ column.title }}
+        </template>
+
+        <template #default="scope">
+          <!-- 2022.01.08澧炲姞澶氳〃澶达紝鐜板湪鍙敮鎸佸父鐢ㄥ姛鑳芥覆鏌擄紝涓嶆敮鎸佺紪杈戝姛鑳�(娑夊強鍒扮粍浠堕噸鍐�) -->
+          <el-table-column
+            style="border: none"
+            v-for="columnChildren in filterChildrenColumn(column.children)"
+            :key="columnChildren.field"
+            :min-width="columnChildren.width"
+            :class-name="columnChildren.class"
+            :prop="columnChildren.field"
+            :align="columnChildren.align"
+            :label="columnChildren.title"
+          >
+            <template #default="scopeChildren">
+              <a
+                href="javascript:void(0)"
+                style="text-decoration: none"
+                @click="link(scopeChildren.row, columnChildren, $event)"
+                v-if="column.link"
+                v-text="scopeChildren.row[columnChildren.field]"
+              ></a>
+              <div
+                v-else-if="columnChildren.formatter"
+                @click="
+                  columnChildren.click &&
+                    columnChildren.click(
+                      scopeChildren.row,
+                      columnChildren,
+                      scopeChildren.$index
+                    )
+                "
+                v-html="
+                  columnChildren.formatter(
+                    scopeChildren.row,
+                    columnChildren,
+                    scopeChildren.$index
+                  )
+                "
+              ></div>
+              <div v-else-if="column.bind">
+                {{ formatter(scopeChildren.row, columnChildren, true) }}
+              </div>
+              <span v-else-if="column.type == 'date'">{{
+                formatterDate(scopeChildren.row, columnChildren)
+              }}</span>
+              <template v-else>
+                {{ scopeChildren.row[columnChildren.field] }}
+              </template>
+            </template>
+          </el-table-column>
+          <!-- 2020.06.18澧炲姞render娓叉煋鑷畾涔夊唴瀹� -->
+          <table-render
+            v-if="column.render && typeof column.render == 'function'"
+            :row="scope.row"
+            key="rd-01"
+            :index="scope.$index"
+            :column="column"
+            :render="column.render"
+          ></table-render>
+          <!-- 鍚敤鍙屽嚮缂栬緫鍔熻兘锛屽甫缂栬緫鍔熻兘鐨勪笉浼氭覆鏌撲笅鎷夋鏂囨湰鑳屾櫙棰滆壊 -->
+          <!-- @click="rowBeginEdit(scope.$index,cindex)" -->
+          <!-- 2021.09.21澧炲姞缂栬緫鏃跺readonly灞炴�у垽鏂� -->
+          <template
+            v-else-if="
+              column.edit &&
+              !column.readonly &&
+              ['file', 'img', 'excel'].indexOf(column.edit.type) != -1
+            "
+          >
+            <div style="display: flex; align-items: center" @click.stop>
+              <i
+                style="
+                  padding: 3px;
+                  margin-right: 10px;
+                  color: #8f9293;
+                  cursor: pointer;
+                "
+                @click="showUpload(scope.row, column)"
+                class="el-icon-upload"
+              ></i>
+              <img
+                v-show="column.edit.type == 'img'"
+                v-for="(file, imgIndex) in getFilePath(
+                  scope.row[column.field],
+                  column
+                )"
+                :key="imgIndex"
+                :onerror="defaultImg"
+                @click="viewImg(scope.row, column, file.path, $event)"
+                class="table-img"
+                :src="file.path"
+              />
+              <a
+                style="margin-right: 8px"
+                v-show="column.edit.type != 'img'"
+                class="t-file"
+                v-for="(file, fIndex) in getFilePath(
+                  scope.row[column.field],
+                  column
+                )"
+                :key="fIndex"
+                @click="dowloadFile(file)"
+                >{{ file.name }}</a
+              >
+            </div>
+          </template>
+          <div
+            v-else-if="
+              column.edit &&
+              !column.readonly &&
+              (column.edit.keep || edit.rowIndex == scope.$index)
+            "
+            class="edit-el"
+          >
+            <div @click.stop class="e-item">
+              <div>
+                <!-- 2020.07.24澧炲姞鏃ユ湡onChange浜嬩欢 -->
+                <el-date-picker
+                  clearable
+                  size="default"
+                  style="width: 100%"
+                  v-if="['date', 'datetime'].indexOf(column.edit.type) != -1"
+                  v-model="scope.row[column.field]"
+                  @change="
+                    (val) => {
+                      column.onChange &&
+                        column.onChange(scope.row, column, val);
+                    }
+                  "
+                  :type="column.edit.type"
+                  :placeholder="column.placeholder || column.title"
+                  :disabledDate="(val) => getDateOptions(val, column)"
+                  :value-format="getDateFormat(column)"
+                  :disabled="initColumnDisabled(scope.row, column)"
+                >
+                </el-date-picker>
+                <el-time-picker
+                  clearable
+                  size="default"
+                  style="width: 100%"
+                  v-else-if="column.edit.type == 'time'"
+                  v-model="scope.row[column.field]"
+                  @change="
+                    (val) => {
+                      column.onChange &&
+                        column.onChange(scope.row, column, val);
+                    }
+                  "
+                  :placeholder="column.placeholder || column.title"
+                  :value-format="column.format || 'HH:mm:ss'"
+                  :disabled="initColumnDisabled(scope.row, column)"
+                >
+                </el-time-picker>
+                <el-switch
+                  v-else-if="column.edit.type == 'switch'"
+                  v-model="scope.row[column.field]"
+                  active-color="#0f84ff"
+                  inactive-color="rgb(194 194 194)"
+                  @change="
+                    (val) => {
+                      switchChange(val, scope.row, column);
+                    }
+                  "
+                  :active-value="
+                    typeof scope.row[column.field] == 'boolean'
+                      ? true
+                      : typeof scope.row[column.field] == 'string'
+                      ? '1'
+                      : 1
+                  "
+                  :inactive-value="
+                    typeof scope.row[column.field] == 'boolean'
+                      ? false
+                      : typeof scope.row[column.field] == 'string'
+                      ? '0'
+                      : 0
+                  "
+                  :disabled="initColumnDisabled(scope.row, column)"
+                >
+                </el-switch>
+                <template
+                  v-else-if="
+                    ['select', 'selectList'].indexOf(column.edit.type) != -1
+                  "
+                >
+                  <el-select-v2
+                    style="width: 100%"
+                    :size="size"
+                    v-if="column.bind.data.length >= select2Count"
+                    v-model="scope.row[column.field]"
+                    filterable
+                    :multiple="column.edit.type == 'select' ? false : true"
+                    :placeholder="column.placeholder || column.title"
+                    :autocomplete="column.autocomplete"
+                    :options="column.bind.data"
+                    @change="
+                      column.onChange && column.onChange(scope.row, column)
+                    "
+                    clearable
+                    :disabled="initColumnDisabled(scope.row, column)"
+                  >
+                    <template #default="{ item }">
+                      {{ item.label }}
+                    </template>
+                  </el-select-v2>
+
+                  <el-select
+                    size="default"
+                    style="width: 100%"
+                    v-else
+                    v-model="scope.row[column.field]"
+                    :filterable="
+                      column.filter || column.bind.data.length > 10
+                        ? true
+                        : false
+                    "
+                    :multiple="column.edit.type == 'select'"
+                    :placeholder="column.placeholder || column.title"
+                    :autocomplete="column.autocomplete"
+                    @change="
+                      column.onChange && column.onChange(scope.row, column)
+                    "
+                    clearable
+                    :disabled="initColumnDisabled(scope.row, column)"
+                  >
+                    <el-option
+                      v-for="item in column.bind.data"
+                      :key="item.key"
+                      v-show="!item.hidden"
+                      :disabled="item.disabled"
+                      :label="item.value"
+                      :value="item.key"
+                      >{{ item.value }}
+                    </el-option>
+                  </el-select>
+                </template>
+                <el-input
+                  v-else-if="column.edit.type == 'textarea'"
+                  type="textarea"
+                  :placeholder="column.placeholder || column.title"
+                  v-model="scope.row[column.field]"
+                  :disabled="initColumnDisabled(scope.row, column)"
+                >
+                </el-input>
+                <input
+                  class="table-input"
+                  v-else-if="!column.summary && !column.onKeyPress"
+                  v-model.lazy="scope.row[column.field]"
+                  :disabled="initColumnDisabled(scope.row, column)"
+                />
+                <el-input
+                  v-else
+                  @change="inputKeyPress(scope.row, column, $event)"
+                  @input="inputKeyPress(scope.row, column, $event)"
+                  @keyup.enter="inputKeyPress(scope.row, column, $event)"
+                  size="default"
+                  v-model="scope.row[column.field]"
+                  :placeholder="column.placeholder || column.title"
+                  :disabled="initColumnDisabled(scope.row, column)"
+                ></el-input>
+              </div>
+              <div
+                class="extra"
+                v-if="column.extra && edit.rowIndex == scope.$index"
+              >
+                <a
+                  :style="column.extra.style"
+                  style="text-decoration: none"
+                  @click="extraClick(scope.row, column)"
+                >
+                  <i v-if="column.extra.icon" :class="[column.extra.icon]" />
+                  {{ column.extra.text }}
+                </a>
+              </div>
+            </div>
+          </div>
+          <!--娌℃湁缂栬緫鍔熻兘鐨勭洿鎺ユ覆鏌撴爣绛�-->
+          <template v-else>
+            <a
+              href="javascript:void(0)"
+              style="text-decoration: none"
+              @click="link(scope.row, column, $event)"
+              v-if="column.link"
+              v-text="scope.row[column.field]"
+            ></a>
+            <img
+              v-else-if="column.type == 'img'"
+              v-for="(file, imgIndex) in getFilePath(
+                scope.row[column.field],
+                column
+              )"
+              :key="imgIndex"
+              :onerror="defaultImg"
+              @click="viewImg(scope.row, column, file.path, $event)"
+              class="table-img"
+              :src="file.path"
+            />
+            <a
+              style="margin-right: 8px"
+              v-else-if="column.type == 'file' || column.type == 'excel'"
+              class="t-file"
+              v-for="(file, fIndex) in getFilePath(
+                scope.row[column.field],
+                column
+              )"
+              :key="fIndex"
+              @click="dowloadFile(file)"
+              >{{ file.name }}</a
+            >
+            <span v-else-if="column.type == 'date'">{{
+              formatterDate(scope.row, column)
+            }}</span>
+            <div
+              v-else-if="column.formatter"
+              @click="formatterClick(scope.row, column, $event)"
+              v-html="column.formatter(scope.row, column)"
+            ></div>
+            <!-- 2021.11.18淇table鏁版嵁婧愯缃负normal鍚庣偣鍑昏$event缂哄け鐨勯棶棰� -->
+            <div
+              v-else-if="column.bind && (column.normal || column.edit)"
+              @click="formatterClick(scope.row, column, $event)"
+              :style="column.getStyle && column.getStyle(scope.row, column)"
+            >
+              {{ formatter(scope.row, column, true) }}
+            </div>
+            <div
+              v-else-if="column.click && !column.bind"
+              @click="formatterClick(scope.row, column)"
+            >
+              {{ scope.row[column.field] }}
+            </div>
+            <div
+              @click="
+                () => {
+                  column.click && formatterClick(scope.row, column);
+                }
+              "
+              v-else-if="column.bind"
+            >
+              <el-tag
+                v-if="useTag"
+                :class="[isEmptyTag(scope.row, column)]"
+                :type="getColor(scope.row, column)"
+                :effect="column.effect"
+                >{{ formatter(scope.row, column, true) }}</el-tag
+              >
+              <template v-else>{{
+                formatter(scope.row, column, true)
+              }}</template>
+            </div>
+
+            <span v-else>{{ formatter(scope.row, column, true) }}</span>
+          </template>
+        </template>
+      </el-table-column>
+    </el-table>
+    <template v-if="!paginationHide">
+      <div class="block pagination" key="pagination-01" style="display: flex">
+        <div style="flex: 1"></div>
+        <el-pagination
+          key="pagination-02"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="paginations.page"
+          :page-sizes="paginations.sizes"
+          :page-size="paginations.size"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="paginations.total"
+        ></el-pagination>
+      </div>
+    </template>
+  </div>
+
+  <VolBox
+    v-model="uploadModel"
+    title="涓婁紶"
+    :height="228"
+    :width="500"
+    :padding="15"
+    lazy
+  >
+    <!-- 涓婁紶鍥剧墖銆乪xcel鎴栧叾浠栨枃浠躲�佹枃浠舵暟閲忋�佸ぇ灏忛檺鍒堕兘鍙互锛屽弬鐓olupload缁勪欢api -->
+    <div style="height: 200px; display: flex; align-items: center">
+      <VolUpload
+        style="text-align: center"
+        :autoUpload="currentColumn.edit.autoUpload"
+        :multiple="currentColumn.edit.multiple"
+        :url="uploadUrl"
+        :max-file="currentColumn.edit.maxFile"
+        :img="currentColumn.edit.type == 'img'"
+        :excel="currentColumn.edit.type == 'excel'"
+        :fileTypes="
+          currentColumn.edit.fileTypes ? currentColumn.edit.fileTypes : []
+        "
+        :fileInfo="fileInfo"
+        :upload-after="uploadAfter"
+      >
+        <div>{{ currentColumn.message }}</div>
+      </VolUpload>
+    </div>
+    <template #footer>
+      <div style="text-align: center">
+        <el-button type="default" size="small" @click="uploadModel = false"
+          >鍏抽棴</el-button
+        >
+        <el-button type="primary" size="small" @click="saveUpload"
+          >淇濆瓨</el-button
+        >
+      </div>
+    </template>
+  </VolBox>
+</template>
+<script>
+import VolTableRender from "./VolTable/VolTableRender";
+let _errMsg;
+import { defineComponent, defineAsyncComponent } from "vue";
+export default defineComponent({
+  //https://github.com/element-plus/element-plus/issues/1483
+  //娌℃湁鍘熷厛鐨剆election灞炴�т簡锛岀湅issue涓婁娇鐢╯elect/selectall鑾峰彇
+  //鐩戝惉鏁扮粍闀垮害锛屽鏋滃垹闄や簡鏁版嵁锛岀幇鍦ㄥ彧鑳借杩竻闄ゆ墍鏈夐�変腑鐨勮
+  watch: {
+    "tableData.length": {
+      handler(newLen, oldLen) {
+        this.watchRowSelectChange(newLen, oldLen);
+      },
+    },
+    "rowData.length": {
+      handler(newLen, oldLen) {
+        this.watchRowSelectChange(newLen, oldLen);
+      },
+    },
+  },
+  components: {
+    "table-render": VolTableRender,
+    VolUpload: defineAsyncComponent(() =>
+      import("@/components/basic/VolUpload.vue")
+    ),
+    VolBox: defineAsyncComponent(() => import("@/components/basic/VolBox.vue")),
+  },
+  props: {
+    rowKey: {
+      // 鏍戝舰缁撴瀯鐨勪富閿瓧娈碉紝濡傛灉璁剧疆鍊奸粯璁や細寮�鍚爲褰able锛涙敞鎰弐owKey瀛楁鐨勫�煎繀椤绘槸鍞竴锛�2021.05.02锛�
+      typeof: String,
+      default: undefined,
+    },
+    loadTreeChildren: {
+      // 鏍戝舰缁撴瀯鍔犺浇瀛愯妭鐐�
+      type: Function,
+      default: (tree, treeNode, resolve) => {
+        return resolve([]);
+      },
+    },
+    textInline: {
+      // 琛ㄦ牸鍐呭瓒呭嚭鍚庢槸鍚︽崲琛屾樉绀猴紙2020.01.16锛�
+      type: Boolean,
+      default: true,
+    },
+    tableData: {
+      // 琛ㄦ暟鎹簮,閰嶇疆浜唘rl灏变笉鐢ㄤ紶杩欎釜鍙傛暟浜�
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+    columns: {
+      type: Array,
+      default: [],
+    },
+    height: {
+      type: Number,
+      default: 0,
+    },
+    maxHeight: {
+      type: Number,
+      default: 0,
+    },
+    linkView: {
+      type: Function,
+      default: function () {
+        return 1;
+      },
+    },
+    pagination: {
+      type: Object,
+      default: function () {
+        return { total: 0, size: 30, sortName: "" };
+      },
+    },
+    url: {
+      type: String,
+      default: "",
+    },
+    paginationHide: {
+      type: Boolean,
+      default: true,
+    },
+    color: {
+      type: Boolean,
+      default: true,
+    },
+    index: {
+      // 鏄惁鍒涘缓绱㈠紩鍙�,濡傛灉闇�瑕佽〃鏍肩紪杈戝姛鑳斤紝杩欓噷闇�瑕佽缃负true
+      type: Boolean,
+      default: false,
+    },
+    allowEmpty: {
+      // 琛ㄦ牸鏁版嵁涓虹┖鏃舵槸鍚﹂粯璁や负--
+      type: Boolean,
+      default: true,
+    },
+    defaultLoadPage: {
+      // 浼犲叆浜唘rl锛屾槸鍚﹂粯璁ゅ姞杞借〃鏍兼暟鎹�
+      type: Boolean,
+      default: true,
+    },
+    loadKey: {
+      // 鏄惁鑷姩浠庡悗鍙板姞杞芥暟鎹簮
+      type: Boolean,
+      default: true,
+    },
+    single: {
+      type: Boolean, // 鏄惁鍗曢��
+      default: false,
+    },
+    doubleEdit: {
+      type: Boolean, // 鏄惁鍙屽嚮鍚敤缂栬緫鍔熻兘
+      default: true,
+    },
+    beginEdit: {
+      // 缂栬緫寮�濮�
+      type: Function,
+      default: function (row, column, index) {
+        return true;
+      },
+    },
+    endEditBefore: {
+      // 缁撴潫缂栬緫鍓�
+      type: Function,
+      default: function (row, column, index) {
+        return true;
+      },
+    },
+    endEditAfter: {
+      // 缁撴潫缂栬緫鍓�
+      type: Function,
+      default: function (row, column, index) {
+        return true;
+      },
+    },
+    ck: {
+      // 鏄惁鏄剧ずcheckbox
+      type: Boolean,
+      default: true,
+    },
+    columnIndex: {
+      // 鏄惁鏄剧ず琛屽彿(2020..11.1)
+      type: Boolean,
+      default: true,
+    },
+    highlightCurrentRow: {
+      //澧炲姞閫変腑琛岄珮浜樉绀�(2022.10.07)
+      type: Boolean,
+      default: true,
+    },
+    select2Count: {
+      //瓒呭嚭鏁伴噺鏄剧ずselect2缁勪欢
+      type: Number,
+      default: 500,
+    },
+    selectable: {
+      type: Function,
+      default: (row, index) => {
+        return true;
+      },
+    },
+  },
+  data() {
+    return {
+      fixed: false, //鏄浐瀹氳鍙蜂笌checkbox
+      clickEdit: true, //2021.07.17璁剧疆涓虹偣鍑昏缁撴潫缂栬緫
+      randomTableKey: 1,
+      visiblyColumns: [],
+      key: "",
+      realHeight: 0,
+      realMaxHeight: 0,
+      enableEdit: false, // 鏄惁鍚〃鏍肩敤缂栬緫鍔熻兘
+      empty: this.allowEmpty ? "" : "--",
+      defaultImg: 'this.src="' + require("@/assets/imgs/error.png") + '"',
+      loading: false,
+      footer: {},
+      total: 0,
+      formatConfig: {},
+      // defaultColor: "",
+      // 2020.09.06璋冩暣table鍒楁暟鎹簮鐨勮儗鏅鑹�
+      colors: ["", "warning", "success", "danger", "info"],
+      rule: {
+        phone: /^[1][3,4,5,6,7,8,9][0-9]{9}$/,
+        decimal: /(^[\-0-9][0-9]*(.[0-9]+)?)$/,
+        number: /(^[\-0-9][0-9]*([0-9]+)?)$/,
+      },
+      columnNames: [],
+      rowData: [],
+      paginations: {
+        sort: "",
+        order: "desc",
+        Foots: "",
+        total: 0,
+        // 2020.08.29澧炲姞鑷畾涔夊垎椤垫潯澶у皬
+        sizes: [30, 60, 100, 120],
+        size: 30, // 榛樿鍒嗛〉澶у皬
+        Wheres: [],
+        page: 1,
+        rows: 30,
+      },
+      errorFiled: "",
+      edit: { columnIndex: -1, rowIndex: -1 }, // 褰撳墠鍙屽嚮缂栬緫鐨勮涓庡垪鍧愭爣
+      editStatus: {},
+      summary: false, // 鏄惁鏄剧ず鍚堣
+      // 鐩墠鍙敮鎸佷粠鍚庡彴杩斿洖鐨剆ummaryData鏁版嵁
+      summaryData: [],
+      summaryIndex: {},
+      remoteColumns: [], // 闇�瑕佹瘡娆″埛鏂版垨鍒嗛〉鍚庝粠鍚庡彴鍔犺浇瀛楀吀鏁版嵁婧愮殑鍒楅厤缃�
+      cellStyleColumns: {}, // 鏈夎儗鏅鑹茬殑閰嶇疆
+      fxRight: false, //鏄惁鏈夊彸杈瑰浐瀹氳〃澶�
+      selectRows: [], //褰撳墠閫変腑鐨勮
+      isChrome: false,
+      //vol-table甯︽暟鎹簮鐨勫崟鍏冩牸鏄惁鍚敤tag鏍囩(涓嬫媺妗嗙瓑鍗曞厓鏍间互tag鏍囩鏄剧ず)
+      //2023.04.02鏇存柊voltable涓巑ain.js
+      useTag: true,
+      currentRow: {},
+      currentColumn: [],
+      fileInfo: [],
+      uploadUrl: "",
+      uploadModel: false,
+    };
+  },
+  created() {
+    try {
+      this.useTag = this.$global.table.useTag;
+    } catch (error) {
+      console.log(error.message);
+    }
+    //2021.06.19鍒ゆ柇璋锋瓕鍐呮牳娴忚閲嶆柊璁$畻table楂樺害
+    // if (
+    //   navigator.userAgent.indexOf('Chrome') != -1 ||
+    //   navigator.userAgent.indexOf('Edge') != -1
+    // ) {
+    //   this.isChrome = true;
+    // }
+    this.realHeight = this.getHeight();
+    this.realMaxHeight = this.getMaxHeight();
+    this.fxRight = this.columns.some((x) => {
+      return x.fixed == "right";
+    });
+    //2021.09.21绉婚櫎寮哄埗鍥哄畾琛屽彿涓巆heckbox鍒�
+    if (
+      this.columns.some((x) => {
+        return x.fixed && x.fixed != "right";
+      })
+    ) {
+      this.fixed = true;
+    }
+    //2022.04.06浼樺寲table鍚堣鍥哄畾鍒楁樉绀�
+    // if (
+    //   this.columns.some((x) => {
+    //     return x.summary;
+    //   })
+    // ) {
+    //   this.columns.forEach((x) => {
+    //     if (x.fixed && x.fixed != 'right') {
+    //       x.fixed = false;
+    //     }
+    //   });
+    //   this.fixed = false;
+    // }
+
+    // 浠庡悗鍙板姞涓嬫媺妗嗙殑[鏄惁鍚敤鐨刔鏁版嵁婧�
+    let keys = [];
+    let columnBind = [];
+    this.summaryData.push("鍚堣");
+    if (this.columnIndex) {
+      this.summaryData.push(" ");
+    }
+    this.columns.forEach((x, _index) => {
+      if (x.cellStyle) {
+        this.cellStyleColumns[x.field] = x.cellStyle;
+      }
+      if (!x.hidden) {
+        // this.summaryIndex[x.field] = _index;
+        // 2020.10.11淇姹傚拰鍒楅敊浣嶇殑闂
+        this.summaryData.push("");
+        this.summaryIndex[x.field] = this.summaryData.length - 1;
+      }
+      // 姹傚拰
+      if (x.summary && !this.summary) {
+        this.summary = true;
+      }
+      if (x.bind && x.bind.key && (!x.bind.data || x.bind.data.length == 0)) {
+        // 鍐欏叆杩滅▼
+        if (!x.bind.data) x.bind.data = [];
+        if (x.bind.remote) {
+          this.remoteColumns.push(x);
+        } else if (this.loadKey) {
+          keys.push(x.bind.key);
+          x.bind.valueTyoe = x.type;
+          columnBind.push(x.bind);
+        }
+      }
+    });
+    if (keys.length > 0) {
+      this.http
+        .post("/api/Sys_Dictionary/GetVueDictionary", keys)
+        .then((dic) => {
+          dic.forEach((x) => {
+            if (x.data.length > this.select2Count) {
+              x.data.forEach((item) => {
+                item.label = item.value;
+                item.value = item.key;
+              });
+            }
+            columnBind.forEach((c) => {
+              // 杞崲鏁版嵁婧愮殑绫诲瀷涓庡垪鐨勭被鍨嬩竴鑷�(2020.04.04)
+              if (
+                c.key == x.dicNo &&
+                (c.valueTyoe == "int" || c.valueTyoe == "sbyte")
+              ) {
+                x.data.forEach((d) => {
+                  // 2020.09.01澧炲姞瀵规暟瀛楃被鍨嬬殑浜屾鍒ゆ柇
+                  if (!isNaN(d.key)) {
+                    d.key = ~~d.key;
+                  }
+                });
+              }
+              if (c.key == x.dicNo) c.data.push(...x.data);
+            });
+          });
+        });
+    }
+
+    this.paginations.sort = this.pagination.sortName;
+    // 2020.08.29澧炲姞鑷畾涔夊垎椤垫潯澶у皬
+    Object.assign(this.paginations, this.pagination);
+    if (this.pagination.size) {
+      this.paginations.rows = this.pagination.size;
+    }
+    this.enableEdit = this.columns.some((x) => {
+      return x.hasOwnProperty("edit");
+    });
+    let keyColumn = this.columns.find((x) => {
+      return x.isKey;
+    });
+    if (keyColumn) {
+      this.key = keyColumn.field;
+    }
+    this.defaultLoadPage && this.load();
+  },
+  computed: {
+    filterColumns() {
+      return this.columns.filter((x, index) => {
+        if (!x.field) {
+          x.field = x.title + index;
+        }
+        return !x.hidden;
+      });
+    },
+  },
+  methods: {
+    watchRowSelectChange(newLen, oldLen) {
+      if (newLen < oldLen && this.selectRows.length) {
+        this.selectRows = [];
+        this.$refs.table.clearSelection();
+      }
+    },
+    switchChange(val, row, column) {
+      //杩欓噷鍦ㄥ垵濮嬪寲鐨勬椂鍊欎篃浼氳Е鍙慶hange浜嬩欢
+      if (Object.keys(row).length <= 1) {
+        return;
+      }
+      if (column.onChange) {
+        column.onChange(val, row, column);
+      }
+    },
+    inputKeyPress(row, column, $event, $e) {
+      column.onKeyPress && column.onKeyPress(row, column, $event);
+      this.getInputSummaries(null, null, $event, column);
+    },
+    extraClick(row, column) {
+      column.extra.click &&
+        column.extra.click(
+          row,
+          column,
+          this.url ? this.rowData : this.tableData
+        );
+    },
+    headerClick(column, event) {
+      if (this.clickEdit && this.edit.rowIndex != -1) {
+        if (
+          this.rowEndEdit(
+            this.url
+              ? this.rowData[this.edit.rowIndex]
+              : this.tableData[this.edit.rowIndex],
+            column
+          )
+        ) {
+          this.edit.rowIndex = -1;
+        }
+      }
+      // this.edit.rowIndex = -1;
+    },
+    rowDbClick(row, column, event) {
+      //2021.05.23澧炲姞鍙屽嚮琛屼簨浠�
+      this.$emit("rowDbClick", { row, column, event });
+    },
+    rowClick(row, column, event) {
+      //2022.02.20澧炲姞鐐瑰嚮鏃惰〃鏍煎弬鏁板垽鏂�
+      if (!column) {
+        return;
+      }
+      //姝e湪缂栬緫鏃讹紝绂佹鍑哄彂rowClick浜嬩欢
+      if (this.edit.rowIndex == -1) {
+        this.$emit("rowClick", { row, column, event });
+      }
+      // 鐐瑰嚮琛屼簨浠�(2020.11.07)
+
+      if (!this.doubleEdit) {
+        return;
+      }
+      // 鐐瑰嚮鍏朵粬琛屾椂锛屽鏋滅偣鍑荤殑琛屼笌姝e湪缂栬緫鐨勮鐩稿悓锛屼繚鎸佺紪杈戠姸鎬�
+      if (this.clickEdit && this.edit.rowIndex != -1) {
+        if (row.elementIndex == this.edit.rowIndex) {
+          // 鐐瑰嚮鐨勫崟鍏冩牸濡傛灉涓嶅彲浠ョ紪杈戯紝鐩存帴缁撴潫缂栬緫
+          // 2020.10.12淇缁撴潫缂栬緫鏃讹紝element table楂樼増鏈睘鎬ц幏鍙栦笉鍒扮殑闂
+          let _col = this.columns.find((x) => {
+            return x.field == ((event && event.property) || column.property);
+          });
+          if (_col && (!_col.edit || _col.readonly)) {
+            if (this.rowEndEdit(row, event)) {
+              this.edit.rowIndex = -1;
+            }
+          }
+          return;
+        }
+        if (this.rowEndEdit(row, event && event.property ? event : column)) {
+          this.edit.rowIndex = -1;
+        }
+        //褰撴鍦ㄧ紪杈戯紝涓旂偣鍑诲埌鍏朵粬琛屾椂锛屽湪鍘熺紪杈戠殑琛岀粨鏉熺紪杈戝悗锛岃Е鍙戞柊琛岀殑rowClick浜嬩欢
+        //姝e湪缂栬緫鏃讹紝绂佹鍑哄彂rowClick浜嬩欢
+        if (this.edit.rowIndex == -1) {
+          this.$emit("rowClick", { row, column, event });
+        }
+      }
+      this.rowBeginEdit(row, column);
+    },
+    dowloadFile(file) {
+      this.base.dowloadFile(
+        file.path,
+        file.name,
+        {
+          Authorization: this.$store.getters.getToken(),
+        },
+        this.http.ipAddress
+      );
+    },
+    getFilePath(pathSring, column) {
+      // 鑾峰彇琛ㄧ殑鍥剧墖涓庢枃浠舵樉绀�
+      if (!pathSring) return [];
+      // 澧炲姞鍥剧墖鑷畾涔夋搷浣�
+      // 杩斿洖鏍煎紡蹇呴』鏄痆{name:"鏂囦欢鍚�",path:"鍥剧墖鍏ㄨ矾寰勬垨base64鏍煎紡"}]
+      if (column.formatter) {
+        return column.formatter(pathSring);
+      }
+      let filePath;
+      if (column.base64 && pathSring.indexOf("data") != -1) {
+        filePath = ("," + pathSring)
+          .split(",data")
+          .filter((x) => {
+            return x;
+          })
+          .map((m) => {
+            return "data" + m;
+          });
+      } else {
+        filePath = pathSring.replace(/\\/g, "/").split(",");
+      }
+
+      let fileInfo = [];
+      for (let index = 0; index < filePath.length; index++) {
+        let file = filePath[index];
+        // 2020.12.19澧炲姞base64鍥剧墖鏄剧ず
+        if (column.base64) {
+          fileInfo.push({
+            name: "",
+            path:
+              (file.indexOf("data") == -1 ? "data:image/png;base64," : "") +
+              file,
+          });
+        } else if (file.indexOf(".") != -1) {
+          let splitFile = file.split("/");
+          if (splitFile.length > 0) {
+            fileInfo.push({
+              name: splitFile[splitFile.length - 1],
+              path: this.base.isUrl(file) ? file : this.http.ipAddress + file,
+            });
+          }
+        }
+      }
+      return fileInfo;
+    },
+    // 閲嶇疆table
+    reset() {
+      if (this.tableData && this.tableData.length > 0) {
+        this.tableData.splice(0);
+      }
+      if (this.rowData && this.rowData.length > 0) {
+        this.rowData.splice(0);
+      }
+      if (!this.paginationHide) {
+        this.paginations.page = 1;
+        // this.paginations.rows = 30;
+        if (this.paginations.wheres && this.paginations.wheres.length > 0) {
+          this.paginations.wheres.splice(0);
+        }
+      }
+      this.errorFiled = "";
+      this.edit.columnIndex = -1;
+      this.edit.rowIndex = -1;
+    },
+    getHeight() {
+      // 娌℃湁瀹氫箟楂樺害涓庢渶澶ч珮搴︼紝浣跨敤table榛樿鍊�
+      if (!this.height && !this.maxHeight) {
+        return null;
+      }
+      // 瀹氫箟浜嗘渶澶ч珮搴﹀垯涓嶄娇鐢ㄩ珮搴�
+      if (this.maxHeight) {
+        return null;
+      }
+      // 浣跨敤褰撳墠瀹氫箟鐨勯珮搴�
+      return this.height;
+    },
+    getMaxHeight() {
+      // 娌℃湁瀹氫箟楂樺害涓庢渶澶ч珮搴︼紝浣跨敤table榛樿鍊�
+      if (!this.height && !this.maxHeight) {
+        return null;
+      }
+      // 瀹氫箟浜嗘渶澶ч珮搴︿娇鐢ㄦ渶澶ч珮搴�
+      if (this.maxHeight) {
+        return this.maxHeight;
+      }
+      // 涓嶄娇鐢ㄦ渶澶ч珮搴�
+      return null;
+    },
+    getSelectedOptions(column) {
+      if (column.bind && column.bind.data && column.bind.data.length > 0) {
+        return column.bind.data;
+      }
+      return [];
+    },
+    formatterClick(row, column, event) {
+      if (column.click) {
+        column.click(row, column, event);
+        event.stopPropagation && event.stopPropagation();
+      } else {
+        this.rowClick(row, column, event);
+      }
+    },
+    initIndex({ row, rowIndex }) {
+      if (this.index) {
+        row.elementIndex = rowIndex;
+      }
+      // if (rowIndex%2!==0) {
+      //  return "even-row";
+      // }
+      return;
+    },
+    toggleEdit(event) {},
+    setEditStatus(status) {
+      // this.columns.forEach((x) => {
+      //   if (x.hasOwnProperty("edit")) {
+      //     this.$set(x.edit, "status", status);
+      //   }
+      // });
+    },
+    // 閫氳繃button鎸夐挳鍚敤缂栬緫
+    beginWithButtonEdit(scope) {
+      // url?rowData:tableData
+      this.rowBeginEdit(scope.row, this.columns[scope.$index]);
+    },
+    rowBeginEdit(row, column) {
+      if (this.edit.rowIndex != -1) {
+        return;
+      }
+      let _row = this.columns.find((x) => x.field == column.property);
+      if (_row) {
+        if (_row.readonly) {
+          return;
+        }
+        if (
+          //涓嶈兘缂栬緫鐨勫瓧娈点�乻witch锛岀偣鍑讳笉寮�鍚惎缂栬緫鍔熻兘
+          !_row.edit ||
+          (_row.edit.keep && _row.edit.type == "switch")
+        ) {
+          return;
+        }
+      }
+      if (!this.enableEdit) return;
+      _errMsg = "";
+      // 缂栬緫鍓�
+      this.columns
+        .filter((x) => {
+          return x.bind && x.bind.data && x.bind.data.length;
+        })
+        .forEach((column) => {
+          let val = row[column.field];
+          if (typeof column.bind.data[0].key == "string") {
+            if (typeof val == "number") {
+              row[column.field] = row[column.field] + "";
+            }
+          } else {
+            if (typeof val == "string" && val) {
+              let _val = val * 1;
+              if (_val + "" === val) {
+                row[column.field] = _val;
+              }
+            }
+          }
+        });
+      if (!this.beginEdit(row, column, row.elementIndex)) return;
+      if (row.hasOwnProperty("elementIndex")) {
+        if (this.edit.rowIndex == row.elementIndex) {
+          return;
+        }
+        this.edit.rowIndex = row.elementIndex;
+      }
+    },
+    rowEndEdit(row, column, event) {
+      if (this.clickEdit && event) {
+        return true;
+      }
+      if (!this.enableEdit) {
+        if (!this.errorFiled) {
+          if (
+            this.edit.rowIndex != -1 &&
+            !this.endEditAfter(row, column, this.edit.rowIndex)
+          ) {
+            return false;
+          }
+          this.edit.rowIndex = -1;
+        }
+        return true;
+      }
+      if (!this.doubleEdit && event) {
+        return true;
+      }
+      let _row = this.url
+        ? this.rowData[this.edit.rowIndex]
+        : this.tableData[this.edit.rowIndex];
+      // 缁撴潫缂栬緫鍓�
+      if (!this.endEditBefore(_row, column, this.edit.rowIndex)) return false;
+      if (this.edit.rowIndex != -1) {
+        //2022.06.26淇琛ㄦ牸鍐呭鍒囨崲鍚庤鏁颁笉涓�鑷存椂涓嶈兘缂栬緫鐨勯棶棰�
+        if (this.edit.rowIndex - 1 > (this.rowData || this.tableData).length) {
+          this.edit.rowIndex = -1;
+          return;
+        }
+        let row = (this.url ? this.rowData : this.tableData)[
+          this.edit.rowIndex
+        ];
+        for (let index = 0; index < this.columns.length; index++) {
+          const _column = this.columns[index];
+          if (_column.edit) {
+            if (!this.validateRow(row, _column)) {
+              return;
+            }
+          }
+        }
+      }
+      if (!this.endEditAfter(_row, column, this.edit.rowIndex)) return false;
+      this.edit.rowIndex = -1;
+      return true;
+    },
+    validateRow(row, option1) {
+      if (!this.validateColum(option1, row)) {
+        this.errorFiled = option1.field;
+        // 2022.05.06 淇敼閿欒淇℃伅閲嶅鐨勯棶棰�
+        this.$message.error(option1.title + _errMsg);
+        return false;
+      }
+      this.errorFiled = "";
+      return true;
+    },
+    validateColum(option, data) {
+      if (option.hidden || option.bind) return true;
+      let val = data[option.field];
+      if (option.require || option.required) {
+        if (val != "0" && (val === "" || val === undefined)) {
+          if (!this.errorFiled) {
+            _errMsg = "涓嶈兘涓虹┖";
+          }
+          return false;
+        }
+      }
+      if (!option.edit) {
+        return true;
+      }
+      let editType = option.edit.type;
+      // 楠岃瘉鏁板瓧
+      if (editType == "int" || editType == "decimal" || editType == "number") {
+        if (val == "" || val == undefined) return true;
+        if (editType == "decimal") {
+          if (!this.rule.decimal.test(val)) {
+            _errMsg = "鍙兘鏄暟瀛�";
+            return false;
+          }
+        } else if (!this.rule.decimal.test(val)) {
+          _errMsg = "鍙兘鏄暟瀛�";
+          return false;
+        }
+        if (
+          option.edit.min != undefined &&
+          typeof option.edit.min === "number" &&
+          val < option.edit.min
+        ) {
+          _errMsg = "涓嶈兘灏忎簬" + option.edit.min;
+          return false;
+        }
+        if (
+          option.edit.max != undefined &&
+          typeof option.edit.max === "number" &&
+          val > option.edit.max
+        ) {
+          _errMsg = "涓嶈兘澶т簬" + option.edit.max;
+          return false;
+        }
+        return true;
+      }
+
+      // 楠岃瘉瀛楃涓�
+      if (val && (editType == "text" || editType == "string")) {
+        if (
+          option.edit.min != undefined &&
+          typeof option.edit.min === "number" &&
+          val.length < option.edit.min
+        ) {
+          _errMsg = "鑷冲皯" + option.edit.min + "涓瓧绗�";
+          return false;
+        }
+        if (
+          option.edit.max != undefined &&
+          typeof option.edit.max === "number" &&
+          val.length > option.edit.max
+        ) {
+          _errMsg = "鏈�澶�" + option.edit.max + "涓瓧绗�";
+          return false;
+        }
+      }
+      return true;
+    },
+    delRow() {
+      let rows = this.getSelected();
+      if (rows.length == 0) return this.$Message.error("璇烽�夋嫨瑕佸垹闄ょ殑琛�!");
+
+      let data = this.url ? this.rowData : this.tableData;
+      let indexArr = this.getSelectedIndex();
+      if (indexArr.length == 0) {
+        return this.$Message.error(
+          "鍒犻櫎鎿嶄綔蹇呴』璁剧疆VolTable鐨勫睘鎬ndex='true'"
+        );
+      }
+      // if (indexArr.length == 0 || !this.key) {
+      //   return this.$message.error(
+      //     "璇疯缃甶ndex=true灞炴�ф垨鎸嘽olumns鐨勫瓧娈典负key"
+      //   );
+      // }
+      if (indexArr.length == 0) {
+        // let keyValues=[]
+        // rows.forEach(x=>{
+        //   if (x[this.key]) {
+        //   }
+        //   keyValues.push(x[this.key])
+        // })
+        // data.find(x=>)
+      } else {
+        for (let i = data.length - 1; i >= 0; i--) {
+          if (indexArr.indexOf(i) != -1) {
+            data.splice(i, 1);
+          }
+        }
+      }
+      this.edit.rowIndex = -1;
+      return rows;
+    },
+    addRow(row) {
+      if (!row) {
+        row = {};
+      }
+      this.columns.forEach((x) => {
+        // 2022.05.06 娣诲姞琛屾椂锛屽鏋滃垪鏈夌紪杈戝睘鎬э紝璁剧疆寮�鍚紪杈�(閬垮厤鍏抽棴缂栬緫鍚庯紝鏃犳硶鍐嶆鍚敤缂栬緫)??
+        //x.readonly = false;
+        if (!row.hasOwnProperty(x.field)) {
+          if (x.edit && x.edit.type == "switch") {
+            row[x.field] = x.type == "bool" ? false : 0;
+          } else if (!row.hidden) {
+            // 2020.09.06娣诲姞琛屾椂锛岃缃粯璁ゅ瓧娈�
+            row[x.field] = undefined;
+          }
+        }
+      });
+      if (!this.url) {
+        this.tableData.push(row);
+        return;
+      }
+      this.rowData.push(row);
+    },
+    viewImg(row, column, url, $event) {
+      $event.stopPropagation();
+      this.base.previewImg(url);
+      // window.open(row[column.field]);
+    },
+    link(row, column, $e) {
+      $e.stopPropagation();
+      this.$props.linkView(row, column);
+    },
+    getSelected() {
+      return this.selectRows;
+    },
+    getSelectedIndex() {
+      if (!this.index) {
+        // 鍙湁璁剧疆浜嗗睘鎬ndex鎵嶆湁绱㈠紩琛�
+        return [];
+      }
+      let indexArr = this.selectRows.map((x) => {
+        return x.elementIndex;
+      });
+      return indexArr || [];
+    },
+    GetTableDictionary(rows) {
+      // 鍒嗛〉鎴栧埛鏂版垨閲嶆柊缁戝畾鏁版嵁婧�
+      if (this.remoteColumns.length == 0 || !rows || rows.length == 0) return;
+      let remoteInfo = {};
+      for (let index = 0; index < this.remoteColumns.length; index++) {
+        const column = this.remoteColumns[index];
+        //  column.bind.data.splice(0);
+        let key = column.bind.key;
+        let data = [];
+        rows.forEach((row) => {
+          if (row[column.field] || row[column.field] == "0") {
+            if (data.indexOf(row[column.field]) == -1) {
+              data.push(row[column.field]);
+            }
+          }
+        });
+        if (data.length > 0) {
+          remoteInfo[key] = data;
+        }
+      }
+      if (remoteInfo.length == 0) return;
+      // ha= Object.assign([], ha, hb)
+      this.http
+        .post("/api/Sys_Dictionary/GetTableDictionary", remoteInfo)
+        .then((dic) => {
+          dic.forEach((x) => {
+            this.remoteColumns.forEach((column) => {
+              if (column.bind.key == x.key) {
+                column.bind.data = Object.assign([], column.bind.data, x.data);
+                // column.bind.data.push(...x.data);
+              }
+            });
+          });
+          this.$emit("dicInited", dic);
+        });
+    },
+    load(query, isResetPage) {
+      // isResetPage閲嶇疆鍒嗛〉鏁版嵁
+      if (!this.url) return;
+      if (isResetPage) {
+        this.resetPage();
+      }
+      let param = {
+        page: this.paginations.page,
+        rows: this.paginations.rows,
+        sort: this.paginations.sort,
+        order: this.paginations.order,
+        wheres: [], // 鏌ヨ鏉′欢锛屾牸寮忎负[{ name: "瀛楁", value: "xx" }]
+      };
+      let status = true;
+      // 鍚堝苟鏌ヨ淇℃伅(鍖呮煡璇㈠垎椤点�佹帓搴忋�佹煡璇㈡潯浠剁瓑)
+      if (query) {
+        param = Object.assign(param, query);
+      }
+      /* 鏌ヨ鍓嶅鐞�(濡傛灉闇�瑕佹煡璇㈡潯浠讹紝瀹炵幇缁勪欢鏂规硶loadBefore鏂规硶鍗冲彲:
+        loadBefore=(param, callBack)=>{
+          param.wheres = [{ name: "PhoneNo", value: "13419098211" }];
+          callBack(true);
+        })
+      */
+      this.$emit("loadBefore", param, (result) => {
+        status = result;
+      });
+      if (!status) return;
+
+      if (param.wheres && param.wheres instanceof Array) {
+        param.wheres = JSON.stringify(param.wheres);
+      }
+      this.loading = true;
+      this.http.post(this.url, param).then(
+        (data) => {
+          //2021.06.04淇tree涓嶅埛鏂扮殑闂
+          if (this.rowKey) {
+            this.randomTableKey++;
+            this.rowData.splice(0);
+          }
+          this.loading = false;
+          // 鏌ヨ杩斿洖缁撴灉鍚庡鐞�
+          // 2020.10.30澧炲姞鏌ヨ鍚庤繑鍥炴墍鏈夌殑鏌ヨ淇℃伅
+          this.$emit(
+            "loadAfter",
+            data.rows || [],
+            (result) => {
+              status = result;
+            },
+            data
+          );
+          if (!status) return;
+          this.GetTableDictionary(data.rows);
+          this.rowData = data.rows || [];
+          this.paginations.total = data.total;
+          // 鍚堣
+          this.getSummaries(data);
+          // this.$nextTick(() => {
+          //   this.$refs.table.doLayout();
+          // });
+        },
+        (error) => {
+          this.loading = false;
+          // this.$Message.error(error || "缃戠粶寮傚父");
+        }
+      );
+    }, // 鑾峰彇缁熻
+    getSummaries(data) {
+      if (!this.summary || !data.summary) return;
+      this.summaryData.splice(0);
+      // 寮�鍚簡琛屽彿鐨勶紝+1
+      if (this.columnIndex) {
+        this.summaryData.push("");
+      }
+      // 濡傛灉鏈塩heckbox锛屽簲璇ョ畻浣滄槸绗竴琛�
+      if (this.ck) {
+        this.summaryData.push("");
+      }
+
+      this.columns.forEach((col) => {
+        if (col.children && col.children.length) {
+          col.children.forEach((item) => {
+            this.getColumnSummaries(item, data);
+          });
+        } else {
+          this.getColumnSummaries(col, data);
+        }
+      });
+      if (this.summaryData.length > 0 && this.summaryData[0] == "") {
+        this.summaryData[0] = "鍚堣";
+      }
+    },
+    getColumnSummaries(col, data) {
+      if (!col.hidden) {
+        if (data.summary.hasOwnProperty(col.field)) {
+          let sum = data.summary[col.field];
+          if (sum) {
+            sum =
+              (sum * 1.0).toFixed(col.numberLength || 2).replace(".00", "") *
+              1.0;
+          }
+          this.summaryData.push(sum);
+        } else {
+          this.summaryData.push("");
+        }
+      }
+    },
+    getInputChangeSummaries() {},
+    handleSizeChange(val) {
+      this.paginations.size = val;
+      this.paginations.rows = val;
+      this.load();
+    },
+    handleCurrentChange(val) {
+      this.paginations.page = val;
+      this.load();
+    },
+    sortChange(sort) {
+      this.paginations.sort = sort.prop;
+      this.paginations.order = sort.order == "ascending" ? "asc" : "desc";
+      this.load();
+    },
+    resetPage() {
+      // 閲嶇疆鏌ヨ鍒嗛〉
+      // this.paginations.rows = 30;
+      this.paginations.page = 1;
+    },
+    selectionChange(selection) {
+      // console.log(selection);
+      // 閫夋嫨琛屼簨浠�,鍙湁鍗曢�夋墠瑙﹀彂
+      this.selectRows = selection;
+      if (this.single) {
+        if (selection.length == 1) {
+          this.$emit("rowChange", selection[0]);
+        }
+        if (selection.length > 1) {
+          let _row = selection[selection.length - 1];
+          this.$refs.table.toggleRowSelection(selection[0]);
+          this.selectRows = [_row];
+        }
+      }
+      // 灏唖electionchange鏆撮湶鍑哄幓
+      this.$emit("selectionChange", selection);
+    },
+    getColor(row, column) {
+      let val = row[column.field];
+      if (column.getColor && typeof column.getColor === "function") {
+        let _color = column.getColor(row, column);
+        if (_color) {
+          return _color;
+        }
+      }
+      if (!val && val != "0") {
+        return "";
+      }
+      if (!this.formatConfig[column.field]) {
+        this.formatConfig[column.field] = [val];
+        return this.colors[0];
+      }
+      let index = this.formatConfig[column.field].indexOf(val);
+      if (index != -1) {
+        return this.colors[index];
+      }
+      if (this.formatConfig[column.field].length > 5) {
+        return "";
+      }
+
+      if (index == -1) {
+        this.formatConfig[column.field].push(val);
+        index = this.formatConfig[column.field].length - 1;
+      }
+      return this.colors[index];
+    },
+    formatterDate(row, column) {
+      return (row[column.field] || "").substr(0, 10);
+    },
+    formatter(row, column, template) {
+      if (!template) return row[column.property];
+      let val = row[column.field];
+      if (!val && val != 0) return val;
+      // 鏄惁鍊�
+      if (column.edit && column.edit.type == "switch") {
+        return val ? "鏄�" : "鍚�";
+      }
+      if (!column.bind || !column.bind.data) {
+        return row[column.field];
+      }
+
+      if (
+        column.edit &&
+        (column.edit.type == "selectList" || column.edit.type == "treeSelect")
+      ) {
+        if (!Array.isArray(val)) {
+          row[column.field] = val.split(",");
+        } else {
+          val = val.join(",");
+        }
+        return this.getSelectFormatter(column, val);
+      }
+      // 缂栬緫澶氶�塼able鏄剧ず
+      if (
+        column.bind.type == "selectList" ||
+        column.bind.type == "checkbox" ||
+        column.bind.type == "treeSelect"
+      ) {
+        // if (typeof val === 'string' && val.indexOf(',') != -1) {
+        return this.getSelectFormatter(column, val + "");
+        //  }
+      }
+      let source = column.bind.data.filter((x) => {
+        // return x.key != "" && x.key == val;
+        // 2020.06.06淇鍗曠嫭浣跨敤table缁勪欢鏃�,key涓烘暟瀛�0鏃惰浆鎹㈡垚鏂囨湰澶辫触鐨勯棶棰�
+        return x.key !== "" && x.key !== undefined && x.key + "" === val + "";
+      });
+      if (source && source.length > 0) val = source[0].label || source[0].value;
+      return val;
+    },
+    getSelectFormatter(column, val) {
+      // 缂栬緫澶氶�塼able鏄剧ず
+      let valArr = val.split(",");
+      for (let index = 0; index < valArr.length; index++) {
+        (column.bind.orginData && column.bind.orginData.length
+          ? column.bind.orginData
+          : column.bind.data
+        ).forEach((x) => {
+          // 2020.06.06淇鏁版嵁婧愪负selectList鏃�,key涓烘暟瀛�0鏃朵笉鑳借浆鎹㈡枃鏈殑闂
+          if (
+            x.key !== "" &&
+            x.key !== undefined &&
+            x.key + "" == valArr[index] + ""
+          ) {
+            valArr[index] = x.label || x.value;
+          }
+        });
+      }
+      return valArr.join(",");
+    },
+    onChange(scope, val, event, column) {
+      // 2020.09.03淇onChange涓嶈Е鍙戠殑闂
+      let row = scope.row;
+      if (column.onChange && !column.onChange(row, val, event)) {
+        return;
+      }
+      // 杈撳叆妗嗘眰鍜屽疄鏃惰绠�
+      this.getInputSummaries(scope, val, event, column);
+    },
+    // input杈撳叆瀹炴椂姹傚拰
+    getInputSummaries(scope, val, event, column) {
+      // column鍒楄缃簡summary灞炴�х殑鎵嶈绠楀��
+      if (!column.summary) return;
+      let sum = 0;
+      //  let _index = 0;
+      (this.url ? this.rowData : this.tableData).forEach((x, index) => {
+        if (x.hasOwnProperty(column.field) && !isNaN(x[column.field])) {
+          // _index = index;
+          sum += x[column.field] * 1;
+        }
+      });
+      if (sum) {
+        if (column.summary == "avg") {
+          sum = sum / (this.rowData.length || this.tableData.length || 1);
+        }
+        sum =
+          (sum * 1.0).toFixed(column.numberLength || 2).replace(".00", "") *
+          1.0;
+      }
+      this.summaryData[this.summaryIndex[column.field]] = sum;
+    },
+    getSummaryData({ columns, data }) {
+      return this.summaryData;
+    },
+    getCellStyle(row) {
+      // 2020.12.13澧炲姞璁剧疆鍗曞厓鏍奸鑹�
+      if (row.column.property) {
+        return (
+          this.cellStyleColumns[row.column.property] &&
+          this.cellStyleColumns[row.column.property](
+            row.row,
+            row.rowIndex,
+            row.columnIndex
+          )
+        );
+      }
+    },
+    compareDate(date1, date2) {
+      if (!date2) {
+        return true;
+      }
+      return (
+        date1.valueOf() <
+        (typeof date2 == "number" ? date2 : new Date(date2).valueOf())
+      );
+    },
+    getDateOptions(date, item) {
+      //2021.07.17璁剧疆鏃堕棿鍙�夎寖鍥�
+      if ((!item.min && !item.max) || !date) {
+        return false;
+      }
+      if (item.min && item.min.indexOf(" ") == -1) {
+        //涓嶈缃椂鍒嗙锛屽悗闈細鑷姩鍔犱笂 08:00
+        item.min = item.min + " 00:00:000";
+      }
+      return (
+        this.compareDate(date, item.min) || !this.compareDate(date, item.max)
+      );
+    },
+    getDateFormat(column) {
+      //瑙乭ttps://day.js.org/docs/zh-CN/display/format
+      return column.edit.type == "date" ? "YYYY-MM-DD" : "YYYY-MM-DD HH:mm:ss";
+    },
+    userSelect(selection, row) {
+      this.selectRows = selection;
+      if (!this.single) {
+        this.$emit("rowChange", { row, selection });
+      }
+    },
+    isEmptyTag(row, column) {
+      if (!row[column.field] && row[column.field] != "0") {
+        return "empty-tag";
+      }
+      return "";
+    },
+    filterChildrenColumn(children) {
+      if (!children) {
+        return [];
+      }
+      return children.filter((x) => {
+        return !x.hidden;
+      });
+    },
+    initColumnDisabled(row, column) {
+      return column.getDisabled && column.getDisabled(row, column);
+    },
+    showUpload(row, column) {
+      this.fileInfo = (row[column.field] || "")
+        .split(",")
+        .filter((x) => {
+          return x;
+        })
+        .map((item) => {
+          return { path: item, name: "" };
+        });
+      this.currentRow = row;
+      this.currentColumn = column;
+      if (this.currentColumn.edit.autoUpload === undefined) {
+        this.currentColumn.edit.autoUpload = true;
+      }
+      if (this.currentColumn.edit.multiple === undefined) {
+        this.currentColumn.edit.multiple = false;
+      }
+
+      if (this.currentColumn.edit.url === undefined) {
+        this.uploadUrl =
+          "api/" +
+          (this.url || "").replace("/api", "api").split("/")[1] +
+          "/upload";
+      } else {
+        this.uploadUrl = this.currentColumn.edit.url;
+      }
+      this.uploadModel = true;
+    },
+    uploadAfter(result, files) {
+      this.currentColumn.uploadAfter &&
+        this.currentColumn.uploadAfter(result, files);
+      return true;
+    },
+    saveUpload() {
+      //鐢熸垚淇濆瓨鍚庤繑鍥炵殑璺緞
+      let arr = this.fileInfo.map((x) => {
+        if (x.path) {
+          return x.path;
+        }
+        return result.data + x.name;
+      });
+
+      this.currentRow[this.currentColumn.field] = arr.join(",");
+      this.uploadModel = false;
+      return true;
+    },
+  },
+});
+</script>
+<style lang="less" scoped>
+.vol-table {
+  position: relative;
+  .mask {
+    opacity: 0.2;
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    background: #d0d0d0;
+    z-index: 100;
+  }
+  .message {
+    text-align: center;
+    color: #635c5c;
+    font-size: 15px;
+    font-weight: 600;
+    background: #eee;
+    transform: translateY(-50%);
+    top: 50%;
+    position: absolute;
+    z-index: 200;
+    left: 0;
+    right: 0;
+    width: 150px;
+    margin: 0 auto;
+    line-height: 40px;
+    border-radius: 4px;
+    border: 1px solid #a09e9e;
+  }
+}
+.e-item {
+  display: flex;
+  > div:first-child {
+    flex: 1;
+  }
+}
+.vol-table ::v-deep(.el-pager .number) {
+  padding: 0 7px;
+  border-radius: 5px;
+  border: 1px solid #e6e6e6;
+  margin-left: 8px;
+  font-weight: 500;
+  min-width: 28px;
+}
+.vol-table ::v-deep(.el-pager .number.active) {
+  background: #ed4014;
+  color: #fff;
+}
+.vol-table .t-file {
+  color: #1e8cff;
+  cursor: pointer;
+  border-bottom: 1px solid;
+  padding-bottom: 2px;
+}
+.vol-table .empty-tag {
+  border: none;
+  background: none;
+}
+.v-table ::v-deep(.el-date-editor .el-icon-date),
+.v-table ::v-deep(.el-date-editor .el-icon-time) {
+  width: 10px;
+}
+
+.column-required {
+  position: relative;
+  color: #f20303;
+  font-size: 14px;
+  top: 2px;
+  right: 2px;
+}
+</style>
+
+<style scoped>
+/* .v-table ::v-deep(.even-row){
+  background: rgb(245,247,250);
+} */
+.pagination {
+  text-align: right;
+  padding: 2px 28px;
+  border: 1px solid #eee;
+  border-top: 0px;
+}
+/* .v-table ::v-deep(.el-input .el-input__inner) {
+  padding: 0 7px;
+} */
+.v-table ::v-deep(.el-table__header th) {
+  /* padding: 0px !important; */
+  background-color: #f8f8f9 !important;
+  font-size: 13px;
+  height: 46px;
+  color: #616161;
+}
+
+.v-table ::v-deep(.el-table__header th.is-sortable) {
+  padding: 3px !important;
+}
+.vol-table.text-inline ::v-deep(.el-table__body .cell),
+.vol-table.text-inline ::v-deep(.el-table__header-wrapper .cell) {
+  word-break: inherit !important;
+  white-space: nowrap !important;
+}
+/* .v-table  ::v-deep(.el-table__body td) {
+  padding: 9px 0 !important;
+} */
+
+.v-table ::v-deep(.el-table__footer td) {
+  padding: 7px 0 !important;
+}
+
+.vol-table ::v-deep(.el-table-column--selection .cell) {
+  display: inline;
+}
+.vol-table.text-inline ::v-deep(.el-table th > .cell) {
+  white-space: nowrap !important;
+}
+
+.vol-table .table-img {
+  height: 40px;
+  border-radius: 5px;
+  margin-right: 10px;
+  width: 40px;
+  object-fit: cover;
+}
+.vol-table .table-img:hover {
+  cursor: pointer;
+}
+
+.vol-table ::v-deep(.cell) {
+  padding: 2px 10px;
+}
+.vol-table ::v-deep(.cell .el-tag) {
+  padding: 5px 9px;
+}
+.table-input {
+  color: rgb(104, 103, 103);
+  padding: 3px 10px;
+  height: 32px;
+  line-height: 32px;
+  width: 100%;
+  border-radius: 4px;
+  border: 1px solid #dcdcdc;
+}
+.table-input:focus {
+  outline: 1px solid #49a3fd;
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/components/basic/VolTable/VolTableRender.js b/WIDESEA_WMSClient/src/components/basic/VolTable/VolTableRender.js
new file mode 100644
index 0000000..988a672
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolTable/VolTableRender.js
@@ -0,0 +1,14 @@
+import { h } from 'vue';
+export default {
+  name: "TableExpand",
+  functional: true,
+  props: {
+    render: Function,
+    row: {},//褰撳墠琛岀殑鏁版嵁
+    column: {},//褰撳墠琛岀殑閰嶇疆淇℃伅
+    index: { type: Number, default: 0 }//褰撳墠鎵�鍦ㄨ
+  },
+  render: ({ render,row ,column,index }) => {
+    return render(h, {row ,column,index}); //h();
+  }
+};
diff --git a/WIDESEA_WMSClient/src/components/basic/VolUpload.vue b/WIDESEA_WMSClient/src/components/basic/VolUpload.vue
new file mode 100644
index 0000000..4c7d696
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/basic/VolUpload.vue
@@ -0,0 +1,880 @@
+<template>
+  <div class="upload-container">
+    <div>
+      <div class="input-btns" style="margin-bottom: 10px">
+        <input
+          ref="input"
+          type="file"
+          style="display: none"
+          @change="handleChange"
+          :multiple="multiple"
+        />
+        <div v-if="img" class="upload-img">
+          <!-- v-for="(file,index) in fileInfo.length>0?fileInfo: files" -->
+          <div v-for="(file, index) in files" :key="index" class="img-item">
+            <div class="operation">
+              <div class="action">
+                <i class="el-icon-view view" @click="previewImg(index)"></i>
+                <i class="el-icon-delete remove" @click="removeFile(index)"></i>
+              </div>
+              <div class="mask"></div>
+            </div>
+
+            <img :src="getImgSrc(file, index)" :onerror="errorImg" />
+          </div>
+          <div
+            v-show="!autoUpload || (autoUpload && files.length < maxFile)"
+            class="img-selector"
+            :class="getSelector()"
+          >
+            <div class="selector" @click="handleClick">
+              <i class="el-icon-camera-solid"></i>
+            </div>
+            <div
+              v-if="!autoUpload"
+              class="s-btn"
+              :class="{ readonly: changed }"
+              @click="upload"
+            >
+              <div>{{ loadText }}</div>
+            </div>
+          </div>
+        </div>
+        <el-button v-else @click="handleClick"
+          >閫夋嫨{{ img ? '鍥剧墖' : '鏂囦欢' }}</el-button
+        >
+
+        <el-button
+          v-if="!autoUpload && !img"
+          type="info"
+          :disabled="changed"
+          @click="upload(true)"
+          :loading="loadingStatus"
+          >涓婁紶鏂囦欢</el-button
+        >
+      </div>
+      <slot></slot>
+      <div v-if="desc">
+        <el-alert
+          :title="getText() + '鏂囦欢澶у皬涓嶈秴杩�' + (maxSize || 50) + 'M'"
+          type="info"
+          show-icon
+        >
+        </el-alert>
+      </div>
+      <slot name="content"></slot>
+      <div v-if="!img">
+        <ul class="upload-list" v-show="fileList">
+          <li class="list-file" v-for="(file, index) in files" :key="index">
+            <a>
+              <span @click="fileOnClick(index, file)">
+                <i :class="format(file)"></i>
+                {{ file.name }}
+              </span>
+            </a>
+            <span @click="removeFile(index)" class="file-remove">
+              <i class="el-icon-close"></i>
+            </span>
+          </li>
+        </ul>
+      </div>
+      <slot name="tip"></slot>
+    </div>
+  </div>
+</template>
+<script>
+let OSS = require('ali-oss');
+export default {
+  components: {},
+  props: {
+    desc: {
+      //鏄惁鏄剧ず榛樿浠嬬粛
+      //鏄惁澶氶��
+      type: Boolean,
+      default: false
+    },
+    fileInfo: {
+      //鐢ㄤ簬鎺ユ敹涓婁紶鐨勬枃浠讹紝涔熷彲浠ュ姞浠ラ粯璁ゅ�硷紝鏄剧ず宸蹭笂浼犵殑鏂囦欢锛岀敤鎴蜂笂浼犲悗浼氳鐩栭粯璁ゅ��
+      type: Array,
+      default: () => {
+        return [];
+      } //鏍煎紡[{name:'1.jpg',path:'127.0.01/1.jpg'}]
+    },
+    downLoad: {
+      //鏄惁鍙互鐐瑰嚮鏂囦欢涓嬭浇
+      type: Boolean,
+      default: true
+    },
+    multiple: {
+      //鏄惁澶氶��
+      type: Boolean,
+      default: false
+    },
+    maxFile: {
+      //鏈�澶氬彲閫夋枃浠舵暟閲忥紝蹇呴』multiple=true锛屾墠浼氱敓鏁�
+      type: Number,
+      default: 5
+    },
+    maxSize: {
+      //鏂囦欢闄愬埗澶у皬3M
+      type: Number,
+      default: 50
+    },
+
+    autoUpload: {
+      //閫夋嫨鏂囦欢鍚庢槸鍚﹁嚜鍔ㄤ笂浼�
+      type: Boolean,
+      default: true
+    },
+    img: {
+      //鍥剧墖绫诲瀷  img>excel>fileTypes涓夌鏂囦欢绫诲瀷浼樺厛绾�
+      type: Boolean,
+      default: false
+    },
+    excel: {
+      //excel鏂囦欢
+      type: Boolean,
+      default: false
+    },
+    fileTypes: {
+      //鎸囧畾涓婁紶鏂囦欢鐨勭被鍨�
+      type: Array,
+      default: () => {
+        return [];
+      }
+    },
+    url: {
+      //涓婁紶鐨剈rl
+      type: String,
+      default: ''
+    },
+    uploadBefore: {
+      //杩斿洖false浼氫腑姝㈡墽琛�
+      //涓婁紶鍓�
+      type: Function,
+      default: (files) => {
+        return true;
+      }
+    },
+    uploadAfter: {
+      //杩斿洖false浼氫腑姝㈡墽琛�
+      //涓婁紶鍚�
+      type: Function,
+      default: (result, files) => {
+        return true;
+      }
+    },
+    onChange: {
+      //閫夋嫨鏂囦欢鏃�  //杩斿洖false浼氫腑姝㈡墽琛�
+      type: Function,
+      default: (files) => {
+        return true;
+      }
+    },
+    // clear: {
+    //   //涓婁紶瀹屾垚鍚庢槸鍚︽竻绌烘枃浠跺垪琛�
+    //   type: Boolean,
+    //   default: true
+    // },
+    fileList: {
+      //鏄惁鏄剧ず閫夋嫨鐨勬枃浠跺垪琛�
+      type: Boolean,
+      default: true
+    },
+    fileClick: {
+      //鐐瑰嚮鏂囦欢浜嬩欢
+      type: Function,
+      default: (index, file, files) => {
+        return true;
+      }
+    },
+    removeBefore: {
+      //绉婚櫎鏂囦欢浜嬩欢
+      type: Function,
+      default: (index, file, files) => {
+        return true;
+      }
+    },
+    append: {
+      //姝ゅ睘鎬у凡搴熷純锛屽鏂囦欢涓婁紶锛岄粯璁よ拷鍔犳枃浠�
+      type: Boolean,
+      default: false
+    },
+    compress: {
+      //寮�鍚浘鐗囧帇缂�,鍚庨潰鏍规嵁闇�瑕佸啀瀹屽杽
+      type: Boolean,
+      default: true
+    },
+    compressMinSize: {
+      //鍘嬬缉鐨勬渶灏忔瘮渚�
+      type: Number,
+      default: 0.1
+    }
+  },
+  data() {
+    return {
+      errorImg: 'this.src="' + require('@/assets/imgs/error-img.png') + '"',
+      changed: false, //鎵嬪姩涓婁紶鎴愬姛鍚庣姝㈤噸澶嶄笂浼狅紝蹇呴』閲嶆柊閫夋嫨
+      model: true,
+      files: [],
+      bigImg: '',
+      imgTypes: ['gif', 'jpg', 'jpeg', 'png', 'bmp', 'webp', 'jfif'],
+      loadingStatus: false,
+      loadText: '涓婁紶鏂囦欢'
+    };
+  },
+  created() {
+    //榛樿鏈夊浘鐗囩殑绂佹涓婁紶鎿嶄綔
+    if (this.fileInfo) {
+      this.changed = true;
+    }
+    this.cloneFile(this.fileInfo);
+  },
+  watch: {
+    fileInfo: {
+      handler(files) {
+        this.cloneFile(files);
+      },
+      deep: true
+    }
+  },
+  methods: {
+    cloneFile(files) {
+      this.files = files.map((x) => {
+        return {
+          name: x.name || this.getFileName(x.path),
+          path: x.path
+        };
+      });
+    },
+    getFileName(path) {
+      if (!path) {
+        return '鏈畾涔夋枃浠跺悕';
+      }
+      let _index = path.lastIndexOf('/');
+      return path.substring(_index + 1);
+    },
+    previewImg(index) {
+      //鏌ョ湅澶у浘棰勮妯″紡寰呭畬
+      this.base.previewImg(this.getImgSrc(this.files[index]));
+      //  window.open(this.getImgSrc((this.files.length>0?this.files:this.fileInfo)[index]));
+    },
+    getSelector() {
+      if (this.autoUpload) {
+        return 'auto-selector';
+      }
+      return 'submit-selector';
+    },
+    getImgSrc(file, index) {
+      if (file.hasOwnProperty('path')) {
+        if (this.base.isUrl(file.path)) {
+          return file.path;
+        }
+        //2020.12.27澧炲姞base64鍥剧墖鎿嶄綔
+        if (file.path.indexOf('/9j/') != -1) {
+          return 'data:image/jpeg;base64,' + file.path;
+        }
+        if (file.path.substr(0, 1) == '/') {
+          file.path = file.path.substr(1);
+        }
+        return this.http.ipAddress + file.path;
+      }
+      return window.URL.createObjectURL(file);
+    },
+    fileOnClick(index, file) {
+      if (!this.fileClick(index, file, this.files)) {
+        return;
+      }
+      //鐐瑰嚮涓嶄笅杞�
+      if (!this.downLoad) {
+        return;
+      }
+      if (!file.path) {
+        this.$message.error('璇峰厛涓婁紶鏂囦欢');
+        return;
+      }
+      this.base.dowloadFile(
+        file.path,
+        file.name,
+        {
+          Authorization: this.$store.getters.getToken()
+        },
+        this.http.ipAddress
+      );
+    },
+    getText() {
+      if (this.img) {
+        return '鍙兘涓婁紶鍥剧墖,';
+      } else if (this.excel) {
+        return '鍙兘涓婁紶excel鏂囦欢,';
+      }
+    },
+    handleClick() {
+      this.$refs.input.click();
+    },
+    handleChange(e) {
+      //this.compress寮�鍚浘鐗囧帇缂�,鍚庨潰鏍规嵁闇�瑕佸啀瀹屽杽
+      // this.clearFiles();
+      var result = this.checkFile(e.target.files);
+      if (!result) {
+        return;
+      }
+
+      this.changed = false;
+      //濡傛灉浼犲叆浜咶ileInfo闇�瑕佽嚜琛屽鐞嗙Щ闄ileInfo
+      if (!this.onChange(e.target.files)) {
+        return;
+      }
+      for (let index = 0; index < e.target.files.length; index++) {
+        const element = e.target.files[index];
+        element.input = true;
+      }
+      if (!this.multiple) {
+        this.files.splice(0);
+      }
+      this.files.push(...e.target.files);
+
+      this.$refs.input.value = null;
+      if (this.autoUpload && result) {
+        this.upload(false);
+      }
+    },
+    removeFile(index) {
+      //濡傛灉浼犲叆浜咶ileInfo闇�瑕佽嚜琛屽鐞嗙Щ闄ileInfo
+      //t绉婚櫎鏂囦欢
+      let removeFile = this.files[index];
+      //鍒犻櫎鐨勮繕娌′笂浼犵殑鏂囦欢
+      if (removeFile.input) {
+        this.files.splice(index, 1);
+      } else {
+        this.fileInfo.splice(index, 1);
+      }
+      if (!this.removeBefore(index, removeFile, this.fileInfo)) {
+        return;
+      }
+    },
+    clearFiles() {
+      this.files.splice(0);
+    },
+    getFiles() {
+      return this.files;
+    },
+    convertToFile(dataurl, filename) {
+      let arr = dataurl.split(',');
+      let mime = arr[0].match(/:(.*?);/)[1];
+      let suffix = mime.split('/')[1];
+      let bstr = atob(arr[1]);
+      let n = bstr.length;
+      let u8arr = new Uint8Array(n);
+      while (n--) {
+        u8arr[n] = bstr.charCodeAt(n);
+      }
+      // new File杩斿洖File瀵硅薄 绗竴涓弬鏁版槸 ArraryBuffer 鎴� Bolb 鎴朅rrary 绗簩涓弬鏁版槸鏂囦欢鍚�
+      // 绗笁涓弬鏁版槸 瑕佹斁鍒版枃浠朵腑鐨勫唴瀹圭殑 MIME 绫诲瀷
+      return new File([u8arr], `${filename}.${suffix}`, {
+        type: mime,
+        input: true
+      });
+    },
+    async compressImg(file) {
+      let fileSize = file.size / 1024 / 1024;
+      let read = new FileReader();
+      read.readAsDataURL(file);
+      return new Promise((resolve, reject) => {
+        read.onload = (e) => {
+          let img = new Image();
+          img.src = e.target.result;
+          let _this = this;
+          img.onload = function() {
+            //榛樿鎸夋瘮渚嬪帇缂�
+            let w = this.width;
+            let h = this.height;
+            let canvas = document.createElement('canvas');
+            let ctx = canvas.getContext('2d');
+            canvas.setAttribute('width', w);
+            canvas.setAttribute('height', h);
+            ctx.drawImage(this, 0, 0, w, h);
+            let rate = 0.3;
+            if (fileSize > 2) {
+              rate = 0.1;
+            } else if (fileSize > 1) {
+              rate = 0.1;
+            }
+            if (_this.compressMinSize > rate) {
+              rate = _this.compressMinSize;
+            }
+            // rate=1;
+            let base64 = canvas.toDataURL('image/jpeg', rate);
+            resolve(_this.convertToFile(base64, file.name));
+          };
+        };
+      });
+    },
+    async uploadOSS() {
+      this.http.get('api/alioss/getAccessToken', {}, false).then(async (x) => {
+        if (!x.status) return this.$Message.error(x.message);
+        let client = new OSS({
+          // yourRegion濉啓Bucket鎵�鍦ㄥ湴鍩熴�備互鍗庝笢1锛堟澀宸烇級涓轰緥锛孯egion濉啓涓簅ss-cn-hangzhou銆�
+          region: x.data.region,
+          // 浠嶴TS鏈嶅姟鑾峰彇鐨勪复鏃惰闂瘑閽ワ紙AccessKey ID鍜孉ccessKey Secret锛夈��
+          accessKeyId: x.data.accessKeyId,
+          accessKeySecret: x.data.accessKeySecret,
+          // 浠嶴TS鏈嶅姟鑾峰彇鐨勫畨鍏ㄤ护鐗岋紙SecurityToken锛夈��
+          stsToken: x.data.securityToken,
+          // 濉啓Bucket鍚嶇О銆�
+          bucket: x.data.bucket
+        });
+        console.log(this.files);
+        for (let index = 0; index < this.files.length; index++) {
+          const file = this.files[index];
+          if (file.input) {
+            let result = await client.put(
+              x.data.bucketFolder + '/' + x.data.unique + file.name,
+              file
+            );
+            file.path = result.url;
+            file.newName = x.data.unique + file.name;
+          }
+        }
+
+        this.fileInfo.splice(0);
+        // }
+        let _files = this.files.map((file) => {
+          return {
+            name: file.newName || file.name,
+            path: file.path
+          };
+        });
+        this.fileInfo.push(..._files);
+        //2021.09.25淇鏂囦欢涓婁紶鍚庝笉鑳藉悓鏃朵笅杞界殑闂
+        this.files = _files;
+      });
+      return;
+    },
+    async upload(vail) {
+      if (vail && !this.checkFile()) return false;
+      if (!this.url) {
+        return this.$message.error('娌℃湁閰嶇疆濂経rl');
+      }
+      if (!this.files || this.files.length == 0) {
+        return this.$message.error('璇烽�夋嫨鏂囦欢');
+      }
+      //澧炲姞涓婁紶鏃惰嚜瀹氫箟鍙傛暟锛屽悗鍙颁娇鐢ㄨ幏鍙朥tilities.HttpContext.Current.Request.Query["瀛楁"]
+      let params={};
+      if (!this.uploadBefore(this.files,params)) {
+        return;
+      }
+      let paramText="";
+      if (Object.keys(params).length) {
+        paramText="?1=1";
+        for (const key in params) {
+          let value=params[key];
+          if(typeof(value)=='object'){
+            value=JSON.stringify(value)
+          }
+          paramText+=`&${key}=${value}`
+        }
+      }
+
+      this.loadingStatus = true;
+      this.loadText = '涓婁紶涓�..';
+      if (window.oss && window.oss.ali.use) {
+        await this.uploadOSS();
+        this.loadingStatus = false;
+        this.loadText = '涓婁紶鏂囦欢';
+        if (!this.uploadAfter({status:true}, this.files)) {
+          this.changed = false;
+          return;
+        } else {
+          this.changed = true;
+        }
+        this.$message.success('涓婁紶鎴愬姛');
+        return;
+      }
+
+      var forms = new FormData();
+      for (let index = 0; index < this.files.length; index++) {
+        let file = this.files[index];
+        if (file.input) {
+          let name = file.name.split('.');
+          name = name[name.length - 1].toLocaleLowerCase();
+          let isImg = this.imgTypes.indexOf(name) != -1;
+          if (isImg && (name == 'jpg' || name == 'jpeg')) {
+            //>200KB鐨勫紑鍚帇缂�
+            if (isImg && file.size / 1024 / 1024 > 0.2) {
+              console.log('鍘嬬缉鍓�' + file.size);
+              file = await this.compressImg(file);
+              file.compress = true;
+              this.files[index] = file;
+              this.files[index].input = true;
+              console.log('鍘嬬缉鍚�' + file.size);
+            }
+          }
+          forms.append('fileInput', file, file.name);
+        }
+      }
+      // forms.append("fileInput", this.files);
+
+      this.http
+        .post(this.url+paramText, forms, this.autoUpload ? '姝e湪涓婁紶鏂囦欢' : '')
+        .then(
+          (x) => {
+            // this.$refs.uploadFile.clearFiles();
+            this.loadingStatus = false;
+            this.loadText = '涓婁紶鏂囦欢';
+            if (!this.uploadAfter(x, this.files)) {
+              this.changed = false;
+              return;
+            } else {
+              this.changed = true;
+            }
+            this.$message.success(x.message);
+            this.changed = x.status;
+            if (!x.status) {
+              // this.files = null;
+              return;
+            }
+            //鍗曢�夋竻闄や互鍓嶇殑鏁版嵁
+            //  if (!this.multiple) {
+            this.fileInfo.splice(0);
+            // }
+            let _files = this.files.map((file) => {
+              return {
+                name: file.name,
+                path: file.path || x.data + file.name
+              };
+            });
+            this.fileInfo.push(..._files);
+            //2021.09.25淇鏂囦欢涓婁紶鍚庝笉鑳藉悓鏃朵笅杞界殑闂
+            this.files = _files;
+          },
+          (error) => {
+            this.loadText = '涓婁紶鏂囦欢';
+            this.loadingStatus = false;
+          }
+        );
+    },
+    format(file, checkFileType) {
+      const format =
+        file.name
+          .split('.')
+          .pop()
+          .toLocaleLowerCase() || '';
+      let fileIcon = 'el-icon-document';
+      if (this.fileTypes.length > 0 && checkFileType != undefined) {
+        if (this.fileTypes.indexOf(format) != -1) {
+          return true;
+        }
+        return false;
+      }
+      if (
+        checkFileType &&
+        !(checkFileType instanceof Array) &&
+        checkFileType != 'img' &&
+        checkFileType != 'excel'
+      ) {
+        if (checkFileType.indexOf(format) > -1) {
+          return true;
+        } else {
+          return false;
+        }
+      }
+
+      if (checkFileType == 'img' || this.imgTypes.indexOf(format) > -1) {
+        if (checkFileType == 'img') {
+          if (this.imgTypes.indexOf(format) > -1) {
+            return true;
+          } else {
+            return false;
+          }
+        }
+        fileIcon = 'el-icon-picture-outline';
+      }
+      if (
+        ['mp4', 'm3u8', 'rmvb', 'avi', 'swf', '3gp', 'mkv', 'flv'].indexOf(
+          format
+        ) > -1
+      ) {
+        fileIcon = 'el-icon-document';
+      }
+      if (['mp3', 'wav', 'wma', 'ogg', 'aac', 'flac'].indexOf(format) > -1) {
+        fileIcon = 'el-icon-document';
+      }
+      if (['doc', 'txt', 'docx', 'pages', 'epub', 'pdf'].indexOf(format) > -1) {
+        fileIcon = 'el-icon-document';
+      }
+      if (
+        checkFileType == 'excel' ||
+        ['numbers', 'csv', 'xls', 'xlsx'].indexOf(format) > -1
+      ) {
+        if (checkFileType == 'excel') {
+          if (['numbers', 'csv', 'xls', 'xlsx'].indexOf(format) > -1) {
+            return true;
+          } else {
+            return false;
+          }
+        }
+        fileIcon = 'el-icon-document';
+      }
+      return fileIcon;
+    },
+    beforeUpload() {},
+    checkFile(inputFiles) {
+      const files = this.files;
+
+      if (
+        this.multiple &&
+        files.length + (inputFiles || []).length > (this.maxFile || 5)
+      ) {
+        this.$message.error(
+          '鏈�澶氬彧鑳介�夈��' +
+            (this.maxFile || 5) +
+            '銆�' +
+            (this.img ? '寮犲浘鐗�' : '涓枃浠�') +
+            ''
+        );
+        return false;
+      }
+      if (!inputFiles) {
+        inputFiles = this.files.filter((x) => {
+          return x.input;
+        });
+      }
+      let names = [];
+      for (let index = 0; index < inputFiles.length; index++) {
+        const file = inputFiles[index];
+        if (names.indexOf(file.name) != -1) {
+          file.name = '(' + index + ')' + file.name;
+        }
+        names.push(file.name);
+        if (this.img && !this.format(file, 'img')) {
+          this.$message.error('閫夋嫨鐨勬枃浠躲��' + file.name + '銆戝彧鑳芥槸鍥剧墖鏍煎紡');
+          return false;
+        }
+        if (this.excel && !this.format(file, 'excel')) {
+          this.$message.error('閫夋嫨鐨勬枃浠躲��' + file.name + '銆戝彧鑳芥槸excel鏂囦欢');
+          return false;
+        }
+        if (
+          this.fileTypes &&
+          this.fileTypes.length > 0 &&
+          !this.format(file, this.fileTypes)
+        ) {
+          this.$message.error(
+            '閫夋嫨鐨勬枃浠躲��' +
+              file.name +
+              '銆戝彧鑳芥槸銆�' +
+              this.fileTypes.join(',') +
+              '銆戞牸寮�'
+          );
+          return false;
+        }
+        if (file.size > (this.maxSize || 50) * 1024 * 1024) {
+          this.$message.error(
+            '閫夋嫨鐨勬枃浠躲��' +
+              file.name +
+              '銆戜笉鑳借秴杩�:' +
+              (this.maxSize || 50) +
+              'M'
+          );
+          return false;
+        }
+      }
+      return true;
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.upload-list {
+  padding-left: 0;
+  list-style: none;
+  .list-file {
+    line-height: 20px;
+    padding: 4px;
+    color: #515a6e;
+    border-radius: 4px;
+    transition: background-color 0.2s ease-in-out;
+    overflow: hidden;
+    position: relative;
+
+    font-size: 13px;
+    .file-remove {
+      display: none;
+      right: 0;
+      //  margin-left: 50px;
+      color: #0e9286;
+    }
+  }
+  .list-file:hover {
+    cursor: pointer;
+    .file-remove {
+      display: initial;
+    }
+    color: #2d8cf0;
+  }
+}
+.upload-container {
+  display: inline-block;
+  width: 100%;
+  // padding: 10px;
+
+  // min-height: 250px;
+  border-radius: 5px;
+  .alert {
+    margin-top: 43px;
+  }
+  .button-group > * {
+    float: left;
+    margin-right: 10px;
+  }
+  .file-info > span {
+    margin-right: 20px;
+  }
+}
+.upload-img {
+  display: inline-block;
+  .img-item:hover .operation {
+    display: block;
+  }
+  .img-item,
+  .img-selector {
+    position: relative;
+    cursor: pointer;
+    margin: 0 10px 10px 0;
+    float: left;
+    width: 65px;
+    height: 65px;
+    border: 1px solid #c7c7c7;
+    overflow: hidden;
+    border-radius: 5px;
+    box-sizing: content-box;
+    img {
+      margin: 0;
+      padding: 0;
+      width: 100%;
+      height: 100%;
+      object-fit: cover;
+    }
+
+    .operation {
+      display: none;
+      position: absolute;
+      top: 0;
+      bottom: 0;
+      left: 0;
+      right: 0;
+      .action {
+        opacity: 0.6;
+        text-align: center;
+        background: #151515de;
+        font-size: 14px;
+        position: absolute;
+        z-index: 90;
+        width: 100%;
+        bottom: 3px;
+        bottom: 0;
+        color: #ded5d5;
+        padding-right: 7px;
+        padding-bottom: 3px;
+        line-height: 20px;
+        .el-icon-view {
+          margin: 0 10px;
+        }
+      }
+      .mask {
+        opacity: 0.6;
+        background: #9e9e9e;
+        top: 0;
+        width: 100%;
+        height: 100%;
+        position: absolute;
+      }
+    }
+  }
+  .img-selector {
+    font-size: 50px;
+    text-align: center;
+    i {
+      position: relative;
+      font-size: 40px;
+      color: #6f6f6f;
+    }
+  }
+
+  .auto-selector {
+    .selector {
+      line-height: 64px;
+    }
+  }
+  .selector {
+    color: #a0a0a0;
+  }
+  .submit-selector {
+    .s-btn {
+      line-height: 22px;
+      font-size: 12px;
+      top: -6px;
+      // padding: 2px;
+      position: relative;
+      background: #2db7f5;
+      color: white;
+    }
+    .selector {
+      line-height: 50px;
+    }
+    .readonly {
+      background: #8c8c8c;
+    }
+  }
+}
+.big-model {
+  width: 100%;
+  height: 100%;
+  position: relative;
+  .m-img {
+  }
+  .mask {
+    position: absolute;
+    opacity: 0.6;
+    background: #eee;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+  }
+}
+
+.auto-upload {
+  z-index: 9999999;
+  width: 100%;
+  height: 100%;
+  position: fixed;
+  top: 0;
+  left: 0;
+  .j-content {
+    text-align: center;
+    font-size: 17px;
+    top: 40%;
+    position: absolute;
+    z-index: 999;
+    left: 0;
+    right: 0;
+    width: 240px;
+    /* height: 100%; */
+    margin: auto;
+    background: white;
+    /* bottom: 30px; */
+    line-height: 50px;
+    border-radius: 6px;
+    border: 1px solid #d2d2d2;
+  }
+  .mask {
+    cursor: pointer;
+    opacity: 0.6;
+    width: 100%;
+    height: 100%;
+    background: #101010;
+  }
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/components/redirect/401.vue b/WIDESEA_WMSClient/src/components/redirect/401.vue
new file mode 100644
index 0000000..33e44fb
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/redirect/401.vue
@@ -0,0 +1,19 @@
+<template>
+  <div style="height: 100%">
+    <redirect-error :text="text" message="璇锋眰纭鏄惁閰嶇疆鏉冮檺" :errorNumber="errorNumber"></redirect-error>
+  </div>
+</template>
+  <script>
+import RedirectError from "./RedirectError";
+export default {
+  components: {
+    RedirectError,
+  },
+  data() {
+    return {
+      errorNumber: "401",
+      text: "鎶辨瓑锛屾偍娌℃湁鏉冮檺杩涜姝ゆ搷浣渵",
+    };
+  },
+};
+</script>
diff --git a/WIDESEA_WMSClient/src/components/redirect/404.vue b/WIDESEA_WMSClient/src/components/redirect/404.vue
new file mode 100644
index 0000000..bd6db8f
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/redirect/404.vue
@@ -0,0 +1,21 @@
+<template>
+  <div style="height:100%;">
+    <redirect-error :text="text" :errorNumber="errorNumber"></redirect-error>
+  </div>
+</template>
+  <script>
+import RedirectError from "./RedirectError";
+export default {
+  components: {
+    RedirectError
+  },
+  data() {
+    return {
+      errorNumber:'404',
+      text: "鎶辨瓑锛岄〉闈㈠ソ鍍忓幓鐏槦浜唦"
+    };
+  }
+};
+</script>
+
+
diff --git a/WIDESEA_WMSClient/src/components/redirect/Message.vue b/WIDESEA_WMSClient/src/components/redirect/Message.vue
new file mode 100644
index 0000000..8952162
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/redirect/Message.vue
@@ -0,0 +1,39 @@
+<template>
+  <div class="middle-box">
+    <div class="text-center animated fadeInDown">
+      <i style="font-size: 50px;color: #67c23a;margin-top:40px;" class="el-icon-circle-check"></i>
+      <div style="font-size: 20px;margin-top: 10px;" class="error-desc">{{ text }}</div>
+    </div>
+  </div>
+</template>
+  <script>
+export default {
+  props: {
+    text: {
+      type: String,
+      default: "鎿嶄綔鎴愬姛锛�",
+    },
+  },
+  methods: {
+  },
+};
+</script>
+<style lang="less" scoped>
+body {
+  background-color: #fff;
+}
+.middle-box {
+  text-align: center;
+  padding-top: 80px;
+  height: 100%;
+  // background: #eee;
+  h1 {
+    font-size: 140px;
+    font-weight: 100;
+  }
+  .back {
+    padding: 10px;
+  }
+}
+</style>
+
diff --git a/WIDESEA_WMSClient/src/components/redirect/RedirectError.vue b/WIDESEA_WMSClient/src/components/redirect/RedirectError.vue
new file mode 100644
index 0000000..5457065
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/redirect/RedirectError.vue
@@ -0,0 +1,59 @@
+<template>
+  <div class="middle-box">
+    <div class="text-center animated fadeInDown">
+      <h1>{{ errorNumber }}</h1>
+      <h3 class="font-bold">{{message}}</h3>
+      <slot></slot>
+      <div class="error-desc">{{ text }}</div>
+      <div class="back">
+        <el-button  type="primary" @click="backHome" icon="md-arrow-round-back"
+          >杩斿洖棣栭〉</el-button >
+      </div>
+    </div>
+  </div>
+</template>
+  <script>
+import { Script } from "vm";
+export default {
+  props: {
+    errorNumber: {
+      type: String,
+      default: "500",
+    },
+    message: {
+      type: String,
+      default: "椤甸潰鏈壘鍒帮紒",
+    },
+    text: {
+      type: String,
+      default: "鍞�...濂藉儚鍑轰簡鐐归棶棰榽",
+    },
+  },
+  methods: {
+    backHome: function () {
+      this.$router.push({
+        path: "/home",
+      });
+    },
+  },
+};
+</script>
+<style lang="less" scoped>
+body {
+  background-color: #fff;
+}
+.middle-box {
+  text-align: center;
+  padding-top: 80px;
+  height: 100%;
+  // background: #eee;
+  h1 {
+    font-size: 140px;
+    font-weight: 100;
+  }
+  .back {
+    padding: 10px;
+  }
+}
+</style>
+
diff --git a/WIDESEA_WMSClient/src/components/redirect/coding.vue b/WIDESEA_WMSClient/src/components/redirect/coding.vue
new file mode 100644
index 0000000..5569483
--- /dev/null
+++ b/WIDESEA_WMSClient/src/components/redirect/coding.vue
@@ -0,0 +1,25 @@
+<template>
+  <div style="height:100%;">
+    <redirect-error :text="text" :errorNumber="errorNumber">
+      <div>
+        <router-link to="SellOrder">
+          <Button>鐐瑰嚮鏌ョ湅[娴嬭瘯瀹屾暣绀轰緥]</Button>
+        </router-link>
+      </div>
+    </redirect-error>
+  </div>
+</template>
+  <script>
+import RedirectError from "./RedirectError";
+export default {
+  components: {
+    RedirectError
+  },
+  data() {
+    return {
+      errorNumber: "鐢ㄤ緥姝e湪鏁寸悊涓�",
+      text: "璇︾粏鐢ㄤ緥鍦ㄦ鍑嗗涓�,鐩墠鍙弬鑰僛娴嬭瘯瀹屾暣绀轰緥]鐨勪娇鐢ㄦ柟娉�"
+    };
+  }
+};
+</script>
diff --git a/WIDESEA_WMSClient/src/extension/basic/customerInfo.js b/WIDESEA_WMSClient/src/extension/basic/customerInfo.js
new file mode 100644
index 0000000..4f642ad
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/customerInfo.js
@@ -0,0 +1,68 @@
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/basic/extend/GetLocationStatus.vue b/WIDESEA_WMSClient/src/extension/basic/extend/GetLocationStatus.vue
new file mode 100644
index 0000000..a861f7d
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/extend/GetLocationStatus.vue
@@ -0,0 +1,292 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showDetialBox"
+      :lazy="true"
+      width="1500px"
+      :padding="15"
+      title="璐т綅鐘舵�佸彉鍔ㄨ褰�"
+    >
+      <div class="box-table" style="margin-top: 1%">
+        <el-table
+          ref="singleTable"
+          :data="tableData"
+          style="width: 100%; height: 100%"
+          highlight-current-row
+          @row-click="handleRowClick"
+          height="500px"
+          @selection-change="handleSelectionChange"
+        >
+          >
+          <!-- <el-table-column type="selection" width="55"> </el-table-column> -->
+          <el-table-column
+            label="搴忓彿"
+            type="index"
+            fixed="left"
+            width="55"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
+            :key="index"
+            :prop="item.field"
+            :label="item.title"
+            :width="item.width"
+            align="center"
+          >
+            <template #default="scoped">
+              <div v-if="item.type == 'icon'">
+                <el-tooltip
+                  class="item"
+                  effect="dark"
+                  :content="item.title"
+                  placement="bottom"
+                  ><el-button
+                    type="text"
+                    @click="tableButtonClick(scoped.row, item)"
+                    ><i
+                      :class="item.icon"
+                      style="font-size: 22px"
+                    ></i></el-button
+                ></el-tooltip>
+              </div>
+              <div v-else-if="item.type == 'tag'">
+                <el-tag size="small">
+                  {{ getDictionary(scoped.row, item) }}
+                </el-tag>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+    </vol-box>
+  </div>
+</template>
+
+<script>
+import VolBox from "@/components/basic/VolBox.vue";
+export default {
+  components: { VolBox },
+  data() {
+    return {
+      showDetialBox: false,
+      row: null,
+      tableData: [],
+      tableColumns: [
+        {
+          field: "locationId",
+          title: "璐т綅涓婚敭",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "locationCode",
+          title: "璐т綅缂栧彿",
+          type: "string",
+          align: "left",
+        },
+        {
+          field: "beforeStatus",
+          title: "鍙樺姩鍓嶈揣浣嶇姸鎬�",
+          type: "tag",
+          width: 150,
+          align: "left",
+          bindKey: "locationStatusEnum",
+        },
+        {
+          field: "afterStatus",
+          title: "鍙樺姩鍚庤揣浣嶇姸鎬�",
+          type: "tag",
+          width: 150,
+          align: "left",
+          bindKey: "locationStatusEnum",
+        },
+        {
+          field: "changeType",
+          title: "鍙樺姩绫诲瀷",
+          type: "tag",
+          width: 100,
+          align: "left",
+          bindKey: "locationChangeType",
+        },
+        {
+          field: "orderId",
+          title: "鍗曟嵁涓婚敭",
+          type: "string",
+          width: 90,
+          align: "left",
+          hidden: true,
+        },
+        {
+          field: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "int",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "orderDetailId",
+          title: "鍗曟嵁鏄庣粏涓婚敭",
+          type: "string",
+          width: 200,
+          align: "left",
+          hidden: true,
+        },
+        {
+          field: "taskNum",
+          title: "浠诲姟鍙�",
+          type: "string",
+          width: 180,
+          align: "left",
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+          sort: true,
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+          hidden: true,
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+          hidden: true,
+          sort: true,
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+          hidden: true,
+        },
+      ],
+      paginations: {
+        sort: "CreateDate",
+        order: "desc",
+        Foots: "",
+        total: 0,
+        // 2020.08.29澧炲姞鑷畾涔夊垎椤垫潯澶у皬
+        sizes: [30, 60, 100, 120],
+        size: 30, // 榛樿鍒嗛〉澶у皬
+        Wheres: [],
+        page: 1,
+        rows: 30,
+      },
+      dictionaryList: null,
+    };
+  },
+  methods: {
+    open(row) {
+      this.row = row;
+      this.showDetialBox = true;
+      this.getDetailData();
+      this.getDictionaryData();
+    },
+    getDetailData() {
+      this.http
+        .post(
+          "/api/LocationStatusChangeRecord/GetLocationState?id=" + this.row.id,
+          {},
+          true
+        )
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.tableData = x.data;
+        });
+    },
+    getDictionaryData() {
+      if (this.dictionaryList) {
+        return;
+      }
+      var param = [];
+      this.tableColumns.forEach((x) => {
+        if (x.type == "tag" && x.bindKey != "") {
+          param.push(x.bindKey);
+        }
+      });
+      this.http
+        .post("api/Sys_Dictionary/GetVueDictionary", param, "鏌ヨ涓�")
+        .then((x) => {
+          if (x.length > 0) {
+            this.dictionaryList = x;
+          }
+        });
+    },
+    getDictionary(row, column) {
+      if (this.dictionaryList) {
+        var item = this.dictionaryList.find((x) => x.dicNo == column.bindKey);
+        if (item) {
+          var dicItem = item.data.find((x) => x.key == row[column.field]);
+          console.log(dicItem);
+          if (dicItem) {
+            return dicItem.value;
+          } else {
+            return row[column.field];
+          }
+        } else {
+          return row[column.field];
+        }
+      }
+    },
+  },
+
+  created() {},
+};
+</script>
+
+<style scoped>
+.el-col {
+  border-radius: 4px;
+}
+
+.grid-content {
+  border-radius: 4px;
+  min-height: 36px;
+}
+
+.content-text {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.right-text {
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+}
+</style>
+<style>
+.el-table .warning-row {
+  background: #e6a23c;
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.el-table .error-row {
+  background: #f56c6c;
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/basic/extend/materielcodeprintView.vue b/WIDESEA_WMSClient/src/extension/basic/extend/materielcodeprintView.vue
new file mode 100644
index 0000000..43f8429
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/extend/materielcodeprintView.vue
@@ -0,0 +1,158 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showDetialBox"
+      :lazy="true"
+      width="300px"
+      :padding="15"
+      title="鎵撳嵃"
+    >
+      <div
+        id="printContent"
+        style="display: flex; justify-content: center; align-items: center"
+      >
+        <div
+          style="display: flex; justify-content: center; align-items: center"
+        >
+          <VueQrcode id="qrcode" :value="Code" :size="200"></VueQrcode>
+        </div>
+      </div>
+      <div id="palletcode">
+        <!-- <span
+          style="display: flex; justify-content: center; align-items: center"
+          >{{ Code }}</span
+        > -->
+        <span
+          style="display: flex; justify-content: center; align-items: center"
+          >鐗╂枡缂栫爜:{{ materielCode }}</span
+        >
+      </div>
+
+      <template #footer>
+        <el-button type="primary" size="small" @click="print()">鎵撳嵃</el-button>
+        <el-button type="danger" size="small" @click="showDetialBox = false"
+          >鍏抽棴</el-button
+        >
+      </template>
+    </vol-box>
+  </div>
+</template>
+  
+  <script>
+import VolBox from "@/components/basic/VolBox.vue";
+import VueQrcode from "vue-qrcode";
+import QRCode from "qrcode";
+import { da } from "element-plus/es/locales.mjs";
+export default {
+  components: { VolBox, VueQrcode },
+  data() {
+    return {
+      showDetialBox: false,
+      row: null,
+      qrcodeDataURL: "",
+      Code: "",
+      materielCode: "",
+      lotNo: "",
+      purchaseOrderNo: "",
+      quantity: "",
+      productionDate: "",
+      effectiveDate: "",
+    };
+  },
+  methods: {
+    open(row) {
+      this.row = row;
+      this.showDetialBox = true;
+      if (row && row.materielCode) {
+        this.materielCode = row.materielCode;
+        this.lotNo = row.lotNo;
+        this.purchaseOrderNo = row.purchaseOrderNo;
+        this.quantity = row.quantity;
+        this.productionDate = formatDate(row.productionDate);
+        this.effectiveDate = formatDate(row.effectiveDate);
+      }
+      this.Code =
+        "M:" +
+        this.materielCode +
+        ",BS:" +
+        this.lotNo +
+        ",DM:" +
+        this.productionDate +
+        ",DE:" +
+        this.effectiveDate +
+        ",Q:" +
+        this.quantity +
+        ",PO:" +
+        this.purchaseOrderNo;
+    },
+    print() {
+      let printContent = document.getElementById("printContent");
+      let palletcode = document.getElementById("palletcode");
+      var printWindow = window.open("", "");
+      printWindow.document.write(printContent.innerHTML);
+      printWindow.document.write(palletcode.innerHTML);
+      printWindow.document.close();
+      printWindow.focus();
+      printWindow.print();
+      printWindow.close();
+    },
+    formatDate(dateStr) {
+      let date = new Date(dateStr);
+      let year = date.getFullYear();
+      let month = String(date.getMonth() + 1).padStart(2, "0");
+      let day = String(date.getDate()).padStart(2, "0");
+      return year + "-" + month + "-" + day;
+    },
+  },
+
+  created() {},
+};
+function formatDate(dateStr) {
+  const date = new Date(dateStr);
+  return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(
+    2,
+    "0"
+  )}-${String(date.getDate()).padStart(2, "0")}`;
+}
+</script>
+  
+  <style scoped>
+.el-col {
+  border-radius: 4px;
+}
+
+.grid-content {
+  border-radius: 4px;
+  min-height: 36px;
+}
+
+.content-text {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.right-text {
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+}
+</style>
+  <style>
+.el-table .warning-row {
+  background: #e6a23c;
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.el-table .error-row {
+  background: #f56c6c;
+}
+
+canvas {
+  display: block;
+  margin: auto;
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/basic/extend/palletCodeAdd.vue b/WIDESEA_WMSClient/src/extension/basic/extend/palletCodeAdd.vue
new file mode 100644
index 0000000..7d9ef70
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/extend/palletCodeAdd.vue
@@ -0,0 +1,170 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showDetialBox"
+      :lazy="true"
+      width="600px"
+      :padding="15"
+      title="鎵撳嵃"
+    >
+      <div>
+        <el-form>
+          <el-form-item required label="璇烽�夋嫨浠撳簱锛�">
+            <el-select
+              v-model="warehouseId"
+              filterable
+              placeholder="璇烽�夋嫨"
+              @change="getPalletType"
+            >
+              <el-option
+                v-for="item in warehouses"
+                :key="item.key"
+                :label="item.value"
+                :value="item.key"
+              >
+                <span style="float: left">{{ item.value }}</span>
+                <span style="float: right; color: #8492a6; font-size: 13px">{{
+                  item.key
+                }}</span>
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item required label="璇疯緭鍏ユ暟閲忥細"
+            ><el-input-number
+              v-model="num"
+              :min="1"
+              :max="100"
+              label="璇疯緭鍏ユ暟閲�"
+            ></el-input-number>
+          </el-form-item>
+          <el-form-item
+            required
+            label="璇烽�夋嫨鎵樼洏绫诲瀷锛�"
+            v-show="warehouseId != ''"
+          >
+            <el-radio-group v-model="palletType">
+              <el-radio
+                v-for="item in palletTypes"
+                :key="item.key"
+                :label="item"
+                >{{ item.value }}</el-radio
+              >
+            </el-radio-group>
+          </el-form-item>
+        </el-form>
+      </div>
+      <template #footer>
+        <el-button type="primary" size="small" @click="submit">纭</el-button>
+        <el-button type="danger" size="small" @click="close">鍏抽棴</el-button>
+      </template>
+    </vol-box>
+  </div>
+</template>
+    
+    <script>
+import VolBox from "@/components/basic/VolBox.vue";
+export default {
+  components: { VolBox },
+  data() {
+    return {
+      showDetialBox: false,
+      warehouses: [],
+      warehouseId: "",
+      palletType: "",
+      palletTypes: [],
+      num: 1,
+    };
+  },
+  methods: {
+    open() {
+      if (this.warehouses.length == 0) {
+        this.getWarehouseInfos();
+      }
+      if (this.warehouses.length == 1) {
+            this.warehouseId = this.warehouses[0].key;
+            this.getPalletType();
+          }
+      this.showDetialBox = true;
+    },
+    getWarehouseInfos() {
+      this.http
+        .post("api/Warehouse/GetWarehouseDicByUser", null, "鏁版嵁澶勭悊涓�")
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.warehouses = x.data;
+          if (this.warehouses.length == 1) {
+            this.warehouseId = this.warehouses[0].key;
+          }
+        });
+    },
+    getPalletType() {
+      this.palletTypes = this.warehouses.find(
+        (x) => x.key == this.warehouseId
+      ).extra;
+    },
+    close() {
+      this.showDetialBox = false;
+      if (this.warehouses.length > 1) {
+        this.warehouseId = "";
+      }
+      this.palletType = "";
+    },
+    submit() {
+      this.http
+        .post(
+          `api/PalletCodeInfo/AddPalletCodeData?count=${this.num}&warehouseId=${this.warehouseId}&palletTypeId=${this.palletType.key}`,
+          null,
+          "鏁版嵁澶勭悊涓�"
+        )
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.$parent.refresh();
+          this.close();
+        });
+    },
+  },
+  created() {},
+};
+</script>
+    
+    <style scoped>
+.el-col {
+  border-radius: 4px;
+}
+
+.grid-content {
+  border-radius: 4px;
+  min-height: 36px;
+}
+
+.content-text {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.right-text {
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+}
+</style>
+    <style>
+.el-table .warning-row {
+  background: #e6a23c;
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.el-table .error-row {
+  background: #f56c6c;
+}
+
+canvas {
+  display: block;
+  margin: auto;
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/basic/extend/printView.vue b/WIDESEA_WMSClient/src/extension/basic/extend/printView.vue
new file mode 100644
index 0000000..5b7a400
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/extend/printView.vue
@@ -0,0 +1,122 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showDetialBox"
+      :lazy="true"
+      width="300px"
+      :padding="15"
+      title="鎵撳嵃"
+    >
+      <div
+        id="printContent"
+        style="display: flex; justify-content: center; align-items: center"
+      >
+        <div
+          style="display: flex; justify-content: center; align-items: center"
+        >
+          <VueQrcode id="qrcode" :value="palletCode" :size="200"></VueQrcode>
+        </div>
+      </div>
+      <div id="palletcode">
+        <span
+          style="display: flex; justify-content: center; align-items: center"
+          >{{ palletCode }}</span
+        >
+      </div>
+
+      <template #footer>
+        <el-button type="primary" size="small" @click="print()">鎵撳嵃</el-button>
+        <el-button type="danger" size="small" @click="showDetialBox = false"
+          >鍏抽棴</el-button
+        >
+      </template>
+    </vol-box>
+  </div>
+</template>
+  
+  <script>
+import VolBox from "@/components/basic/VolBox.vue";
+import VueQrcode from "vue-qrcode";
+import QRCode from "qrcode";
+export default {
+  components: { VolBox, VueQrcode },
+  data() {
+    return {
+      showDetialBox: false,
+      row: null,
+      qrcodeDataURL: "",
+      palletCode: "",
+    };
+  },
+  methods: {
+    open(row) {
+      this.row = row;
+      this.showDetialBox = true;
+      if (row && row.palletCode) {
+        this.palletCode = row.palletCode;
+      }
+    },
+    print() {
+      let printContent = document.getElementById("printContent");
+      let palletcode=document.getElementById("palletcode");
+      var printWindow = window.open("", "");
+      printWindow.document.write(printContent.innerHTML);
+      printWindow.document.write(palletcode.innerHTML);
+      printWindow.document.close();
+      printWindow.focus();
+      printWindow.print();
+      printWindow.close();
+      this.http
+            .post("api/palletCodeInfo/PrintStatusUp?printCode="+this.palletCode, null, "鏁版嵁澶勭悊涓�")
+            .then((x) => {
+              if (!x.status) return this.$message.error(x.message);
+              this.$message.success("鎿嶄綔鎴愬姛");
+              this.$parent.refresh();
+              this.showDetialBox = false;
+            });
+    },
+  },
+  created() {},
+};
+</script>
+  
+  <style scoped>
+.el-col {
+  border-radius: 4px;
+}
+
+.grid-content {
+  border-radius: 4px;
+  min-height: 36px;
+}
+
+.content-text {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.right-text {
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+}
+</style>
+  <style>
+.el-table .warning-row {
+  background: #e6a23c;
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.el-table .error-row {
+  background: #f56c6c;
+}
+
+canvas {
+  display: block;
+  margin: auto;
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/basic/locationInfo.js b/WIDESEA_WMSClient/src/extension/basic/locationInfo.js
new file mode 100644
index 0000000..d805115
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/locationInfo.js
@@ -0,0 +1,103 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+import gridBody from './extend/GetLocationStatus.vue'
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: gridBody,
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+    //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {
+      let EnableBtn = this.buttons.find(x => x.value == 'Enable');
+      if (EnableBtn) {
+        EnableBtn.onClick = function () {
+          let rows = this.$refs.table.getSelected();
+          if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
+          var keys = rows.map(x => { return x.id });
+          this.http
+            .post("api/LocationInfo/LocationEnableStatus", keys, "鏁版嵁澶勭悊涓�")
+            .then((x) => {
+              if (!x.status) return this.$message.error(x.message);
+              this.$message.success("鎿嶄綔鎴愬姛");
+              this.refresh();
+            });
+        }
+      }
+      let DisableBtn = this.buttons.find(x => x.value == 'Disable');
+      if (DisableBtn) {
+        DisableBtn.onClick = function () {
+          let rows = this.$refs.table.getSelected();
+          if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
+          var keys = rows.map(x => { return x.id });
+          this.http
+            .post("api/LocationInfo/LocationDisableStatus", keys, "鏁版嵁澶勭悊涓�")
+            .then((x) => {
+              if (!x.status) return this.$message.error(x.message);
+              this.$message.success("鎿嶄綔鎴愬姛");
+              this.refresh();
+            });
+        }
+      }
+
+      this.columns.push({
+        field: '鎿嶄綔',
+        title: '鎿嶄綔',
+        width: 90,
+        fixed: 'right',
+        align: 'center',
+        formatter: (row) => {
+          return (
+            '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">鏌ョ湅鏄庣粏</i>'
+          );
+        },
+        click: (row) => {
+          this.$refs.gridBody.open(row);
+        }
+      });
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/basic/materielCodeInfo.js b/WIDESEA_WMSClient/src/extension/basic/materielCodeInfo.js
new file mode 100644
index 0000000..1e93c31
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/materielCodeInfo.js
@@ -0,0 +1,136 @@
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+import gridBody from './extend/materielcodeprintView.vue'
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: gridBody,
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+    //鑾峰彇琛ㄥ崟閰嶇疆
+    getOption(field) {
+      let option;
+      this.editFormOptions.forEach(x => {
+        x.forEach(item => {
+          if (item.field == field) {
+            option = item;
+          }
+        })
+      })
+      return option;
+    },
+    formatDate(dateStr) {
+      let date = new Date(dateStr);
+      let year = date.getFullYear();
+      let month = String(date.getMonth() + 1).padStart(2, "0");
+      let day = String(date.getDate()).padStart(2, "0");
+      return year + "-" + month + "-" + day;
+    },
+    //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+      let warehouseIdOption = this.getOption("warehouseId");
+      let materielCodeOption = this.getOption("materielCode");
+      let purchaseOrderNoOption = this.getOption("purchaseOrderNo");
+      warehouseIdOption.onChange=(val,option)=>{
+        this.editFormFields.materielCode = "";
+        materielCodeOption.data = [];
+        this.editFormFields.purchaseOrderNo = "";
+        purchaseOrderNoOption.data = [];
+        if (val == null || val == 0) {
+          return this.$error("璇烽�夋嫨浠撳簱锛�")
+        }
+        this.http.post("/api/PurchaseOrderDetail/GetPurchaseOrderDetailMaterielCode?warehouseId=" + val, {}, true).then(
+          source => {
+            if (!source.status) return this.$error(source.message);
+            for (let i = 0; i < source.data.length; i++) {
+              materielCodeOption.data.push({ key: source.data[i], value: source.data[i] })
+            }
+            this.refresh();
+          })
+      }
+      materielCodeOption.onChange = (val, option) => {
+        this.editFormFields.purchaseOrderNo = "";
+        purchaseOrderNoOption.data = [];
+        if (val == null || val == 0) {
+          return this.$error("璇烽�夋嫨鐗╂枡缂栧彿锛�")
+        }
+        this.http.post("/api/PurchaseOrderDetail/GetPurchaseOrderNos?materielCode=" + val, {}, true).then(
+          source => {
+            if (!source.status) return this.$error(source.message);
+            for (let i = 0; i < source.data.length; i++) {
+              purchaseOrderNoOption.data.push({ key: source.data[i], value: source.data[i] })
+            }
+            this.refresh();
+          })
+      }
+
+      this.columns.push({
+        field: '鎿嶄綔',
+        title: '鎿嶄綔',
+        width: 90,
+        fixed: 'right',
+        align: 'center',
+        formatter: (row) => {
+          return (
+            '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-printer">鎵撳嵃</i>'
+          );
+        },
+        click: (row) => {
+          this.$refs.gridBody.open(row);
+        }
+      });
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      let isAdd = this.currentAction == 'Add';
+      if (isAdd) {
+        let date = new Date();
+        let year = date.getFullYear();
+        let month = String(date.getMonth() + 1).padStart(2, "0");
+        let day = String(date.getDate()).padStart(2, "0");
+        this.editFormFields.lotNo = year + month + day;
+        this.editFormFields.productionDate = year + "-" + month + "-" + day;
+        this.editFormFields.effectiveDate = year + 2 + "-" + month + "-" + day;
+      }
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/basic/materielInfo.js b/WIDESEA_WMSClient/src/extension/basic/materielInfo.js
new file mode 100644
index 0000000..24e1d94
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/materielInfo.js
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/basic/palletCodeInfo.js b/WIDESEA_WMSClient/src/extension/basic/palletCodeInfo.js
new file mode 100644
index 0000000..6c2dee4
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/palletCodeInfo.js
@@ -0,0 +1,79 @@
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+import gridBody from './extend/printView.vue'
+import gridHeader from './extend/palletCodeAdd.vue'
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: gridHeader,
+    gridBody: gridBody,
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+    //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  
+      let addBtn = this.buttons.find(x => x.value == 'Add');
+      if (addBtn) {
+        addBtn.onClick = function () {
+          this.$refs.gridHeader.open();
+        }
+      }
+      //妗嗘灦鍒濆鍖栭厤缃墠锛�
+      this.columns.push({
+        field: '鎿嶄綔',
+        title: '鎿嶄綔',
+        width: 90,
+        fixed: 'right',
+        align: 'center',
+        formatter: (row) => {
+          return (
+            '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-printer">鎵撳嵃</i>'
+          );
+        },
+        click: (row) => {
+          this.$refs.gridBody.open(row);
+        }
+      });
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/basic/roadwayInfo.js b/WIDESEA_WMSClient/src/extension/basic/roadwayInfo.js
new file mode 100644
index 0000000..4f198a3
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/roadwayInfo.js
@@ -0,0 +1,72 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+    //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {
+      this.boxOptions.labelWidth = 150;
+      this.labelWidth=200;
+
+      let enableBtn = this.buttons.find(x => x.value == 'Enable');
+      if (enableBtn) {
+        enableBtn.onClick = function () {
+          this.$message.success('鑷畾涔夋寜閽偣鍑讳簨浠�');
+        }
+      }
+      let disableBtn = this.buttons.find(x => x.value == 'Disable');
+      if (disableBtn) {
+        disableBtn.onClick = function () {
+          this.$message.success('鑷畾涔夋寜閽偣鍑讳簨浠�');
+        }
+      }
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/basic/supplierInfo.js b/WIDESEA_WMSClient/src/extension/basic/supplierInfo.js
new file mode 100644
index 0000000..852a3cb
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/supplierInfo.js
@@ -0,0 +1,69 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/basic/userInfo.js b/WIDESEA_WMSClient/src/extension/basic/userInfo.js
new file mode 100644
index 0000000..852a3cb
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/userInfo.js
@@ -0,0 +1,69 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/basic/warehouse.js b/WIDESEA_WMSClient/src/extension/basic/warehouse.js
new file mode 100644
index 0000000..7840edd
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/basic/warehouse.js
@@ -0,0 +1,77 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+    //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {
+      let enableBtn = this.buttons.find(x => x.value == 'Enable');
+      if (enableBtn) {
+        enableBtn.onClick = function () {
+          //this.$message.success('鑷畾涔夋寜閽偣鍑讳簨浠�');
+          var printSection = document.querySelector('.vol-table');
+          var printWindow = window.open('', '');
+          printWindow.document.write(printSection.innerHTML);
+          printWindow.document.close();
+          printWindow.focus();
+          printWindow.print();
+          printWindow.close();
+
+        }
+      }
+      let disableBtn = this.buttons.find(x => x.value == 'Disable');
+      if (disableBtn) {
+        disableBtn.onClick = function () {
+          this.$message.success('鑷畾涔夋寜閽偣鍑讳簨浠�');
+        }
+      }
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/check/checkOrder.js b/WIDESEA_WMSClient/src/extension/check/checkOrder.js
new file mode 100644
index 0000000..8935403
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/check/checkOrder.js
@@ -0,0 +1,75 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/check/checkOrderResult.js b/WIDESEA_WMSClient/src/extension/check/checkOrderResult.js
new file mode 100644
index 0000000..8935403
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/check/checkOrderResult.js
@@ -0,0 +1,75 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js b/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js
new file mode 100644
index 0000000..24e1d94
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/inbound/inboundOrderDetail.js b/WIDESEA_WMSClient/src/extension/inbound/inboundOrderDetail.js
new file mode 100644
index 0000000..24e1d94
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/inbound/inboundOrderDetail.js
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/inbound/inboundOrderDetail_Hty.js b/WIDESEA_WMSClient/src/extension/inbound/inboundOrderDetail_Hty.js
new file mode 100644
index 0000000..8935403
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/inbound/inboundOrderDetail_Hty.js
@@ -0,0 +1,75 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/inbound/inboundOrder_Hty.js b/WIDESEA_WMSClient/src/extension/inbound/inboundOrder_Hty.js
new file mode 100644
index 0000000..8935403
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/inbound/inboundOrder_Hty.js
@@ -0,0 +1,75 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/inbound/purchaseOrder.js b/WIDESEA_WMSClient/src/extension/inbound/purchaseOrder.js
new file mode 100644
index 0000000..24e1d94
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/inbound/purchaseOrder.js
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/inbound/purchaseOrderDetail.js b/WIDESEA_WMSClient/src/extension/inbound/purchaseOrderDetail.js
new file mode 100644
index 0000000..8935403
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/inbound/purchaseOrderDetail.js
@@ -0,0 +1,75 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/inbound/receiveOrder.js b/WIDESEA_WMSClient/src/extension/inbound/receiveOrder.js
new file mode 100644
index 0000000..9e69ad8
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/inbound/receiveOrder.js
@@ -0,0 +1,74 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+        let InOrder = this.buttons.find(x => x.value == 'CreateInOrder');
+        if (InOrder) {
+          InOrder.onClick = function () {
+            let rows = this.$refs.table.getSelected();
+            if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
+            if (rows.length > 1) return this.$error("璇烽�夋嫨鍗曟潯鏁版嵁!");
+            var keys = rows.map(x => { return x.receiveOrderId });
+            this.http
+              .post("api/ReceiveOrder/CreateInboundOrder?receiveOrderId="+keys[0], null, "鏁版嵁澶勭悊涓�")
+              .then((x) => {
+                if (!x.status) return this.$message.error(x.message);
+                this.$message.success("鎿嶄綔鎴愬姛");
+                this.refresh();
+              });
+          }
+        }
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/inbound/receiveOrderDetail.js b/WIDESEA_WMSClient/src/extension/inbound/receiveOrderDetail.js
new file mode 100644
index 0000000..8935403
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/inbound/receiveOrderDetail.js
@@ -0,0 +1,75 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/outbound/extend/SelectedStock.vue b/WIDESEA_WMSClient/src/extension/outbound/extend/SelectedStock.vue
new file mode 100644
index 0000000..acfbc12
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/outbound/extend/SelectedStock.vue
@@ -0,0 +1,241 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showDetialBox"
+      :lazy="true"
+      width="75%"
+      :padding="15"
+      title="鍑哄簱璇︽儏"
+    >
+      <div class="box-head">
+        <el-alert :closable="false" style="width: 100%">
+          <el-row>
+            <el-col :span="24">
+              <span class="less-style">鐗╂枡鍚嶇О锛� {{ row.materielName }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style">鐗╂枡缂栧彿锛� {{ row.materielCode }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style"
+                >闇�姹傛暟閲忥細 {{ row.orderQuantity }}
+              </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style"
+                >宸插垎閰嶆暟閲忥細 {{ row.lockQuantity }}
+              </span>
+            </el-col>
+          </el-row>
+        </el-alert>
+      </div>
+      <div class="box-table" style="margin-top: 1%">
+        <el-table
+          ref="singleTable"
+          :data="tableData"
+          style="width: 100%; height: 100%"
+          highlight-current-row
+          height="500px"
+        >
+          >
+          <el-table-column
+            label="搴忓彿"
+            type="index"
+            fixed="left"
+            width="55"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
+            :key="index"
+            :prop="item.prop"
+            :label="item.title"
+            :width="item.width"
+            align="center"
+          >
+            <template #default="scoped" v-if="item.type == 'icon'">
+              <el-tooltip
+                class="item"
+                effect="dark"
+                :content="item.title"
+                placement="bottom"
+                ><el-button
+                  type="text"
+                  @click="tableButtonClick(scoped.row, item)"
+                  ><i :class="item.icon" style="font-size: 22px"></i></el-button
+              ></el-tooltip>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <template #footer>
+        <!-- <el-button type="primary" size="small" @click="submit">纭</el-button> -->
+        <el-button type="danger" size="small" @click="showDetialBox = false"
+          >鍏抽棴</el-button
+        >
+      </template>
+    </vol-box>
+  </div>
+</template>
+    <script>
+import VolBox from "@/components/basic/VolBox.vue";
+export default {
+  components: { VolBox },
+  data() {
+    return {
+      row: null,
+      showDetialBox: false,
+      tableData: [],
+      tableColumns: [
+        {
+          prop: "id",
+          title: "涓婚敭",
+          type: "string",
+          width: 150,
+          hidden: true,
+        },
+        {
+          prop: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "orderDetailId",
+          title: "鍗曟嵁鏄庣粏涓婚敭",
+          type: "string",
+          width: 150,
+          hidden: true,
+        },
+        {
+          prop: "orderType",
+          title: "鍗曟嵁绫诲瀷",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "batchNo",
+          title: "鎵规鍙�",
+          type: "string",
+          width: 120,
+        },
+        {
+          prop: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "stockId",
+          title: "搴撳瓨涓婚敭",
+          type: "string",
+          width: 150,
+          hidden: true,
+        },
+        {
+          prop: "originalQuantity",
+          title: "鍘熷搴撳瓨閲�",
+          type: "string",
+          width: 100,
+        },
+        {
+          prop: "assignQuantity",
+          title: "鍒嗛厤鍑哄簱閲�",
+          type: "string",
+          width: 100,
+        },
+        {
+          prop: "palletCode",
+          title: "鎵樼洏缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "locationCode",
+          title: "璐т綅缂栧彿",
+          type: "string",
+          width: 180,
+        },
+        {
+          prop: "status",
+          title: "鐘舵��",
+          type: "string",
+        },
+      ],
+    };
+  },
+  methods: {
+    open(row) {
+      this.row = row;
+      this.showDetialBox = true;
+      this.getData();
+    },
+    getData() {
+      this.http
+        .post(
+          "api/OutStockLockInfo/GetByOrderDetailId?orderDetailId=" +
+            this.row.id,
+          null,
+          "鏌ヨ涓�"
+        )
+        .then((x) => {
+          
+          var label=[
+              { label: '宸插垎閰�', value: 0 },
+              { label: '鍑哄簱涓�', value: 1 },
+              { label: '鍑哄簱瀹屾垚', value: 2 },
+              { label: '鎷i�夊畬鎴�', value: 3 },
+              { label: '鎾ら攢', value: 99 }
+          ]
+          this.tableData=x.map((i) => ({
+            ...i,
+            status:label.find((j) => j.value === i.status).label
+          }))
+        });
+    },
+  },
+};
+</script>
+  <style scoped>
+.less-style {
+  color: black;
+}
+.equle-style {
+  color: green;
+}
+.more-style {
+  color: red;
+}
+</style>
+  
+  <style>
+.text-button:hover {
+  background-color: #f0f9eb !important;
+}
+.el-table .warning-row {
+  background: oldlace;
+}
+.box-table .el-table tbody tr:hover > td {
+  background-color: #d8e0d4 !important;
+  /* color: #ffffff; */
+}
+
+.box-table .el-table tbody tr.current-row > td {
+  background-color: #f0f9eb !important;
+  /* color: #ffffff; */
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.box-table .el-table {
+  border: 1px solid #ebeef5;
+}
+.box-head .el-alert__content {
+  width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue b/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue
new file mode 100644
index 0000000..c4dcc64
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue
@@ -0,0 +1,318 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showDetialBox"
+      :lazy="true"
+      width="60%"
+      :padding="15"
+      title="鎸囧畾搴撳瓨"
+    >
+      <div class="box-head">
+        <el-alert :closable="false" style="width: 100%">
+          <el-row>
+            <el-col :span="16">
+              <span class="less-style">鐗╂枡鍚嶇О锛� {{ row.materielName }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style">鐗╂枡缂栧彿锛� {{ row.materielCode }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style"
+                >闇�姹傛暟閲忥細 {{ row.orderQuantity }}
+              </span>
+              <el-divider direction="vertical"></el-divider>
+              <span :class="selectionClass"
+                >宸查�夋暟閲忥細 {{ selectionSum }}
+              </span>
+            </el-col>
+            <el-col :span="8">
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px"
+                @click="getData(false)"
+                >{{ kcname }}</el-link
+              >
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="getData"
+                >鍒锋柊</el-link
+              >
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="revokeAssign"
+                >鎾ら攢鍒嗛厤</el-link
+              >
+            </el-col>
+          </el-row>
+        </el-alert>
+      </div>
+      <div class="box-table" style="margin-top: 1%">
+        <el-table
+          ref="singleTable"
+          :data="tableData"
+          style="width: 100%; height: 100%"
+          highlight-current-row
+          @row-click="handleRowClick"
+          height="500px"
+          @selection-change="handleSelectionChange"
+        >
+          >
+          <el-table-column type="selection" width="55"> </el-table-column>
+          <el-table-column
+            label="搴忓彿"
+            type="index"
+            fixed="left"
+            width="55"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
+            :key="index"
+            :prop="item.prop"
+            :label="item.title"
+            :width="item.width"
+            align="center"
+          >
+            <template #default="scoped" v-if="item.type == 'icon'">
+              <el-tooltip
+                class="item"
+                effect="dark"
+                :content="item.title"
+                placement="bottom"
+                ><el-button
+                  type="text"
+                  @click="tableButtonClick(scoped.row, item)"
+                  ><i :class="item.icon" style="font-size: 22px"></i></el-button
+              ></el-tooltip>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <template #footer>
+        <el-button type="primary" size="small" @click="outbound"
+          >鐩存帴鍑哄簱</el-button
+        >
+        <el-button type="primary" size="small" @click="lockStock"
+          >閿佸畾搴撳瓨</el-button
+        >
+        <el-button type="danger" size="small" @click="showDetialBox = false"
+          >鍏抽棴</el-button
+        >
+      </template>
+    </vol-box>
+  </div>
+</template>
+<script>
+import VolBox from "@/components/basic/VolBox.vue";
+import { fa } from "element-plus/es/locales.mjs";
+export default {
+  components: { VolBox },
+  data() {
+    return {
+      row: null,
+      kcname: "",
+      pkcx: false,
+      showDetialBox: false,
+      tableData: [],
+      tableColumns: [
+        {
+          prop: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "palletCode",
+          title: "鎵樼洏缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "locationCode",
+          title: "璐т綅缂栧彿",
+          type: "string",
+          width: 180,
+        },
+        {
+          prop: "useableQuantity",
+          title: "鍙敤鏁伴噺",
+          type: "string",
+        },
+      ],
+      selection: [],
+      selectionSum: 0,
+      selectionClass: "less-style",
+      originalQuantity: 0,
+    };
+  },
+  methods: {
+    open(row) {
+      console.log(row);
+      this.row = row;
+      this.showDetialBox = true;
+      this.originalQuantity = this.row.lockQuantity;
+      this.selectionSum = this.row.lockQuantity;
+      this.getData();
+      if (this.selectionSum == this.row.orderQuantity) {
+        this.selectionClass = "equle-style";
+      } else if (this.selectionSum < this.row.orderQuantity) {
+        this.selectionClass = "less-style";
+      } else {
+        this.selectionClass = "more-style";
+      }
+    },
+    lockStock() {
+      this.http
+        .post(
+          "api/OutboundOrderDetail/LockOutboundStock?id=" + this.row.id,
+          this.selection,
+          "鏁版嵁澶勭悊涓�"
+        )
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    outbound() {
+      if (this.selection.length <= 0) {
+        return this.$message.error("璇峰嬀閫�");
+      }
+      let url = this.pkcx
+        ? "api/Task/GeneratePKOutboundTask?orderDetailId="
+        : "api/Task/GenerateOutboundTask?orderDetailId=";
+      this.http
+        .post(url + this.row.id, this.selection, "鏁版嵁澶勭悊涓�")
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    getData(a) {
+      if (!a) this.pkcx = !this.pkcx;
+      let url = this.pkcx
+        ? "api/StockInfo/GetPKStockSelectViews?materielCode="
+        : "api/StockInfo/GetStockSelectViews?materielCode=";
+      this.kcname = this.pkcx ? "绔嬪簱搴撳瓨" : "骞冲簱搴撳瓨";
+      this.http
+        .post(
+          url + this.row.materielCode + "&orderId=" + this.row.orderId,
+          null,
+          "鏌ヨ涓�"
+        )
+        .then((x) => {
+          this.tableData = x;
+        });
+    },
+    revokeAssign() {
+      console.log(this.row);
+      this.http
+        .post(
+          "api/OutboundOrderDetail/RevokeLockOutboundStock?id=" + this.row.id,
+          null,
+          "鏁版嵁澶勭悊涓�"
+        )
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    handleSelectionChange(val) {
+      this.selection = val;
+      this.selectionSum =
+        val.reduce(
+          (accumulator, currentValue) =>
+            accumulator + currentValue["useableQuantity"],
+          0
+        ) + this.originalQuantity;
+      if (this.selectionSum == this.row.orderQuantity) {
+        this.selectionClass = "equle-style";
+      } else if (this.selectionSum < this.row.orderQuantity) {
+        this.selectionClass = "less-style";
+      } else {
+        this.selectionClass = "more-style";
+      }
+    },
+    toggleSelection(rows) {
+      if (rows) {
+        rows.forEach((row) => {
+          this.$refs.singleTable.toggleRowSelection(row);
+        });
+      } else {
+        this.$refs.singleTable.clearSelection();
+      }
+    },
+    clearSelection() {
+      this.$refs.singleTable.clearSelection();
+    },
+    handleRowClick(row) {
+      this.$refs.singleTable.toggleRowSelection(row);
+    },
+  },
+};
+</script>
+<style scoped>
+.less-style {
+  color: black;
+}
+
+.equle-style {
+  color: green;
+}
+
+.more-style {
+  color: red;
+}
+</style>
+
+<style>
+.text-button:hover {
+  background-color: #f0f9eb !important;
+}
+
+.el-table .warning-row {
+  background: oldlace;
+}
+
+.box-table .el-table tbody tr:hover > td {
+  background-color: #d8e0d4 !important;
+  /* color: #ffffff; */
+}
+
+.box-table .el-table tbody tr.current-row > td {
+  background-color: #f0f9eb !important;
+  /* color: #ffffff; */
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.box-table .el-table {
+  border: 1px solid #ebeef5;
+}
+
+.box-head .el-alert__content {
+  width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/outbound/extend/addMesOutOrder.vue b/WIDESEA_WMSClient/src/extension/outbound/extend/addMesOutOrder.vue
new file mode 100644
index 0000000..8b97e61
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/outbound/extend/addMesOutOrder.vue
@@ -0,0 +1,163 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showDetailBox"
+      :lazy="true"
+      width="60%"
+      :padding="15"
+      title="Mes鍑哄簱鍗�(鏂板缓)"
+    >
+      <div>
+        <el-form :inline="true" :model="formData" ref="formData">
+          <el-form-item
+            label="鎵�灞炰粨搴�:"
+            style="width: 30%"
+            required
+            prop="warehouseId"
+          >
+            <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨浠撳簱">
+              <el-option label="鏉挎潗浠�" value="3"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            label="鐗╂枡缂栫爜:"
+            style="width: 30%"
+            required
+            prop="materialCode"
+          >
+            <el-input
+              v-model="formData.materialCode"
+              placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�"
+            ></el-input>
+          </el-form-item>
+          <el-form-item
+            label="鍑哄簱鏁伴噺:"
+            style="width: 30%"
+            required
+            prop="num"
+          >
+            <el-input-number
+              v-model="formData.num"
+              :min="1"
+              label="璇疯緭鍏ュ嚭搴撴暟閲�"
+            ></el-input-number>
+          </el-form-item>
+          <el-form-item
+            label="鍑哄簱鍦板潃:"
+            style="width: 30%"
+            required
+            prop="outAddress"
+          >
+            <el-select
+              v-model="formData.outAddress"
+              placeholder="璇烽�夋嫨鍑哄簱鍦板潃"
+            >
+              <el-option label="涓�宸烽亾浜屽眰涓婃枡浣�" value="1011"></el-option>
+              <el-option label="SCUTL-001" value="SCUTL-001"></el-option>
+            </el-select>
+          </el-form-item>
+          <!-- <el-form-item label="浠撳簱">
+            <el-col :span="8">
+              <el-select v-model="warehouseId" placeholder="璇烽�夋嫨浠撳簱">
+                <el-option label="鏉挎潗浠�" value="3"></el-option>
+              </el-select>
+            </el-col>
+          </el-form-item> -->
+        </el-form>
+      </div>
+
+      <template #footer>
+        <el-button type="primary" size="small" @click="add">纭畾</el-button>
+        <el-button type="danger" size="small" @click="showDetailBox = false"
+          >鍏抽棴</el-button
+        >
+      </template>
+    </vol-box>
+  </div>
+</template>
+  <script>
+import VolBox from "@/components/basic/VolBox.vue";
+export default {
+  components: { VolBox },
+  data() {
+    return {
+      showDetailBox: false,
+      formData: {
+        warehouseId: "",
+        materialCode: "",
+        num: 1,
+        outAddress: "",
+      },
+    };
+  },
+  methods: {
+    open() {
+      this.showDetailBox = true;
+    },
+    add() {
+      var params = {
+        //warehouseId: this.formData.warehouseId,
+        materialCode: this.formData.materialCode,
+        requiredQuantity: this.formData.num,
+        line: this.formData.outAddress,
+      };
+
+      this.http
+        .post("/api/mesOutboundOrder/AddMesOrder", params, "鏁版嵁澶勭悊涓�...")
+        .then((res) => {
+          if (!res.status) return this.$message.error(res.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetailBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.refresh();
+          });
+        });
+    },
+  },
+};
+</script>
+  <style scoped>
+.less-style {
+  color: black;
+}
+
+.equle-style {
+  color: green;
+}
+
+.more-style {
+  color: red;
+}
+</style>
+  
+  <style>
+.text-button:hover {
+  background-color: #f0f9eb !important;
+}
+
+.el-table .warning-row {
+  background: oldlace;
+}
+
+.box-table .el-table tbody tr:hover > td {
+  background-color: #d8e0d4 !important;
+  /* color: #ffffff; */
+}
+
+.box-table .el-table tbody tr.current-row > td {
+  background-color: #f0f9eb !important;
+  /* color: #ffffff; */
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.box-table .el-table {
+  border: 1px solid #ebeef5;
+}
+
+.box-head .el-alert__content {
+  width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue b/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue
new file mode 100644
index 0000000..6091790
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue
@@ -0,0 +1,432 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showDetialBox"
+      :lazy="true"
+      width="75%"
+      :padding="15"
+      title="鍗曟嵁鏄庣粏淇℃伅"
+    >
+      <div class="box-head">
+        <el-alert :closable="false" style="width: 100%">
+          <el-row>
+            <el-col :span="16">
+              <span>宸查�変腑 {{ selection.length }} 椤�</span>
+            </el-col>
+            <el-col :span="8">
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px"
+                @click="lockstocks"
+                >閿佸畾搴撳瓨</el-link
+              >
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="outbound"
+                >鐩存帴鍑哄簱</el-link
+              >
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="getData"
+                >鍒锋柊</el-link
+              ></el-col
+            >
+          </el-row>
+        </el-alert>
+      </div>
+      <div class="box-table" style="margin-top: 1%">
+        <el-table
+          ref="singleTable"
+          :data="tableData"
+          style="width: 100%; height: 100%"
+          highlight-current-row
+          @current-change="handleCurrentChange"
+          height="500px"
+          @row-click="handleRowClick"
+          @selection-change="handleSelectionChange"
+        >
+          <el-table-column type="selection" width="55"> </el-table-column>
+          <el-table-column
+            label="搴忓彿"
+            type="index"
+            fixed="left"
+            width="55"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
+            :key="index"
+            :prop="item.prop"
+            :label="item.title"
+            :width="item.width"
+            align="center"
+          >
+            <template #default="scoped">
+              <div v-if="item.type == 'icon'">
+                <el-tooltip
+                  class="item"
+                  effect="dark"
+                  :content="item.title"
+                  placement="bottom"
+                  ><el-link
+                    type="primary"
+                    :disabled="getButtonEnable(item.prop, scoped.row)"
+                    @click="tableButtonClick(scoped.row, item)"
+                    ><i :class="item.icon" style="font-size: 22px"></i></el-link
+                ></el-tooltip>
+              </div>
+
+              <div v-else-if="item.type == 'tag'">
+                <el-tag size="small">
+                  {{ getDictionary(scoped.row, item) }}
+                </el-tag>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+    </vol-box>
+    <stock-select ref="child" @parentCall="parentCall"></stock-select>
+    <selected-stock
+      ref="selectedStock"
+      @parentCall="parentCall"
+    ></selected-stock>
+  </div>
+</template>
+<script>
+import VolBox from "@/components/basic/VolBox.vue";
+import VolForm from "@/components/basic/VolForm.vue";
+import StockSelect from "./StockSelect.vue";
+import SelectedStock from "./SelectedStock.vue";
+export default {
+  components: { VolBox, VolForm, StockSelect, SelectedStock },
+  data() {
+    return {
+      row: null,
+      showDetialBox: false,
+      flag: false,
+      currentRow: null,
+      selection: [],
+      tableData: [],
+      tableColumns: [
+        {
+          prop: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+        },
+        {
+          prop: "orderId",
+          title: "鍑哄簱鍗曚富閿�",
+          type: "string",
+          width: 90,
+          hidden: true,
+        },
+        {
+          prop: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "batchNo",
+          title: "鎵规鍙�",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "orderQuantity",
+          title: "鍗曟嵁鏁伴噺",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "lockQuantity",
+          title: "閿佸畾鏁伴噺",
+          type: "int",
+          width: 90,
+        },
+        {
+          prop: "overOutQuantity",
+          title: "宸插嚭鏁伴噺",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "unit",
+          title: "鍗曚綅",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "orderDetailStatus",
+          title: "璁㈠崟鏄庣粏鐘舵��",
+          type: "tag",
+          width: 180,
+          bindKey: "orderDetailStatusEnum",
+        },
+        {
+          prop: "assignStock",
+          title: "鎸囧畾搴撳瓨",
+          type: "icon",
+          width: 90,
+          icon: "el-icon-s-grid",
+        },
+        {
+          prop: "viewDetail",
+          title: "鍑哄簱璇︾粏",
+          type: "icon",
+          width: 90,
+          icon: "el-icon-s-operation",
+        },
+        {
+          prop: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+        },
+        {
+          prop: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+        },
+        {
+          prop: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+        },
+        {
+          prop: "remark",
+          title: "澶囨敞",
+          type: "string",
+        },
+      ],
+      paginations: {
+        sort: "id",
+        order: "desc",
+        Foots: "",
+        total: 0,
+        // 2020.08.29澧炲姞鑷畾涔夊垎椤垫潯澶у皬
+        sizes: [30, 60, 100, 120],
+        size: 30, // 榛樿鍒嗛〉澶у皬
+        Wheres: [],
+        page: 1,
+        rows: 30,
+      },
+      searchFormOptions: [
+        [
+          {
+            title: "鍗曟嵁缂栧彿",
+            field: "allocation_code",
+            type: "like",
+          },
+          {
+            title: "鍗曟嵁绫诲瀷",
+            field: "allocation_type",
+            type: "select",
+            dataKey: "OrderType",
+            data: [],
+          },
+          {
+            title: "鍗曟嵁鐘舵��",
+            field: "allocation_state",
+            type: "select",
+            dataKey: "OrderState",
+            data: [],
+          },
+        ],
+      ],
+      searchFormFields: {
+        allocation_code: "",
+        allocation_type: "",
+        allocation_state: "",
+      },
+      dictionaryList: null,
+    };
+  },
+  methods: {
+    open(row) {
+      this.row = row;
+      this.showDetialBox = true;
+      this.getDictionaryData();
+      this.getData();
+    },
+    getData() {
+      var wheres = [{ name: "orderId", value: this.row.id }];
+      var param = {
+        page: this.paginations.page,
+        rows: this.paginations.rows,
+        sort: this.paginations.sort,
+        order: this.paginations.order,
+        wheres: JSON.stringify(wheres), // 鏌ヨ鏉′欢锛屾牸寮忎负[{ name: "瀛楁", value: "xx" }]
+      };
+      this.http
+        .post("api/OutboundOrderDetail/GetPageData", param, "鏌ヨ涓�")
+        .then((x) => {
+          this.tableData = x.rows;
+        });
+    },
+    tableButtonClick(row, column) {
+      if (column.prop == "assignStock") {
+        this.$refs.child.open(row);
+      } else {
+        //鐐瑰嚮鎵撳紑鍑哄簱璇︽儏
+        this.$refs.selectedStock.open(row);
+      }
+    },
+    lockstocks() {
+      if (this.selection.length === 0) {
+        return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
+      }
+      var keys = this.selection.map((item) => item.id); // 鑾峰彇閫変腑琛岀殑id
+      this.http
+        .post("api/OutboundOrderDetail/LockOutboundStocks", keys, "鏁版嵁澶勭悊涓�")
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    outbound() {
+      if (this.selection.length === 0) {
+        return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
+      }
+      var keys = this.selection.map((item) => item.id); // 鑾峰彇閫変腑琛岀殑id
+
+      this.http
+        .post("api/Task/GenerateOutboundTasks", keys, "鏁版嵁澶勭悊涓�")
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    setCurrent(row) {
+      this.$refs.singleTable.setCurrentRow(row);
+    },
+    handleCurrentChange(val) {
+      this.currentRow = val;
+    },
+    getButtonEnable(propName, row) {
+      if (propName == "assignStock") {
+        if (
+          row.orderDetailStatus !== 0 &&
+          row.orderDetailStatus !== 60 &&
+          row.orderDetailStatus !== 70 &&
+          row.orderDetailStatus !== 80
+        ) {
+          return true;
+        } else {
+          return false;
+        }
+      }
+      return false;
+    },
+    parentCall(fun) {
+      if (typeof fun != "function") {
+        return console.log("鎵╁睍缁勪欢闇�瑕佷紶鍏ヤ竴涓洖璋冩柟娉曟墠鑳借幏鍙栫埗绾ue瀵硅薄");
+      }
+      fun(this);
+    },
+    handleRowClick(row) {
+      this.$refs.singleTable.toggleRowSelection(row);
+    },
+    handleSelectionChange(val) {
+      this.selection = val;
+    },
+    getDictionaryData() {
+      if (this.dictionaryList) {
+        return;
+      }
+      var param = [];
+      this.tableColumns.forEach((x) => {
+        if (x.type == "tag" && x.bindKey != "") {
+          param.push(x.bindKey);
+        }
+      });
+      this.http
+        .post("api/Sys_Dictionary/GetVueDictionary", param, "鏌ヨ涓�")
+        .then((x) => {
+          if (x.length > 0) {
+            this.dictionaryList = x;
+          }
+        });
+    },
+    getDictionary(row, column) {
+      if (this.dictionaryList) {
+        var item = this.dictionaryList.find((x) => x.dicNo == column.bindKey);
+        if (item) {
+          var dicItem = item.data.find((x) => x.key == row[column.prop]);
+          console.log(dicItem);
+          if (dicItem) {
+            return dicItem.value;
+          } else {
+            return row[column.prop];
+          }
+        } else {
+          return row[column.prop];
+        }
+      }
+    },
+  },
+};
+</script>
+<style scoped>
+.text-button {
+  border: 0px;
+}
+</style>
+
+<style>
+.text-button:hover {
+  background-color: #f0f9eb !important;
+}
+
+.el-table .warning-row {
+  background: oldlace;
+}
+
+.box-table .el-table tbody tr:hover > td {
+  background-color: #d8e0d4 !important;
+  /* color: #ffffff; */
+}
+
+.box-table .el-table tbody tr.current-row > td {
+  background-color: #f0f9eb !important;
+  /* color: #ffffff; */
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.box-table .el-table {
+  border: 1px solid #ebeef5;
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/extension/outbound/mesOutboundOrder.js b/WIDESEA_WMSClient/src/extension/outbound/mesOutboundOrder.js
new file mode 100644
index 0000000..1c3066e
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/outbound/mesOutboundOrder.js
@@ -0,0 +1,101 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+import gridBody from './extend/addMesOutOrder.vue'
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: gridBody,
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+    //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {
+
+      let addButton = this.buttons.find(item => item.value == 'Add');
+      if (addButton) {
+        addButton.onClick = () => {
+          this.$refs.gridBody.open();
+        }
+      }
+
+      let executeOutbound = this.buttons.find(item => item.value == 'ExecuteOutbound');
+      if (executeOutbound) {
+        executeOutbound.onClick = () => {
+          let rows = this.$refs.table.getSelected();
+          if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
+          if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
+          var param = rows[0].taskNum;
+          this.http
+            .post("api/Task/HandSubstrateOut?orderId=" + rows[0].id, null, "鏁版嵁澶勭悊涓�...")
+            .then((x) => {
+              if (x.status) {
+                this.$Message.success('鏁版嵁澶勭悊鎴愬姛.');
+                this.refresh();
+              } else {
+                return this.$error(x.message);
+              }
+            });
+        }
+      }
+
+      //鎵╁睍椤甸潰鍒濆鍖栨搷浣�
+      this.columns.push({
+        field: '鎿嶄綔',
+        title: '鎿嶄綔',
+        width: 90,
+        fixed: 'right',
+        align: 'center',
+        formatter: (row) => {
+          return (
+            '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">鏌ョ湅鏄庣粏</i>'
+          );
+        },
+        click: (row) => {
+          this.$refs.gridBody.open(row);
+        }
+      });
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js b/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js
new file mode 100644
index 0000000..122b98c
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js
@@ -0,0 +1,74 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+import gridBody from './extend/outOrderDetail.vue'
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: gridBody,
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+        //鎵╁睍椤甸潰鍒濆鍖栨搷浣�
+        this.columns.push({
+          field: '鎿嶄綔',
+          title: '鎿嶄綔',
+          width: 90,
+          fixed: 'right',
+          align: 'center',
+          formatter: (row) => {
+              return (
+                  '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">鏌ョ湅鏄庣粏</i>'
+              );
+          },
+          click: (row) => {
+              this.$refs.gridBody.open(row);
+          }
+      });
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js b/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js
new file mode 100644
index 0000000..24e1d94
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail_Hty.js b/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail_Hty.js
new file mode 100644
index 0000000..8935403
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail_Hty.js
@@ -0,0 +1,75 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/outbound/outboundOrder_Hty.js b/WIDESEA_WMSClient/src/extension/outbound/outboundOrder_Hty.js
new file mode 100644
index 0000000..8935403
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/outbound/outboundOrder_Hty.js
@@ -0,0 +1,75 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/record/locationStatusChangeRecord.js b/WIDESEA_WMSClient/src/extension/record/locationStatusChangeRecord.js
new file mode 100644
index 0000000..1b38800
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/record/locationStatusChangeRecord.js
@@ -0,0 +1,61 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+        this.boxOptions.labelWidth = 180;
+        this.labelWidth=150;
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+        
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/record/stockQuantityChangeRecord.js b/WIDESEA_WMSClient/src/extension/record/stockQuantityChangeRecord.js
new file mode 100644
index 0000000..24e1d94
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/record/stockQuantityChangeRecord.js
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/stock/stockInfo.js b/WIDESEA_WMSClient/src/extension/stock/stockInfo.js
new file mode 100644
index 0000000..6292426
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/stock/stockInfo.js
@@ -0,0 +1,59 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+        
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js b/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js
new file mode 100644
index 0000000..24e1d94
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail_Hty.js b/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail_Hty.js
new file mode 100644
index 0000000..8935403
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail_Hty.js
@@ -0,0 +1,75 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/stock/stockInfo_Hty.js b/WIDESEA_WMSClient/src/extension/stock/stockInfo_Hty.js
new file mode 100644
index 0000000..8935403
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/stock/stockInfo_Hty.js
@@ -0,0 +1,75 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        // this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/stock/stockView.js b/WIDESEA_WMSClient/src/extension/stock/stockView.js
new file mode 100644
index 0000000..92ad623
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/stock/stockView.js
@@ -0,0 +1,134 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+import { el } from "element-plus/es/locales.mjs";
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+    //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {
+      // let InOrder = this.buttons.find(x => x.value == 'StockOutbound');
+      // if (InOrder) {
+      //   InOrder.onClick = function () {
+      //     let rows = this.$refs.table.getSelected();
+      //     if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
+      //     if (rows.length > 1) return this.$error("璇烽�夋嫨鍗曟潯鏁版嵁!");
+      //     var keys = rows.map(x => { return x.stockId });
+      //     this.http
+      //       .post("api/Task/Outbound?id="+keys[0], null, "鏁版嵁澶勭悊涓�")
+      //       .then((x) => {
+      //         if (!x.status) return this.$message.error(x.message);
+      //         this.$message.success("鎿嶄綔鎴愬姛");
+      //         this.refresh();
+      //       });
+      //   }
+      // }
+      this.columns.forEach(column => {
+        if (column.field == 'materielCode') {
+          column.formatter = (row) => {
+            var str = '';
+            var list = row.materielCode.split(',');
+            for (let index = 0; index < list.length; index++) {
+              str += list[index] + '<br>';
+            }
+            return str = list[0] == "" ? "绌虹" : str;
+          }
+        }
+        if (column.field == 'batchNo') {
+          column.formatter = (row) => {
+            var str = '';
+            var list = row.batchNo.split(',');
+            for (let index = 0; index < list.length; index++) {
+              str += list[index] + '<br>';
+            }
+            return str = list[0] == "" ? "鏃�" : str;
+          }
+        }
+        if (column.field == 'materielInfo') {
+          const today = new Date()
+          column.formatter = (row) => {
+            if (row.details.length > 0) {
+              const today = new Date();
+              const closestDate = row.details
+                .map(x => {
+                  const date = new Date(x.effectiveDate);
+                  const diffInDays = Math.ceil(Math.abs((today - date) / (1000 * 60 * 60 * 24)));
+                  return { date, diffInDays };
+                })
+                .reduce((closest, current) => (current.diffInDays < closest.diffInDays ? current : closest))
+                .date;
+
+              const daysSinceClosest = Math.ceil(Math.abs((today - closestDate) / (1000 * 60 * 60 * 24)));
+              return '<span style="color: #F56C6C">' + daysSinceClosest + "澶�" + '</span>';
+            } else {
+              return '<span style="color: #F56C6C">' + "鏃犱繚璐ㄦ湡" + '</span>';
+            }
+
+          }
+        }
+        if (column.field == 'sumStock') {
+          column.formatter = (row) => {
+            if (row.details.length > 0) {
+              var sum = 0;
+              const closestDate = row.details
+                .map(x => {
+                  sum += (x.stockQuantity)
+                })
+              return '<span style="color: #F56C6C">' + sum + row.details[0].unit + '</span>';
+            } else {
+              return '<span style="color: #F56C6C">' + "1涓�" + '</span>';
+            }
+
+          }
+        }
+      })
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/system/Sys_Dictionary.js b/WIDESEA_WMSClient/src/extension/system/Sys_Dictionary.js
new file mode 100644
index 0000000..e37ecf6
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/system/Sys_Dictionary.js
@@ -0,0 +1,65 @@
+import { h, resolveComponent } from 'vue';
+let extension = {
+    components: { //鍔ㄦ�佹墿鍏呯粍浠舵垨缁勪欢璺緞
+        //琛ㄥ崟header銆乧ontent銆乫ooter瀵瑰簲浣嶇疆鎵╁厖鐨勭粍浠�
+        //鎵╁睍缁勪欢寮曞叆鏂瑰紡
+        gridHeader: '',
+        gridBody: '',
+        gridFooter: '',
+        //寮瑰嚭妗�(淇敼銆佺紪杈戙�佹煡鐪�)header銆乧ontent銆乫ooter瀵瑰簲浣嶇疆鎵╁厖鐨勭粍浠�
+        modelHeader: '',
+        modelBody: '',
+        modelFooter: ''
+    },
+    buttons: [], //鎵╁睍鐨勬寜閽�
+    methods: { //浜嬩欢鎵╁睍
+        onInit() {
+            //鐐瑰嚮鍗曞厓鏍肩紪杈戜笌缁撴潫缂栬緫(榛樿鏄偣鍑诲崟鍏冩牸缂栬緫锛岄紶鏍囩寮�缁撴潫缂栬緫)
+            this.detailOptions.clickEdit = true;
+            this.editFormOptions.forEach(x => {
+                x.forEach(item => {
+                    if (item.field == 'ParentId') {
+                        item.min = 0;
+                    }
+                    if (item.field == "DbSql") {
+                        item.placeholder = "濡傛灉浠庢暟鎹簱鍔犺浇鏁版嵁婧愶紝璇锋寜姝ゆ牸寮忛厤缃畇ql璇彞锛歴elect orderType as key,orderName as value from order  濡傛灉闇�瑕佹牴鎹敤鎴蜂俊鎭姞杞芥暟鎹簮锛岃閰嶇疆濂芥sql,鍐嶄慨鏀瑰悗鍙癉ictionaryHandler.GetCustomDBSql鏂规硶";
+                    }
+                })
+            })
+            this.detailOptions.columns.forEach(x => {
+                if (x.field == 'OrderNo') {
+                    x.summary = true;
+                }
+            })
+            //淇濆瓨鍚庝笉鍏抽棴缂栬緫妗�
+            this.boxOptions.saveClose = false;
+        },
+        onInited() {
+            this.boxOptions.height = document.body.clientHeight * 0.87
+            this.height = this.height - 45;
+        },
+        addBefore(formData) {
+            return this.saveBefore(formData);
+        },
+        updateBefore(formData) {
+            return this.saveBefore(formData);
+        },
+        saveBefore(formData) {
+            if (this.editFormFields.DbSql &&
+                (this.editFormFields.DbSql.indexOf('value') == -1 ||
+                    this.editFormFields.DbSql.indexOf('key') == -1)
+            ) {
+                this.$message.error("sql璇彞蹇呴』鍖呮嫭key/value瀛楁,濡�:select orderType as key,orderName as value from order");
+                return false;
+            }
+            return true;
+        },
+        searchBefore(param) {
+            return true;
+        },
+        searchAfter(result) {
+            return true;
+        }
+    }
+};
+export default extension;
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/system/Sys_DictionaryList.js b/WIDESEA_WMSClient/src/extension/system/Sys_DictionaryList.js
new file mode 100644
index 0000000..da94487
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/system/Sys_DictionaryList.js
@@ -0,0 +1,22 @@
+
+
+let extension = {
+    components: {//鍔ㄦ�佹墿鍏呯粍浠舵垨缁勪欢璺緞
+        //琛ㄥ崟header銆乧ontent銆乫ooter瀵瑰簲浣嶇疆鎵╁厖鐨勭粍浠�
+        gridHeader:'',
+        gridbody:'',
+        gridFooter: '',
+        //寮瑰嚭妗�(淇敼銆佺紪杈戙�佹煡鐪�)header銆乧ontent銆乫ooter瀵瑰簲浣嶇疆鎵╁厖鐨勭粍浠�
+        modelHeader: '',
+        modelBody: '',
+        modelFooter: ''
+    },
+    buttons: [],//鎵╁睍鐨勬寜閽�
+    methods: {//浜嬩欢鎵╁睍
+        onInit() {
+        },
+        onInited() {
+        }
+    }
+};
+export default extension;
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/system/Sys_Log.js b/WIDESEA_WMSClient/src/extension/system/Sys_Log.js
new file mode 100644
index 0000000..5b05c40
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/system/Sys_Log.js
@@ -0,0 +1,26 @@
+import { h, resolveComponent } from 'vue';
+let extension = {
+  components: {
+    //鍔ㄦ�佹墿鍏呯粍浠舵垨缁勪欢璺緞
+    //琛ㄥ崟header銆乧ontent銆乫ooter瀵瑰簲浣嶇疆鎵╁厖鐨勭粍浠�
+    gridHeader: "", //{ template: "<div>鎵╁睍缁剎x浠�</div>" },
+    gridBody: '',
+    gridFooter: "",
+    //寮瑰嚭妗�(淇敼銆佺紪杈戙�佹煡鐪�)header銆乧ontent銆乫ooter瀵瑰簲浣嶇疆鎵╁厖鐨勭粍浠�
+    modelHeader: "",
+    modelBody: "",
+    modelFooter: ""
+  },
+  buttons: [], //鎵╁睍鐨勬寜閽�
+  methods: {
+    //浜嬩欢鎵╁睍
+    onInit() {
+      console.log("sys_log")
+      this.setFiexdSearchForm(true);
+    },
+    onInited() {
+      this.height = this.height - 170;
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/system/Sys_Role.js b/WIDESEA_WMSClient/src/extension/system/Sys_Role.js
new file mode 100644
index 0000000..5ba4845
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/system/Sys_Role.js
@@ -0,0 +1,49 @@
+
+let extension = {
+  components: {//鍔ㄦ�佹墿鍏呯粍浠舵垨缁勪欢璺緞
+    //琛ㄥ崟header銆乧ontent銆乫ooter瀵瑰簲浣嶇疆鎵╁厖鐨勭粍浠�
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //寮瑰嚭妗�(淇敼銆佺紪杈戙�佹煡鐪�)header銆乧ontent銆乫ooter瀵瑰簲浣嶇疆鎵╁厖鐨勭粍浠�
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  buttons: [],//鎵╁睍鐨勬寜閽�
+  tableAction:"Sys_Role",
+  methods: {//浜嬩欢鎵╁睍
+    onInited () {
+      this.height = this.height - 80;
+       this.editFormOptions.forEach(x => {
+        x.forEach(item => {
+          if (item.field == 'ParentId') {
+            item.title = "涓婄骇瑙掕壊";
+            //璁剧疆浠绘剰鑺傜偣閮借兘閫変腑(榛樿鍙兘閫変腑鏈�鍚庝竴涓妭鐐�)
+            item.changeOnSelect = true;
+          }
+        })
+      })
+    },
+    onInit() {
+      //璁剧疆treetable鐨勫敮涓�鍊煎瓧娈�(杩欎釜瀛楁鐨勫�煎湪琛ㄩ噷闈㈠繀椤绘槸鍞竴鐨�)
+      this.rowKey="Role_Id";
+    },
+    /***鍔犺浇鍚庡彴鏁版嵁瑙丼ys_RoleController.cs鏂囦欢***/
+    loadTreeChildren(tree, treeNode, resolve) { //鍔犺浇瀛愯妭鐐�
+      let url=`api/role/getTreeTableChildrenData?roleId=${tree.Role_Id}`;
+      this.http.post(url,{}).then(result=>{
+        resolve(result.rows)
+      })
+    },
+      /***鍔犺浇鍚庡彴鏁版嵁瑙丼ys_RoleController.cs鏂囦欢***/
+    searchBefore(params){//鍒ゆ柇鍔犺浇鏍硅妭鐐规垨瀛愯妭鐐�
+      //娌℃湁鏌ヨ鏉′欢锛岄粯璁ゆ煡璇㈣繑鍥炴墍鏈夋牴鑺傜偣鏁版嵁
+      if (!params.wheres.length) {
+        params.value=1;
+      }
+      return true;
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/system/Sys_Role1.js b/WIDESEA_WMSClient/src/extension/system/Sys_Role1.js
new file mode 100644
index 0000000..d6715be
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/system/Sys_Role1.js
@@ -0,0 +1,61 @@
+
+import { h, resolveComponent } from 'vue';
+let extension = {
+  components: {//鍔ㄦ�佹墿鍏呯粍浠舵垨缁勪欢璺緞
+    //琛ㄥ崟header銆乧ontent銆乫ooter瀵瑰簲浣嶇疆鎵╁厖鐨勭粍浠�
+    gridHeader: '',
+    gridBody: {
+      render () {
+          return [
+              h(resolveComponent('el-alert'), {
+                  style: { 'margin-bottom': '12px' },
+                  'show-icon': true, type: 'error',
+                  closable: false, title: '鍏充簬TreeTable浣跨敤'
+              }, ' treetable鍚屾牱鍏ㄩ儴浠g爜鑷姩鐢熸垚锛岄〉闈㈢敓鎴愬悗璁剧疆this.rowKe="xxx" tree涓婚敭瀛楁,鍗冲彲瀹屾垚鏍戝舰table閰嶇疆,鍏蜂綋璇存槑瑙丼ys_Role1.js'),
+          ]
+      }
+  },
+
+    gridFooter: '',
+    //寮瑰嚭妗�(淇敼銆佺紪杈戙�佹煡鐪�)header銆乧ontent銆乫ooter瀵瑰簲浣嶇疆鎵╁厖鐨勭粍浠�
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  buttons: [],//鎵╁睍鐨勬寜閽�
+  tableAction:"Sys_Role",
+  methods: {//浜嬩欢鎵╁睍
+    onInited () {
+      this.height = this.height - 80;
+       this.editFormOptions.forEach(x => {
+        x.forEach(item => {
+          if (item.field == 'ParentId') {
+            item.title = "涓婄骇瑙掕壊";
+            //璁剧疆浠绘剰鑺傜偣閮借兘閫変腑(榛樿鍙兘閫変腑鏈�鍚庝竴涓妭鐐�)
+            item.changeOnSelect = true;
+          }
+        })
+      })
+    },
+    onInit() {
+      //璁剧疆treetable鐨勫敮涓�鍊煎瓧娈�(杩欎釜瀛楁鐨勫�煎湪琛ㄩ噷闈㈠繀椤绘槸鍞竴鐨�)
+      this.rowKey="Role_Id";
+    },
+    /***鍔犺浇鍚庡彴鏁版嵁瑙丼ys_RoleController.cs鏂囦欢***/
+    loadTreeChildren(tree, treeNode, resolve) { //鍔犺浇瀛愯妭鐐�
+      let url=`api/role/getTreeTableChildrenData?roleId=${tree.Role_Id}`;
+      this.http.post(url,{}).then(result=>{
+        resolve(result.rows)
+      })
+    },
+      /***鍔犺浇鍚庡彴鏁版嵁瑙丼ys_RoleController.cs鏂囦欢***/
+    searchBefore(params){//鍒ゆ柇鍔犺浇鏍硅妭鐐规垨瀛愯妭鐐�
+      //娌℃湁鏌ヨ鏉′欢锛岄粯璁ゆ煡璇㈣繑鍥炴墍鏈夋牴鑺傜偣鏁版嵁
+      if (!params.wheres.length) {
+        params.value=1;
+      }
+      return true;
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/system/Sys_User.js b/WIDESEA_WMSClient/src/extension/system/Sys_User.js
new file mode 100644
index 0000000..b44ab20
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/system/Sys_User.js
@@ -0,0 +1,87 @@
+import {  defineAsyncComponent } from "vue";
+let extension = {
+    components: { //鍔ㄦ�佹墿鍏呯粍浠舵垨缁勪欢璺緞
+        //琛ㄥ崟header銆乧ontent銆乫ooter瀵瑰簲浣嶇疆鎵╁厖鐨勭粍浠�
+        gridHeader: defineAsyncComponent(() =>
+            import("./Sys_User/Sys_UserGridHeader.vue")),
+        gridBody: '',
+        gridFooter: '',
+        //寮瑰嚭妗�(淇敼銆佺紪杈戙�佹煡鐪�)header銆乧ontent銆乫ooter瀵瑰簲浣嶇疆鎵╁厖鐨勭粍浠�
+        modelHeader: '',
+        modelBody: '',
+        modelFooter: ''
+    },
+    text: "鍙兘鐪嬪埌褰撳墠瑙掕壊涓嬬殑鎵�鏈夊笎鍙�",
+    buttons: [], //鎵╁睍鐨勬寜閽�
+    methods: { //浜嬩欢鎵╁睍
+        onInit() {
+            this.boxOptions.height = 530;
+            this.columns.push({
+                title: '鎿嶄綔',
+                hidden: false,
+                align: "center",
+                fixed: 'right',
+                width: 120,
+                render: (h, { row, column, index }) => {
+                    return h(
+                        "div", { style: { 'font-size': '13px', 'cursor': 'pointer', 'color': '#409eff' } }, [
+                        h(
+                            "a", {
+                            style: { 'margin-right': '15px' },
+                            onClick: (e) => {
+                                e.stopPropagation()
+                                console.log(row);
+                                this.$refs.gridHeader.open(row);
+                            }
+                        }, "淇敼瀵嗙爜"
+                        ),
+                        h(
+                            "a", {
+                            style: {},
+                            onClick: (e) => {
+                                e.stopPropagation()
+                                this.edit(row);
+                            }
+                        },
+                            "缂栬緫"
+                        ),
+                    ])
+                }
+            })
+        },
+        onInited() { },
+        addAfter(result) { //鐢ㄦ埛鏂板缓鍚庯紝鏄剧ず闅忔満鐢熸垚鐨勫瘑鐮�
+            if (!result.status) {
+                return true;
+            }
+            //鏄剧ず鏂板缓鐢ㄦ埛鐨勫瘑鐮�
+            //2020.08.28浼樺寲鏂板缓鎴愬悗鎻愮ず鏂瑰紡
+            this.$confirm(result.message, '鏂板缓鐢ㄦ埛鎴愬姛', {
+                confirmButtonText: '纭畾',
+                type: 'success',
+                center: true
+            }).then(() => { })
+
+            this.boxModel = false;
+            this.refresh();
+            return false;
+        },
+        modelOpenAfter() {
+            //鐐瑰嚮寮瑰嚭妗嗗悗锛屽鏋滄槸缂栬緫鐘舵�侊紝绂佹缂栬緫鐢ㄦ埛鍚嶏紝濡傛灉鏂板缓鐘舵�侊紝灏嗙敤鎴峰悕瀛楁璁剧疆涓哄彲缂栬緫
+            let isEDIT = this.currentAction == this.const.EDIT;
+            this.editFormOptions.forEach(item => {
+                item.forEach(x => {
+                    if (x.field == "UserName") {
+                        x.disabled=isEDIT;
+                    }
+                })
+                //涓嶆槸鏂板缓锛屾�у埆榛樿鍊艰缃负鐢�
+                if (!isEDIT) {
+                    this.editFormFields.Gender = "0";
+                }
+            })
+        }
+
+    }
+};
+export default extension;
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/system/Sys_User/Sys_UserGridHeader.vue b/WIDESEA_WMSClient/src/extension/system/Sys_User/Sys_UserGridHeader.vue
new file mode 100644
index 0000000..baa43b8
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/system/Sys_User/Sys_UserGridHeader.vue
@@ -0,0 +1,85 @@
+<template>
+  <div>
+    <vol-box
+      v-model="model"
+      :padding="30"
+      title="淇敼瀵嗙爜"
+      :width="500"
+      :height="250"
+    >
+      <el-alert type="success">
+        <h3>
+          <span>甯愬彿锛歿{ row.userName }}</span>
+          <span>鐢ㄦ埛锛歿{ row.userTrueName }}</span>
+        </h3>
+      </el-alert>
+      <div>
+        <el-input
+          placeholder="璇疯緭鍏ュ瘑鐮�"
+          v-model="password"
+          size="large"
+          style="width: 100%; margin-top: 15px"
+        />
+      </div>
+      <template #footer>
+        <el-button
+          type="primary"
+          @click="savePwd()"
+          >淇敼瀵嗙爜</el-button
+        >
+        <el-button
+          @click="model = false"
+          >鍏抽棴</el-button
+        >
+      </template>
+    </vol-box>
+  </div>
+</template>
+<script>
+import { defineComponent, defineAsyncComponent } from "vue";
+export default defineComponent({
+  components: {
+    VolBox: defineAsyncComponent(() => import("@/components/basic/VolBox.vue"))
+  },
+  data() {
+    return {
+      row: {},
+      password: "",
+      model: false,
+    };
+  },
+  methods: {
+    open(row) {
+      this.password = "";
+      this.row = row;
+      this.model = true;
+    },
+    savePwd() {
+      if (!this.password) return this.$Message.error("璇疯緭瀵嗙爜");
+      if (this.password.length < 6)
+        return this.$Message.error("瀵嗙爜闀垮害鑷冲皯6浣�");
+      let url =
+        "/api/User/ModifyUserPwd?password=" +
+        this.password +
+        "&userName=" +
+        this.row.userName;
+      this.http.post(url, null, true).then((x) => {
+        if (!x.status) {
+          return this.$message.error(x.message);
+        }
+        this.model = false;
+        this.$Message.success(x.message);
+      });
+    },
+  },
+  created() {},
+})
+</script>
+<style lang="less" scoped>
+h3 {
+  font-weight: 500;
+  > span:last-child {
+    margin-left: 30px;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/system/system/Sys_Department.js b/WIDESEA_WMSClient/src/extension/system/system/Sys_Department.js
new file mode 100644
index 0000000..5c19061
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/system/system/Sys_Department.js
@@ -0,0 +1,152 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+    //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+      this.rowKey = "DepartmentId";
+    },
+    loadTreeChildren(tree, treeNode, resolve) { //鍔犺浇瀛愯妭鐐�
+      let url = `api/Sys_Department/getTreeTableChildrenData?departmentId=${tree.DepartmentId}`;
+      this.http.post(url, {}).then(result => {
+        resolve(result.rows)
+      })
+    },
+    /***鍔犺浇鍚庡彴鏁版嵁瑙丼ys_RoleController.cs鏂囦欢***/
+    searchBefore(params) {//鍒ゆ柇鍔犺浇鏍硅妭鐐规垨瀛愯妭鐐�
+      //娌℃湁鏌ヨ鏉′欢锛岄粯璁ゆ煡璇㈣繑鍥炴墍鏈夋牴鑺傜偣鏁版嵁
+      if (!params.wheres.length) {
+        params.value = 1;
+      }
+      return true;
+    },
+    onInited() {
+      let hasUpdate, hasDel, hasAdd;
+      this.buttons.forEach((x) => {
+        if (x.value == 'Update') {
+          x.hidden = true;
+          hasUpdate = true;
+        } else if (x.value == 'Delete') {
+          hasDel = true;
+          x.hidden = true;//闅愯棌鎸夐挳
+        }
+        else if (x.value == 'Add') {
+          x.type="primary";
+          hasAdd = true;
+        }
+      });
+      if (!(hasUpdate || hasDel || hasAdd)) {
+        return;
+      }
+      this.columns.push({
+        title: '鎿嶄綔',
+        field: '鎿嶄綔',
+        width: 80,
+        fixed: 'right',
+        align: 'center',
+        render: (h, { row, column, index }) => {
+          return (
+            <div>
+              <el-button
+                onClick={($e) => {
+                  this.addBtnClick(row)
+                }}
+                type="primary"
+                link
+                v-show={hasAdd}
+                icon="Plus"
+              >
+              </el-button>
+              <el-button
+                onClick={($e) => {
+                  this.edit(row);
+                }}
+                type="success"
+                link
+                v-show={hasUpdate}
+                icon="Edit"
+              >
+              </el-button>
+              <el-tooltip
+                class="box-item"
+                effect="dark"
+                content="鍒犻櫎"
+                placement="top"
+              >
+                <el-button
+                  link
+                  onClick={($e) => {
+                    this.del(row);
+                  }}
+                  v-show={hasDel}
+                  type="danger"
+                  icon="Delete"
+                >
+                </el-button>
+              </el-tooltip>
+            </div>
+          );
+        }
+      });
+    },
+    addBtnClick(row) {
+      //杩欓噷鏄姩鎬乤ddCurrnetRow灞炴�ц褰曞綋鍓嶇偣鍑荤殑琛屾暟鎹�,涓嬮潰modelOpenAfter璁剧疆榛樿鍊�
+      this.addCurrnetRow = row;
+      this.add();
+    },
+    addAfter() {//娣诲姞鍚庡埛鏂板瓧鍏�
+      this.initDicKeys();
+      return true;
+    },
+    updateAfter() {
+      this.initDicKeys();
+      return true;
+    },
+    delAfter(result) {//鏌ヨ鐣岄潰鐨勮〃鍒犻櫎鍚�
+      this.initDicKeys();
+      return true;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮琛屼笂鐨勬坊鍔犳寜閽簨浠�
+      if (this.addCurrnetRow) {
+
+        //鑾峰彇褰撳墠缁勭粐鏋勬灦鐨勬墍鏈夌埗绾d,鐢ㄤ簬璁剧疆鏂板缓鏃剁埗绾d鐨勯粯璁ゅ��
+
+        //鑾峰彇鏁版嵁鏁版嵁婧�
+        let data = [];
+        this.editFormOptions.forEach(options => {
+          options.forEach(option => {
+            if (option.field == 'ParentId') {
+              data = option.orginData;
+            }
+          })
+        })
+        let parentIds = this.base.getTreeAllParent(this.addCurrnetRow.DepartmentId, data).map(x => { return x.id });
+        //璁剧疆缂栬緫琛ㄥ崟涓婄骇缁勭粐鐨勯粯璁ゅ��
+        this.editFormFields.ParentId = parentIds;
+        this.addCurrnetRow = null;
+
+      }
+    }
+  }
+};
+export default extension;
diff --git a/WIDESEA_WMSClient/src/extension/taskinfo/task.js b/WIDESEA_WMSClient/src/extension/taskinfo/task.js
new file mode 100644
index 0000000..4e7fe7d
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/taskinfo/task.js
@@ -0,0 +1,96 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+        let TaskHandCancelBtn = this.buttons.find(x => x.value == 'TaskHandCancel');
+      if (TaskHandCancelBtn) {
+        TaskHandCancelBtn.onClick = function () {
+          let rows = this.$refs.table.getSelected();
+          if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
+          if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
+          var param = rows[0].taskNum;
+          this.http
+            .post("api/Task/TaskCancel?taskNum="+param, "鏁版嵁澶勭悊涓�...")
+            .then((x) => {
+              if (x.status) {
+                this.$Message.success('浠诲姟鍙栨秷鎴愬姛.');
+                this.refresh();
+              } else {
+                return this.$error(x.message);
+              }
+            });
+        }
+      }
+      let TaskHandCompletedBtn = this.buttons.find(x => x.value == 'TaskHandCompleted');
+      if (TaskHandCompletedBtn) {
+        TaskHandCompletedBtn.onClick = function () {
+          let rows = this.$refs.table.getSelected();
+          if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
+          if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
+          var param = rows[0].taskNum;
+          this.http
+            .post("api/Task/TaskCompleted?taskNum="+param, "鏁版嵁澶勭悊涓�...")
+            .then((x) => {
+              if (x.status) {
+                this.$Message.success('浠诲姟鎵嬪姩瀹屾垚');
+                this.refresh();
+              } else {
+                return this.$error(x.message);
+              }
+            });
+        }
+      }
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/extension/taskinfo/task_hty.js b/WIDESEA_WMSClient/src/extension/taskinfo/task_hty.js
new file mode 100644
index 0000000..24e1d94
--- /dev/null
+++ b/WIDESEA_WMSClient/src/extension/taskinfo/task_hty.js
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/main.js b/WIDESEA_WMSClient/src/main.js
new file mode 100644
index 0000000..40c4c4f
--- /dev/null
+++ b/WIDESEA_WMSClient/src/main.js
@@ -0,0 +1,63 @@
+import { createApp } from 'vue'
+import App from './App.vue'
+import router from './router'
+import store from './store'
+import ElementPlus from 'element-plus';
+// import 'element-plus/lib/theme-chalk/index.css';
+import 'element-plus/dist/index.css'
+import './assets/element-icon/icon.css'
+import base from './uitils/common'
+import http from './api/http'
+// import 'dayjs/locale/zh-cn'
+// import locale from 'element-plus/lib/locale/lang/zh-cn'
+import * as ElementPlusIconsVue from '@element-plus/icons-vue'
+
+
+
+import permission from './api/permission'
+import viewgird from './components/basic/ViewGrid';
+const app = createApp(App);
+for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
+    app.component(key, component)
+}
+app.config.globalProperties.base = base;
+app.config.globalProperties.http = http;
+app.config.globalProperties.$tabs = {};
+app.config.globalProperties.permission = permission;
+app.config.globalProperties.$global = {
+    signalR: false, //鏄惁寮�鍚痵ignalR
+    table: {
+        //vol-table甯︽暟鎹簮鐨勫崟鍏冩牸鏄惁鍚敤tag鏍囩(涓嬫媺妗嗙瓑鍗曞厓鏍间互tag鏍囩鏄剧ず)
+        useTag: true
+    },
+    audit: { //瀹℃牳閫夐」
+        data: [
+            { text: '閫氳繃', value: 1 },
+            { text: '鎷掔粷', value: 3 },
+            { text: '椹冲洖', value: 4 }
+        ],
+        status:[0,2] //瀹℃牳涓殑鏁版嵁
+        // 寰呭鏍� = 0,
+        // 瀹℃牳閫氳繃 = 1,
+        // 瀹℃牳涓� = 2,
+        // 瀹℃牳鏈�氳繃 = 3,
+        // 椹冲洖 = 4
+    }
+}
+//2023.03.13锛�
+//淇敼瑙侊細volupload.vue锛屽悗鍙癆liOSSController.cs锛岄樋閲屼簯OSS閰嶇疆.doc
+window.oss = {
+    ali: { //闃块噷浜�
+        use: false,//浣跨敤闃块噷浜戜笂浼犳枃浠�
+        //闃块噷缂╃暐鍥惧帇缂╁ぇ灏�
+        //.aliyuncs.com
+        small: "?x-oss-process=image/resize,m_lfit,w_200"
+    }
+}
+app.use(store)
+    .use(ElementPlus, { size: 'default' })
+    .use(router)
+    .use(viewgird)
+    .mount('#app');
+app.config.globalProperties.$Message = app.config.globalProperties.$message;
+
diff --git a/WIDESEA_WMSClient/src/router/charts.js b/WIDESEA_WMSClient/src/router/charts.js
new file mode 100644
index 0000000..55cac54
--- /dev/null
+++ b/WIDESEA_WMSClient/src/router/charts.js
@@ -0,0 +1,17 @@
+let charts=[
+    {
+        path: '/chart',
+        name: 'chart',
+        component: () => import('@/views/charts/chart.vue')
+    },
+    {
+        path: '/formChart',
+        name: 'formChart',
+        component: () => import('@/views/charts/formChart.vue')
+    },
+    {
+        path: '/flex',
+        name: 'flex',
+        component: () => import('@/views/charts/flex.vue')
+    }]
+export default charts
diff --git a/WIDESEA_WMSClient/src/router/index.js b/WIDESEA_WMSClient/src/router/index.js
new file mode 100644
index 0000000..febef0c
--- /dev/null
+++ b/WIDESEA_WMSClient/src/router/index.js
@@ -0,0 +1,82 @@
+import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router'
+import viewgird from './viewGird'
+import store from '../store/index'
+import redirect from './redirect'
+import charts from './charts'
+const routes = [
+  {
+    path: '/',
+    name: 'Index',
+    component: () => import('@/views/Index'),
+    redirect: '/home',
+    children: [
+      ...viewgird,
+      ...redirect,
+      ...charts,
+      {
+        path: '/home',
+        name: 'home',
+        component: () => import('@/views/Home.vue')
+      }, {
+        path: '/UserInfo',
+        name: 'UserInfo',
+        component: () => import('@/views/system/UserInfo.vue')
+      },
+      {
+        path: '/sysMenu',
+        name: 'sysMenu',
+        component: () => import('@/views/system/Sys_Menu.vue')
+      }
+    ]
+  },
+  {
+    path: '/login',
+    name: 'login',
+    component: () => import('@/views/Login.vue'),
+    meta:{
+        anonymous:true
+      }
+  },
+  {
+    path: '/bigdata',
+    name: 'bigdata',
+    component: () => import('@/views/charts/bigdata.vue'),
+    meta: {
+      keepAlive: false
+    }
+  }
+]
+
+const router = createRouter({
+  history: createWebHashHistory(), //createWebHistory(process.env.BASE_URL),
+  routes
+})
+
+
+router.beforeEach((to, from, next) => {
+  if (to.matched.length == 0) return next({ path: '/404' });
+  //2020.06.03澧炲姞璺敱鍒囨崲鏃跺姞杞芥彁绀�
+  store.dispatch("onLoading", true);
+  if ((to.hasOwnProperty('meta') && to.meta.anonymous) || store.getters.isLogin() || to.path == '/login') {
+    return next();
+  }
+
+  next({ path: '/login', query: { redirect: Math.random() } });
+})
+router.afterEach((to, from) => {
+  store.dispatch("onLoading", false);
+})
+router.onError((error) => {
+  // const targetPath = router.currentRoute.value.matched;
+  try {
+    console.log(error.message);
+    if (process.env.NODE_ENV == 'development') {
+      alert(error.message)
+    }
+    localStorage.setItem("route_error", error.message)
+  } catch (e) {
+
+  }
+  window.location.href = '/'
+});
+export default router
diff --git a/WIDESEA_WMSClient/src/router/redirect.js b/WIDESEA_WMSClient/src/router/redirect.js
new file mode 100644
index 0000000..144beb8
--- /dev/null
+++ b/WIDESEA_WMSClient/src/router/redirect.js
@@ -0,0 +1,22 @@
+
+let redirect = [{
+    path: '/404',
+    name: '404',
+    component: () => import('@/components/redirect/404'),
+    meta:{
+        anonymous:true
+      }
+}, {
+    path: '/401',
+    name: '401',
+    component: () => import('@/components/redirect/401')
+}, {
+    path: '/coding',
+    name: 'coding',
+    component: () => import('@/components/redirect/coding')
+}, {
+    path: '/message',
+    name: 'message',
+    component: () => import('@/components/redirect/Message.vue')
+}]
+export default redirect;
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/router/viewGird.js b/WIDESEA_WMSClient/src/router/viewGird.js
new file mode 100644
index 0000000..ccb09c9
--- /dev/null
+++ b/WIDESEA_WMSClient/src/router/viewGird.js
@@ -0,0 +1,186 @@
+
+let viewgird = [
+  {
+    path: '/Sys_Log',
+    name: 'sys_Log',
+    component: () => import('@/views/system/Sys_Log.vue')
+  },
+  {
+    path: '/Sys_User',
+    name: 'Sys_User',
+    component: () => import('@/views/system/Sys_User.vue')
+  },
+  {
+    path: '/permission',
+    name: 'permission',
+    component: () => import('@/views/system/Permission.vue')
+  },
+  {
+    path: '/permissionPDA',
+    name: 'permissionPDA',
+    component: () => import('@/views/system/PermissionPDA.vue')
+  },
+  {
+    path: '/Sys_Dictionary',
+    name: 'Sys_Dictionary',
+    component: () => import('@/views/system/Sys_Dictionary.vue')
+  },
+  {
+    path: '/Sys_Role',
+    name: 'Sys_Role',
+    component: () => import('@/views/system/Sys_Role.vue')
+  }, {
+    path: '/Sys_Role1',
+    name: 'Sys_Role1',
+    component: () => import('@/views/system/Sys_Role1.vue')
+  }, {
+    path: '/Sys_DictionaryList',
+    name: 'Sys_DictionaryList',
+    component: () => import('@/views/system/Sys_DictionaryList.vue')
+  }, {
+    path: '/locationInfo',
+    name: 'locationInfo',
+    component: () => import('@/views/basic/locationInfo.vue')
+  }, {
+    path: '/materielInfo',
+    name: 'materielInfo',
+    component: () => import('@/views/basic/materielInfo.vue')
+  }, {
+    path: '/warehouse',
+    name: 'warehouse',
+    component: () => import('@/views/basic/warehouse.vue')
+  },{
+    path: '/palletCodeInfo',
+    name: 'palletCodeInfo',
+    component: () => import('@/views/basic/palletCodeInfo.vue')
+  },{
+    path: '/MaterielCodeInfo',
+    name: 'MaterielCodeInfo',
+    component: () => import('@/views/basic/materielCodeInfo.vue')
+  }, {
+    path: '/inboundOrder',
+    name: 'inboundOrder',
+    component: () => import('@/views/inbound/inboundOrder.vue')
+  }, {
+    path: '/inboundOrderDetail',
+    name: 'inboundOrderDetail',
+    component: () => import('@/views/inbound/inboundOrderDetail.vue')
+  }, {
+    path: '/outboundOrder',
+    name: 'outboundOrder',
+    component: () => import('@/views/outbound/outboundOrder.vue')
+  }, {
+    path: '/outboundOrderDetail',
+    name: 'outboundOrderDetail',
+    component: () => import('@/views/outbound/outboundOrderDetail.vue')
+  }, {
+    path: '/stockInfo',
+    name: 'stockInfo',
+    component: () => import('@/views/stock/stockInfo.vue')
+  }, {
+    path: '/stockInfoDetail',
+    name: 'stockInfoDetail',
+    component: () => import('@/views/stock/stockInfoDetail.vue')
+  }, {
+    path: '/task',
+    name: 'task',
+    component: () => import('@/views/taskinfo/task.vue')
+  },
+  {
+    path: '/task_hty',
+    name: 'task_hty',
+    component: () => import('@/views/taskinfo/task_hty.vue')
+  }, {
+    path: '/stockView',
+    name: 'stockView',
+    component: () => import('@/views/stock/stockView.vue')
+  }, {
+    path: '/stockQuantityChangeRecord',
+    name: 'stockQuantityChangeRecord',
+    component: () => import('@/views/record/stockQuantityChangeRecord.vue')
+  }, {
+    path: '/locationStatusChangeRecord',
+    name: 'locationStatusChangeRecord',
+    component: () => import('@/views/record/locationStatusChangeRecord.vue')
+  }, {
+    path: '/receiveOrder',
+    name: 'receiveOrder',
+    component: () => import('@/views/inbound/receiveOrder.vue')
+  }, {
+    path: '/purchaseOrder',
+    name: 'purchaseOrder',
+    component: () => import('@/views/inbound/purchaseOrder.vue')
+  }
+  , {
+    path: '/supplierInfo',
+    name: 'supplierInfo',
+    component: () => import('@/views/basic/supplierInfo.vue')
+  }
+  , {
+    path: '/checkOrder',
+    name: 'checkOrder',
+    component: () => import('@/views/check/checkOrder.vue')
+  }
+  , {
+    path: '/checkOrderResult',
+    name: 'checkOrderResult',
+    component: () => import('@/views/check/checkOrderResult.vue')
+  }
+  , {
+    path: '/inboundOrder_Hty',
+    name: 'inboundOrder_Hty',
+    component: () => import('@/views/inbound/inboundOrder_Hty.vue')
+  }
+  , {
+    path: '/inboundOrderDetail_Hty',
+    name: 'inboundOrderDetail_Hty',
+    component: () => import('@/views/inbound/inboundOrderDetail_Hty.vue')
+  }
+  , {
+    path: '/purchaseOrderDetail',
+    name: 'purchaseOrderDetail',
+    component: () => import('@/views/inbound/purchaseOrderDetail.vue')
+  }
+  , {
+    path: '/outboundOrder_Hty',
+    name: 'outboundOrder_Hty',
+    component: () => import('@/views/outbound/outboundOrder_Hty.vue')
+  }
+  , {
+    path: '/outboundOrderDetail_Hty',
+    name: 'outboundOrderDetail_Hty',
+    component: () => import('@/views/outbound/outboundOrderDetail_Hty.vue')
+  }
+  , {
+    path: '/receiveOrderDetail',
+    name: 'receiveOrderDetail',
+    component: () => import('@/views/inbound/receiveOrderDetail.vue')
+  }
+  , {
+    path: '/stockInfo_Hty',
+    name: 'stockInfo_Hty',
+    component: () => import('@/views/stock/stockInfo_Hty.vue')
+  }
+  , {
+    path: '/stockInfoDetail_Hty',
+    name: 'stockInfoDetail_Hty',
+    component: () => import('@/views/stock/stockInfoDetail_Hty.vue')
+  }
+  , {
+    path: '/customerInfo',
+    name: 'customerInfo',
+    component: () => import('@/views/basic/customerInfo.vue')
+  }
+  , {
+    path: '/userInfo',
+    name: 'userInfo',
+    component: () => import('@/views/basic/userInfo.vue')
+  }
+  , {
+    path: '/mesOutboundOrder',
+    name: 'mesOutboundOrder',
+    component: () => import('@/views/outbound/mesOutboundOrder.vue')
+  }
+]
+
+export default viewgird
diff --git a/WIDESEA_WMSClient/src/store/index.js b/WIDESEA_WMSClient/src/store/index.js
new file mode 100644
index 0000000..5e02795
--- /dev/null
+++ b/WIDESEA_WMSClient/src/store/index.js
@@ -0,0 +1,94 @@
+import { createStore } from 'vuex'
+const keys = { USER: 'user' }
+function getUserInfo(state) {
+  if (state.userInfo) return state.userInfo;
+  let userInfo = localStorage.getItem(keys.USER);
+  if (userInfo) {
+    state.userInfo = JSON.parse(userInfo);
+  }
+  return state.userInfo;
+}
+export default createStore({
+  state: {
+    data: {},
+    permission: [],
+    isLoading: false,//2020.06.03澧炲姞璺敱鍒囨崲鏃跺姞杞芥彁绀�
+    userInfo: null,
+    websocke: null,//websocket
+    // wcsState: true//wcs鏈嶅姟鐘舵��
+  },
+  mutations: {
+    setPermission(state, data) {  //璋冪敤鏂瑰紡 this.$store.commit('setPermission', data)
+      if (!data || typeof data != 'object') return;
+      if (data instanceof Array) {
+        state.permission.push(...data);
+      } else {
+        state.permission = data;
+      }
+    }, setUserInfo(state, data) {
+      state.userInfo = data;
+      localStorage.setItem(keys.USER, JSON.stringify(data));
+    },
+    clearUserInfo(state) {
+      state.permission = [];
+      state.userInfo = null;
+      localStorage.removeItem(keys.USER);
+    },
+    test(state) {
+      return 113344;
+    },
+    updateLoadingState(state, flag) {
+      state.isLoading = flag
+    },
+    setWebsocket(state, data) {
+      state.websocke = data;
+    }
+  }, getters: {
+    getPermission: (state) => (path) => {  //璋冪敤鏂瑰紡 store.getters.getPermission('sys_User')
+      if (!path) return state.permission;
+      return state.permission.find(x => x.path == path);
+    },
+    getUserInfo: (state) => () => {
+      getUserInfo(state);
+      return state.userInfo;
+    }, getUserName: (state) => () => {
+      getUserInfo(state);
+      if (state.userInfo) {
+        return state.userInfo.userName;
+      }
+      return '鏈幏鍙栧埌鐧婚檰淇℃伅';
+    },
+    getToken: (state) => () => {
+      getUserInfo(state);
+      if (state.userInfo) {
+        return 'Bearer ' + state.userInfo.token;
+      }
+      return '';
+    },
+    isLogin: (state) => () => {
+      if (getUserInfo(state)) {
+        return true;
+      }
+      return false;
+    },
+    isLoading: (state) => () => {
+      return state.isLoading;
+    },
+    data: (state) => () => {
+      return state.data;
+    },
+    getData: (state) => () => {
+      return state.data;
+    },
+  }, actions: {
+    setPermission(context, data) {
+      context.commit('setPermission', data); //璋冪敤鏂瑰紡 store.dispatch('push')
+    },
+    toDo(context) {
+      return context.Store.m;
+    },
+    onLoading(context, flag) {
+      context.commit("updateLoadingState", flag);
+    }
+  }
+})
diff --git a/WIDESEA_WMSClient/src/uitils/common.js b/WIDESEA_WMSClient/src/uitils/common.js
new file mode 100644
index 0000000..a745d8d
--- /dev/null
+++ b/WIDESEA_WMSClient/src/uitils/common.js
@@ -0,0 +1,344 @@
+let base = {
+  addDays(date, days) {
+    //缁欐寚瀹氭棩鏈熷鍔犲ぉ鏁�
+    if (!days) {
+      return date;
+    }
+    let dateArr = date.split(' ');
+    date = new Date(new Date(date).setDate(new Date(date).getDate() + days));
+    var year = date.getFullYear();
+    var month = date.getMonth() + 1;
+    if (month < 10) {
+      month = '0' + month;
+    }
+    var day = date.getDate();
+    if (day < 10) {
+      day = '0' + day;
+    }
+    date = year + '-' + month + '-' + day;
+    if (dateArr.length == 1) {
+      return date;
+    }
+    return date + ' ' + dateArr[1];
+  },
+  //鑾峰彇褰撳墠鏃堕棿锛宼ime鏄惁甯︽椂鍒嗙
+  getDate(time) {
+    let date = new Date();
+    let year = date.getFullYear();
+    let month = date.getMonth() + 1;
+    let day = date.getDate();
+
+    let datetime =
+      year +
+      '-' +
+      (month < 10 ? '0' + month : month) +
+      '-' +
+      (day < 10 ? '0' + day : day);
+
+    if (!time) {
+      return datetime;
+    }
+
+    let hour = date.getHours();
+    let minutes = date.getMinutes();
+    let second = date.getSeconds();
+
+    return (
+      datetime +
+      '' +
+      ' ' +
+      (hour < 10 ? '0' + hour : hour) +
+      ':' +
+      (minutes < 10 ? '0' + minutes : minutes) +
+      ':' +
+      (second < 10 ? '0' + second : second)
+    );
+  },
+  isPhone(val) {
+    return /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(val);
+  },
+  isDecimal(val) {
+    return /(^[\-0-9][0-9]*(.[0-9]+)?)$/.test(val);
+  },
+  isNumber(val) {
+    return /(^[\-0-9][0-9]*([0-9]+)?)$/.test(val);
+  },
+  isMail(val) {
+    return /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/.test(val);
+  },
+  isUrl(url) {
+    return this.checkUrl(url);
+  },
+  checkUrl(url) {
+    // url= 鍗忚://(ftp鐨勭櫥褰曚俊鎭�)[IP|鍩熷悕](:绔彛鍙�)(/鎴�?璇锋眰鍙傛暟)
+    var strRegex =
+      '^((https|http|ftp)://)?' + // (https鎴杊ttp鎴杅tp):// 鍙湁鍙棤
+      "(([\\w_!~*'()\\.&=+$%-]+: )?[\\w_!~*'()\\.&=+$%-]+@)?" + // ftp鐨剈ser@  鍙湁鍙棤
+      '(([0-9]{1,3}\\.){3}[0-9]{1,3}' + // IP褰㈠紡鐨刄RL- 3浣嶆暟瀛�.3浣嶆暟瀛�.3浣嶆暟瀛�.3浣嶆暟瀛�
+      '|' + // 鍏佽IP鍜孌OMAIN锛堝煙鍚嶏級
+      '(localhost)|' + // 鍖归厤localhost
+      "([\\w_!~*'()-]+\\.)*" + // 鍩熷悕- 鑷冲皯涓�涓猍鑻辨枃鎴栨暟瀛梍!~*\'()-]鍔犱笂.
+      '\\w+\\.' + // 涓�绾у煙鍚� -鑻辨枃鎴栨暟瀛�  鍔犱笂.
+      '[a-zA-Z]{1,6})' + // 椤剁骇鍩熷悕- 1-6浣嶈嫳鏂�
+      '(:[0-9]{1,5})?' + // 绔彛- :80 ,1-5浣嶆暟瀛�
+      '((/?)|' + // url鏃犲弬鏁扮粨灏� - 鏂滄潌鎴栬繖娌℃湁
+      "(/[\\w_!~*'()\\.;?:@&=+$,%#-]+)+/?)$"; // 璇锋眰鍙傛暟缁撳熬- 鑻辨枃鎴栨暟瀛楀拰[]鍐呯殑鍚勭瀛楃
+    var re = new RegExp(strRegex, 'i'); // i涓嶅尯鍒嗗ぇ灏忓啓
+    // 灏唘rl鍋歶ri杞爜鍚庡啀鍖归厤锛岃В闄よ姹傚弬鏁颁腑鐨勪腑鏂囧拰绌哄瓧绗﹀奖鍝�
+    if (re.test(encodeURI(url))) {
+      return true;
+    }
+    return false;
+  },
+  matchUrlIp(url, ip) {
+    // url浣跨敤鏄惁浣跨敤鐨勫綋鍓峣p
+    if (!url || !ip) {
+      return false;
+    }
+    return url.indexOf(ip.replace('https://', '').replace('http://', '')) >= 0;
+  },
+  getImgSrc(src, httpUrl) {
+    if (this.isUrl(src)) {
+      return src;
+    }
+    if (httpUrl) {
+      return httpUrl + src;
+    }
+    return src;
+  },
+  previewImg(src, httpUrl) {
+    // 鍥剧墖棰勮锛岀洰鍓嶅彧鏀寔鍗曞浘鐗囬瑙�
+    if (src && !this.isUrl(src) && httpUrl) {
+      if (
+        src.substr(0, 1) == '/' &&
+        httpUrl.substr(httpUrl.length - 1, 1) == '/'
+      ) {
+        src = src.substr(1);
+      }
+      src = httpUrl + src;
+    }
+    let id = 'vol-preview';
+    let $div = document.getElementById(id);
+    if (!$div) {
+      $div = document.createElement('div');
+      $div.setAttribute('id', 'vol-preview');
+      let $mask = document.createElement('div');
+      $mask.style.position = 'absolute';
+      $mask.style.width = '100%';
+      $mask.style.height = '100%';
+      $mask.style.background = 'black';
+      $mask.style.opacity = '0.6';
+      $div.appendChild($mask);
+      $div.style.position = 'fixed';
+      $div.style.width = '100%';
+      $div.style.height = '100%';
+      // $div.style.overflow = "scroll";
+      $div.style.top = 0;
+      $div.style['z-index'] = 9999999;
+      let $img = document.createElement('img');
+      $img.setAttribute('class', 'vol-preview-img');
+      $img.style.position = 'absolute';
+      $img.style.top = '50%';
+      $img.style.left = '50%';
+      $img.style['max-width'] = '90%';
+      $img.style['max-height'] = '90%';
+      $img.style.transform = 'translate(-50%,-50%)';
+      // $img.src = src;
+      $img.setAttribute('src', src);
+      $div.appendChild($img);
+      $div.addEventListener('click', function() {
+        this.style.display = 'none';
+      });
+      document.body.appendChild($div);
+      return;
+    }
+    let $img1 = document.body
+      .appendChild($div)
+      .querySelector('.vol-preview-img');
+    // img.src = src;
+    $img1.setAttribute('src', src);
+    $div.style.display = 'block';
+  },
+  // 涓嬭浇鏂囦欢 $element 鏍囩, url瀹屾暣url, fileName 鏂囦欢鍚�, header 浠ey/value浼犲��
+  // backGroundUrl 鍚庡彴url锛屽鏋滃悗鍙皍rl鐩存帴浠庡悗鍙颁笅杞斤紝鍏朵粬鍏ㄩ儴閫氳繃鐐瑰嚮a鏍囩涓嬭浇
+  dowloadFile(url, fileName, header, backGroundUrl) {
+    if (!url) return alert('姝ゆ枃浠舵病鏈塽rl涓嶈兘涓嬭浇');
+    if (!this.isUrl(url)) {
+      url = backGroundUrl + url;
+    }
+    window.open(url);
+  },
+  downloadImg(data) {
+    if (!data.url || !data.callback || typeof data.callback !== 'function') {
+      return;
+    }
+    // url, backGroundUrl, header, callback
+    if (
+      this.isUrl(data.url) &&
+      !this.matchUrlIp(data.url, data.backGroundUrl)
+    ) {
+      return data.url;
+    }
+    // 閫氳繃鍚庡彴api鏈嶅姟鍣ㄤ笅杞�
+    if (!this.isUrl(data.url)) {
+      if (!this.isUrl(data.backGroundUrl + data.url)) {
+        return;
+      }
+      data.url = data.backGroundUrl + data.url;
+    }
+    var xmlResquest = new XMLHttpRequest();
+    xmlResquest.open('get', data.url, true);
+    xmlResquest.responseType = 'blob';
+    xmlResquest.setRequestHeader('Content-Type', 'application/json');
+    if (data.header && typeof data.header === 'object') {
+      for (const key in data.header) {
+        xmlResquest.setRequestHeader(key, data.header[key]);
+      }
+    }
+    xmlResquest.onload = function() {
+      if (this.status == 200) {
+        var blob = this.response;
+        callback(window.URL.createObjectURL(blob));
+      }
+    };
+    xmlResquest.send();
+  },
+  // 2020.06.01澧炲姞閫氱敤鏂规硶锛屽皢鏅�氬璞¤浆鎹负tree缁撴瀯
+  // data鏁版嵁鏍煎紡[
+  //     { name: 'tree1', id: 1, parentId: 0 },
+  //     { name: 'tree2', id: 2, parentId: 0 }]
+
+  // 1銆乮d涓巔arentId杩欎袱涓瓧娈靛繀椤绘湁
+  // 2銆佹爲褰ree闇�瑕佹敞鎰廔d涓巔arentId寰幆渚濊禆鐨勯棶棰�
+  // 3銆乧allback姣忔鐢熸垚涓�鏂扮殑鑺傜偣鐨勬椂鍥炶皟鐨勬柟娉�
+
+  convertTree(data, callback) {
+    var treeIds = [];
+    var root_data = [];
+    if (data.length>100) {
+      data = JSON.parse(JSON.stringify(data));
+    }
+    data.forEach((x) => {
+      // if (!x.children) {
+      //   x.children = []
+      // }
+      if (
+        !x.hidden &&
+        x.id !== undefined &&
+        x.id !== x.parentId &&
+        !data.some((s) => {
+          return x.parentId == s.id;
+        })
+      ) {
+        x.isRoot = true;
+        callback && callback(x, data, true, treeIds);
+        root_data.push(x);
+        getTree(x.id, x, data, callback, treeIds);
+      } else {
+        callback && callback(x, data, true, treeIds);
+      }
+    });
+    var exceptionNodes = data.filter((f) => {
+      return treeIds.indexOf(f.id) == -1 && !f.hidden;
+    });
+
+    root_data.push(...exceptionNodes);
+    return root_data;
+  },
+  getTreeAllParent(id, data) {
+    // 鑾峰彇鏌愪釜鑺傜偣鐨勬墍鏈夌埗鑺傜偣淇℃伅2020.11.01
+    var nodes = [];
+    if (!(data instanceof Array)) {
+      return nodes;
+    }
+    if (data.length>100) {
+      data = JSON.parse(JSON.stringify(data));
+    }
+    data.forEach((x) => {
+      if (x.id === x.parentId) {
+        x.parentId = 0;
+      } else if (data.some((c) => c.parentId === x.id && c.id === x.parentId)) {
+        x.parentId = 0;
+      }
+    });
+
+    var _child = data.find((x) => {
+      return x.id === id;
+    });
+    if (!_child) {
+      return [];
+    }
+    nodes.push(_child);
+    var _parentIds = [_child.parentId];
+    for (let index = 0; index < _parentIds.length; index++) {
+      var _node = data.find((x) => {
+        return x.id === _parentIds[index] && x.id !== x.parentId;
+      });
+      if (!_node) {
+        return nodes;
+      }
+      _parentIds.push(_node.parentId);
+      nodes.unshift(_node);
+    }
+    return nodes;
+  },
+  //鑾峰彇鎵�鏈夎妭鐐圭殑瀛愯妭鐐�
+  // data鏁版嵁鏍煎紡[
+  //     { name: 'tree1', id: 1, parentId: 0 },
+  //     { name: 'tree2', id: 2, parentId: 0 }]
+  getTreeAllChildren(id, data) {
+    //閫掑綊鑾峰彇鏌愪釜鑺傜偣鐨勬墍鏈夊瓙鑺傜偣淇℃伅
+    var nodes = [];
+    if (!(data instanceof Array)) {
+      return nodes;
+    }
+    if (data.length>100) {
+      data = JSON.parse(JSON.stringify(data));
+    }
+    var _child = data.find((x) => {
+      return x.id === id;
+    });
+    if (!_child) {
+      return [];
+    }
+    nodes.push(_child);
+    var _parentIds = [_child.id];
+    for (let index = 0; index < _parentIds.length; index++) {
+      data.forEach((_node) => {
+        if (
+          _node.parentId === _parentIds[index] &&
+          _node.parentId !== _node.id
+        ) {
+          _parentIds.push(_node.id);
+          nodes.unshift(_node);
+        }
+      });
+    }
+    return nodes;
+  },
+  //鑾峰彇鎵�鏈夊瓙鑺傜偣鐨刬d
+  // data鏁版嵁鏍煎紡[
+  //     { name: 'tree1', id: 1, parentId: 0 },
+  //     { name: 'tree2', id: 2, parentId: 0 }]
+  getTreeAllChildrenId(id, data) {
+    return this.getTreeAllChildren(id, data).map((c) => {
+      return c.id;
+    });
+  }
+};
+export default base;
+
+// 2020.06.01澧炲姞閫氱敤鏂规硶锛屽皢鏅�氬璞¤浆鎹负tree缁撴瀯
+function getTree(id, node, data, callback, treeIds) {
+  if (treeIds.indexOf(id) == -1) {
+    treeIds.push(id);
+  }
+  data.forEach((x) => {
+    if (!x.hidden && x.parentId == id) {
+      if (!node.children) node.children = [];
+      callback && callback(x, node, false);
+      node.children.push(x);
+      getTree(x.id, x, data, callback, treeIds);
+    }
+  });
+}
diff --git a/WIDESEA_WMSClient/src/views/Home.vue b/WIDESEA_WMSClient/src/views/Home.vue
new file mode 100644
index 0000000..820437a
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/Home.vue
@@ -0,0 +1,24 @@
+<template>
+  <div class="title"></div>
+</template>
+
+<script>
+import { ref, reactive } from 'vue'
+
+export default {
+  setup() {
+    return {
+
+    }
+  }
+}
+</script>
+
+<style scoped>
+.title {
+  line-height: 70vh;
+  text-align: center;
+  font-size: 28px;
+  color: orange;
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/Index.vue b/WIDESEA_WMSClient/src/views/Index.vue
new file mode 100644
index 0000000..a087196
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/Index.vue
@@ -0,0 +1,836 @@
+<template>
+  <div id="vol-container" :class="['vol-theme-' + theme]">
+    <div class="vol-aside" :style="{ width: menuWidth + 'px' }">
+      <div class="header" :style="{ width: menuWidth - 1 + 'px' }">
+        <img v-show="!isCollapse" v-bind:src="logo" />
+        <i
+          @click="toggleLeft"
+          class="collapse-menu"
+          :class="isCollapse ? 'el-icon-s-unfold' : 'el-icon-s-fold'"
+        />
+      </div>
+      <div class="vol-menu">
+        <el-scrollbar style="height: 100%">
+          <VolMenu
+            :currentMenuId="currentMenuId"
+            :on-select="onSelect"
+            :enable="true"
+            :open-select="false"
+            :isCollapse="isCollapse"
+            :list="menuOptions"
+          ></VolMenu>
+        </el-scrollbar>
+      </div>
+    </div>
+    <div class="vol-container" :style="{ left: menuWidth - 1 + 'px' }">
+      <div class="vol-header">
+        <div class="project-name">WMS</div>
+        <div class="header-text">
+          <div class="h-link">
+            <a
+              href="javascript:void(0)"
+              @click="to(item)"
+              v-for="(item, index) in links.filter((c) => {
+                return !c.icon;
+              })"
+              :key="index"
+            >
+              <span v-if="!item.icon"> {{ item.text }}</span>
+              <i v-else :class="item.icon"></i>
+            </a>
+          </div>
+        </div>
+        <div class="header-info">
+          <div class="h-link">
+            <a
+              href="javascript:void(0)"
+              @click="to(item)"
+              v-for="(item, index) in links.filter((c) => {
+                return c.icon;
+              })"
+              :key="index"
+            >
+              <span v-if="!item.icon"> {{ item.text }}</span>
+              <i v-else :class="item.icon"></i>
+            </a>
+          </div>
+          <!--娑堟伅绠$悊-->
+
+          <div class="h-link" @click="messageModel = true">
+            <a
+              ><i class="el-icon-message-solid"
+                ><el-badge
+                  :value="messageList.length"
+                  :type="messageList.length > 0 ? 'danger' : 'success'"
+                  class="item"
+                  style="width: 10px"
+                ></el-badge></i
+            ></a>
+          </div>
+          <div>
+            <img class="user-header" :src="userImg" :onerror="errorImg" />
+          </div>
+          <div class="user">
+            <span>{{ userTrueName }}</span>
+            <span id="index-date"></span>
+          </div>
+          <div class="settings">
+            <i
+              style="font-size: 20px"
+              class="el-icon-s-tools"
+              @click="drawer_model = true"
+            />
+          </div>
+        </div>
+      </div>
+      <div class="vol-path">
+        <el-tabs
+          @tab-click="selectNav"
+          @tab-remove="removeNav"
+          @contextmenu.prevent="bindRightClickMenu(false)"
+          type="border-card"
+          class="header-navigation"
+          v-model="selectId"
+          :strtch="false"
+        >
+          <el-tab-pane
+            v-for="(item, navIndex) in navigation"
+            type="card"
+            :name="navIndex + ''"
+            :closable="navIndex > 0"
+            :key="navIndex"
+            :label="item.name"
+          >
+            <span style="display: none">{{ navIndex }}</span>
+          </el-tab-pane>
+        </el-tabs>
+        <!-- 鍙抽敭鑿滃崟 -->
+        <div v-show="contextMenuVisible">
+          <ul
+            :style="{ left: menuLeft + 'px', top: menuTop + 'px' }"
+            class="contextMenu"
+          >
+            <li v-show="visibleItem.all">
+              <el-button link @click="closeTabs()">
+                <i class="el-icon-close"></i>
+                {{
+                  navigation.length == 2 ? "鍏抽棴鑿滃崟" : "鍏抽棴鎵�鏈�"
+                }}</el-button
+              >
+            </li>
+            <li v-show="visibleItem.left">
+              <el-button link @click="closeTabs('left')"
+                ><i class="el-icon-back"></i>鍏抽棴宸﹁竟</el-button
+              >
+            </li>
+            <li v-show="visibleItem.right">
+              <el-button link @click="closeTabs('right')">
+                <i class="el-icon-right"></i>鍏抽棴鍙宠竟</el-button
+              >
+            </li>
+            <li v-show="visibleItem.other">
+              <el-button link @click="closeTabs('other')"
+                ><i class="el-icon-right"></i>鍏抽棴鍏朵粬
+              </el-button>
+            </li>
+          </ul>
+        </div>
+      </div>
+      <div class="vol-main" id="vol-main">
+        <el-scrollbar style="height: 100%" v-if="permissionInited">
+          <loading v-show="$store.getters.isLoading()"></loading>
+          <router-view v-slot="{ Component }">
+            <keep-alive>
+              <component
+                :is="Component"
+                :key="$route.name"
+                v-if="
+                  !$route.meta ||
+                  ($route.meta && !$route.meta.hasOwnProperty('keepAlive'))
+                "
+              />
+            </keep-alive>
+            <component
+              :is="Component"
+              :key="$route.name"
+              v-if="$route.meta && $route.meta.hasOwnProperty('keepAlive')"
+            />
+          </router-view>
+        </el-scrollbar>
+      </div>
+    </div>
+    <el-drawer
+      title="閫夋嫨涓婚"
+      v-model="drawer_model"
+      direction="rtl"
+      destroy-on-close
+    >
+      <div class="theme-selector">
+        <div
+          @click="changeTheme(item.name)"
+          class="item"
+          v-for="(item, index) in theme_color"
+          :key="index"
+          :style="{ background: item.color }"
+        >
+          <div
+            v-show="item.leftColor"
+            :style="{ background: item.leftColor }"
+            style="height: 100%; width: 20px"
+            class="t-left"
+          ></div>
+          <div class="t-right"></div>
+        </div>
+      </div>
+    </el-drawer>
+
+    <el-drawer
+      title="娑堟伅鍒楄〃"
+      v-model="messageModel"
+      direction="rtl"
+      destroy-on-close
+      size="40%"
+    >
+      <Message :list="messageList"></Message>
+    </el-drawer>
+  </div>
+</template>
+<style lang="less" scoped>
+@import "./index/index.less";
+</style>
+<script>
+import loading from "@/components/basic/RouterLoading";
+import VolMenu from "@/components/basic/VolElementMenu.vue";
+import Message from "./index/Message.vue";
+import MessageConfig from "./index/MessageConfig.js";
+var imgUrl = require("@/assets/imgs/wms_x.png");
+var $this;
+var $interval;
+var $indexDate;
+import {
+  defineComponent,
+  reactive,
+  ref,
+  watch,
+  onMounted,
+  getCurrentInstance,
+  h,
+} from "vue";
+import { useRouter, useRoute } from "vue-router";
+import store from "../store/index";
+import http from "@/../src/api/http.js";
+import { ElNotification } from "element-plus";
+export default defineComponent({
+  components: {
+    VolMenu,
+    loading,
+    Message,
+  },
+
+  data() {
+    return {
+      allTabs: true,
+      leftTabs: true,
+      rightTabs: true,
+      otherTabs: true,
+      menuLeft: 0,
+      menuTop: 0,
+      client: null,
+      //  contextMenuVisible: false, // 鍙抽敭鍏抽棴鏄�/闅�
+    };
+  },
+  setup(props, context) {
+    let client = ref(null);
+
+    // 鑾峰彇鍏ㄥ眬灞炴�у拰鏂规硶
+    const { proxy } = getCurrentInstance();
+
+    // 鑿滃崟瀵艰埅榛樿瀹藉害
+    const menuWidth = ref(200);
+    const contextMenuVisible = ref(false);
+    const isCollapse = ref(false);
+    const drawer_model = ref(false);
+    const messageModel = ref(false);
+    const theme_color = ref([
+      { name: "blue", color: "rgb(45, 140, 240)" },
+      { name: "blue2", color: "rgb(45, 140, 240)", leftColor: "#0068d6" },
+      { name: "red", color: "rgb(237, 64, 20)" },
+      { name: "red2", color: "rgb(237, 64, 20)", leftColor: "#a90000" },
+      { name: "dark", color: "#272929" },
+      { name: "orange", color: "#ff9900" },
+      { name: "orange2", color: "#ff9900", leftColor: "rgb(232 141 5)" },
+      { name: "green", color: "rgb(25, 190, 107)" },
+      { name: "green2", color: "rgb(25, 190, 107)", leftColor: "#019e4f" },
+      { name: "white", color: "#fff" },
+    ]);
+    const links = ref([
+      { text: "涓汉涓績", path: "/UserInfo", id: -1, icon: "el-icon-s-custom" },
+      {
+        text: "瀹夊叏閫�鍑�",
+        path: "/login",
+        id: -4,
+        icon: "el-icon-switch-button",
+      },
+    ]);
+    const errorImg = ref(
+      'this.src="' + require("@/assets/imgs/error-img.png") + '"'
+    );
+    const selectId = ref("1");
+    // 銆愰椤点�戞爣绛惧簭鍙�(褰撳墠鍙抽敭閫変腑鐨勮彍鍗�)
+    const selectMenuIndex = ref("0");
+    //2022.05.29澧炲姞tab閫夐」涓庤彍鍗曡仈鍔ㄥ姛鑳�
+    const currentMenuId = ref(0);
+    const userName = ref("--");
+    const userTrueName = ref("--");
+    const userInfo = ref({});
+    const visibleItem = reactive({
+      left: false,
+      right: false,
+      all: false,
+      other: false,
+    });
+    const userImg = ref("");
+    const navigation = reactive([
+      { orderNo: "0", id: "1", name: "棣栭〉", path: "/home" },
+    ]);
+    const logo = ref(imgUrl);
+    const theme = ref("blue2");
+    const menuOptions = ref([]);
+    const permissionInited = ref(false);
+    const messageList = reactive([]);
+    let _config = getCurrentInstance().appContext.config.globalProperties;
+    let router = useRouter();
+    const toggleLeft = () => {
+      isCollapse.value = !isCollapse.value;
+      menuWidth.value = isCollapse.value ? 63 : 200;
+    };
+    //2021.08.28寮�鏀炬墜鍔ㄦ姌鍙犺彍鍗曟柟娉�
+    _config.menu = {
+      show() {
+        toggleLeft();
+      },
+      hide() {
+        toggleLeft();
+      },
+    };
+
+    const handleMessage = (e) => {
+      let data = JSON.parse(e.data);
+      messageList.push(data);
+      ElNotification({
+        title: data.title,
+        message: h("i", { style: "color: teal" }, data.message),
+        position: "bottom-right",
+      });
+    };
+
+    const createSocket = (url) => {
+      // 鍒涘缓WebSocket杩炴帴
+      //"ws://127.0.0.1:9295/admin"
+      client = new WebSocket(url);
+
+      client.onopen = function () {
+        client.onmessage = handleMessage;
+        store.commit("setWebsocket", client);
+        console.log("WebSocket 杩炴帴鎴愬姛");
+      };
+
+      client.onclose = function () {
+        console.log("WebSocket 杩炴帴鍏抽棴");
+        setTimeout(createSocket, 10000);
+      };
+
+      client.onerror = function () {};
+    };
+
+    const changeTheme = (name) => {
+      if (theme.value != name) {
+        theme.value = name;
+      }
+      localStorage.setItem("vol3_theme", name);
+    };
+    const to = (item) => {
+      /* 2020.07.31澧炲姞鎵嬪姩鎵撳紑tabs*/
+      if (item.path == "#") {
+        window.open("https://github.com/cq-panda/Vue.NetCore");
+        return;
+      }
+      if (item.path.indexOf("http") != -1) {
+        window.open(item.path);
+        return;
+      }
+      if (typeof item == "string" || item.path == "/login") {
+        if (item == "/login" || item.path == "/login") {
+          store.commit("clearUserInfo", "");
+          window.location.href = "/";
+          return;
+        }
+        router.push({ path: item });
+        return;
+      }
+      if (item.path == "#") return;
+      open(item);
+    };
+    const open = (item, useRoute) => {
+      /* 2020.07.31澧炲姞鎵嬪姩鎵撳紑tabs*/
+      let _index = navigation.findIndex((x) => {
+        return x.path == item.path;
+      });
+      if (_index == -1) {
+        navigation.push({
+          //  orderNo: String(navigation.length),// 搴忓彿
+          id: item.id + "",
+          name: item.name || item.text || "鏃犳爣棰�",
+          path: item.path,
+          query: item.query, //2021.03.20淇鑷畾涔変簩娆℃墦寮�$tabs鏃跺弬鏁颁涪澶辩殑闂
+        });
+        //鏂版墦寮�鐨則ab绉昏嚦鏈�鍚庝竴涓�夐」
+        selectId.value = navigation.length - 1 + "";
+      } else {
+        selectId.value = _index + "";
+      }
+      if (useRoute === undefined) {
+        //闈炴爣鍑嗚彍鍗曪紝璁板綍鏈�鍚庝竴娆¤烦杞殑椤甸潰锛岀敤浜庡埛鏂�
+        setItem(item);
+        router.push(item);
+        // this.$router.push(item);
+      }
+      currentMenuId.value = item.id * 1;
+      // tab鑿滃崟缁戝畾鍙抽敭浜嬩欢
+      proxy.$nextTick(function (e) {
+        proxy.bindRightClickMenu(true);
+      });
+    };
+    const close = (path) => {
+      /* 2020.07.31澧炲姞鎵嬪姩鎵撳紑tabs*/
+      let index = navigation.findIndex((x) => {
+        return x.path == path;
+      });
+      if (index == -1) {
+        return _config.$Message.error("鏈壘鍒拌彍鍗�");
+      }
+      removeNav(index);
+    };
+    const setItem = (item) => {
+      /* 2020.07.31澧炲姞鎵嬪姩鎵撳紑tabs*/
+      localStorage.setItem(
+        window.location.origin + "_tabs",
+        JSON.stringify(item)
+      );
+    };
+    const getItem = () => {
+      /* 2020.07.31澧炲姞鎵嬪姩鎵撳紑tabs*/
+      let nav = localStorage.getItem(window.location.origin + "_tabs");
+      return nav ? JSON.parse(nav) : null;
+    };
+    const selectNav = (item) => {
+      //鍗囩骇element姝e紡鐗堜慨鏀�
+      selectId.value = item.props.name;
+      let _path = navigation[item.index].path;
+      currentMenuId.value = (
+        menuOptions.value.find((c) => {
+          return c.path == _path;
+        }) || { id: 0 }
+      ).id;
+
+      router.push({
+        path: navigation[item.index].path,
+        query: navigation[item.index].query,
+      });
+    };
+
+    const removeNav = (_index) => {
+      return new Promise(() => {
+        //鍏抽棴鐨勫綋鍓嶉」,璺宠浆鍒板墠涓�涓〉闈�
+        if (selectId.value == _index + "") {
+          console.log(navigation[_index - 1]);
+          setItem(navigation[_index - 1]);
+          router.push({
+            path: navigation[_index - 1].path,
+            //2022.06.27淇tabs浜屾鍒囨崲鍚庡弬鏁颁涪澶辩殑闂
+            query: navigation[_index - 1].query,
+          });
+          navigation.splice(_index, 1);
+          selectId.value = selectId.value - 1 + "";
+          return;
+        }
+        if (_index < selectId.value) {
+          selectId.value = selectId.value - 1 + "";
+        }
+        navigation.splice(_index, 1);
+        currentMenuId.value = (
+          menuOptions.value.find((c) => {
+            return c.path == navigation[selectId.value * 1].path;
+          }) || { id: 0 }
+        ).id;
+      });
+    };
+
+    const getSelectMenuName = (id) => {
+      return menuOptions.value.find(function (x) {
+        return x.id == id;
+      });
+    };
+    const onSelect = (treeId) => {
+      /* 2020.07.31澧炲姞鎵嬪姩鎵撳紑tabs*/
+      var item = getSelectMenuName(treeId);
+      open(item, false);
+    };
+
+    /**
+     * 鏄剧ず鍙抽敭鑿滃崟
+     * @param {*} e 浜嬩欢瀵硅薄
+     */
+    const openTabsMenu = function (e) {
+      e.preventDefault(); // 闃叉榛樿鑿滃崟寮瑰嚭
+      let tabId = e.target.id.split("-")[1] * 1;
+
+      //璁板綍褰撳墠閫変腑鐨勮彍鍗昳ndex
+      selectMenuIndex.value =
+        document.getElementById("pane-" + tabId).children[0].textContent * 1;
+      //鍙湁棣栭〉鏃朵笉鏄剧ず
+      if (navigation.length == 1) {
+        return;
+      }
+
+      //棣栭〉璁剧疆鏄剧ず鍏抽棴鍙宠竟鑿滃崟
+      if (!selectMenuIndex.value) {
+        visibleItem.all = false;
+        visibleItem.right = true;
+        visibleItem.left = false;
+        visibleItem.other = false;
+      } else {
+        visibleItem.all = true;
+        //涓嶆槸鏈�鍚庝竴涓樉绀哄叧闂彸杈硅彍鍗�
+        visibleItem.right = selectMenuIndex.value != navigation.length - 1;
+        //鍙湁涓や釜鑿滃崟鏃朵笉鏄剧ず鍏抽棴宸﹁竟
+        visibleItem.left = navigation.length != 2;
+        //鍙湁涓や釜鑿滃崟鏃朵笉鏄剧ず鍏抽棴鍏朵粬
+        visibleItem.other = navigation.length != 2;
+      }
+      contextMenuVisible.value = true;
+      // 璁剧疆鍙抽敭鑿滃崟鏄剧ず鐨勪綅缃�
+      proxy.menuLeft =
+        e.target.getBoundingClientRect().left - (isCollapse.value ? 63 : 198); //-e.target.clientWidth
+      proxy.menuTop = 36;
+    };
+
+    /**
+     * 鍏抽棴鍙抽敭鑿滃崟
+     */
+    const closeTabsMenu = () => {
+      contextMenuVisible.value = false;
+    };
+    const toHome = () => {
+      open({
+        text: navigation[0].name,
+        path: navigation[0].path,
+      });
+    };
+    /**
+     * 鍏抽棴鍏跺畠鏍囩椤�
+     * @param {*} par 鍏抽棴绫诲瀷(left,right,other)
+     */
+    const closeTabs = (value) => {
+      let _menuId = navigation[selectId.value * 1].id;
+      let currnetIndex = selectId.value * 1; // navigation.findIndex(c => { return c.id == selectId.value });
+      switch (value) {
+        case "left": {
+          // 鍒犻櫎宸︿晶tab鏍囩
+          navigation.splice(1, currnetIndex - 1); // 鍒犻櫎宸︿晶tab鏍囩
+          break;
+        }
+        case "right": {
+          // 鍒犻櫎鍙充晶tab鏍囩
+          if (selectMenuIndex.value == 0) {
+            navigation.splice(currnetIndex); // 鍒犻櫎鍙充晶tab鏍囩
+            toHome();
+          } else {
+            navigation.splice(currnetIndex + 1); // 鍒犻櫎鍙充晶tab鏍囩
+            if (selectMenuIndex.value < currnetIndex) {
+              navigation.splice(
+                selectMenuIndex.value,
+                currnetIndex - selectMenuIndex.value
+              );
+            }
+          }
+          break;
+        }
+        case "other": {
+          // 鍒犻櫎鍏朵粬鎵�鏈塼ab鏍囩
+          navigation.splice(currnetIndex + 1); // 鍒犻櫎鍙充晶tab鏍囩(杩欓噷蹇呴』鎸夌収鍙斥啋宸﹂『搴忓垹闄�)
+          navigation.splice(1, currnetIndex - 1); // 鍒犻櫎宸︿晶tab鏍囩
+          break;
+        }
+        default: {
+          //鍏抽棴鎵�鏈�
+          navigation.splice(1, navigation.length);
+          toHome();
+          break;
+        }
+      }
+      selectId.value =
+        navigation.findIndex((c) => {
+          return c.id == _menuId;
+        }) + "";
+      closeTabsMenu();
+    };
+
+    watch(
+      () => contextMenuVisible.value,
+      (newVal, oldVal) => {
+        // 鐩戣
+        if (newVal) {
+          document.body.addEventListener("click", closeTabsMenu);
+        } else {
+          document.body.removeEventListener("click", closeTabsMenu);
+        }
+      }
+    );
+
+    /**
+     * 绯荤粺鍒涘缓寮�濮�
+     */
+    const created = () => {
+      let _theme = localStorage.getItem("vol3_theme");
+      if (_theme) {
+        theme.value = _theme;
+      }
+
+      let _userInfo = store.getters.getUserInfo();
+      if (_userInfo) {
+        userName.value = _userInfo.userName;
+        userTrueName.value = _userInfo.userTrueName;
+        if (_userInfo.img) {
+          userImg.value = _config.base.getImgSrc(_userInfo.img, http.ipAddress);
+        }
+      }
+
+      createSocket("ws://127.0.0.1:9296/" + _userInfo.userName);
+
+      Object.assign(_config.$tabs, { open: open, close: close });
+
+      http.get("api/Sys_Menu/getTreeMenu", {}, true).then((data) => {
+        data.push({ id: "1", name: "棣栭〉", url: "/home" }); // 涓轰簡鑾峰彇閫変腑id浣跨敤
+        data.forEach((d) => {
+          d.path = (d.url || "").replace("/Manager", "");
+          d.to = (d.url || "").replace("/Manager", "");
+          if (!d.icon || d.icon.substring(0, 3) != "el-") {
+            d.icon = "el-icon-menu";
+          }
+        });
+        store.dispatch("setPermission", data);
+        menuOptions.value = data;
+        permissionInited.value = true;
+
+        //寮�鍚秷鎭帹閫侊紙main.js涓缃槸鍚﹀紑鍚痵ignalR锛�2022.05.05
+        if (_config.$global.signalR) {
+          MessageConfig(http, (result) => {
+            messageList.unshift(result);
+            //    console.log(result)
+          });
+        }
+
+        //褰撳墠鍒锋柊鏄笉鏄椤�
+        if (router.currentRoute.value.path != navigation[0].path) {
+          //鏌ユ壘绯荤粺鑿滃崟
+          let item = menuOptions.value.find((x) => {
+            return x.path == router.currentRoute.value.path; //this.$route.path;
+          });
+          if (item) return onSelect(item.id);
+          //鏌ユ壘椤堕儴蹇嵎杩炴帴
+          item = links.value.find((x) => {
+            return x.path == router.currentRoute.value.path; //this.$route.path;
+          });
+          //鏌ユ壘鏈�鍚庝竴娆¤烦杞殑椤甸潰
+          if (!item) {
+            item = getItem();
+          }
+          if (item) {
+            return open(item, false);
+          }
+        }
+        selectId.value = "1";
+      });
+    };
+    created();
+    return {
+      menuWidth,
+      isCollapse,
+      drawer_model,
+      theme_color,
+      errorImg,
+      userInfo,
+      userName,
+      userTrueName,
+      userImg,
+      selectId,
+      selectMenuIndex,
+      navigation,
+      links,
+      onSelect,
+      openTabsMenu,
+      selectNav,
+      getSelectMenuName,
+      removeNav,
+      logo,
+      theme,
+      menuOptions,
+      permissionInited,
+      changeTheme,
+      to,
+      toggleLeft,
+      messageModel,
+      messageList,
+      contextMenuVisible,
+      visibleItem,
+      closeTabsMenu,
+      closeTabs,
+      currentMenuId,
+    };
+  },
+  /**
+   * 鎸傝浇閽╁瓙鍑芥暟
+   */
+  mounted() {
+    let _date = showTime();
+    $indexDate = document.getElementById("index-date");
+    $indexDate.innerText = _date;
+    $interval = setInterval(function () {
+      $indexDate.innerText = showTime();
+    }, 1000);
+
+    this.bindRightClickMenu(true);
+  },
+
+  methods: {
+    /**
+     * 缁戝畾鍙抽敭浜嬩欢
+     * @param {*} enable 鏄惁鍚敤鍙抽敭浜嬩欢[true:鍚敤;false:绂佺敤;]
+     * @param {*} $event 浜嬩欢
+     */
+    bindRightClickMenu(enable) {
+      if (!enable) return;
+      let that = this;
+      // 浣跨敤鍘熺敓js 涓哄崟涓猟om缁戝畾榧犳爣鍙冲嚮浜嬩欢
+      that.$nextTick(() => {
+        let tab_top_dom = Object.assign(
+          [],
+          document.getElementsByClassName("el-tabs__item is-top")
+        );
+        tab_top_dom.forEach((item, index) => {
+          item.oncontextmenu = that.openTabsMenu;
+        });
+      });
+    },
+  },
+
+  /**
+   * 閿�姣侀挬瀛愬嚱鏁�
+   */
+  destroyed() {
+    $this = null;
+    clearInterval($interval);
+  },
+});
+const week = new Array(
+  "鏄熸湡涓�",
+  "鏄熸湡浜�",
+  "鏄熸湡涓�",
+  "鏄熸湡鍥�",
+  "鏄熸湡浜�",
+  "鏄熸湡鍏�",
+  "鏄熸湡鏃�"
+);
+function showTime() {
+  let date = new Date();
+  let year = date.getFullYear();
+  let month = date.getMonth() + 1;
+  let day = date.getDate();
+  let hour = date.getHours();
+  let minutes = date.getMinutes();
+  let second = date.getSeconds();
+
+  return (
+    year +
+    "." +
+    (month < 10 ? "0" + month : month) +
+    "." +
+    (day < 10 ? "0" + day : day) + //202.08.08淇鏃ユ湡澶╂暟灏忎簬10鏃舵坊鍔�0
+    "" +
+    " " +
+    (hour < 10 ? "0" + hour : hour) +
+    ":" +
+    (minutes < 10 ? "0" + minutes : minutes) +
+    ":" +
+    (second < 10 ? "0" + second : second) +
+    " " + //2020.08.30淇棣栭〉鏃ユ湡鏄熸湡澶╀笉鏄剧ず鐨勯棶棰�
+    (week[date.getDay() - 1] || week[6])
+  );
+}
+</script>
+
+<style lang="less" scoped>
+.vol-container .vol-path ::v-deep(.el-tabs__content) {
+  padding: 0;
+}
+
+.item {
+  margin-top: -20px;
+  margin-right: 40px;
+}
+
+.contextMenu {
+  width: 120px;
+  margin: 0;
+  border: 1px solid #eaeaea;
+  background: #fff;
+  z-index: 30000;
+  position: absolute;
+  list-style-type: none;
+  padding: 5px 0;
+  border-radius: 4px;
+  font-size: 14px;
+  color: #333;
+  box-shadow: 2px 2px 3px 0 rgb(182 182 182 / 20%);
+  i,
+  button {
+    font-size: 14px !important;
+  }
+}
+
+.contextMenu li {
+  margin: 0;
+  padding: 5px 17px;
+}
+
+.contextMenu li:hover {
+  background: #fafafa;
+  cursor: pointer;
+}
+
+.contextMenu li button {
+  color: #626060;
+  font-size: 14px;
+  letter-spacing: 1px;
+}
+
+.el-tabs.el-tabs--top.el-tabs--border-card.header-navigation
+  > .el-tabs__header
+  .el-tabs__item:last-child,
+.el-tabs--top.el-tabs--border-card.header-navigation
+  > .el-tabs__header
+  .el-tabs__item:nth-child(2) {
+  padding: 0;
+}
+
+.header-navigation ::v-deep(.el-tabs__item.is-top) {
+  padding: 0 15px;
+}
+</style>
+<style>
+.horizontal-collapse-transition {
+  transition: 0s width ease-in-out, 0s padding-left ease-in-out,
+    0s padding-right ease-in-out;
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/views/Login.vue b/WIDESEA_WMSClient/src/views/Login.vue
new file mode 100644
index 0000000..81243fa
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/Login.vue
@@ -0,0 +1,408 @@
+<template>
+  <div class="login-container">
+    <div class="project-name">WIDESEA_WMS</div>
+    <div class="login-form">
+      <div class="form-user" @keypress="loginPress">
+        <div class="login-text">
+          <div>
+            <div>娆㈣繋鐧诲綍...</div>
+            <div class="login-line"></div>
+          </div>
+          <div style="flex: 1"></div>
+        </div>
+        <div class="login-text-small">WELCOME TO LOGIN</div>
+        <div class="item">
+          <div class="input-icon el-icon-user"></div>
+          <input
+            type="text"
+            v-focus
+            v-model="userInfo.userName"
+            placeholder="璇疯緭鍏ヨ处鍙�"
+          />
+        </div>
+        <div class="item">
+          <div class="input-icon el-icon-lock"></div>
+          <input
+            type="password"
+            v-focus
+            v-model="userInfo.password"
+            placeholder="璇疯緭鍏ュ瘑鐮�"
+          />
+        </div>
+        <div class="item">
+          <div class="input-icon el-icon-mobile"></div>
+
+          <input
+            v-focus
+            type="text"
+            v-model="userInfo.verificationCode"
+            placeholder="杈撳叆楠岃瘉鐮�"
+          />
+          <div class="code" @click="getVierificationCode">
+            <img v-show="codeImgSrc != ''" :src="codeImgSrc" />
+          </div>
+        </div>
+      </div>
+      <div class="loging-btn">
+        <el-button
+          size="large"
+          :loading="loading"
+          color="#3a6cd1"
+          :dark="true"
+          @click="login"
+          long
+        >
+          <span v-if="!loading">鐧诲綍</span>
+          <span v-else>姝e湪鐧诲綍...</span>
+        </el-button>
+      </div>
+
+      <!-- 璐﹀彿淇℃伅 -->
+      <!-- <div class="account-info">
+        <p>婕旂ず璐﹀彿锛歛dmin666 &nbsp; &nbsp;瀵嗙爜:123456</p>
+        <p>鏈湴璐﹀彿锛歛dmin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;瀵嗙爜:123456</p>
+        <p><a href="https://jq.qq.com/?_wv=1027&k=Sqstuy0M" style="text-decoration: none"
+            target="_blank">QQ3缇�:743852316</a>
+          &nbsp; &nbsp;&nbsp; &nbsp;
+          <a href="http://v2.volcore.xyz/document/guide" style="text-decoration: none" target="_blank">妗嗘灦鏂囨。</a>
+        </p>
+      </div> -->
+      <!-- 閾炬帴浣嶇疆 -->
+      <!-- <div class="app-link" >
+        <a href="#" style="text-decoration: none">绉诲姩绔壂鐮�</a>
+        <a>
+          <i class="el-icon-chat-dot-round"></i> 灏忕▼搴�
+          <img src="https://app-1256993465.cos.ap-nanjing.myqcloud.com/wechat.jpg" /></a>
+        <a>
+          <i class="el-icon-apple"></i>
+          Android
+          <img src="https://app-1256993465.cos.ap-nanjing.myqcloud.com/Android.png" /></a>
+        <a>
+          <i class="el-icon-document"></i>
+          H5
+          <img src="https://app-1256993465.cos.ap-nanjing.myqcloud.com/H5.png" /></a>
+      </div> -->
+    </div>
+
+    <!-- 椤甸潰搴曢儴 -->
+    <!-- <div class="login-footer">
+      <a style="text-decoration: none" href="https://beian.miit.gov.cn/" target="_blank">浜琁CP澶�19056538鍙�-1</a>
+
+
+      <a href="https://dotnet9.com/" style="text-decoration: none" target="blank">Dotnet9</a>
+      <a href="https://space.bilibili.com/525836469" style="text-decoration: none" target="blank">NET瑙嗛鏁欑▼(寰蒋MVP-ACE褰曞埗)</a>
+      <a href="https://www.cctalk.com/m/group/90268531" style="text-decoration: none" target="blank">VOL妗嗘灦瑙嗛</a>
+      <a href="http://120.48.115.252:9990" style="text-decoration: none" target="blank">瑙嗛婕旂ず鍦板潃</a>
+    </div> -->
+
+    <img class="login-bg" src="/static/login_bg.png" />
+  </div>
+</template>
+
+
+<script >
+import {
+  defineComponent,
+  ref,
+  reactive,
+  toRefs,
+  getCurrentInstance,
+} from "vue";
+import { useRouter, useRoute } from "vue-router";
+import store from "../store/index";
+import http from "@/../src/api/http.js";
+export default defineComponent({
+  setup(props, context) {
+    store.commit("clearUserInfo", "");
+    const loading = ref(false);
+    const codeImgSrc = ref("");
+    const userInfo = reactive({
+      userName: "",
+      password: "",
+      verificationCode: "",
+      UUID: undefined,
+    });
+
+    const getVierificationCode = () => {
+      http.get("/api/User/getVierificationCode").then((x) => {
+        codeImgSrc.value = "data:image/png;base64," + x.img;
+        userInfo.UUID = x.uuid;
+      });
+    };
+    getVierificationCode();
+    
+    let appContext = getCurrentInstance().appContext;
+    let $message = appContext.config.globalProperties.$message;
+    let router = useRouter();
+
+    const login = () => {
+      if (!userInfo.userName) return $message.error("璇疯緭鍏ョ敤鎴峰悕");
+      if (!userInfo.password) return $message.error("璇疯緭鍏ュ瘑鐮�");
+      if (!userInfo.verificationCode) {
+        return $message.error("璇疯緭鍏ラ獙璇佺爜");
+      }
+      loading.value = true;
+      http.post("/api/User/login", userInfo, "姝e湪鐧诲綍....").then((result) => {
+        if (!result.status) {
+          loading.value = false;
+          getVierificationCode();
+          return $message.error(result.message);
+        }
+        $message.success("鐧诲綍鎴愬姛,姝e湪璺宠浆!");
+        store.commit("setUserInfo", result.data);
+        
+        router.push({ path: "/" });
+      });
+    };
+    const loginPress = (e) => {
+      if (e.keyCode == 13) {
+        login();
+      }
+    };
+    const openUrl = (url) => {
+      window.open(url, "_blank");
+    };
+    return {
+      loading,
+      codeImgSrc,
+      getVierificationCode,
+      login,
+      userInfo,
+      loginPress,
+      openUrl,
+    };
+  },
+  directives: {
+    focus: {
+      inserted: function (el) {
+        el.focus();
+      },
+    },
+  },
+});
+</script>
+<style lang="less" scoped>
+.login-container {
+  display: flex;
+  width: 100%;
+  height: 100%;
+  background: rgb(246, 247, 252);
+  justify-content: flex-end;
+  align-items: center;
+}
+
+.login-form {
+  align-items: center;
+  width: 50%;
+  display: flex;
+  flex-direction: column;
+  // margin-right: 150px;
+  z-index: 999;
+
+  .form-user {
+    // margin: 25px 0;
+
+    .item {
+      border-radius: 5px;
+      border: 1px solid #ececec;
+      display: flex;
+      margin-bottom: 30px;
+      background: #ffff;
+      height: 45px;
+      padding-left: 20px;
+      display: flex;
+
+      .code {
+        position: relative;
+        cursor: pointer;
+        width: 74px;
+        padding: 5px 10px 0 0;
+      }
+
+      .input-icon {
+        line-height: 45px;
+        color: #7a7a7a;
+        padding-right: 20px;
+      }
+    }
+  }
+
+  input:-webkit-autofill {
+    box-shadow: 0 0 0px 1000px white inset;
+    -webkit-box-shadow: 0 0 0px 1000px white inset !important;
+  }
+
+  input {
+    background: white;
+    display: block;
+    box-sizing: border-box;
+    width: 100%;
+    min-width: 0;
+    margin: 0;
+    padding: 0;
+    color: #323233;
+    line-height: inherit;
+    text-align: left;
+    border: 0;
+    outline: none;
+    font-size: 16px;
+    line-height: 20px;
+  }
+}
+
+.form-user,
+.loging-btn {
+  width: 400px;
+}
+
+.loging-btn {
+  box-shadow: 2px 4px 11px #a4c2ff;
+  margin-top: 10px;
+
+  button {
+    padding: 21px;
+    font-size: 14px !important;
+    width: 100%;
+  }
+}
+
+.login-text {
+  font-weight: bolder;
+  font-size: 20px;
+  letter-spacing: 2px;
+
+  position: relative;
+  display: flex;
+
+  .login-line {
+    z-index: -1;
+    padding: 5px;
+    position: relative;
+    top: -8px;
+    width: 100%;
+    background-image: linear-gradient(to right, #6598ff, white);
+  }
+}
+
+.login-text-small {
+  margin-bottom: 20px;
+  font-size: 13px;
+  color: #7d7c7c;
+}
+
+.login-bg {
+  left: 0;
+  position: absolute;
+  height: 100%;
+  width: 50%;
+  z-index: 0;
+}
+
+.project-name {
+  position: absolute;
+  top: 40px;
+  left: 40px;
+  z-index: 9999;
+  font-weight: bolder;
+  background-image: linear-gradient(to right, #1850c1, #9c009c);
+  -webkit-background-clip: text;
+  color: transparent;
+  font-size: 25px;
+}
+</style>
+<style lang="less" scoped>
+.app-link {
+  // font-weight: bolder;
+  text-align: center;
+  padding-top: 5px;
+  font-size: 12px;
+  width: 400px;
+  padding-left: 40px;
+  display: flex;
+
+  a {
+    flex: 1;
+    position: relative;
+    cursor: pointer;
+    width: 70px;
+    color: #666666;
+    margin: 2px 10px 0 0;
+  }
+
+  img {
+    display: none;
+  }
+
+  a:hover {
+    color: #0545f6 !important;
+
+    img {
+      display: block;
+      position: absolute;
+      z-index: 999999999;
+      top: -130px;
+      width: 120px;
+      left: -22px;
+
+      border: 1px solid #b1b1b1;
+    }
+  }
+}
+
+.login-footer {
+  position: absolute;
+  width: 50%;
+  bottom: 0.5rem;
+  font-size: 12px;
+  text-align: center;
+  padding-bottom: 10px;
+  color: #4f4f4f;
+
+  a {
+    margin-right: 10px;
+    font-size: 12px;
+    color: #4f4f4f;
+  }
+
+  div {
+    margin-bottom: 5px;
+  }
+
+  a:hover {
+    cursor: pointer;
+    color: #0540e3 !important;
+  }
+}
+
+.account-info {
+  font-size: 12px;
+  color: #636363;
+  margin-top: 15px;
+}
+</style>
+
+<style lang="less" scoped>
+@media screen and (max-width: 700px) {
+  .login-bg,
+  .account-info,
+  .app-link,
+  .login-footer,
+  .project-name {
+    display: none;
+  }
+
+  .login-container {
+    padding: 2rem;
+    justify-content: center;
+  }
+
+  .login-form {
+    width: 100%;
+  }
+
+  .form-user,
+  .loging-btn {
+    width: 100%;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/basic/customerInfo.vue b/WIDESEA_WMSClient/src/views/basic/customerInfo.vue
new file mode 100644
index 0000000..7ee104e
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/basic/customerInfo.vue
@@ -0,0 +1,71 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_CustomerInfo.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/basic/customerInfo.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'id',
+                footer: "Foots",
+                cnName: '瀹㈡埛淇℃伅',
+                name: 'customerInfo',
+                url: "/CustomerInfo/",
+                sortName: "id"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({});
+            const searchFormOptions = ref([
+               [
+                    {title:"瀹㈡埛缂栫爜", field:"code", type:"like"},
+                    {title:"瀹㈡埛鍚嶇О", field:"name", type:"like"},
+                    {title:"瀹㈡埛鍏ㄧО", field : "nickName", type:"like"},
+                    {title:"鐘舵��", field:"state",type:"select",dataKey:"",data:[]}
+               ]
+            ]);
+            const columns = ref([{field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'code',title:'瀹㈡埛缂栫爜',type:'string',width:110,align:'left',sort:true},
+                       {field:'name',title:'瀹㈡埛鍚嶇О',type:'string',width:110,align:'left'},
+                       {field:'nickName',title:'瀹㈡埛鍏ㄧО',type:'string',width:120,align:'left'},
+                       {field:'state',title:'鐘舵��',type:'bool',width:110,require:true,align:'left',bind: { key: "status", data: [] }},
+                       {field:'creater',title:'鍒涘缓鑰�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                table: "#detailTable",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/basic/locationInfo.vue b/WIDESEA_WMSClient/src/views/basic/locationInfo.vue
new file mode 100644
index 0000000..b6a588f
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/basic/locationInfo.vue
@@ -0,0 +1,217 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/basic/locationInfo.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "璐т綅淇℃伅",
+      name: "locationInfo",
+      url: "/LocationInfo/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      locationStatus: "",
+    });
+    const editFormOptions = ref([
+      [
+        { title: "璐т綅鐘舵��", field: "locationStatus" ,type: "select",dataKey: "locationStatusEnum",data: [],},
+      ],
+    ]);
+    const searchFormFields = ref({
+      locationCode: "",
+      roadwayNo: "",
+      locationType: "",
+      enableStatus: "",
+      locationStatus: "",
+      row: "",
+      column: "",
+      layer: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "璐т綅缂栧彿", field: "locationCode", type: "like" },
+        { title: "宸烽亾缂栧彿", field: "roadwayNo",type:"like" },
+        { title: "璐т綅绫诲瀷", field: "locationType",type: "select",dataKey: "locationTypeEnum",data: [], },
+        { title: "绂佺敤鐘舵��", field: "enableStatus" ,type: "select",dataKey: "enableStatusEnum",data: [],},
+      ],
+      [
+        { title: "璐т綅鐘舵��", field: "locationStatus" ,type: "selectList",dataKey: "locationStatusEnum",data: [],},
+        { title: "琛�", field: "row" ,type: "int"},
+        { title: "鍒�", field: "column" ,type: "int"},
+        { title: "灞�", field: "layer" ,type: "int"}
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 100,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      // {
+      //   field: "areaId",
+      //   title: "鍖哄煙涓婚敭",
+      //   type: "string",
+      //   width: 90,
+      //   align: "left",
+      //   bind: {key: "areainfo",data: []}
+      // },
+      {
+        field: "locationCode",
+        title: "璐т綅缂栧彿",
+        type: "string",
+        width: 200,
+        align: "left",
+      },
+      {
+        field: "locationName",
+        title: "璐т綅鍚嶇О",
+        type: "string",
+        width: 280,
+        align: "left",
+      },
+      {
+        field: "roadwayNo",
+        title: "宸烽亾缂栧彿",
+        type: "decimal",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "row",
+        title: "璐т綅琛�",
+        type: "string",
+        width: 90,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "column",
+        title: "璐т綅鍒�",
+        type: "int",
+        width: 120,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "layer",
+        title: "璐т綅灞�",
+        type: "string",
+        width: 200,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "depth",
+        title: "璐т綅娣卞害",
+        type: "string",
+        width: 180,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "locationType",
+        title: "璐т綅绫诲瀷",
+        type: "string",
+        width: 120,
+        align: "left",
+        bind:{key: "locationTypeEnum", data: []}
+      },
+      {
+        field: "locationStatus",
+        title: "璐т綅鐘舵��",
+        type: "string",
+        width: 120,
+        align: "left",
+        bind: { key: "locationStatusEnum", data: [] },
+      },
+      {
+        field: "enableStatus",
+        title: "绂佺敤鐘舵��",
+        type: "string",
+        width: 80,
+        align: "left",
+        bind: { key: "enableStatusEnum", data: [] },
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        sort: true,
+        hidden: true,
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+        hidden: true
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/basic/materielCodeInfo.vue b/WIDESEA_WMSClient/src/views/basic/materielCodeInfo.vue
new file mode 100644
index 0000000..bb374b8
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/basic/materielCodeInfo.vue
@@ -0,0 +1,229 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+      <script>
+import extend from "@/extension/basic/materielCodeInfo.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "鐗╂枡鐮佷俊鎭�",
+      name: "MaterielCodeInfo",
+      url: "/MaterielCodeInfo/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      lotNo: "",
+      warehouseId: "",
+      purchaseOrderNo: "",
+      materielCode: "",
+      productionDate: "",
+      effectiveDate: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "浠撳簱",
+          field: "warehouseId",
+          type: "select",
+          dataKey: "areainfo",
+          data: [],
+          required: true,
+        },
+      ],
+      [
+        {
+          title: "鐗╂枡缂栫爜",
+          field: "materielCode",
+          type: "select",
+          data: [],
+          required: true,
+        },
+      ],
+      [
+        {
+          title: "閲囪喘鍗曞彿",
+          field: "purchaseOrderNo",
+          type: "select",
+          data: [],
+          required: true,
+        },
+      ],
+      [
+        {
+          title: "鎵规鍙�",
+          field: "lotNo",
+          required: true,
+        },
+      ],
+      [
+        {
+          title: "鏁伴噺",
+          field: "quantity",
+          required: true,
+        },
+      ],
+      [
+        {
+          title: "鐢熶骇鏃ユ湡",
+          field: "productionDate",
+          // type: "date",
+          required: true,
+        },
+      ],
+      [
+        {
+          title: "鏈夋晥鏈�",
+          field: "effectiveDate",
+          // type: "date",
+          required: true,
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      palletCode: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "閲囪喘鍗曞彿", field: "purchaseOrderNo", type: "like" },
+        { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "materielCode",
+        title: "鐗╂枡缂栧彿",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "materielCode",
+        title: "鐗╂枡鍚嶇О",
+        type: "string",
+        width: 100,
+        align: "left",
+        bind: { key: "MaterielNames", data: [] },
+      },
+      {
+        field: "warehouseId",
+        title: "浠撳簱",
+        type: "string",
+        width: 90,
+        align: "left",
+        bind: { key: "areainfo", data: [] },
+      },
+      {
+        field: "purchaseOrderNo",
+        title: "閲囪喘鍗曞彿",
+        type: "string",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "lotNo",
+        title: "鎵规鍙�",
+        type: "string",
+        width: 200,
+        align: "left",
+      },
+      {
+        field: "quantity",
+        title: "鏁伴噺",
+        type: "int",
+        width: 80,
+        align: "left",
+      },
+      {
+        field: "productionDate",
+        title: "鐢熶骇鏃ユ湡",
+        type: "date",
+        width: 100,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "effectiveDate",
+        title: "鏈夋晥鏈�",
+        type: "date",
+        width: 100,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        hidden: true,
+        sort: true,
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+      
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/basic/materielInfo.vue b/WIDESEA_WMSClient/src/views/basic/materielInfo.vue
new file mode 100644
index 0000000..aaacaa0
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/basic/materielInfo.vue
@@ -0,0 +1,226 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/basic/materielInfo.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "鐗╂枡淇℃伅",
+      name: "materielInfo",
+      url: "/MaterielInfo/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      warehouseId: "",
+      materielCode: "",
+      materielName: "",
+      materielDes: "",
+      isMixBatch: "",
+      isMixMateriel: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "浠撳簱",
+          required: true,
+          field: "warehouseId",
+          type: "string",
+        },
+        {
+          title: "鐗╂枡缂栧彿",
+          required: true,
+          field: "materielCode",
+          type: "string",
+        },
+        {
+          title: "鐗╂枡鍚嶇О",
+          required: true,
+          field: "materielName",
+          type: "string",
+        },
+        {
+          title: "璁¢噺鍗曚綅",
+          required: true,
+          field: "unit",
+          type: "string",
+        },
+      ],
+      [
+        
+        {
+          title: "鐗╂枡鎻忚堪",
+          field: "materielDes",
+          type: "textarea",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      materielCode: "",
+      materielName: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
+        { title: "鐗╂枡鍚嶇О", field: "materielName", type: "like" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "warehouseId",
+        title: "浠撳簱",
+        type: "string",
+        width: 100,
+        align: "left",
+        bind: { key: "warehouses", data: [] },
+      },
+      {
+        field: "materielCode",
+        title: "鐗╂枡缂栧彿",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "materielName",
+        title: "鐗╂枡鍚嶇О",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "materielDes",
+        title: "鐗╂枡鎻忚堪",
+        type: "decimal",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "cotainerType",
+        title: "瀹瑰櫒绫诲瀷",
+        type: "string",
+        width: 90,
+        align: "left",
+        hidden:true
+      },
+      {
+        field: "packspes",
+        title: "鍖呰瑙勬牸",
+        type: "int",
+        width: 120,
+        align: "left",
+        hidden:true
+      },
+      {
+        field: "attribute",
+        title: "鐗╂枡灞炴��",
+        type: "string",
+        width: 200,
+        align: "left",
+        hidden:true
+      },
+      {
+        field: "unit",
+        title: "璁¢噺鍗曚綅",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+      {
+        field: "validity",
+        title: "鏈夋晥鏈�",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "safetyStock",
+        title: "瀹夊叏搴撳瓨",
+        type: "string",
+        width: 120,
+        align: "left",
+        hidden:true
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+        hidden:true
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        hidden:true
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/basic/palletCodeInfo.vue b/WIDESEA_WMSClient/src/views/basic/palletCodeInfo.vue
new file mode 100644
index 0000000..bcdf2bc
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/basic/palletCodeInfo.vue
@@ -0,0 +1,159 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+      <script>
+import extend from "@/extension/basic/palletCodeInfo.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "鎵樼洏淇℃伅",
+      name: "palletCodeInfo",
+      url: "/PalletCodeInfo/",
+      sortName: "id",
+    });
+    const editFormFields = ref({});
+    const editFormOptions = ref([
+      [
+        {
+          title: "浠撳簱",
+          field: "warehouseId",
+          type: "select",
+          dataKey: "warehouses",
+          data: [],
+          required: true,
+        },
+        {
+          title: "鏁伴噺",
+          field: "count",
+          type: "int",
+          required: true,
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      palletCode: "",
+    });
+    const searchFormOptions = ref([
+      [{ title: "鎵樼洏缂栧彿", field: "palletCode", type: "like" }],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "warehouseId",
+        title: "浠撳簱涓婚敭",
+        type: "string",
+        width: 90,
+        align: "left",
+        bind: { key: "warehouses", data: [] },
+      },
+      {
+        field: "palletType",
+        title: "鎵樼洏绫诲瀷",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "palletCode",
+        title: "鎵樼洏缂栧彿",
+        type: "decimal",
+        width: 200,
+        align: "left",
+      },
+      {
+        field: "status",
+        title: "鎵撳嵃鐘舵��",
+        type: "string",
+        width: 90,
+        align: "left",
+        bind: { key: "printStatus", data: [] },
+      },
+      {
+        field: "size",
+        title: "灏哄",
+        type: "int",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "modifier",
+        title: "鏈�鍚庢墦鍗颁汉鍛�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "鏈�鍚庢墦鍗版椂闂�",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+      
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/basic/supplierInfo.vue b/WIDESEA_WMSClient/src/views/basic/supplierInfo.vue
new file mode 100644
index 0000000..402798a
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/basic/supplierInfo.vue
@@ -0,0 +1,82 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_SupplierInfo.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/basic/supplierInfo.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'id',
+                footer: "Foots",
+                cnName: '渚涘簲鍟嗕俊鎭�',
+                name: 'supplierInfo',
+                url: "/SupplierInfo/",
+                sortName: "id"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([
+                 
+            ]);
+            const searchFormFields = ref({});
+            const searchFormOptions = ref([
+               [
+                 {title:"渚涘簲鍟嗙紪鐮�", field:"supplierCode", type:"like"},
+                 {title:"渚涘簲鍟嗗悕绉�", field:"supplierName", type:"like"},
+                 {title:"渚涘簲鍟嗙畝绉�", field:"supplierShortName", type:"like"}
+                ],
+                [
+                 {title:"搴撳瓨缁勭粐", field:"invOrgId", type:"like"},
+                 {title:"鐘舵��", field:"status",type:"select",dataKey:"status",data:[]},
+                ]
+            ]);
+            const columns = ref([{field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'supplierCode',title:'渚涘簲鍟嗙紪鐮�',type:'string',width:110,align:'left',sort:true},
+                       {field:'supplierName',title:'渚涘簲鍟嗗悕绉�',type:'string',width:180,align:'left'},
+                       {field:'supplierShortName',title:'渚涘簲鍟嗙畝绉�',type:'string',width:110,align:'left'},
+                       {field:'contacts',title:'鑱旂郴浜�',type:'string',width:110,align:'left'},
+                       {field:'contactNumber',title:'鑱旂郴鐢佃瘽',type:'string',width:110,align:'left'},
+                       {field:'contactAddress',title:'鑱旂郴鍦板潃',type:'string',width:180,align:'left'},
+                       {field:'email',title:'鐢靛瓙閭',type:'string',width:110,align:'left'},
+                       {field:'description',title:'鎻忚堪',type:'string',width:180,align:'left',hidden:true},
+                       {field:'invOrgId',title:'搴撳瓨缁勭粐',type:'string',width:110,align:'left'},
+                       {field:'status',title:'鐘舵��',type:'int',width:110,require:true,align:'left',bind: { key: "status", data: [] },},
+                       {field:'creater',title:'鍒涘缓鑰�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left',hidden:true},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true,hidden:true}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                table: "#detailTable",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/basic/userInfo.vue b/WIDESEA_WMSClient/src/views/basic/userInfo.vue
new file mode 100644
index 0000000..5aa50c2
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/basic/userInfo.vue
@@ -0,0 +1,78 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_UserInfo.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/basic/userInfo.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'id',
+                footer: "Foots",
+                cnName: '鍛樺伐淇℃伅',
+                name: 'userInfo',
+                url: "/UserInfo/",
+                sortName: "id"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({});
+            const searchFormOptions = ref([
+                [
+                    {title:"鍛樺伐鍙�", field:"code", type:"like"},
+                    {title:"閮ㄩ棬缂栫爜", field:"deptNo", type:"like"},
+                    {title:"閮ㄩ棬鍚嶇О", field : "name", type:"like"}  
+                ],
+                [
+                    {title:"鐘舵��", field:"state",type:"select",dataKey:"",data:[]},
+                    {title:"搴撳瓨缁勭粐", field:"invOrgId", type:"like"},
+                    {title:"绫诲瀷", field:"type", type:"select", dataKey:"", data:[]},
+                ]
+            ]);
+            const columns = ref([{field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'code',title:'鍛樺伐鍙�',type:'string',width:110,align:'left',sort:true},
+                       {field:'deptNo',title:'閮ㄩ棬缂栫爜',type:'string',width:110,align:'left'},
+                       {field:'deptName',title:'閮ㄩ棬鍚嶇О',type:'string',width:110,align:'left'},
+                       {field:'name',title:'鍛樺伐鍚嶇О',type:'string',width:110,align:'left'},
+                       {field:'state',title:'鐘舵��',type:'int',width:110,require:true,align:'left',bind: { key: "status", data: [] }},
+                       {field:'invOrgId',title:'搴撳瓨缁勭粐',type:'string',width:110,align:'left'},
+                       {field:'type',title:'绫诲瀷',type:'int',width:110,require:true,align:'left',hidden:true},
+                       {field:'creater',title:'鍒涘缓鑰�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                table: "#detailTable",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/basic/warehouse.vue b/WIDESEA_WMSClient/src/views/basic/warehouse.vue
new file mode 100644
index 0000000..83c3c29
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/basic/warehouse.vue
@@ -0,0 +1,182 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/basic/warehouse.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "浠撳簱淇℃伅",
+      name: "warehouse",
+      url: "/Warehouse/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      warehouseCode: "",
+      warehouseName: "",
+      warehouseType: "",
+      warehouseStatus: "",
+      warehouseDes: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "浠撳簱缂栧彿",
+          required: true,
+          field: "warehouseCode",
+          type: "string",
+        },
+        {
+          title: "浠撳簱鍚嶇О",
+          required: true,
+          field: "warehouseName",
+          type: "string",
+        },
+        {
+          title: "浠撳簱鎻忚堪",
+          field: "warehouseDes",
+          type: "textarea",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      warehouseCode: "",
+      warehouseName: "",
+      warehouseType: "",
+      warehouseStatus: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "浠撳簱缂栧彿", field: "warehouseCode", type: "like" },
+        { title: "浠撳簱鍚嶇О", field: "warehouseName", type: "like" },
+        { title: "浠撳簱绫诲瀷", field: "warehouseType", type: "like" },
+        {
+          title: "浠撳簱鐘舵��",
+          field: "warehouseStatus",
+          type: "select",
+          dataKey: "enableEnum",
+          data: [],
+        },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "warehouseCode",
+        title: "浠撳簱缂栧彿",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "warehouseName",
+        title: "浠撳簱鍚嶇О",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "warehouseType",
+        title: "浠撳簱绫诲瀷",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "warehouseStatus",
+        title: "浠撳簱鐘舵��",
+        type: "decimal",
+        width: 90,
+        align: "left",
+        bind: { key: "enableEnum", data: [] },
+      },
+      {
+        field: "warehouseDes",
+        title: "浠撳簱鎻忚堪",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+        hidden: true
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        hidden: true
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+        hidden: true
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/charts/bigdata.vue b/WIDESEA_WMSClient/src/views/charts/bigdata.vue
new file mode 100644
index 0000000..e75b6f9
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/charts/bigdata.vue
@@ -0,0 +1,258 @@
+
+<template>
+  <div id="big-data-container" class="big-data-container">
+    <div class="head">
+      <h1>澶у睆鏁版嵁缁熻鍒嗘瀽鏄剧ず</h1>
+    </div>
+    <div class="data-container">
+      <div class="data-left">
+        <div class="data-left-item">
+          <div class="title">鍟嗗搧閿�閲忓垎绫�</div>
+          <div id="chart-vleft-1" style="height: calc(100% - 30px)"></div>
+          <div class="data-foot-line"></div>
+        </div>
+        <div class="data-left-item">
+          <div class="title">鏈湀鍟嗗搧閿�閲�</div>
+          <div id="chart-vleft-3" style="height: calc(100% - 30px)"></div>
+
+          <div class="data-foot-line"></div>
+        </div>
+        <div class="data-left-item">
+          <div class="title">7鏃ヨ鍗曢攢閲�</div>
+          <div id="chart-vleft-2" style="height: calc(100% - 30px)"></div>
+          <div class="data-foot-line"></div>
+        </div>
+      </div>
+      <div class="data-center">
+        <!-- <div class="title">涓棿浣嶇疆</div> -->
+        <div class="center-top-num">
+          <div class="item">
+            <div class="text">绱閿�閲�</div>
+            <div class="num">220,000</div>
+          </div>
+          <div class="item">
+            <div class="text">绱閿�鍞噾棰�</div>
+            <div class="num">58,000,000</div>
+          </div>
+          <div class="item">
+            <div class="text">璐拱鐢ㄦ埛浜烘暟</div>
+            <div class="num">15,000</div>
+          </div>
+          <div class="data-foot-line"></div>
+        </div>
+        <div
+          class="center-top"
+          style="height: 260px; padding-top: 25px; overflow: hidden"
+        >
+          <!-- <div class="title">鐢ㄦ埛娲昏穬淇℃伅-1</div> -->
+          <div id="chart-vgauge-1" style="height: 400px"></div>
+          <!-- <iview-circle :size="200" style="padding: 8px 0;"></iview-circle> -->
+          <div class="data-foot-line"></div>
+        </div>
+        <div class="title">璁㈠崟閿�鍞粺璁�</div>
+        <div id="chart-vcenter" style="height:400px;" class="chart-vcenter"></div>
+      </div>
+      <div class="data-right">
+        <div class="data-right-item">
+          <div class="title">閿�鍞儏鍐佃蛋鍔�</div>
+          <div id="chart-vright-1" style="height: calc(100% - 30px)"></div>
+          <div class="data-foot-line"></div>
+        </div>
+        <div class="data-right-item" style="height: 220px; padding-top: 25px">
+          <!-- <div class="title">鐢ㄦ埛娲昏穬淇℃伅</div> -->
+          <!-- <iview-circle></iview-circle> -->
+          <div id="chart-vgauge-2" style="height: 300px"></div>
+          <div class="data-foot-line"></div>
+        </div>
+        <div class="data-right-item right-3">
+          <div class="title">鍟嗗搧閿�鍞帓琛�</div>
+          <div id="chart-vright-3" class="right-item">
+            <div class="item">
+              <div class="top">鎺掑悕</div>
+              <div class="pro-name">鍟嗗搧鍚嶇О</div>
+              <div class="num">閿�閲�</div>
+              <div class="num">閿�鍞噾棰�</div>
+            </div>
+            <div class="item">
+              <div class="top top-1">
+                <span>1</span>
+              </div>
+              <div class="pro-name">鍗″笣涔愰硠楸�</div>
+              <div class="num">2,200</div>
+              <div class="num">360,00</div>
+            </div>
+            <div class="item">
+              <div class="top top-2">
+                <span>2</span>
+              </div>
+              <div class="pro-name">鏄ュ鐢稵鎭�</div>
+              <div class="num">1,700</div>
+              <div class="num">24,500</div>
+            </div>
+            <div class="item">
+              <div class="top top-3">
+                <span>3</span>
+              </div>
+              <div class="pro-name">鐢峰コ鍚屾浼戦棽闉�</div>
+              <div class="num">1,120</div>
+              <div class="num">12,700</div>
+            </div>
+          </div>
+          <div class="boxfoot"></div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+var echarts = require("echarts");
+let $chartLeft1,
+  $chartLeft2,
+  $chartLeft3,
+  $chartCenter,
+  $chartRight1,
+  $chartGauge1,
+  $chartGauge2;
+import {
+  chartLeft1,
+  chartLeft2,
+  chartLeft3,
+  chartRight1,
+  gauge,
+} from "./bigdata/chart-options";
+// import IviewCircle from "./bigdata/IviewCircle";
+import "./bigdata/layout.less";
+export default {
+  components: {
+    // "iview-circle": IviewCircle
+  },
+  data() {
+    return {};
+  },
+  created() {
+    console.log("chart");
+  },
+  mounted() {
+    if ($chartLeft1) {
+      $chartLeft1.dispose();
+      $chartLeft2.dispose();
+      $chartLeft3.dispose();
+      $chartCenter.dispose();
+      $chartRight1.dispose();
+      $chartGauge1.dispose();
+      $chartGauge2.dispose();
+    }
+    $chartLeft1 = echarts.init(document.getElementById("chart-vleft-1"));
+    $chartLeft1.setOption(chartLeft1, true);
+
+    $chartLeft2 = echarts.init(document.getElementById("chart-vleft-2"));
+    $chartLeft2.setOption(chartLeft2, true);
+
+    $chartLeft3 = echarts.init(document.getElementById("chart-vleft-3"));
+    $chartLeft3.setOption(chartLeft3, true);
+
+    $chartCenter = echarts.init(document.getElementById("chart-vcenter"));
+    $chartCenter.setOption(chartRight1, true);
+
+    $chartRight1 = echarts.init(document.getElementById("chart-vright-1"));
+    $chartRight1.setOption(chartRight1, true);
+
+    $chartGauge1 = echarts.init(document.getElementById("chart-vgauge-1"));
+    $chartGauge1.setOption(gauge, true);
+
+    $chartGauge2 = echarts.init(document.getElementById("chart-vgauge-2"));
+    $chartGauge2.setOption(gauge);
+  },
+  destroyed() {
+    $chartLeft1 = null;
+    $chartLeft2 = null;
+    $chartLeft3 = null;
+    $chartCenter = null;
+    $chartRight1 = null;
+    $chartGauge1 = null;
+    $chartGauge2 = null;
+  },
+};
+</script>
+<style scoped>
+/* .chart-center {
+  display: flex;
+  border: 1px solid #0000ff;
+  height: 200px;
+  flex-direction: column;
+  margin-top: 20px;
+}
+.chart-center .item {
+  text-align: center;
+  border: 1px solid #00c1b3;
+  flex: 1;
+} */
+.right-3 {
+  display: flex;
+  flex-direction: column;
+  /* margin-top: 20px; */
+}
+
+.right-3 .right-item {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+}
+
+.right-3 .item {
+  text-align: left;
+  border-bottom: 1px solid #549069;
+  flex: 1;
+  display: flex;
+  padding: 5px 10px;
+  margin: 0 10px;
+  font-size: 14px;
+  line-height: 30px;
+}
+
+.right-3 .item:last-child {
+  border-bottom: 0;
+}
+
+.right-3 .item > div {
+  color: white;
+}
+
+.right-3 .top {
+  width: 60px;
+  position: relative;
+}
+
+.right-3 .top span {
+  position: absolute;
+  width: 20px;
+  line-height: 20px;
+  top: 5px;
+  text-align: center;
+  border-radius: 5px;
+}
+
+.right-3 .top-1 span {
+  background: #e80d0d;
+}
+
+.right-3 .top-2 span {
+  background: #00c935;
+}
+
+.right-3 .top-3 span {
+  background: #0083f4;
+}
+
+.right-3 .num {
+  width: 88px;
+}
+
+.right-3 .pro-name {
+  flex: 1;
+}
+</style>
+
+
+
+
diff --git a/WIDESEA_WMSClient/src/views/charts/bigdata/IviewCircle.vue b/WIDESEA_WMSClient/src/views/charts/bigdata/IviewCircle.vue
new file mode 100644
index 0000000..c166d91
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/charts/bigdata/IviewCircle.vue
@@ -0,0 +1,102 @@
+<template>
+  <div class="demo-Circle">
+    <div style>
+      <i-circle
+        :size="size"
+        :trail-width="4"
+        :stroke-width="5"
+        :percent="75"
+        stroke-linecap="square"
+        stroke-color="#43a3fb"
+      >
+        <div class="demo-Circle-custom">
+          <h1>1500</h1>
+          <p>鏄ㄦ棩娲昏穬鐢ㄦ埛鏁伴噺</p>
+          <span>
+            鍗犳瘮
+            <i>{{1500/20000}}%</i>
+          </span>
+        </div>
+      </i-circle>
+    </div>
+    <div style>
+      <i-circle
+        :size="size"
+        :trail-width="4"
+        :stroke-width="5"
+        :percent="75"
+        stroke-linecap="square"
+        stroke-color="#43a3fb"
+      >
+        <div class="demo-Circle-custom">
+          <h1>12000</h1>
+          <p>涓婃湀娲昏穬鐢ㄦ埛鏁伴噺</p>
+          <span>
+            鍗犳瘮
+            <i>{{12000/150000}}%</i>
+          </span>
+        </div>
+      </i-circle>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  props:{
+    size:{
+      type:Number,
+      default:150
+    }
+  }
+}
+</script>
+<style scoped>
+.demo-Circle {
+  display: flex;
+}
+.demo-Circle > div {
+  flex: 1;
+  text-align: center;
+}
+.demo-Circle > div:first-child{
+  padding-left:10%;
+}
+
+.demo-Circle > div:last-child{
+  padding-right:10%;
+}
+</style>
+<style lang="less" scoped>
+.demo-Circle-custom {
+  & h1 {
+    color:#ffffff;
+    font-size: 28px;
+    font-weight: normal;
+  }
+  & p {
+    color: #ece8e8;
+    font-size: 14px;
+    margin: 10px 0 15px;
+  }
+  & span {
+    display: block;
+    padding-top: 15px;
+    color: wheat;
+    font-size: 14px;
+    &:before {
+      content: "";
+      display: block;
+      width: 50px;
+      height: 1px;
+      margin: 0 auto;
+      background: #e0e3e6;
+      position: relative;
+      top: -15px;
+    }
+  }
+  & span i {
+    font-style: normal;
+    color: white;
+  }
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/views/charts/bigdata/chart-options.js b/WIDESEA_WMSClient/src/views/charts/bigdata/chart-options.js
new file mode 100644
index 0000000..fe30d3e
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/charts/bigdata/chart-options.js
@@ -0,0 +1,551 @@
+var echarts = require("echarts");
+let chartLeft1 = {
+  tooltip: {
+    trigger: "axis",
+    axisPointer: {
+      type: "shadow"
+    }
+  },
+  grid: {
+    left: "0%",
+    top: "10px",
+    right: "0%",
+    bottom: "4%",
+    containLabel: true
+  },
+  xAxis: [
+    {
+      type: "category",
+      data: [
+        "鍟嗚秴闂ㄥ簵",
+        "鏁欒偛鍩硅",
+        "鎴垮湴浜�",
+        "鐢熸椿鏈嶅姟",
+        "姹借溅閿�鍞�",
+        "鏃呮父閰掑簵",
+        "浜旈噾寤烘潗"
+      ],
+      axisLine: {
+        show: true,
+        lineStyle: {
+          color: "rgba(255,255,255,.1)",
+          width: 1,
+          type: "solid"
+        }
+      },
+
+      axisTick: {
+        show: false
+      },
+      axisLabel: {
+        interval: 0,
+        show: true,
+        splitNumber: 15,
+        textStyle: {
+          color: "rgba(255,255,255,.6)",
+          fontSize: "12"
+        }
+      }
+    }
+  ],
+  yAxis: [
+    {
+      type: "value",
+      axisLabel: {
+        show: true,
+        textStyle: {
+          color: "rgba(255,255,255,.6)",
+          fontSize: "12"
+        }
+      },
+      axisTick: {
+        show: false
+      },
+      axisLine: {
+        show: true,
+        lineStyle: {
+          color: "rgba(255,255,255,.1	)",
+          width: 1,
+          type: "solid"
+        }
+      },
+      splitLine: {
+        lineStyle: {
+          color: "rgba(255,255,255,.1)"
+        }
+      }
+    }
+  ],
+  series: [
+    {
+      type: "bar",
+      data: [200, 600, 300, 900, 1500, 1200, 600],
+      barWidth: "35%",
+      itemStyle: {
+        normal: {
+          color: "#2f89cf",
+          opacity: 1,
+          barBorderRadius: 5
+        }
+      }
+    }
+  ]
+};
+
+
+let chartLeft2 = {
+  tooltip: {
+    trigger: "axis",
+    axisPointer: {
+      type: "shadow"
+    }
+  },
+  grid: {
+    left: "0%",
+    top: "10px",
+    right: "0%",
+    bottom: "4%",
+    containLabel: true
+  },
+  xAxis: [
+    {
+      type: "category",
+      data: [
+        "07.01",
+        "07.02",
+        "07.03",
+        "07.04",
+        "07.05",
+        "07.06",
+      ],
+      axisLine: {
+        show: true,
+        lineStyle: {
+          color: "rgba(255,255,255,.1)",
+          width: 1,
+          type: "solid"
+        }
+      },
+      axisTick: {
+        show: false
+      },
+      axisLabel: {
+        interval: 0,
+        // rotate:50,
+        show: true,
+        splitNumber: 15,
+        textStyle: {
+          color: "rgba(255,255,255,.6)",
+          fontSize: "12"
+        }
+      }
+    }
+  ],
+  yAxis: [
+    {
+      type: "value",
+      axisLabel: {
+        show: true,
+        textStyle: {
+          color: "rgba(255,255,255,.6)",
+          fontSize: "12"
+        }
+      },
+      axisTick: {
+        show: false
+      },
+      axisLine: {
+        show: true,
+        lineStyle: {
+          color: "rgba(255,255,255,.1	)",
+          width: 1,
+          type: "solid"
+        }
+      },
+      splitLine: {
+        lineStyle: {
+          color: "rgba(255,255,255,.1)"
+        }
+      }
+    },
+    {
+      type: "value",
+      axisLabel: {
+        show: true,
+        textStyle: {
+          color: "rgba(255,255,255,.6)",
+          fontSize: "12"
+        }
+      },
+      axisTick: {
+        show: false
+      },
+      axisLine: {
+        show: true,
+        lineStyle: {
+          color: "rgba(255,255,255,.1	)",
+          width: 1,
+          type: "solid"
+        }
+      },
+      splitLine: {
+        lineStyle: {
+          color: "rgba(255,255,255,.1)"
+        }
+      }
+    }
+  ], series: [
+    {
+      type: "bar",
+      name: "閿�閲�",
+      data: [1200, 800, 300, 500, 560, 220],
+      barWidth: "25%",
+      itemStyle: {
+        normal: {
+          color: "#2f89cf",
+          opacity: 1,
+          barBorderRadius: 5
+        }
+      }
+    }, {
+      type: "bar",
+      name: "璁㈠崟",
+      data: [1000, 750, 380, 450, 450, 120],
+      barWidth: "25%",
+      itemStyle: {
+        normal: {
+          color: "#46d000",
+          opacity: 1,
+          barBorderRadius: 5
+        }
+      }
+    }
+  ]
+};
+
+let chartLeft3 = {
+  tooltip: {
+    trigger: 'axis',
+    axisPointer: {            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
+      type: 'shadow'        // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
+    }
+  },
+  grid: {
+    left: "0%",
+    top: "-5px",
+    right: "3%",
+    bottom: "4%",
+    containLabel: true
+  },
+  xAxis: {
+    type: 'value',
+    axisLabel: {
+      show: true,
+      textStyle: {
+        color: "rgba(255,255,255,.6)",
+        fontSize: "12"
+      }
+    },
+    axisTick: {
+      show: false
+    },
+    axisLine: {
+      show: true,
+      lineStyle: {
+        color: "rgba(255,255,255,.1	)",
+        width: 1,
+        type: "solid"
+      }
+    },
+    splitLine: {
+      lineStyle: {
+        color: "rgba(255,255,255,.1)"
+      }
+    }
+  },
+  yAxis: {
+    type: 'category',
+    axisLabel: {
+      show: true,
+      textStyle: {
+        color: "rgba(255,255,255,.6)",
+        fontSize: "12"
+      }
+    },
+    axisTick: {
+      show: false
+    },
+    axisLine: {
+      show: true,
+      lineStyle: {
+        color: "rgba(255,255,255,.1	)",
+        width: 1,
+        type: "solid"
+      }
+    },
+    splitLine: {
+      lineStyle: {
+        color: "rgba(255,255,255,.1)"
+      }
+    },
+    data: ['鍛ㄤ竴', '鍛ㄤ簩', '鍛ㄤ笁', '鍛ㄥ洓', '鍛ㄤ簲']
+  },
+  series: [
+    {
+      name: '鐩存帴璁块棶',
+      type: 'bar',
+      stack: '鎬婚噺',
+      label: {
+        show: true,
+        position: 'insideRight'
+      },
+      barWidth: "55%",
+      itemStyle: {
+        normal: {
+          color: "#2f89cf",
+          opacity: 1,
+          barBorderRadius: 5
+        }
+      },
+      data: [120, 302, 400, 200, 700]
+    }
+  ]
+};
+
+let chartRight1 = {
+  title: {},
+  tooltip: {
+    trigger: "axis",
+    axisPointer: {
+      type: "cross",
+      label: {
+        backgroundColor: "#6a7985"
+      }
+    }
+  },
+
+  color: ["#ffab6f", "#09b916", "#83cddc"], //鍥句緥棰滆壊
+  legend: {
+    top: "0%",
+    icon: "roundRect",
+    data: ["閿�鍞鍗�", "閫�璐ц鍗�", "鎶樻墸璁㈠崟"],
+    textStyle: {
+      color: "rgba(255,255,255,.5)",
+      fontSize: "12"
+    }
+  },
+  toolbox: {
+    feature: {}
+  },
+  grid: {
+    left: "10",
+    top: "20",
+    right: "10",
+    bottom: "10",
+    containLabel: true
+  },
+  xAxis: [
+    {
+      type: "category",
+      boundaryGap: false,
+      axisLabel: {
+        textStyle: {
+          color: "rgba(255,255,255,.6)",
+          fontSize: 12
+        }
+      },
+      axisLine: {
+        lineStyle: {
+          color: "rgba(255,255,255,.2)"
+        }
+      },
+      data: [
+        "2020.06.15",
+        "2020.06.16",
+        "2020.06.17",
+        "2020.06.18",
+        "2020.06.19",
+        "2020.06.20",
+        "2020.06.21",
+        "2020.06.22"
+      ]
+    }
+  ],
+  yAxis: [
+    {
+      type: "value",
+      axisTick: { show: false },
+      minInterval: 60,
+      axisLine: {
+        lineStyle: {
+          color: "rgba(255,255,255,.1)"
+        }
+      },
+      axisLabel: {
+        textStyle: {
+          color: "rgba(255,255,255,.6)",
+          fontSize: 12
+        }
+      },
+
+      splitLine: {
+        lineStyle: {
+          color: "rgba(255,255,255,.1)"
+        }
+      }
+    }
+  ],
+  series: [
+    {
+      name: "閿�鍞鍗�",
+      type: "line",
+      smooth: true,
+      lineStyle: {
+        color: "#45d4ba",
+        width: 1
+      }, //绾挎潯鐨勬牱寮�
+      areaStyle: {
+        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+          {
+            offset: 0,
+            color: "#83cddc"
+          },
+          {
+            offset: 1,
+            color: "#bfdffbb5"
+          }
+        ])
+      },
+      data: [5, 22, 150, 54, 1, 230, 4, 1]
+    },
+    {
+      name: "閫�璐ц鍗�",
+      type: "line",
+
+      smooth: true,
+      lineStyle: {
+        color: "#04a710",
+        width: 1
+      }, //
+      areaStyle: {
+        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+          {
+            offset: 0,
+            color: "#0cbf22"
+          },
+          {
+            offset: 1,
+            color: "#b8f7d1b5"
+          }
+        ])
+      },
+      data: [10, 150, 1, 250, 20, 100, 10, 150]
+    },
+    {
+      name: "鎶樻墸璁㈠崟",
+      type: "line",
+
+      lineStyle: {
+        color: "#0864c3",
+        width: 1
+      }, //绾挎潯鐨勬牱寮�
+      smooth: true,
+      areaStyle: {
+        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+          {
+            offset: 0,
+            color: "#29d7ff"
+          },
+          {
+            offset: 1,
+            color: "#34ccef85"
+          }
+        ])
+      },
+      data: [100, 2, 260, 1, 200, 30, 101, 40]
+    }
+  ]
+};
+
+var gauge = {
+  series: [{
+    radius: '90%',
+    type: 'gauge',
+    startAngle: 180,
+    endAngle: 0,
+    min: 0,
+    max: 1,
+    splitNumber: 8,
+    axisLine: {
+      lineStyle: {
+        width: 3,
+        color: [
+          [0.25, '#FF6E76'],
+          [0.5, '#FDDD60'],
+          [0.75, '#58D9F9'],
+          [1, '#7CFFB2']
+        ]
+      }
+    },
+    pointer: {
+      icon: 'path://M12.8,0.7l12,40.1H0.7L12.8,0.7z',
+      length: '12%',
+      width: 20,
+      offsetCenter: [0, '-60%'],
+      itemStyle: {
+        color: 'auto'
+      }
+    },
+    axisTick: {
+      length: 12,
+      lineStyle: {
+        color: 'auto',
+        width: 2
+      }
+    },
+    splitLine: {
+      length: 20,
+      lineStyle: {
+        color: 'auto',
+        width: 5
+      }
+    },
+    axisLabel: {
+      color: '#464646',
+      fontSize: 20,
+      distance: -60,
+      formatter: function (value) {
+        if (value === 0.875) {
+          return '浼�';
+        }
+        else if (value === 0.625) {
+          return '涓�';
+        }
+        else if (value === 0.375) {
+          return '鑹�';
+        }
+        else if (value === 0.125) {
+          return '宸�';
+        }
+      }
+    },
+    title: {
+      offsetCenter: [0, '-20%'],
+      fontSize: 20
+    },
+    detail: {
+      fontSize: 30,
+      offsetCenter: [0, '0%'],
+      valueAnimation: true,
+      formatter: function (value) {
+        return Math.round(value * 100) + '鍒�';
+      },
+      color: 'auto'
+    },
+    data: [{
+      value: 0.70,
+      name: '鎴愮哗璇勫畾'
+    }]
+  }]
+}
+export { chartLeft1, chartLeft2, chartLeft3, chartRight1, gauge }
diff --git a/WIDESEA_WMSClient/src/views/charts/bigdata/head_bg.png b/WIDESEA_WMSClient/src/views/charts/bigdata/head_bg.png
new file mode 100644
index 0000000..a2e45f6
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/charts/bigdata/head_bg.png
Binary files differ
diff --git a/WIDESEA_WMSClient/src/views/charts/bigdata/layout.less b/WIDESEA_WMSClient/src/views/charts/bigdata/layout.less
new file mode 100644
index 0000000..3f6cffd
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/charts/bigdata/layout.less
@@ -0,0 +1,197 @@
+
+.big-data-container {
+  position: absolute;
+  overflow: hidden;
+  height: 100%;
+  width: 100%;
+  background-color: #1400a8;
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1200 800'%3E%3Cdefs%3E%3CradialGradient id='a' cx='0' cy='800' r='800' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%230e0077'/%3E%3Cstop offset='1' stop-color='%230e0077' stop-opacity='0'/%3E%3C/radialGradient%3E%3CradialGradient id='b' cx='1200' cy='800' r='800' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%2314057c'/%3E%3Cstop offset='1' stop-color='%2314057c' stop-opacity='0'/%3E%3C/radialGradient%3E%3CradialGradient id='c' cx='600' cy='0' r='600' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%230d0524'/%3E%3Cstop offset='1' stop-color='%230d0524' stop-opacity='0'/%3E%3C/radialGradient%3E%3CradialGradient id='d' cx='600' cy='800' r='600' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%231400a8'/%3E%3Cstop offset='1' stop-color='%231400a8' stop-opacity='0'/%3E%3C/radialGradient%3E%3CradialGradient id='e' cx='0' cy='0' r='800' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23000000'/%3E%3Cstop offset='1' stop-color='%23000000' stop-opacity='0'/%3E%3C/radialGradient%3E%3CradialGradient id='f' cx='1200' cy='0' r='800' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23130733'/%3E%3Cstop offset='1' stop-color='%23130733' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Crect fill='url(%23a)' width='1200' height='800'/%3E%3Crect fill='url(%23b)' width='1200' height='800'/%3E%3Crect fill='url(%23c)' width='1200' height='800'/%3E%3Crect fill='url(%23d)' width='1200' height='800'/%3E%3Crect fill='url(%23e)' width='1200' height='800'/%3E%3Crect fill='url(%23f)' width='1200' height='800'/%3E%3C/svg%3E");
+  background-attachment: fixed;
+  background-size: cover;
+  .head {
+    height: 75px;
+    /* height: 1.05rem; */
+    background: url(./head_bg.png) no-repeat center center;
+    background-size: 100% 100%;
+    position: relative;
+    z-index: 100;
+  }
+}
+
+.head h1 {
+  margin: 0;
+  color: #fff;
+  text-align: center;
+  /* font-size: .4rem; */
+  /* line-height: .8rem; */
+  line-height: 71px;
+}
+
+.data-container {
+  /* margin: 5px 15px;
+        height:100%; */
+
+  margin: 0px 15px;
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 76px;
+  bottom: 0;
+}
+
+.data-container > div {
+  float: left;
+  /* border: 1px solid white; */
+  height: 100%;
+}
+
+.data-center {
+  padding: 0 0.9rem;
+  width: 40%;
+  display: flex;
+  flex-direction: column;
+  // .center-top{
+  //   height: 210px;
+  //   background: red;
+  // }
+.chart-center{
+  flex: 1;
+}
+}
+.chart-center{
+  width: 100%;
+display: flex;
+//  background: white;
+}
+.data-left,
+.data-right {
+  width: 30%;
+  display: flex;
+
+  flex-direction: column;
+}
+
+.data-left-item,
+.data-right-item,.center-top,.center-top-num,.chart-center {
+  border: 1px solid rgba(25, 186, 139, 0.17);
+  padding: 0 0.2rem 0.4rem 0.15rem;
+  background: rgba(255, 255, 255, 0.04);
+  background-size: 100% auto;
+  position: relative;
+  margin-bottom: 0.15rem;
+  z-index: 10;
+}
+
+.data-foot-line {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+  left: 0;
+}
+
+.data-foot-line:before,
+.data-foot-line:after {
+  position: absolute;
+  width: 10px;
+  height:10px;
+  content: "";
+  border-bottom: 2px solid #02a6b5;
+  bottom: 0;
+}
+
+.boxall:before,
+.data-foot-line:before {
+  border-left: 2px solid #02a6b5;
+  left: 0;
+}
+
+.boxall:after,
+.data-foot-line:after {
+  border-right: 2px solid #02a6b5;
+  right: 0;
+}
+
+.boxall:before,
+.boxall:after {
+  position: absolute;
+  width: 10px;
+  height: 10px;
+  content: "";
+  border-top: 2px solid #02a6b5;
+  top: 0;
+}
+
+.data-left-item:before,
+.data-right-item:before,
+.center-top-num:before,
+.center-top:before{
+  border-left: 2px solid #02a6b5;
+  left: 0;
+  position: absolute;
+  width: 10px;
+  height:10px;
+  content: "";
+  border-top: 2px solid #02a6b5;
+  top: 0;
+}
+
+.data-left-item:after,
+.data-right-item:after,
+.center-top-num:after,
+.center-top:after {
+  border-right: 2px solid #02a6b5;
+  right: 0;
+  position: absolute;
+  width: 10px;
+  height: 10px;
+  content: "";
+  border-top: 2px solid #02a6b5;
+  top: 0;
+}
+
+.data-left,
+.data-right {
+  /* display: flex; */
+}
+
+.data-left > .data-left-item,
+.data-right > .data-right-item {
+  flex: 1;
+  margin-bottom: 0.9rem;
+}
+
+.data-center  .title,
+.data-left > .data-left-item .title,
+.data-right > .data-right-item .title {
+  /* font-size: .2rem; */
+  font-size: 1rem;
+  padding: 7px 0;
+  color: #fff;
+  text-align: center;
+  /* line-height: .5rem; */
+}
+
+.data-center .chart-center{
+  width: 100%;
+}
+
+.center-top-num{
+  height: 80px;
+  padding-top: 7px;
+  margin-bottom: 0.8rem;
+  display: flex;
+  .item{
+    flex: 1;
+    text-align: center;
+  }
+  .text{
+    color: #fcf0d8;
+    font-size: 14px;
+  }
+  .num{
+    font-size: 34px;
+    font-family: -apple-system, BlinkMacSystemFont, Segoe UI, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Helvetica Neue, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
+    font-weight: bold;
+    color: #67caca;
+  }
+}
diff --git a/WIDESEA_WMSClient/src/views/charts/chart.vue b/WIDESEA_WMSClient/src/views/charts/chart.vue
new file mode 100644
index 0000000..3b0695a
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/charts/chart.vue
@@ -0,0 +1,101 @@
+<template>
+  <div class="m-charts">
+    <el-tabs
+      v-model="name"
+      @tab-click="tabClick"
+      type="border-card"
+      style="height: 100%; width: 100%; box-shadow: none"
+    >
+      <el-tab-pane name="bar">
+        <template #label>
+          <span><i class="el-icon-date"></i> 鏌辩姸鍥� </span>
+        </template>
+        <div
+          :style="{ height: heigth + 'px', width: width + 'px' }"
+          id="bar-0001"
+        ></div>
+      </el-tab-pane>
+      <el-tab-pane name="pie" :lazy="false" label="娑堟伅涓績">
+        <template #label>
+          <span><i class="el-icon-date"></i> 楗肩姸鍥� </span>
+        </template>
+        <div
+          :style="{ height: heigth + 'px', width: width + 'px' }"
+          id="pie-0001"
+        ></div>
+      </el-tab-pane>
+      <el-tab-pane name="line" :lazy="false" label="瑙掕壊绠$悊">
+        <template #label>
+          <span><i class="el-icon-date"></i> 鎶樼嚎鍥� </span>
+        </template>
+        <div
+          :style="{ height: heigth + 'px', width: width + 'px' }"
+          id="line-0001"
+        ></div>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+<script>
+let echarts = require("echarts");
+import options from "./chartOptions";
+let $bar;
+let $pie;
+let $line;
+export default {
+  mounted() {
+    $bar = echarts.init(document.getElementById("bar-0001"));
+    $bar.setOption(this.options.bar);
+  },
+  created() {
+    this.heigth = document.documentElement.clientHeight - 190;
+    this.width = document.documentElement.clientWidth - 240;
+  },
+  methods: {
+    tabClick(name) {
+      if (name.props.name == "pie") {
+        if (!$pie) {
+          $pie = echarts.init(document.getElementById("pie-0001"));
+          $pie.setOption(this.options.pie);
+
+        }
+      } else if (name.props.name == "line") {
+        if (!$line) {
+          $line = echarts.init(document.getElementById("line-0001"));
+          $line.setOption(this.options.line);
+         
+        }
+      }
+    },
+  },
+  data() {
+    return {
+      name: "bar",
+      heigth: 450,
+      width: 1000,
+      options: options,
+    };
+  },
+};
+</script>
+<style lang="less" scoped>
+.m-charts {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background: #f1f1f1;
+  margin: auto 0;
+  padding: 12px;
+  .m-tabs {
+    background: white;
+  }
+}
+.m-charts ::v-deep(.el-tabs__content) {
+  height: calc(100% - 45px);
+}
+.m-charts ::v-deep(.el-tab-pane) {
+  height: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/charts/chartOptions.js b/WIDESEA_WMSClient/src/views/charts/chartOptions.js
new file mode 100644
index 0000000..2ec6bda
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/charts/chartOptions.js
@@ -0,0 +1,212 @@
+let options= {
+    bar:{
+      // title: {
+      //   text: 'World Population'
+      // },
+      tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+          type: 'shadow'
+        }
+      },
+      // legend: {},
+      grid: {
+        top:10,
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+      },
+      xAxis: {
+        type: 'value',
+        boundaryGap: [0, 0.01]
+      },
+      yAxis: {
+        type: 'category',
+        data: ['Brazil', 'Indonesia', 'USA', 'India', 'China', 'World']
+      },
+      series: [
+        {
+          name: '2011',
+          type: 'bar',
+          data: [18203, 23489, 29034, 14970, 31744, 60230]
+        },
+        {
+          name: '2012',
+          type: 'bar',
+          data: [19325, 23438, 31000, 11594, 24141, 6807]
+        }
+      ]
+    },
+    pie: {
+      tooltip: {
+        trigger: "item",
+        formatter: "{a} <br/>{b} : {c} ({d}%)"
+      },
+      legend: {
+        top: 20,
+        // orient: "vertical",
+        // right: 300,
+        // top: 200,
+        // bottom: 20,
+        data: [
+          "鍥句緥1",
+          "鍥句緥2",
+          "鍥句緥3",
+          "鍥句緥4",
+          "鍥句緥5",
+          "鍥句緥6",
+          "鍥句緥7"
+        ]
+      },
+      series: [
+        {
+          name: "鍥句緥1",
+          type: "pie",
+          radius: ['40%', '70%'],
+          selectedMode: "single",
+          itemStyle: {
+            borderRadius: 6,
+            borderColor: '#fff',
+            borderWidth: 2
+          },
+          data: [
+            {
+              value: 2563,
+              name: "鍥句緥1",
+              itemStyle: {
+                color: "rgb(45, 140, 240)"
+              }
+            },
+            {
+              value: 727,
+              name: "鍥句緥2",
+              itemStyle: {
+                color: "rgb(92, 173, 255)"
+              }
+            },
+            {
+              value: 2182,
+              name: "鍥句緥3",
+              itemStyle: {
+                color: "rgb(25, 190, 107)"
+              }
+            },
+            {
+              value: 1419,
+              name: "鍥句緥4",
+              itemStyle: {
+                color: "#00e5ff"
+              }
+            },
+            {
+              value: 984,
+              name: "鍥句緥5",
+              itemStyle: {
+                color: "#ff80ab"
+              }
+            },
+            {
+              value: 870,
+              name: "鍥句緥6",
+              itemStyle: {
+                color: "rgb(237, 64, 20)"
+              }
+            },
+            {
+              value: 1670,
+              name: "鍥句緥7",
+              itemStyle: {
+                color: "#ffb445"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    line: {
+      legend: {
+        data: ["閭欢钀ラ攢", "鑱旂洘骞垮憡"]
+      },
+      grid: {
+        left: "3%",
+        right: "4%",
+        bottom: "3%",
+        containLabel: true
+      },
+      toolbox: {
+        feature: {
+          saveAsImage: {}
+        }
+      },
+      xAxis: {
+        type: "category",
+        boundaryGap: false,
+        data: [
+          "1鏈�",
+          "2鏈�",
+          "3鏈�",
+          "4鏈�",
+          "5鏈�",
+          "6鏈�",
+          "7鏈�",
+          "8鏈�",
+          "9鏈�",
+          "10鏈�",
+          "11鏈�",
+          "12鏈�"
+        ]
+      },
+      yAxis: {
+        type: "value"
+      },
+      series: [
+        {
+          name: "閭欢钀ラ攢",
+          type: "line",
+          stack: "鎬婚噺",
+          itemStyle: {
+            color: "rgb(25, 190, 107)"
+          },
+          smooth: true,
+          data: [
+            7.0,
+            6.9,
+            9.5,
+            12.5,
+            18.2,
+            21.5,
+            22.5,
+            23.3,
+            18.3,
+            13.9,
+            9.6
+          ]
+        },
+        {
+          name: "鑱旂洘骞垮憡",
+          type: "line",
+          stack: "鎬婚噺",
+          smooth: true,
+          itemStyle: {
+            color: "rgb(92, 173, 255)"
+          },
+          data: [
+            7.0,
+            6.9,
+            9.5,
+            14.5,
+            18.2,
+            21.5,
+            22.5,
+            21.3,
+            18.3,
+            13.9,
+            9.6
+          ]
+        }
+      ]
+    }
+  }
+
+  export default options;
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/charts/flex.vue b/WIDESEA_WMSClient/src/views/charts/flex.vue
new file mode 100644
index 0000000..e94823a
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/charts/flex.vue
@@ -0,0 +1,386 @@
+<template>
+  <div class="home-contianer">
+    <div>
+      <div class="order-title">
+        <h2>璁㈠崟缁熻</h2>
+      </div>
+      <div
+        data-v-542f4644
+        class="ivu-row"
+        style="padding: 15px; background: white"
+      >
+        <div
+          v-for="item in topColor"
+          :key="item.name"
+          class="ivu-col ivu-col-span-6"
+          style="padding-left: 8px; padding-right: 8px"
+        >
+          <div
+            data-v-542f4644
+            class="ivu-card"
+            :style="{ background: item.background }"
+          >
+            <div class="icon-left">
+              <i :class="item.icon" />
+            </div>
+            <div class="ivu-card-body">
+              <div class="demo-color-name">{{ item.name }}</div>
+              <div class="demo-color-desc">#{{ item.qty }}</div>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <div class="numbers">
+        
+        <div class="item" v-for="index in 8" :key="index">
+          <div class="number">
+            <!-- {{value}} -->
+            {{index * 1000}}
+          </div>
+          <div>Order total</div>
+        </div>
+      </div>
+
+      <div class="order-title">
+        <h2>璁㈠崟鏌ヨ</h2>
+      </div>
+     
+      <div class="order-range">
+        <div
+          class="order-item"
+          v-for="(item, index) in totalRange"
+          :key="index"
+        >
+          <div class="total">
+            <div class="number">
+              {{item.qty}}
+            </div>
+          </div>
+          <div class="name">{{ titleLeft + item.name }}</div>
+          <div class="date">
+            {{ beginDate.replace(/-/g, ".") }} --
+            {{ endDate.replace(/-/g, ".") }}
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+
+
+export default {
+  data() {
+    return {
+      beginDate: "",
+      endDate: "",
+      n: 90,
+      topColor: [
+        {
+          name: "璁㈠崟鏁�",
+          desc: "#205",
+          background: "rgb(25, 190, 107)",
+          icon: "el-icon-shopping-cart-full",
+          qty: 6000,
+          key: "total",
+        },
+        {
+          name: "宸蹭粯娆�",
+          desc: "#412",
+          background: "rgb(45, 183, 245)",
+          icon: "el-icon-wallet",
+          qty: 7100,
+          key: "total",
+        },
+        {
+          name: "寰呭彂璐�",
+          desc: "#412",
+          background: "#f2b458",
+          icon: "el-icon-shopping-cart-1",
+          qty: 500,
+          key: "hasPay",
+        },
+        {
+          name: "閰嶉�佷腑",
+          desc: "#412",
+          background: "rgb(84, 110, 122)",
+          icon: "el-icon-shopping-cart-2",
+          qty: 800,
+          key: "notShip",
+        },
+        {
+          name: "宸插畬鎴�",
+          desc: "#412",
+          background: "rgb(45, 183, 245)",
+          icon: "el-icon-set-up",
+          qty: 1880,
+          key: "completed",
+        },
+        {
+          name: "閫�璐ц鍗�",
+          desc: "#12",
+          background: "rgb(237, 64, 20)",
+          icon: "el-icon-data-analysis",
+          qty: 2290,
+          key: "refund",
+        },
+      ],
+      totalRange: [
+        {
+          name: "璁㈠崟鏁�",
+          desc: "#205",
+          background: "rgb(25, 190, 107)",
+          icon: "ios-cart",
+          qty: 1290,
+          key: "total",
+        },
+        {
+          name: "宸蹭粯娆�",
+          desc: "#412",
+          background: "rgb(45, 183, 245)",
+          icon: "ios-cash",
+          qty: 3450,
+          key: "total",
+        },
+        {
+          name: "寰呭彂璐�",
+          desc: "#412",
+          background: "rgb(255, 153, 0)",
+          icon: "md-bus",
+          qty: 200,
+          key: "hasPay",
+        },
+        {
+          name: "閰嶉�佷腑",
+          desc: "#412",
+          background: " rgb(84, 110, 122)",
+          icon: "md-pin",
+          qty: 7000,
+          key: "notShip",
+        },
+        {
+          name: "浜ゆ槗瀹屾垚",
+          desc: "#412",
+          background: "rgb(45, 183, 245)",
+          icon: "ios-help-buoy",
+          qty: 8900,
+          key: "completed",
+        },
+        {
+          name: "閫�璐ц鍗�",
+          desc: "#12",
+          background: "rgb(237, 64, 20)",
+          icon: "ios-navigate",
+          qty: 2450,
+          key: "refund",
+        },
+      ],
+      value1: "1",
+      titleLeft: "",
+      dateNow: "",
+    };
+  },
+  methods: {
+    getDate() {
+      var date = new Date();
+      var year = date.getFullYear();
+      var month = date.getMonth() + 1;
+      var day = date.getDate();
+      var hour = date.getHours();
+      var minutes = date.getMinutes();
+      var second = date.getSeconds();
+      this.beginDate =
+        year +
+        "-" +
+        (month < 10 ? "0" + month : month) +
+        "-" +
+        (day < 10 ? "0" + day : day);
+      this.endDate = this.beginDate;
+      this.dateNow = this.beginDate;
+    },
+    search() {
+      if (this.dateNow == this.beginDate && this.dateNow == this.endDate) {
+        this.titleLeft = "浠婃棩";
+      } else {
+        this.titleLeft = "褰撴湡";
+      }
+    },
+  },
+  created() {
+    this.getDate();
+  },
+  mounted() {},
+};
+</script>
+<style scoped>
+.home-contianer {
+  background: #efefef;
+  width: 100%;
+  height: 100%;
+  /* padding: 20px; */
+}
+
+.ivu-card-body {
+  text-align: center;
+  padding: 20px 5px;
+  /* padding-left: 80px; */
+  font-size: 16px;
+}
+.demo-color-name {
+  color: #fff;
+  font-size: 14px;
+}
+.demo-color-desc {
+  color: white;
+  /* opacity: 0.7; */
+  font-size: 20px;
+  margin-top: 2px;
+}
+.ivu-card {
+  box-shadow: 0 3px 13px rgba(117, 114, 114, 0.47);
+  display: flex;
+  position: relative;
+      padding-top: 10px;
+    border-radius: 5px;
+}
+.ivu-card .icon-left {
+  width: 85px;
+}
+.ivu-card .ivu-card-body {
+  flex: 1;
+}
+.ivu-card .icon-left {
+  text-align: center;
+  border-right: 1px solid;
+  padding: 8px 0px;
+  height: 100%;
+
+  font-size: 50px;
+  color: white;
+}
+.ivu-row {
+  border-bottom: 2px dotted #eee;
+  padding: 15px;
+  margin-bottom: 15px;
+  display: flex;
+}
+
+.ivu-row > div {
+  flex: 1;
+}
+
+.h5-desc {
+  padding-top: 10px;
+}
+</style>
+
+<style lang="less" scoped>
+.jn-day-total {
+  display: flex;
+  padding: 15px;
+  background: white;
+  .date-text {
+    line-height: 36px;
+    padding: 0 15px;
+  }
+  .date {
+    margin-right: 20px;
+  }
+  .btn {
+    margin-left: 10px;
+  }
+}
+.order-title {
+  h2 {
+    padding: 7px 15px;
+    font-weight: 500;
+    background: white;
+    border-bottom: 1px dotted #d4d4d4;
+  }
+}
+
+.order-range {
+  padding: 0 15px;
+  background: white;
+  background: white;
+  display: flex;
+  // flex-direction: row-reverse;
+}
+
+.order-range .order-item {
+  box-shadow: 0 3px 13px rgba(117, 114, 114, 0.47);
+  flex: 1;
+  border-radius: 6px;
+  font-size: 14px;
+  text-align: center;
+  border: 1px solid #e6e6e6;
+  margin: 7px;
+}
+
+.order-range .total {
+  color: white;
+  font-size: 50px;
+  font-weight: bold;
+  line-height: 100px;
+  background: #55ce80;
+  font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",
+    "Microsoft YaHei", "寰蒋闆呴粦", Arial, sans-serif;
+}
+.order-range .number {
+  transition: transform 0.8s;
+}
+.order-range .number:hover {
+  cursor: pointer;
+  transform: scale(1.2);
+}
+.order-range .name {
+  font-size: 20px;
+  padding: 10px;
+}
+
+.order-range .date {
+  padding: 1px 0 20px 0;
+  color: #9e9e9e;
+  font-size: 13px;
+}
+</style>
+
+
+<style lang="less" scoped>
+.numbers {
+    margin-bottom: 15px;
+  border-radius: 5px;
+  border: 1px solid #eaeaea;
+  background: white;
+  display: flex;
+
+  padding: 20px 0px;
+  .item {
+    flex: 1;
+    text-align: center;
+    border-right: 1px solid #e5e5e5;
+  }
+  .item > 銆�div:first-child {
+    word-break: break-all;
+    color: #282727;
+    font-size: 30px;
+    // padding-bottom: 12px;
+  }
+  .item > 銆�div:last-child {
+    font-size: 13px;
+    color: #777;
+  }
+  .item:last-child {
+    border-right: none;
+  }
+  .number {
+    cursor: pointer;
+    transition: transform 0.8s;
+  }
+  .number:hover {
+    transform: scale(1.2);
+    color: #03c10b !important;
+  }
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/views/charts/formChart.vue b/WIDESEA_WMSClient/src/views/charts/formChart.vue
new file mode 100644
index 0000000..25d4f10
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/charts/formChart.vue
@@ -0,0 +1,118 @@
+<template>
+  <div class="c-container">
+    <div class="item">
+      <div class="left">
+        <VolHeader
+          icon="md-apps"
+          text="鏌辩姸鍥�"
+          style="padding-left: 10px; margin-bottom: 5px"
+        ></VolHeader>
+        <div  style="height: calc(100% - 45px)" :id="bar"></div>
+      </div>
+      <div class="right">
+        <VolHeader
+          icon="md-apps"
+          text="鍩虹琛ㄥ崟"
+          style="padding-left: 10px; margin-bottom: 20px"
+        ></VolHeader>
+        <VolForm
+          style="padding-right: 30px"
+          ref="myform1"
+          :loadKey="true"
+          :label-width="80"
+          :formFields="formFields1"
+          :formRules="formRules1"
+        ></VolForm>
+      </div>
+    </div>
+
+    <div class="item">
+      <div class="left">
+        <VolHeader
+          icon="md-apps"
+          text="琛ㄥ崟灞炴�у瓧娈靛彧璇�"
+          style="padding-left: 10px; margin-bottom: 20px"
+        ></VolHeader>
+        <VolForm
+          style="padding-right: 30px"
+          ref="myform1"
+          :loadKey="true"
+          :formFields="formFields2"
+          :formRules="formRules2"
+        ></VolForm>
+      </div>
+      <div class="right">
+        <VolHeader
+          icon="md-apps"
+          text="楗肩姸鍥捐〃"
+          style="padding-left: 10px"
+        ></VolHeader>
+        <div style="height: calc(100% - 30px)" :id="pie"></div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import VolHeader from '@/components/basic/VolHeader.vue';
+import VolForm from '@/components/basic/VolForm.vue';
+let echarts = require('echarts');
+import options from './chartOptions';
+import {
+  formFields1,
+  formRules1,
+  formFields2,
+  formRules2
+} from './formOptions';
+export default {
+  components: { VolForm, VolHeader },
+  data() {
+    return {
+      formFields1: formFields1,
+      formRules1: formRules1,
+      formFields2: formFields2,
+      formRules2: formRules2,
+      bar: 'b-' + ~~(Math.random(10000, 100000) * 100000),
+      pie: 'p-' + ~~(Math.random(10000, 100000) * 100000),
+      options: options
+    };
+  },
+  mounted() {
+    let $bar = echarts.init(document.getElementById(this.bar));
+    $bar.setOption(this.options.bar);
+
+    this.options.pie.legend.top = 50;
+    this.options.pie.legend.right = 80;
+    this.options.pie.legend.orient = 'vertical';
+    let $pie = echarts.init(document.getElementById(this.pie));
+    $pie.setOption(this.options.pie);
+  }
+};
+</script>
+<style lang="less" scoped>
+.c-container {
+  position: absolute;
+  height: 100%;
+  width: 100%;
+  background: #f1f1f1;
+  display: flex;
+  flex-direction: column;
+  padding: 3px;
+  .item {
+    flex:1;
+    height:0;
+    display: flex;
+    > div {
+      flex: 1;
+      width: 0;
+      // margin: 10px;
+      background: #fff;
+    }
+    .left {
+      margin: 4px;
+    }
+    .right {
+      margin: 4px;
+    }
+  }
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/views/charts/formOptions.js b/WIDESEA_WMSClient/src/views/charts/formOptions.js
new file mode 100644
index 0000000..8e17aa9
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/charts/formOptions.js
@@ -0,0 +1,148 @@
+let formFields1 = {
+    Variety: "",
+    AgeRange: "",
+    DateRange: [],
+    City: "",
+    AvgPrice: 8.88,
+    Date: "",
+    IsTop: "杩樻病鎯冲ソ..."
+}
+let formRules1 = [
+    //涓ゅ垪鐨勮〃鍗曪紝formRules鏁版嵁鏍煎紡涓�:[[{},{}]]
+    [
+        {
+            link:true,
+            dataKey: "city",
+            title: "鍩庡競",
+            required: true,
+            field: "City",
+            data: [],
+            type: "select"
+        },
+        {
+            title: "澶氶�夋棩鏈�",
+            range: true, //璁剧疆涓簍rue鍙互閫夋嫨寮�濮嬩笌缁撴潫鏃ユ湡
+            required: false,
+            field: "DateRange",
+            //   colSize: 4,//璁剧疆瀹藉害涓�1/3
+            type: "date"
+        }
+    ],
+    [
+        {
+            dataKey: "age", //鍚庡彴涓嬫媺妗嗗搴旂殑鏁版嵁瀛楀吀缂栧彿
+            data: [], //loadKey璁剧疆涓簍rue,浼氭牴鎹甦ataKey浠庡悗鍙扮殑涓嬫媺妗嗘暟鎹簮涓嚜鍔ㄥ姞杞芥暟鎹�
+            title: "涓嬫媺",
+            required: true, //璁剧疆涓哄繀閫夐」
+            field: "AgeRange",
+            type: "select"
+        },
+        {
+            title: "鏃ユ湡",
+            required: true,
+            field: "Date",
+            placeholder: "浣犲彲浠ヨ缃甤olSize灞炴�у喅瀹氭爣绛剧殑闀垮害锛屽彲閫夊��12/8/6/4",
+            //  colSize: 8,//璁剧疆瀹藉害涓�2/3
+            type: "datetime"
+        }
+    ],
+    [
+        {
+            title: "娴嬭瘯",
+            dataKey: "age",
+            placeholder: "姝ゅ鏁版嵁婧愪负鎵嬪姩缁戝畾",
+            //濡傛灉杩欓噷缁戝畾浜哾ata鏁版嵁锛屽悗鍙颁笉浼氬姞杞芥鏁版嵁婧�
+            data: [{ key: "1", value: "娴嬭瘯1" }, { key: "2", value: "娴嬭瘯2" }],
+            required: false,
+            field: "Variety",
+            type: "select"
+        },
+        {
+            type: "decimal",
+            title: "浠锋牸",
+            required: true,
+            placeholder: "浣犲彲浠ヨ嚜宸卞畾涔塸laceholder鏄剧ず鐨勬枃瀛�",
+            field: "AvgPrice"
+        }
+    ],
+    [
+        {
+            title: "澶囨敞",
+            required: true,
+            field: "IsTop",
+            colSize: 12, //璁剧疆12锛屾鍒楀崰100%瀹藉害
+            type: "textarea"
+        }
+    ]
+]
+
+let formFields2 = {
+    Variety: "涓�娆℃�х敤鍝�",
+    City: "鍖椾含甯�",
+    DateRange: "2019-09-01",
+    AvgPrice: 8.88,
+    Variety1: "",
+    DateRange1: "2019-09-02",
+    AvgPrice1: 7.72,
+    Address:"鍖椾含甯傛捣娣�鍖�001鍙�",
+    IsChange: 1
+}
+let formRules2 = [
+    //涓ゅ垪鐨勮〃鍗曪紝formRules鏁版嵁鏍煎紡涓�:[[{},{}]]
+    [
+        {
+            title: "鍟嗗搧绫诲瀷",
+            dataKey: "age",
+            //濡傛灉杩欓噷缁戝畾浜哾ata鏁版嵁锛屽悗鍙颁笉浼氬姞杞芥鏁版嵁婧�
+            data: [{ key: "1", value: "1" }, { key: "2", value: "2" }],
+            field: "Variety",
+            disabled: true,
+            type: "select"
+        },
+        {
+            dataKey: "city",
+            title: "鎵�鍦ㄥ煄甯�",
+            field: "City",
+            disabled: true,
+            type: "select",
+            data: []
+        }],
+    [
+        {
+            title: "閿�鍞棩鏈�",
+            field: "DateRange",
+            disabled: true,
+        },
+        {
+            title: "閿�鍞环鏍�",
+            field: "AvgPrice",
+            disabled: true
+        }],
+    [
+        {
+            title: "鐢熶骇鏃ユ湡",
+            field: "DateRange1",
+            disabled: true,
+        },
+        {
+            title: "涓棿浠锋牸",
+            field: "AvgPrice1",
+            disabled: true
+        }],
+    [
+        {
+            title: "閿�鍞湴鍧�",
+            field: "Address",
+            disabled: true,
+        },
+        {
+            title: "鏄惁鎴愪氦",
+            field: "IsChange",
+            dataKey: "enable",//杩欓噷璁剧疆浜嗘暟鎹瓧鍏告簮鐨勭紪鍙蜂細鑷姩浠庡悗鍙板姞杞芥暟鎹簮鐨刱ey/value
+            data: [],
+            disabled: true
+        }]
+]
+
+
+export { formFields1, formRules1, formFields2, formRules2 }
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/check/checkOrder.vue b/WIDESEA_WMSClient/src/views/check/checkOrder.vue
new file mode 100644
index 0000000..41ee0fc
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/check/checkOrder.vue
@@ -0,0 +1,102 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_CheckOrder.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/check/checkOrder.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'checkOrderId',
+                footer: "Foots",
+                cnName: '妫�楠屽崟',
+                name: 'checkOrder',
+                url: "/CheckOrder/",
+                sortName: "checkOrderId"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({
+                checkOrderNo:"",
+                receiveOrderNo:"",
+                checkOrderStatus:"",
+                auditStatus:""
+            });
+            const searchFormOptions = ref([
+                [
+                    {title:"妫�楠屽崟鍙�", field:"checkOrderNo",type:"like"},
+                    {title:"鏀惰揣鍗曞彿", field:"receiveOrderNo",type:"like"},
+                    {title:"璐ㄦ鍗曠姸鎬�", field:"checkOrderStatus",type:"select",dataKey:"",data:[]},
+                    {title:"瀹℃壒鐘舵��", field:"auditStatus",type:"select",dataKey:"",data:[]},
+                ],
+                [
+                    {title:"鏀惰揣鍗曟槑缁嗚鍙�", field:"receiveDetailRowNo",type:"like"},
+                    {title:"鐗╂枡缂栧彿", field:"materielCode",type:"like"},
+                    {title:"妫�楠岀粨鏋�", field:"result",type:"like"},
+                ]
+            ]);
+            const columns = ref([{field:'checkOrderId',title:'涓婚敭',type:'int',width:150,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'checkOrderNo',title:'妫�楠屽崟鍙�',type:'string',width:160,require:true,align:'left',sort:true},
+                       {field:'receiveOrderNo',title:'鏀惰揣鍗曞彿',type:'string',width:160,require:true,align:'left'},
+                       {field:'checkOrderStatus',title:'璐ㄦ鍗曠姸鎬�',type:'int',width:110,require:true,align:'left'},
+                       {field:'auditStatus',title:'瀹℃壒鐘舵��',type:'int',width:110,require:true,align:'left'},
+                       {field:'receiveDetailRowNo',title:'鏀惰揣鍗曟槑缁嗚鍙�',type:'int',width:110,require:true,align:'left'},
+                       {field:'materielCode',title:'鐗╂枡缂栧彿',type:'string',width:110,require:true,align:'left'},
+                       {field:'qualifiedQuantity',title:'鍚堟牸鏁伴噺',type:'float',width:110,align:'left'},
+                       {field:'defectedQuantity',title:'鐗归噰鏁伴噺',type:'float',width:110,align:'left'},
+                       {field:'returnQuantity',title:'閫�璐ф暟閲�',type:'float',width:110,align:'left'},
+                       {field:'scrappedQuantity',title:'鎶ュ簾鏁伴噺',type:'float',width:110,align:'left'},
+                       {field:'receivedQuantity',title:'妫�楠屾�绘暟',type:'float',width:110,require:true,align:'left'},
+                       {field:'result',title:'妫�楠岀粨鏋�',type:'string',width:110,align:'left'},
+                       {field:'defectedNote',title:'鐗归噰璇存槑',type:'string',width:110,align:'left'},
+                       {field:'checkUserName',title:'妫�楠屼汉',type:'string',width:110,align:'left'},
+                       {field:'creater',title:'鍒涘缓鑰�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "妫�楠岀粨鏋�",
+                table: "CheckOrderResult",
+                columns: [
+                    {field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                    {field:'checkOrderId',title:'妫�楠屽崟涓婚敭',type:'int',width:110,require:true,align:'left',sort:true},
+                    {field:'defectCode',title:'缂洪櫡浠g爜',type:'string',width:110,require:true,align:'left'},
+                    {field:'result',title:'妫�楠岀粨鏋�',type:'string',width:110,require:true,align:'left'},
+                    {field:'quantity',title:'鏁伴噺',type:'float',width:110,require:true,align:'left'},
+                    {field:'note',title:'澶囨敞',type:'string',width:220,align:'left'},
+                    {field:'creater',title:'鍒涘缓鑰�',type:'string',width:110,require:true,align:'left'},
+                    {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                    {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                    {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}
+                ],
+                sortName: "id",
+                key: "id"
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/check/checkOrderResult.vue b/WIDESEA_WMSClient/src/views/check/checkOrderResult.vue
new file mode 100644
index 0000000..74b1d89
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/check/checkOrderResult.vue
@@ -0,0 +1,65 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_CheckOrderResult.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/check/checkOrderResult.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'id',
+                footer: "Foots",
+                cnName: '妫�楠岀粨鏋�',
+                name: 'checkOrderResult',
+                url: "/CheckOrderResult/",
+                sortName: "id"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({});
+            const searchFormOptions = ref([]);
+            const columns = ref([{field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'checkOrderId',title:'妫�楠屽崟涓婚敭',type:'int',width:110,require:true,align:'left',sort:true},
+                       {field:'defectCode',title:'缂洪櫡浠g爜',type:'string',width:110,require:true,align:'left'},
+                       {field:'result',title:'妫�楠岀粨鏋�',type:'string',width:110,require:true,align:'left'},
+                       {field:'quantity',title:'鏁伴噺',type:'float',width:110,require:true,align:'left'},
+                       {field:'note',title:'澶囨敞',type:'string',width:220,align:'left'},
+                       {field:'creater',title:'鍒涘缓鑰�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                table: "#detailTable",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/home/home-chart-options.js b/WIDESEA_WMSClient/src/views/home/home-chart-options.js
new file mode 100644
index 0000000..3eaf63d
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/home/home-chart-options.js
@@ -0,0 +1,248 @@
+var chart1 = {
+    title: {
+        text: "妗嗘灦闆嗘垚鍙婂紑鍙戠幆澧�",
+        left: 'center',
+        padding: 15,
+    },
+    tooltip: {
+        trigger: 'item'
+    },
+    legend: {
+        top: 'bottom',
+        icon: "circle",   //  杩欎釜瀛楁鎺у埗褰㈢姸  绫诲瀷鍖呮嫭 circle锛宺ect 锛宺oundRect锛宼riangle锛宒iamond锛宲in锛宎rrow锛宯one
+        itemWidth: 10,  // 璁剧疆瀹藉害
+        itemHeight: 10, // 璁剧疆楂樺害
+        itemGap: 7,// 璁剧疆闂磋窛
+        padding: [0, 0, 15, 0] //鍥句緥璺濈
+    },
+    series: [
+        {
+            name: '妗嗘灦',
+            type: 'pie',
+            radius: ['40%', '65%'],
+            avoidLabelOverlap: false,
+            itemStyle: {
+                borderRadius: 10,
+                borderColor: '#fff',
+                borderWidth: 2
+            },
+            label: {
+                show: false,
+                position: 'center'
+            },
+            emphasis: {
+                label: {
+                    show: true,
+                    fontSize: '40',
+                    fontWeight: 'bold'
+                }
+            },
+            labelLine: {
+                show: false
+            },
+            data: [
+                { value: 1048, name: '.NetCore' },
+                { value: 735, name: 'Dapper' },
+             
+                { value: 735, name: 'EntityFramework' },
+                // { value: 735, name: 'JWT' },
+                { value: 735, name: 'Redis' },
+                { value: 735, name: 'Vue3.0' },
+                { value: 580, name: 'Vuex' },
+                { value: 484, name: 'Element plus' }
+            ]
+        }
+    ]
+}
+
+var chart2 = {
+    title: {
+        text: '杩欓噷鏄椤�'
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {            // 鍧愭爣杞存寚绀哄櫒锛屽潗鏍囪酱瑙﹀彂鏈夋晥
+            type: 'shadow'        // 榛樿涓虹洿绾匡紝鍙�変负锛�'line' | 'shadow'
+        }
+    },
+    legend: {
+        data: ['2.0涓嬭浇閲�', '3.0涓嬭浇閲�'],
+        padding: [0, 0, 15, 0] //鍥句緥璺濈
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        top:'13%',
+        containLabel: true
+    },
+    xAxis: [
+        {
+            type: 'category',
+            data: [ '2015', '2016', '2017', '2018', '2019', '2020', '2021']
+        }
+    ],
+    yAxis: [
+        {
+            type: 'value'
+        }
+    ],
+    series: [
+        {
+            name: '2.0涓嬭浇閲�',
+            type: 'bar',
+            showBackground: true,
+            backgroundStyle: {
+                color: 'rgba(180, 180, 180, 0.2)'
+            },
+            itemStyle: {
+
+                normal: {
+                    barBorderRadius: [4, 4, 0, 0]
+                }
+            },
+            data: [ 730, 620, 420, 932, 701, 834, 890]
+        },
+        {
+            name: '3.0涓嬭浇閲�',
+            type: 'bar',
+
+            showBackground: true,
+            backgroundStyle: {
+                color: 'rgba(180, 180, 180, 0.2)'
+            },
+            data: [230, 210, 120, 132, 101, 134, 90]
+        }
+    ]
+}
+var chart3 = {
+    title: {
+        text: '妗嗘灦鏀寔鍔熻兘(Vue2.0銆乂ue3.0鐗堟湰)',
+        left: 'center'
+    },
+    tooltip: {
+        trigger: 'item'
+    },
+    legend: {
+        top: 'bottom',
+        icon: "circle",   //  杩欎釜瀛楁鎺у埗褰㈢姸  绫诲瀷鍖呮嫭 circle锛宺ect 锛宺oundRect锛宼riangle锛宒iamond锛宲in锛宎rrow锛宯one
+        itemWidth: 10,  // 璁剧疆瀹藉害
+        itemHeight: 10, // 璁剧疆楂樺害
+        itemGap: 7,// 璁剧疆闂磋窛
+        padding: [0, 0, 10, 0] //鍥句緥璺濈
+    },
+    series: [
+        {
+
+            name: '妗嗘灦鏀寔鍔熻兘(Vue2.0銆乂ue3鐗堟湰)',
+            type: 'pie',
+            radius: '55%',
+            data: [
+                { value: 748, name: '澶氱鎴�' },
+                { value: 435, name: '澶氳鑹�' },
+                { value: 580, name: '澶氭暟鎹簱' },
+                { value: 280, name: '涓讳粠鍒嗗簱' },
+                { value: 284, name: '鍥介檯鍖�' },
+                { value: 300, name: 'App/H5寮�鍙�' },
+                { value: 200, name: 'Redis' },
+                { value: 600, name: 'Sqlserver' },
+                { value: 400, name: 'Mysql' },
+                { value: 100, name: 'Oracle' },
+            ],
+            emphasis: {
+                itemStyle: {
+                    shadowBlur: 10,
+                    shadowOffsetX: 0,
+                    shadowColor: 'rgba(0, 0, 0, 0.5)'
+                }
+            }
+        }
+    ]
+}
+var chart4={
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        // Use axis to trigger tooltip
+        type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
+      }
+    },
+    legend: {},
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        top:'13%',
+        containLabel: true
+    },
+    xAxis: {
+      type: 'value'
+    },
+    yAxis: {
+      type: 'category',
+      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+    },
+    series: [
+      {
+        name: 'Direct',
+        type: 'bar',
+        stack: 'total',
+        label: {
+          show: true
+        },
+        emphasis: {
+          focus: 'series'
+        },
+        data: [320, 302, 301, 334, 390, 330, 320]
+      },
+      {
+        name: 'Mail Ad',
+        type: 'bar',
+        stack: 'total',
+        label: {
+          show: true
+        },
+        emphasis: {
+          focus: 'series'
+        },
+        data: [120, 132, 101, 134, 90, 230, 210]
+      },
+      {
+        name: 'Affiliate Ad',
+        type: 'bar',
+        stack: 'total',
+        label: {
+          show: true
+        },
+        emphasis: {
+          focus: 'series'
+        },
+        data: [220, 182, 191, 234, 290, 330, 310]
+      },
+      {
+        name: 'Video Ad',
+        type: 'bar',
+        stack: 'total',
+        label: {
+          show: true
+        },
+        emphasis: {
+          focus: 'series'
+        },
+        data: [150, 212, 201, 154, 190, 330, 410]
+      },
+      {
+        name: 'Search Engine',
+        type: 'bar',
+        stack: 'total',
+        label: {
+          show: true
+        },
+        emphasis: {
+          focus: 'series'
+        },
+        data: [820, 832, 901, 934, 1290, 1330, 1320]
+      }
+    ]
+  }
+export { chart1, chart2, chart3,chart4 }
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue b/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue
new file mode 100644
index 0000000..0f6b3d0
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue
@@ -0,0 +1,327 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/inbound/inboundOrder.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "鍏ュ簱鍗�",
+      name: "inboundOrder",
+      url: "/InboundOrder/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      orderType: "",
+      inboundOrderNo: "",
+      upperOrderNo: "",
+      remark: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "鍗曟嵁绫诲瀷",
+          required: true,
+          field: "orderType",
+          type: "select",
+          dataKey: "inOrderType",
+          data: [],
+        },
+        {
+          field: "inboundOrderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "string",
+        },
+        {
+          title: "涓婃父鍗曟嵁缂栧彿",
+          field: "upperOrderNo",
+          type: "string",
+        },
+        {
+          title: "澶囨敞",
+          field: "remark",
+          type: "textarea",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      inboundOrderNo: "",
+      upperOrderNo: "",
+      orderType: "",
+      orderStatus: "",
+      createType: "",
+      creater: "",
+      createDate: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鍗曟嵁缂栧彿", field: "inboundOrderNo", type: "like" },
+        { title: "涓婃父鍗曟嵁缂栧彿", field: "upperOrderNo", type: "like" },
+        {
+          title: "鍗曟嵁绫诲瀷",
+          field: "orderType",
+          type: "select",
+          dataKey: "inOrderType",
+          data: [],
+        },
+        {
+          title: "鍗曟嵁鐘舵��",
+          field: "orderStatus",
+          type: "select",
+          dataKey: "inboundState",
+          data: [],
+        },
+      ],
+      [
+        {
+          title: "鍒涘缓鏂瑰紡",
+          field: "createType",
+          type: "select",
+          dataKey: "createType",
+          data: [],
+        },
+        { title: "鍒涘缓鑰�", field: "creater", type: "like" },
+        { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "inboundOrderNo",
+        title: "鍗曟嵁缂栧彿",
+        type: "string",
+        width: 120,
+        align: "left",
+        link: true,
+      },
+      {
+        field: "upperOrderNo",
+        title: "涓婃父鍗曟嵁缂栧彿",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+          field: "warehouseId",
+          title: "浠撳簱",
+          type: "string",
+          width: 90,
+          align: "left",
+          bind:{key: "warehouses", data: []}
+      },
+      {
+        field: "orderType",
+        title: "鍗曟嵁绫诲瀷",
+        type: "string",
+        width: 150,
+        align: "left",
+        bind: { key: "inOrderType", data: [] },
+      },
+      {
+        field: "orderStatus",
+        title: "鍗曟嵁鐘舵��",
+        type: "decimal",
+        width: 90,
+        align: "left",
+        bind: { key: "inboundState", data: [] },
+      },
+      {
+        field: "createType",
+        title: "鍒涘缓鏂瑰紡",
+        type: "string",
+        width: 120,
+        align: "left",
+        bind: { key: "createType", data: [] },
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "鍏ュ簱鍗曟槑缁�",
+      table: "InboundOrderDetail",
+      columns: [
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "orderId",
+          title: "鍏ュ簱鍗曚富閿�",
+          type: "string",
+          width: 90,
+          align: "left",
+          hidden: true,
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "select",
+          width: 150,
+          align: "left",
+          edit: { type: "" },
+          required: true,
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 100,
+          align: "left",
+          bind: { key: "MaterielNames", data: [] },
+        },
+        {
+          field: "batchNo",
+          title: "鎵规鍙�",
+          type: "decimal",
+          width: 90,
+          align: "left",
+          edit: { type: "" },
+          required: true,
+        },
+        {
+          field: "orderQuantity",
+          title: "鍗曟嵁鏁伴噺",
+          type: "decimal",
+          width: 90,
+          align: "left",
+          edit: { type: "number" },
+          required: true,
+        },
+        {
+          field: "receiptQuantity",
+          title: "缁勭洏鏁伴噺",
+          type: "int",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "overInQuantity",
+          title: "涓婃灦鏁伴噺",
+          type: "string",
+          width: 200,
+          align: "left",
+        },
+        {
+          field: "orderDetailStatus",
+          title: "璁㈠崟鏄庣粏鐘舵��",
+          type: "string",
+          width: 180,
+          align: "left",
+          bind: { key: "orderDetailStatusEnum", data: [] },
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ],
+      sortName: "id",
+      key: "id",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue b/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue
new file mode 100644
index 0000000..5046820
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue
@@ -0,0 +1,221 @@
+
+<template>
+    <view-grid
+      ref="grid"
+      :columns="columns"
+      :detail="detail"
+      :editFormFields="editFormFields"
+      :editFormOptions="editFormOptions"
+      :searchFormFields="searchFormFields"
+      :searchFormOptions="searchFormOptions"
+      :table="table"
+      :extend="extend"
+    >
+    </view-grid>
+  </template>
+    <script>
+  import extend from "@/extension/inbound/inboundOrderDetail.js";
+  import { ref, defineComponent } from "vue";
+  export default defineComponent({
+    setup() {
+      const table = ref({
+        key: "id",
+        footer: "Foots",
+        cnName: "鍏ュ簱鍗曟槑缁�",
+        name: "inboundOrderDetail",
+        url: "/InboundOrderDetail/",
+        sortName: "id",
+      });
+      const editFormFields = ref({
+        deviceCode: "",
+        deviceName: "",
+        deviceType: "",
+        deviceStatus: "",
+        deviceIp: "",
+        devicePort: "",
+        devicePlcType: "",
+        deviceRemark: "",
+      });
+      const editFormOptions = ref([
+        [
+          {
+            title: "璁惧缂栧彿",
+            required: true,
+            field: "deviceCode",
+            type: "string",
+          },
+          {
+            title: "璁惧鍚嶇О",
+            required: true,
+            field: "deviceName",
+            type: "string",
+          },
+          {
+            title: "璁惧绫诲瀷",
+            required: true,
+            field: "deviceType",
+            type: "string",
+          },
+          {
+            title: "璁惧鐘舵��",
+            required: true,
+            field: "deviceStatus",
+            type: "string",
+          },
+        ],
+        [
+          { title: "璁惧IP", required: true, field: "deviceIp", type: "string" },
+          {
+            title: "璁惧绔彛",
+            required: true,
+            field: "devicePort",
+            type: "string",
+          },
+          {
+            title: "PLC绫诲瀷",
+            required: true,
+            field: "devicePlcType",
+            type: "string",
+          },
+          {
+            title: "澶囨敞",
+            field: "deviceRemark",
+            type: "string",
+          },
+        ],
+      ]);
+      const searchFormFields = ref({
+        deviceCode: "",
+        deviceType: "",
+        deviceStatus: "",
+      });
+      const searchFormOptions = ref([
+        [
+          { title: "璁惧缂栧彿", field: "deviceCode" },
+          { title: "璁惧绫诲瀷", field: "deviceType" },
+          { title: "璁惧鐘舵��", field: "deviceStatus" },
+        ],
+      ]);
+      const columns = ref([
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "orderId",
+          title: "鍏ュ簱鍗曚富閿�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "batchNo",
+          title: "鎵规鍙�",
+          type: "decimal",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "orderQuantity",
+          title: "鍗曟嵁鏁伴噺",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "receiptQuantity",
+          title: "缁勭洏鏁伴噺",
+          type: "int",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "overInQuantity",
+          title: "涓婃灦鏁伴噺",
+          type: "string",
+          width: 200,
+          align: "left",
+        },
+        {
+          field: "orderDetailStatus",
+          title: "璁㈠崟鏄庣粏鐘舵��",
+          type: "string",
+          width: 180,
+          align: "left",
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ]);
+      const detail = ref({
+        cnName: "#detailCnName",
+        table: "",
+        columns: [],
+        sortName: "",
+      });
+      return {
+        table,
+        extend,
+        editFormFields,
+        editFormOptions,
+        searchFormFields,
+        searchFormOptions,
+        columns,
+        detail,
+      };
+    },
+  });
+  </script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail_Hty.vue b/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail_Hty.vue
new file mode 100644
index 0000000..fece3a0
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail_Hty.vue
@@ -0,0 +1,71 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_InboundOrderDetail_Hty.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/inbound/inboundOrderDetail_Hty.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'id',
+                footer: "Foots",
+                cnName: '鍘嗗彶鍏ュ簱鍗曟槑缁嗗巻鍙�',
+                name: 'inboundOrderDetail_Hty',
+                url: "/InboundOrderDetail_Hty/",
+                sortName: "id"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({});
+            const searchFormOptions = ref([]);
+            const columns = ref([{field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'orderId',title:'鍏ュ簱鍗曚富閿�',type:'int',width:110,require:true,align:'left',sort:true},
+                       {field:'materielCode',title:'鐗╂枡缂栧彿',type:'string',width:110,require:true,align:'left'},
+                       {field:'materielName',title:'鐗╂枡鍚嶇О',type:'string',width:180,require:true,align:'left'},
+                       {field:'batchNo',title:'鎵规鍙�',type:'string',width:110,require:true,align:'left'},
+                       {field:'orderQuantity',title:'鍗曟嵁鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                       {field:'receiptQuantity',title:'缁勭洏鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                       {field:'overInQuantity',title:'涓婃灦鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                       {field:'orderDetailStatus',title:'璁㈠崟鏄庣粏鐘舵��',type:'int',width:110,require:true,align:'left'},
+                       {field:'remark',title:'澶囨敞',type:'string',width:220,align:'left'},
+                       {field:'sourceId',title:'婧愪富閿�',type:'int',width:110,require:true,align:'left'},
+                       {field:'operateType',title:'澶囨敞',type:'string',width:110,require:true,align:'left'},
+                       {field:'creater',title:'鍒涘缓浜�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                table: "#detailTable",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/inbound/inboundOrder_Hty.vue b/WIDESEA_WMSClient/src/views/inbound/inboundOrder_Hty.vue
new file mode 100644
index 0000000..749258e
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/inbound/inboundOrder_Hty.vue
@@ -0,0 +1,115 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_InboundOrder_Hty.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/inbound/inboundOrder_Hty.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'id',
+                footer: "Foots",
+                cnName: '鍘嗗彶鍏ュ簱鍗�',
+                name: 'inboundOrder_Hty',
+                url: "/InboundOrder_Hty/",
+                sortName: "id"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({});
+            const searchFormOptions = ref([
+                [
+                    { title: "鍗曟嵁缂栧彿", field: "orderNo", type: "like" },
+                    { title: "涓婃父鍗曟嵁缂栧彿", field: "upperOrderNo", type: "like" },
+                    {
+                    title: "鍗曟嵁绫诲瀷",
+                    field: "orderType",
+                    type: "select",
+                    dataKey: "inOrderType",
+                    data: [],
+                    },
+                    {
+                    title: "鍗曟嵁鐘舵��",
+                    field: "orderStatus",
+                    type: "select",
+                    dataKey: "inboundState",
+                    data: [],
+                    },
+                ],
+                [
+                    {
+                    title: "鍒涘缓鏂瑰紡",
+                    field: "createType",
+                    type: "select",
+                    dataKey: "createType",
+                    data: [],
+                    },
+                    { title: "鍒涘缓鑰�", field: "creater", type: "like" },
+                    { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+                ],
+            ]);
+            const columns = ref([{field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'orderNo',title:'鍗曟嵁缂栧彿',type:'string',width:110,require:true,align:'left',sort:true},
+                       {field:'upperOrderNo',title:'涓婃父鍗曟嵁缂栧彿',type:'string',width:110,align:'left'},
+                       {field:'orderType',title:'鍗曟嵁绫诲瀷',type:'int',width:110,require:true,align:'left'},
+                       {field:'orderStatus',title:'鍗曟嵁鐘舵��',type:'int',width:110,require:true,align:'left'},
+                       {field:'createType',title:'鍒涘缓鏂瑰紡',type:'int',width:110,require:true,align:'left'},
+                       {field:'remark',title:'澶囨敞',type:'string',width:180,align:'left'},
+                       {field:'sourceId',title:'婧愪富閿�',type:'int',width:110,require:true,align:'left'},
+                       {field:'operateType',title:'澶囨敞',type:'string',width:110,require:true,align:'left'},
+                       {field:'creater',title:'鍒涘缓浜�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "鍘嗗彶鍏ュ簱鍗曟槑缁�",
+                table: "InboundOrderDetail_Hty",
+                columns: [
+                    {field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'orderId',title:'鍏ュ簱鍗曚富閿�',type:'int',width:110,require:true,align:'left',sort:true},
+                       {field:'materielCode',title:'鐗╂枡缂栧彿',type:'string',width:110,require:true,align:'left'},
+                       {field:'materielName',title:'鐗╂枡鍚嶇О',type:'string',width:180,require:true,align:'left'},
+                       {field:'batchNo',title:'鎵规鍙�',type:'string',width:110,require:true,align:'left'},
+                       {field:'orderQuantity',title:'鍗曟嵁鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                       {field:'receiptQuantity',title:'缁勭洏鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                       {field:'overInQuantity',title:'涓婃灦鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                       {field:'orderDetailStatus',title:'璁㈠崟鏄庣粏鐘舵��',type:'int',width:110,require:true,align:'left'},
+                       {field:'remark',title:'澶囨敞',type:'string',width:220,align:'left'},
+                       {field:'sourceId',title:'婧愪富閿�',type:'int',width:110,require:true,align:'left'},
+                       {field:'operateType',title:'澶囨敞',type:'string',width:110,require:true,align:'left'},
+                       {field:'creater',title:'鍒涘缓浜�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}
+                ],
+                sortName: "id",
+                key: "id"
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue b/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue
new file mode 100644
index 0000000..8851231
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue
@@ -0,0 +1,316 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/inbound/purchaseOrder.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "閲囪喘鍗�",
+      name: "purchaseOrder",
+      url: "/PurchaseOrder/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      // orderType: "",
+      // inboundOrderNo: "",
+      // upperOrderNo: "",
+      // remark: "",
+    });
+    const editFormOptions = ref([
+      // [
+      //   {
+      //     title: "鍗曟嵁绫诲瀷",
+      //     required: true,
+      //     field: "orderType",
+      //     type: "select",
+      //     dataKey: "inOrderType",
+      //     data: [],
+      //   },
+      //   {
+      //     field: "inboundOrderNo",
+      //     title: "鍗曟嵁缂栧彿",
+      //     type: "string",
+      //   },
+      //   {
+      //     title: "涓婃父鍗曟嵁缂栧彿",
+      //     field: "upperOrderNo",
+      //     type: "string",
+      //   },
+      //   {
+      //     title: "澶囨敞",
+      //     field: "remark",
+      //     type: "textarea",
+      //   },
+      // ],
+    ]);
+    const searchFormFields = ref({
+      purchaseOrderNo: "",
+      purchaseOrderType: "",
+      purchaseOrderStatus: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "閲囪喘鍗曞彿", field: "purchaseOrderNo", type: "like" },
+        {
+          title: "鍗曟嵁绫诲瀷",
+          field: "purchaseOrderType",
+          type: "select",
+          dataKey: "purchaseType",
+          data: [],
+        },
+        {
+          title: "鍗曟嵁鐘舵��",
+          field: "purchaseOrderStatus",
+          type: "select",
+          dataKey: "purchaseOrderStatus",
+          data: [],
+        },
+      ]
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "purchaseOrderNo",
+        title: "閲囪喘鍗曞彿",
+        type: "string",
+        width: 150,
+        align: "left",
+        link: true,
+      },
+      {
+        field: "purchaseOrderType",
+        title: "鍗曟嵁绫诲瀷",
+        type: "string",
+        width: 150,
+        align: "left",
+        bind: { key: "", data: [{key:'S',value:"鏍囧噯鍏ュ簱"},{key:'V',value:"瀵勫敭琛ョ粰鍏ュ簱"}] },
+      },
+      
+      {
+        field: "supplierCode",
+        title: "渚涘簲鍟嗙紪鍙�",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "orderQuantity",
+        title: "閲囪喘鏁伴噺",
+        type: "decimal",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "purchaseOrderStatus",
+        title: "閲囪喘鍗曠姸鎬�",
+        type: "string",
+        width: 90,
+        align: "left",
+        bind: { key: "purchaseOrderStatus", data: [] },
+      },
+      {
+        field: "orderDate",
+        title: "涓嬪崟鏃ユ湡",
+        type: "string",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "閲囪喘鍗曟槑缁�",
+      table: "InboundOrderDetail",
+      columns: [
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "purchaseOrderId",
+          title: "閲囪喘鍗曚富閿�",
+          type: "string",
+          width: 90,
+          align: "left",
+          hidden: true,
+        },
+        {
+          field: "rowNo",
+          title: "琛屽彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "select",
+          width: 150,
+          align: "left",
+          edit: { type: "" },
+          required: true,
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 100,
+          align: "left",
+          bind: { key: "MaterielNames", data: [] },
+        },
+        // {
+        //   field: "batchNo",
+        //   title: "鎵规鍙�",
+        //   type: "decimal",
+        //   width: 90,
+        //   align: "left",
+        //   edit: { type: "" },
+        //   required: true,
+        // },
+        {
+          field: "purchaseDetailQuantity",
+          title: "鍗曟嵁鏁伴噺",
+          type: "decimal",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "unit",
+          title: "鍗曚綅",
+          type: "string",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "warehouseId",
+          title: "浠撳簱",
+          type: "string",
+          width: 100,
+          align: "left",
+          bind: { key: "warehouses", data: [] },
+        },
+        {
+          field: "purchaseDetailStatus",
+          title: "璁㈠崟鏄庣粏鐘舵��",
+          type: "string",
+          width: 180,
+          align: "left",
+          bind: { key: "purchaseOrderStatus", data: [] },
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ],
+      sortName: "id",
+      key: "id",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/inbound/purchaseOrderDetail.vue b/WIDESEA_WMSClient/src/views/inbound/purchaseOrderDetail.vue
new file mode 100644
index 0000000..6161c3a
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/inbound/purchaseOrderDetail.vue
@@ -0,0 +1,67 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_PurchaseOrderDetail.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/inbound/purchaseOrderDetail.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'id',
+                footer: "Foots",
+                cnName: '閲囪喘鍗曟槑缁�',
+                name: 'purchaseOrderDetail',
+                url: "/PurchaseOrderDetail/",
+                sortName: "id"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({});
+            const searchFormOptions = ref([]);
+            const columns = ref([{field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'purchaseOrderId',title:'澶磋〃涓婚敭',type:'int',width:110,require:true,align:'left',sort:true},
+                       {field:'rowNo',title:'琛屽彿',type:'int',width:110,require:true,align:'left'},
+                       {field:'materielCode',title:'鐗╂枡缂栧彿',type:'string',width:110,require:true,align:'left'},
+                       {field:'purchaseDetailStatus',title:'閲囪喘鍗曟槑缁嗙姸鎬�',type:'int',width:110,require:true,align:'left'},
+                       {field:'warehouseId',title:'WarehouseId',type:'int',width:110,require:true,align:'left'},
+                       {field:'purchaseDetailQuantity',title:'PurchaseDetailQuantity',type:'float',width:110,require:true,align:'left'},
+                       {field:'unit',title:'Unit',type:'string',width:110,require:true,align:'left'},
+                       {field:'creater',title:'鍒涘缓鑰�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'codifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                table: "#detailTable",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue b/WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue
new file mode 100644
index 0000000..4d9407f
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue
@@ -0,0 +1,374 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+      <script>
+import extend from "@/extension/inbound/receiveOrder.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "receiveOrderId",
+      footer: "Foots",
+      cnName: "鏀惰揣鍗�",
+      name: "receiveOrder",
+      url: "/ReceiveOrder/",
+      sortName: "receiveOrderId",
+    });
+
+    const searchFormFields = ref({
+      receiveOrderNo: "",
+      receiveOrderType: "",
+      receiveOrderStatus: "",
+      creater: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鍗曟嵁缂栧彿", field: "receiveOrderNo", type: "like" },
+        {
+          title: "鍗曟嵁绫诲瀷",
+          field: "receiveOrderType",
+          type: "select",
+          dataKey: "receiveOrderTypeEnum",
+          data: [],
+        },
+        {
+          title: "鍗曟嵁鐘舵��",
+          field: "receiveOrderStatus",
+          type: "selectList",
+          dataKey: "receiveStatus",
+          data: [],
+        },
+      ],
+      [
+        { title: "渚涘簲鍟�", field: "suppliersId", type: "select",dataKey:"suppliers",data:[]},
+        { title: "鍒涘缓鑰�", field: "creater", type: "like" },
+      ],
+    ]);
+
+    const editFormFields = ref({
+      receiveOrderNo: "",
+      receiveOrderType: "",
+      suppliersId: "",
+      warehouseId: "",
+      deliveryCode: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          field: "receiveOrderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "string",
+          readonly: "true",
+        },
+        {
+          title: "鍗曟嵁绫诲瀷",
+          required: true,
+          field: "receiveOrderType",
+          type: "select",
+          dataKey: "receiveOrderTypeEnum",
+          data: [],
+        },
+        {
+          title: "渚涘簲鍟�",
+          field: "suppliersId",
+          type: "select",
+          dataKey: "suppliers",
+          data: [],
+          required: true,
+        },
+        {
+          title: "浠撳簱",
+          field: "warehouseId",
+          type: "select",
+          dataKey: "warehouses",
+          data: [],
+          required: true,
+        },
+      ],
+      [
+        {
+          title: "閫佽揣鍗曞彿",
+          field: "deliveryCode",
+          type: "string",
+        },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "receiveOrderId",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "receiveOrderNo",
+        title: "鏀惰揣鍗曞彿",
+        type: "string",
+        width: 150,
+        align: "left",
+        link: true,
+      },
+      {
+        field: "receiveOrderType",
+        title: "璁㈠崟绫诲瀷",
+        type: "string",
+        width: 150,
+        align: "left",
+        bind: { key: "receiveOrderTypeEnum", data: [] },
+      },
+      {
+        field: "receiveOrderStatus",
+        title: "璁㈠崟鐘舵��",
+        type: "string",
+        width: 120,
+        align: "left",
+        bind: { key: "receiveStatus", data: [] },
+      },
+      {
+        field: "customerId",
+        title: "瀹㈡埛浠e彿",
+        type: "string",
+        width: 90,
+        align: "left",
+        hidden:true
+      },
+      {
+        field: "suppliersId",
+        title: "渚涘簲鍟嗕唬鍙�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "warehouseId",
+        title: "浠撳簱",
+        type: "string",
+        width: 90,
+        align: "left",
+        bind:{key: "warehouses", data: []}
+      },
+      {
+        field: "receiveDate",
+        title: "鏀惰揣鏃ユ湡",
+        type: "string",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "deliveryCode",
+        title: "閫佽揣鍗曞彿",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "uploadStatus",
+        title: "涓婁紶鐘舵��",
+        type: "string",
+        width: 90,
+        align: "left",
+        bind:{key:"enable",data:[]}
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "鏀惰揣鍗曟槑缁�",
+      table: "Dt_ReceiveOrderDetail",
+      columns: [
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "receiveOrderId",
+          title: "鏀惰揣鍗曚富閿�",
+          type: "string",
+          width: 90,
+          align: "left",
+          hidden: true,
+        },
+        {
+          field: "purchaseOrderDetailRowNo",
+          title: "閲囪喘鍗曟槑缁嗚鍙�",
+          type: "string",
+          width: 60,
+          align: "left",
+        },
+        {
+          field: "purchaseOrderNo",
+          title: "閲囪喘鍗曞彿",
+          type: "select",
+          width: 160,
+          align: "left",
+          required: true,
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "select",
+          width: 150,
+          align: "left",
+          required: true,
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 100,
+          align: "left",
+          bind: { key: "MaterielNames", data: [] },
+        },
+        {
+          field: "lotNo",
+          title: "鎵规鍙�",
+          type: "decimal",
+          width: 90,
+          align: "left",
+          required: true,
+        },
+        {
+          field: "receivedQuantity",
+          title: "鏀惰揣鏁伴噺",
+          type: "decimal",
+          width: 90,
+          align: "left",
+          required: true,
+        },
+        {
+          field: "ifInspection",
+          title: "鏄惁妫�楠�",
+          type: "int",
+          width: 90,
+          align: "left",
+          bind: { key: "enable", data: [] },
+        },
+        {
+          field: "priceInTax",
+          title: "鍚◣浠锋牸",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "taxRate",
+          title: "绋庣巼",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "unit",
+          title: "鍗曚綅",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ],
+      sortName: "id",
+      key: "id",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+      
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/inbound/receiveOrderDetail.vue b/WIDESEA_WMSClient/src/views/inbound/receiveOrderDetail.vue
new file mode 100644
index 0000000..c27198a
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/inbound/receiveOrderDetail.vue
@@ -0,0 +1,73 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_ReceiveOrderDetail.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/inbound/receiveOrderDetail.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'id',
+                footer: "Foots",
+                cnName: '鏀惰揣鍗曟槑缁�',
+                name: 'order/Dt_ReceiveOrderDetail',
+                url: "/Dt_ReceiveOrderDetail/",
+                sortName: "id"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({});
+            const searchFormOptions = ref([]);
+            const columns = ref([{field:'Id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'ReceiveOrderId',title:'鏀惰揣鍗曚富閿�',type:'int',width:110,require:true,align:'left',sort:true},
+                       {field:'PurchaseOrderNo',title:'閲囪喘鍗曞彿',type:'string',width:110,require:true,align:'left'},
+                       {field:'PurchaseOrderDetailRowNo',title:'閲囪喘鍗曟槑缁嗚鍙�',type:'int',width:110,require:true,align:'left'},
+                       {field:'RowNo',title:'琛屽彿',type:'int',width:110,require:true,align:'left'},
+                       {field:'MaterielCode',title:'鐗╂枡缂栧彿',type:'string',width:110,require:true,align:'left'},
+                       {field:'LotNo',title:'鎵规鍙�',type:'string',width:110,require:true,align:'left'},
+                       {field:'ReceivedQuantity',title:'鏀惰揣鏁伴噺',type:'float',width:110,require:true,align:'left'},
+                       {field:'IfInspection',title:'鏄惁瑕佹楠�',type:'int',width:110,require:true,align:'left'},
+                       {field:'PriceInTax',title:'鍚◣浠锋牸',type:'decimal',width:110,require:true,align:'left'},
+                       {field:'TaxRate',title:'绋庣巼',type:'string',width:110,align:'left'},
+                       {field:'CurrCode',title:'甯佸埆缂栫爜',type:'string',width:110,align:'left'},
+                       {field:'Remark',title:'澶囨敞',type:'string',width:220,align:'left'},
+                       {field:'Unit',title:'Unit',type:'string',width:110,require:true,align:'left'},
+                       {field:'Creater',title:'鍒涘缓鑰�',type:'string',width:110,require:true,align:'left'},
+                       {field:'CreateDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'Modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'ModifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                table: "#detailTable",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/index/Message.vue b/WIDESEA_WMSClient/src/views/index/Message.vue
new file mode 100644
index 0000000..e051ab6
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/index/Message.vue
@@ -0,0 +1,108 @@
+<template>
+  <div class="message-container">
+    <div class="item" v-for="(item, index) in list" :key="index">
+      <div class="title">{{ item.title }}({{ item.date }})</div>
+      <div class="content">
+        <el-row>
+          <el-col :span="8">
+            <label>鏀惰揣鍗曞彿锛歿{ item.formData.receiveOrderNo }}</label>
+          </el-col>
+          <el-col :span="8">
+            <label>璐ㄦ鍗曞彿锛歿{ item.formData.checkOrderNo }}</label>
+          </el-col>
+          <el-col :span="8">
+            <label>鏀惰揣鏄庣粏琛屽彿锛歿{ item.formData.receiveDetailRowNo }}</label>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="8">
+            <label>鐗╂枡缂栧彿锛歿{ item.formData.materielCode }}</label>
+          </el-col>
+          <el-col :span="8">
+            <label>鍚堟牸鏁伴噺锛歿{ item.formData.qualifiedQuantity }}</label>
+          </el-col>
+          <el-col :span="8">
+            <label>鐗归噰鏁伴噺锛歿{ item.formData.defectedQuantity }}</label>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="8">
+            <label>閫�璐ф暟閲忥細{{ item.formData.returnQuantity }}</label>
+          </el-col>
+          <el-col :span="8">
+            <label>鎶ュ簾鏁伴噺锛歿{ item.formData.scrappedQuantity }}</label>
+          </el-col>
+          <el-col :span="8">
+            <label>璐ㄦ鎬绘暟锛歿{ item.formData.receivedQuantity }}</label>
+          </el-col>
+        </el-row>
+        
+        <el-row>
+          <el-col :span="16">
+            <label>鐗归噰璇存槑锛歿{ item.formData.defectedNote }}</label>
+          </el-col>
+          <el-col :span="8">
+            <label>妫�楠屼汉锛歿{ item.formData.checkUserName }}</label>
+          </el-col>
+        </el-row>
+      </div>
+      <div style="margin-top: 20px">
+        <el-button type="primary">鍚屾剰</el-button
+        ><el-button type="danger">椹冲洖</el-button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    list: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+  },
+  created() {
+    // if (!this.list.length) {
+    //   this.list.push({
+    //     title: "IQC璐ㄦ缁撴灉瀹℃壒",
+    //     formData: {
+    //       receiveOrderNo: "鏀惰揣鍗曞彿",
+    //       checkOrderNo: "璐ㄦ鍗曞彿",
+    //       receiveDetailRowNo: "鏀惰揣鏄庣粏琛屽彿",
+    //       materielCode: "鐗╂枡缂栧彿",
+    //       qualifiedQuantity: "鍚堟牸鏁伴噺",
+    //       defectedQuantity: "鐗归噰鏁伴噺",
+    //       returnQuantity: "閫�璐ф暟閲�",
+    //       scrappedQuantity: "鎶ュ簾鏁伴噺",
+    //       receivedQuantity: "璐ㄦ鎬绘暟",
+    //       defectedNote: "鐗归噰璇存槑",
+    //       checkUserName: "妫�楠屼汉",
+    //       message: "娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭",
+    //     },
+    //     date: "2022-05-02 03:10",
+    //   });
+    // }
+  },
+};
+</script>
+<style scoped lang="less">
+.message-container {
+  .title {
+    padding-bottom: 10px;
+    font-weight: bold;
+  }
+  .item {
+    border-bottom: 1px solid #eee;
+    padding: 10px 20px;
+  }
+  .content {
+    color: #1b1b1b;
+    font-size: 14px;
+  }
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/views/index/MessageConfig.js b/WIDESEA_WMSClient/src/views/index/MessageConfig.js
new file mode 100644
index 0000000..0f18350
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/index/MessageConfig.js
@@ -0,0 +1,28 @@
+import * as signalR from '@microsoft/signalr';
+import { ElNotification } from 'element-plus';
+
+export default function (http, receive) {
+  let connection;
+  http.post('api/User/GetCurrentUserInfo').then((result) => {
+    connection = new signalR.HubConnectionBuilder()
+      .withAutomaticReconnect()
+      .withUrl(`${http.ipAddress}message?userName=${result.data.userName}`)
+     //.withUrl(`${http.ipAddress}message`)
+      .build();
+
+    connection.start().catch((err) => console.log(ex.message));
+    //鑷姩閲嶈繛鎴愬姛鍚庣殑澶勭悊
+    connection.onreconnected((connectionId) => {
+      console.log(connectionId);
+    });
+    connection.on('ReceiveHomePageMessage', function (data) {
+      console.log(data)
+      ElNotification.success({
+        title:data.title,
+        message: data.message + '',
+        type: 'info'
+      });
+      receive && receive(data);
+    });
+  });
+}
diff --git a/WIDESEA_WMSClient/src/views/index/index.less b/WIDESEA_WMSClient/src/views/index/index.less
new file mode 100644
index 0000000..c872e91
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/index/index.less
@@ -0,0 +1,644 @@
+.vol-aside {
+  height: 100%;
+  position: absolute;
+  float: left;
+  overflow: hidden;
+}
+
+.vol-menu {
+  border: 0 !important;
+}
+
+.vol-aside .tac {
+  text-align: left;
+}
+
+.vol-aside .header {
+  text-align: center;
+  position: absolute;
+  height: 60px;
+  position: relative;
+  line-height: 60px;
+}
+
+.vol-aside .vol-menu {
+  position: absolute;
+  width: 100%;
+  top: 60px;
+  bottom: 0;
+  background: white;
+  border-right: 1px solid #e3e3e3;
+}
+
+.vol-aside .vol-menu ::v-deep(.ivu-menu) {
+  text-align: left;
+  position: unset;
+  width: 100% !important;
+}
+
+.vol-aside .vol-menu ::v-deep(.is-horizontal) {
+  display: none !important;
+}
+
+.vol-aside .vol-menu ::v-deep(.is-vertical) {
+  width: 2px;
+  right: -1px;
+}
+
+.vol-container {
+  min-width: 800px;
+  right: 0;
+  display: inline-block;
+  position: absolute;
+  margin: 0;
+  box-sizing: border-box;
+  height: 100%;
+}
+
+.vol-container .vol-path {
+  position: relative;
+  width: 100%;
+  display: inline-block;
+  border-bottom: 1px solid #eee;
+}
+
+.vol-container .vol-path span {
+  position: relative;
+  margin-right: 10px;
+  color: #969696;
+}
+
+.vol-header {
+  height: 61px;
+  width: 100%;
+  position: relative;
+  display: flex;
+  border-bottom: 1px solid #eee;
+}
+
+.vol-main {
+  border-left: 1px solid #eee;
+  position: absolute;
+  width: 100%;
+  bottom: 0;
+  top: 95px;
+  margin: 0;
+  overflow: auto;
+}
+
+.header {
+  padding: 5px;
+}
+
+.header img {
+  height: 100%;
+  margin-right: 25px;
+}
+
+.header-info {
+  padding-right: 20px;
+  display: inline-block;
+  // position: absolute;
+  height: 100%;
+}
+
+.header-info > div {
+  float: left;
+  height: 100%;
+}
+
+.user-header {
+  background: white;
+  height: 52px;
+  width: 52px;
+  border-radius: 50%;
+  margin-right: 0px;
+  top: 4px;
+  left: 7px;
+  position: relative;
+  border: 1px solid #dfdfdf;
+}
+
+.project-name {
+  line-height: 60px;
+  padding: 0 50px 0 20px;
+  color: #fff;
+  font-size: 16px;
+  letter-spacing: 1px;
+}
+
+.header-text {
+  vertical-align: middle;
+  height: 100%;
+  // position: absolute;
+  flex: 1;
+  text-align: left;
+  font-size: 15px;
+  left: 21px;
+  line-height: 60px;
+  letter-spacing: 1px;
+}
+
+.vol-header .user {
+  text-align: left;
+  padding: 0 12px;
+  position: relative;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  // height: 60px;
+  justify-content: center;
+  span:last-child {
+    font-size: 12px;
+  }
+}
+
+.vol-header .settings {
+  padding-top: 10px;
+  color: #d4d2d2;
+}
+
+.vol-header .user span {
+  position: relative;
+}
+
+.header-info:hover {
+  cursor: pointer;
+}
+
+.header-navigation {
+  cursor: pointer;
+  box-shadow: none;
+  border-bottom: 1px solid #eee;
+  height: 34px;
+  /* overflow: hidden; */
+  line-height: 35px;
+  display: block;
+  margin: 0;
+  padding: 0;
+  outline: 0;
+  list-style: none;
+  position: relative;
+  z-index: 900;
+  font-weight: initial;
+  margin-top: -1px;
+}
+
+.el-tabs--border-card {
+  border: none;
+}
+
+.header-navigation ::v-deep(.el-tabs__item) {
+  height: 34px;
+  font-size: 14px;
+  line-height: 34px;
+  padding-bottom: 6px;
+  color: #525252 !important;
+  position: relative;
+  margin: 0 4px;
+  border: 1px solid #e2e2e2;
+  border-top-right-radius: 4px;
+  border-top-left-radius: 4px;
+  // border-bottom: 0px;
+}
+
+.header-navigation ::v-deep(.el-tabs__item.is-active) {
+  color: #1a81ea !important;
+}
+
+.header-navigation ::v-deep(.el-tabs__nav-prev),
+.header-navigation ::v-deep(.el-tabs__nav-next) {
+  line-height: 35px;
+  padding-left: 4px;
+}
+
+.vol-header .user span:first-child {
+  font-size: 15px;
+  font-weight: bolder;
+}
+
+.h-link {
+  line-height: 59px;
+}
+
+.h-link a {
+  font-size: 14px;
+  text-decoration: none;
+  padding: 0px 15px;
+  /* height: 60px; */
+  display: inline-block;
+}
+
+img[src=''],
+img:not([src]) {
+  opacity: 0;
+}
+
+//榛戣壊
+.vol-theme-dark {
+  .header {
+    background: #101010;
+  }
+
+  .header-text {
+    color: white;
+  }
+
+  .vol-header {
+    background-color: #272929;
+  }
+
+  .h-link a:hover {
+    background: #0c0202;
+  }
+
+  a {
+    color: #f2f2f2;
+  }
+
+  .h-link a:hover {
+    color: #dfdfdf;
+  }
+
+  .h-link .actived {
+    border-bottom: 2px solid white;
+  }
+
+  .h-link .actived a {
+    color: white !important;
+  }
+
+  .vol-header .user {
+    color: #ececec;
+  }
+
+  .vol-header .settings {
+    color: #d4d2d2;
+  }
+
+  .vol-aside .vol-menu {
+    background: black;
+  }
+}
+
+.vol-theme-white .vol-aside ::v-deep(.vol-el-menu-item) {
+  background: #2e333b;
+  color: white;
+}
+
+.vol-theme-dark .vol-aside ::v-deep(.vol-menu .el-submenu) {
+  background: black;
+}
+
+.vol-theme-dark .vol-aside ::v-deep(.vol-menu .el-sub-menu__title *) {
+  color: #d6d6d6;
+}
+
+.vol-theme-dark .vol-aside ::v-deep(.vol-el-menu-item .el-menu-item) {
+  color: #eee;
+  background: #1f1f1f;
+}
+
+.vol-theme-dark .vol-aside ::v-deep(.vol-el-menu-item .el-menu-item.is-active),
+.vol-theme-dark .vol-aside ::v-deep(.menu-item-lv1) {
+  background: black;
+}
+
+.vol-theme-dark .vol-aside ::v-deep(.menu-item-lv1) {
+  background: black;
+  color: #d6d6d6;
+}
+
+.vol-theme-dark .vol-aside ::v-deep(.vol-el-menu-item .el-menu-item:hover) {
+  background: black;
+}
+
+.vol-theme-dark .vol-aside ::v-deep(.el-sub-menu__title) {
+  background-color: black;
+}
+
+.vol-theme-dark .vol-aside ::v-deep(.el-sub-menu__title:hover) {
+  background-color: rgb(25, 25, 25);
+}
+
+.vol-theme-dark .vol-aside ::v-deep(.el-sub-menu__title:hover *) {
+  color: white;
+}
+
+.vol-theme-red,
+.vol-theme-red2 {
+  .vol-header {
+    background-color: rgb(237, 64, 20);
+  }
+
+  .header-text {
+    color: #dcdfe6;
+  }
+
+  .h-link a:hover {
+    background: #d71212;
+  }
+
+  .h-link .actived {
+    border-bottom: 2px solid white;
+  }
+
+  .h-link a,
+  .h-link .actived a,
+  .vol-header .settings,
+  .vol-header .user {
+    color: white;
+  }
+
+  .vol-header .header-text {
+    color: #fbfbfb;
+  }
+}
+
+.vol-theme-red {
+  .header {
+    background-color: rgb(237, 64, 20);
+  }
+}
+
+.vol-theme-red2 {
+  .header {
+    background-color: #a90000;
+  }
+}
+
+.vol-theme-orange,
+.vol-theme-orange2 {
+  .header-text {
+    color: #dcdfe6;
+  }
+
+  .vol-header {
+    background-color: rgb(255, 153, 0);
+  }
+
+  .h-link a:hover {
+    background: #c97901;
+  }
+
+  .h-link .actived {
+    border-bottom: 2px solid white;
+  }
+
+  .h-link a,
+  .h-link .actived a,
+  .vol-header .settings,
+  .vol-header .user {
+    color: white;
+  }
+
+  .vol-header .header-text {
+    color: #fbfbfb;
+  }
+}
+
+.vol-theme-orange {
+  .header {
+    background: rgb(255, 153, 0);
+  }
+}
+
+.vol-theme-orange2 {
+  .header {
+    background-color: rgb(232, 141, 5);
+  }
+}
+
+//缁胯壊
+.vol-theme-green,
+.vol-theme-green2 {
+  .header-text {
+    color: #dcdfe6;
+  }
+
+  .vol-header {
+    background-color: rgb(25, 190, 107);
+  }
+
+  .h-link a:hover {
+    background: #329103;
+  }
+
+  .h-link .actived {
+    border-bottom: 2px solid white;
+  }
+
+  .h-link a,
+  .h-link .actived a,
+  .vol-header .settings,
+  .vol-header .user {
+    color: white;
+  }
+
+  .vol-header .header-text {
+    color: #fbfbfb;
+  }
+}
+
+.vol-theme-green {
+  .header {
+    background: rgb(25, 190, 107);
+  }
+}
+
+.vol-theme-green2 {
+  .header {
+    background-color: rgb(1, 158, 79);
+  }
+}
+
+//钃濊壊
+.vol-theme-blue,
+.vol-theme-blue2 {
+  .header-text {
+    color: #dcdfe6;
+  }
+
+  .vol-header {
+    background-color: rgb(45, 140, 240);
+  }
+
+  .h-link a:hover {
+    background: #0170e3;
+  }
+
+  .h-link .actived {
+    border-bottom: 2px solid white;
+  }
+
+  .h-link a,
+  .h-link .actived a,
+  .vol-header .settings,
+  .vol-header .user {
+    color: white;
+  }
+
+  .vol-header .header-text {
+    color: #fbfbfb;
+  }
+}
+
+.vol-theme-blue {
+  .header {
+    background-color: rgb(45, 140, 240);
+  }
+}
+
+.vol-theme-blue2 {
+  .header {
+    background-color: rgb(0, 104, 214);
+  }
+}
+
+//鐧借壊
+.vol-theme-white {
+  .header {
+    background-color: #434956;
+  }
+
+  .h-link a:hover {
+    background: #eeeeee;
+  }
+
+  .h-link a {
+    color: #211f1f;
+  }
+
+  .header-navigation {
+    // box-shadow: -7px 11px 10px -13px #678aa7;
+    border-bottom: 1px solid #eee;
+    height: 32px;
+    overflow: hidden;
+    line-height: 32px;
+    display: block;
+    margin: 0;
+    padding: 0;
+    outline: 0;
+    list-style: none;
+    position: relative;
+    z-index: 900;
+    font-weight: 400;
+  }
+
+  .vol-aside .vol-menu {
+    background: #353941;
+  }
+}
+
+.vol-theme-white .project-name {
+  color: #505050;
+}
+
+.vol-theme-white .vol-aside::v-deep(.vol-el-menu-item .el-menu-item.is-active),
+.vol-theme-white .vol-aside ::v-deep(.menu-item-lv1) {
+  background: #353941;
+}
+
+.vol-theme-white .vol-aside ::v-deep(.menu-item-lv1) {
+  background: #353941;
+  color: #d6d6d6;
+}
+
+.vol-theme-white .vol-aside ::v-deep(.vol-el-menu-item .el-menu-item:hover) {
+  background: #353941;
+}
+
+.vol-theme-white .vol-aside ::v-deep(.el-sub-menu__title) {
+  background-color: #353941;
+}
+
+.vol-theme-white .vol-aside ::v-deep(.el-sub-menu__title:hover) {
+  background-color: rgb(47, 46, 46);
+}
+
+.vol-theme-white .vol-aside ::v-deep(.el-sub-menu__title),
+.vol-theme-white .vol-aside ::v-deep(.el-menu-item),
+.vol-theme-white .vol-aside ::v-deep(.el-sub-menu__title:hover *) {
+  color: #bababa;
+}
+
+// .vol-theme-white .vol-aside ::v-deep(.vol-el-menu-item) {
+//   background: #363e4f;
+//   color: white;
+// }
+// .vol-theme-white .vol-aside ::v-deep(.vol-menu .el-submenu),
+// .vol-theme-white .vol-aside ::v-deep(.menu-item-lv1) {
+//   background: #515a6e;
+// }
+// .vol-theme-white .vol-aside ::v-deep(.vol-menu) {
+//   background: #515a6e;
+// }
+// .vol-theme-white .vol-aside ::v-deep(.vol-menu .el-sub-menu__title *),
+// .vol-theme-white .vol-aside ::v-deep(.menu-item-lv1 *) {
+//   color: #d6d6d6;
+// }
+// .vol-theme-white .vol-aside ::v-deep(.vol-el-menu-item .el-menu-item) {
+//   color: #eee;
+// }
+// .vol-theme-white .vol-aside ::v-deep(.vol-el-menu-item .el-menu-item.is-active),
+// .vol-theme-white .vol-aside ::v-deep(.menu-item-lv1.is-active) {
+//   background: #59647b;
+//   color: #fff;
+// }
+// .vol-theme-white .vol-aside ::v-deep(.vol-el-menu-item .el-menu-item:hover) {
+//   background: #6a758c;
+// }
+// .vol-theme-white .vol-aside ::v-deep(.el-sub-menu__title:hover) {
+//   background-color: #525865;
+// }
+// .vol-theme-white .vol-aside ::v-deep(.el-sub-menu__title:hover *) {
+//   color: white;
+// }
+
+// .vol-theme-red ::v-deep(.el-menu-item.is-active),
+// .vol-theme-red2 ::v-deep(.el-menu-item.is-active)
+// {
+//   background-color: #d71212;
+// }
+// .vol-theme-blue ::v-deep(.el-menu-item.is-active),
+// .vol-theme-blue2 ::v-deep(.el-menu-item.is-active)
+// {
+//   background-color: #2d8cf0;
+// }
+// .vol-theme-orange ::v-deep(.el-menu-item.is-active),
+// .vol-theme-orange2 ::v-deep(.el-menu-item.is-active)
+// {
+//   background-color: #ff9900;
+// }
+
+// .vol-theme-green ::v-deep(.el-menu-item.is-active),
+// .vol-theme-green2 ::v-deep(.el-menu-item.is-active)
+// {
+//   background-color: #19be6b;
+// }
+
+.theme-selector {
+  height: 100%;
+  padding-left: 16px;
+
+  .item {
+    cursor: pointer;
+    width: 60px;
+    height: 60px;
+    border-radius: 5px;
+    margin-bottom: 17px;
+    border: 1px solid #d4d2d2;
+    float: left;
+    margin-right: 13px;
+  }
+}
+
+.collapse-menu {
+  font-size: 21px;
+  color: #fff;
+  line-height: 60px;
+  position: absolute;
+  top: 0;
+  right: 5px;
+  cursor: pointer;
+}
diff --git a/WIDESEA_WMSClient/src/views/outbound/mesOutboundOrder.vue b/WIDESEA_WMSClient/src/views/outbound/mesOutboundOrder.vue
new file mode 100644
index 0000000..e5c696c
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/outbound/mesOutboundOrder.vue
@@ -0,0 +1,185 @@
+
+<template>
+    <view-grid
+      ref="grid"
+      :columns="columns"
+      :detail="detail"
+      :editFormFields="editFormFields"
+      :editFormOptions="editFormOptions"
+      :searchFormFields="searchFormFields"
+      :searchFormOptions="searchFormOptions"
+      :table="table"
+      :extend="extend"
+    >
+    </view-grid>
+  </template>
+    <script>
+  import extend from "@/extension/outbound/mesOutboundOrder.js";
+  import { ref, defineComponent } from "vue";
+  export default defineComponent({
+    setup() {
+      const table = ref({
+        key: "id",
+        footer: "Foots",
+        cnName: "MES鍑哄簱鍗�",
+        name: "mesOutboundOrder",
+        url: "/mesOutboundOrder/",
+        sortName: "id",
+      });
+      const editFormFields = ref({
+      });
+      const editFormOptions = ref([
+        [
+        ],
+      ]);
+      const searchFormFields = ref({
+        orderNo: "",
+        materialCode: "",
+        batchNo: "",
+      });
+      const searchFormOptions = ref([
+        [
+          { title: "鍗曟嵁缂栧彿", field: "orderNo", type:"like" },
+          { title: "鐗╂枡缂栧彿", field: "materialCode" ,type:"like"},
+          { title: "鎵规鍙�", field: "batchNo" ,type:"like"},
+        ],
+      ]);
+      const columns = ref([
+      {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          align: "left",
+        },
+        {
+          field: "warehouseId",
+          title: "鎵�灞炰粨搴�",
+          type: "string",
+          width: 80,
+          align: "left",
+          bind: { key: "warehouses", data: [] },
+        },
+        {
+          field: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "taskNo",
+          title: "浠诲姟鍗曞彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "batchNo",
+          title: "鎵规鍙�",
+          type: "decimal",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "OrderStatus",
+          title: "鍗曟嵁鏁伴噺",
+          type: "string",
+          width: 90,
+          align: "left",
+          bind: { key: "orderDetailStatusEnum", data: [] }
+        },
+        {
+          field: "createType",
+          title: "鍒涘缓鏂瑰紡",
+          type: "string",
+          width: 120,
+          align: "left",
+          bind: { key: "createType", data: [] },
+        },
+        {
+          field: "materialCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 200,
+          align: "left",
+        },
+        {
+          field: "materialName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 180,
+          align: "left",
+        },
+        {
+          field: "unit",
+          title: "鍗曚綅",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "orderQuantity",
+          title: "鍗曟嵁鏁伴噺",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "lockQuantity",
+          title: "閿佸畾鏁伴噺",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "overOutQuantity",
+          title: "宸插嚭鏁伴噺",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "line",
+          title: "绾夸綋",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "targetAddressCode",
+          title: "绾胯竟浠撳湴鍧�鐮�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "width",
+          title: "瑁佸垏瀹�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ]);
+      const detail = ref({
+        cnName: "#detailCnName",
+        table: "",
+        columns: [],
+        sortName: "",
+      });
+      return {
+        table,
+        extend,
+        editFormFields,
+        editFormOptions,
+        searchFormFields,
+        searchFormOptions,
+        columns,
+        detail,
+      };
+    },
+  });
+  </script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue b/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue
new file mode 100644
index 0000000..0fe8eda
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue
@@ -0,0 +1,370 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/outbound/outboundOrder.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "鍑哄簱鍗�",
+      name: "outboundOrder",
+      url: "/OutboundOrder/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      orderType: "",
+      orderNo:"",
+      upperOrderNo: "",
+      orderStatus: "",
+      remark: "",
+      warehouseId:""
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "鍗曟嵁绫诲瀷",
+          required: true,
+          field: "orderType",
+          type: "select",
+          dataKey: "outOrderType",
+          data: [],
+        },
+        {
+        field: "orderNo",
+        title: "鍗曟嵁缂栧彿",
+        type: "string",
+        readonly:true
+      },
+        {
+          title: "涓婃父鍗曟嵁缂栧彿",
+          field: "upperOrderNo",
+          type: "string",
+        },
+        {
+          title: "鍗曟嵁鐘舵��",
+          field: "orderStatus",
+          type: "select",
+          dataKey: "inboundState",
+          data: [],
+          readonly: true,
+        },
+        {
+          title: "浠撳簱",
+          field: "warehouseId",
+          type: "select",
+          dataKey: "warehouses",
+          data: [],
+          required: true,
+        },
+        {
+          title: "澶囨敞",
+          field: "remark",
+          type: "textarea",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      orderNo: "",
+      upperOrderNo: "",
+      orderType: "",
+      orderStatus: "",
+      createType: "",
+      creater: "",
+      createDate: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鍗曟嵁缂栧彿", field: "orderNo", type: "like" },
+        { title: "涓婃父鍗曟嵁缂栧彿", field: "upperOrderNo", type: "like" },
+        {
+          title: "鍗曟嵁绫诲瀷",
+          field: "orderType",
+          type: "select",
+          dataKey: "outOrderType",
+          data: [],
+        },
+        {
+          title: "鍗曟嵁鐘舵��",
+          field: "orderStatus",
+          type: "select",
+          dataKey: "outboundStatusEnum",
+          data: [],
+        },
+      ],
+      [
+        {
+          title: "鍒涘缓鏂瑰紡",
+          field: "createType",
+          type: "select",
+          dataKey: "createType",
+          data: [],
+        },
+        { title: "鍒涘缓鑰�", field: "creater", type: "like" },
+        { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "warehouseId",
+        title: "浠撳簱",
+        type: "string",
+        width: 90,
+        align: "left",
+        bind:{key: "warehouses", data: []}
+      },
+      {
+        field: "orderNo",
+        title: "鍗曟嵁缂栧彿",
+        type: "string",
+        width: 160,
+        align: "left",
+        // link: true,
+      },
+      {
+        field: "upperOrderNo",
+        title: "涓婃父鍗曟嵁缂栧彿",
+        type: "string",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "orderType",
+        title: "鍗曟嵁绫诲瀷",
+        type: "string",
+        width: 150,
+        align: "left",
+        bind: { key: "outOrderType", data: [] },
+      },
+      {
+        field: "orderStatus",
+        title: "鍗曟嵁鐘舵��",
+        type: "decimal",
+        width: 90,
+        align: "left",
+        bind: { key: "outboundStatusEnum", data: [] },
+      },
+      {
+        field: "createType",
+        title: "鍒涘缓鏂瑰紡",
+        type: "string",
+        width: 120,
+        align: "left",
+        bind: { key: "createType", data: [] },
+      },
+      {
+        field: "departmentCode",
+        title: "淇敼鏃堕棿",
+        type: "string",
+        width: 120,
+        align: "left",
+        hidden:true
+      },
+      {
+        field: "departmentName",
+        title: "閮ㄩ棬鍚嶇О",
+        type: "string",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "鍑哄簱鏄庣粏鍗�",
+      table: "OnboundOrderDetail",
+      columns: [
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "orderId",
+          title: "鍑哄簱鍗曚富閿�",
+          type: "string",
+          width: 90,
+          align: "left",
+          hidden: true,
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+          edit: { type: "string" },
+          required: true,
+        },
+        {
+          field: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+          align: "left",
+          edit: { type: "string" },
+        },
+        {
+          field: "batchNo",
+          title: "鎵规鍙�",
+          type: "decimal",
+          width: 90,
+          align: "left",
+          edit: { type: "string" },
+          required: true,
+        },
+        {
+          field: "orderQuantity",
+          title: "鍗曟嵁鏁伴噺",
+          type: "string",
+          width: 90,
+          align: "left",
+          edit: { type: "number" },
+          required: true,
+        },
+        {
+          field: "rowNo",
+          title: "琛屽彿",
+          type: "string",
+          width: 90,
+          align: "left",
+          edit: { type: "number" },
+          required: true,
+        },
+        {
+          field: "lockQuantity",
+          title: "閿佸畾鏁伴噺",
+          type: "int",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "overOutQuantity",
+          title: "宸插嚭鏁伴噺",
+          type: "string",
+          width: 200,
+          align: "left",
+        },
+        {
+          field: "orderDetailStatus",
+          title: "璁㈠崟鏄庣粏鐘舵��",
+          type: "string",
+          width: 180,
+          align: "left",
+          bind: { key: "orderDetailStatusEnum", data: [] },
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ],
+      sortName: "id",
+      key: "id",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue b/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue
new file mode 100644
index 0000000..e992c4c
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue
@@ -0,0 +1,221 @@
+
+<template>
+    <view-grid
+      ref="grid"
+      :columns="columns"
+      :detail="detail"
+      :editFormFields="editFormFields"
+      :editFormOptions="editFormOptions"
+      :searchFormFields="searchFormFields"
+      :searchFormOptions="searchFormOptions"
+      :table="table"
+      :extend="extend"
+    >
+    </view-grid>
+  </template>
+    <script>
+  import extend from "@/extension/outbound/outboundOrderDetail.js";
+  import { ref, defineComponent } from "vue";
+  export default defineComponent({
+    setup() {
+      const table = ref({
+        key: "id",
+        footer: "Foots",
+        cnName: "鍑哄簱鍗曟槑缁�",
+        name: "outboundOrderDetail",
+        url: "/OutboundOrderDetail/",
+        sortName: "id",
+      });
+      const editFormFields = ref({
+        deviceCode: "",
+        deviceName: "",
+        deviceType: "",
+        deviceStatus: "",
+        deviceIp: "",
+        devicePort: "",
+        devicePlcType: "",
+        deviceRemark: "",
+      });
+      const editFormOptions = ref([
+        [
+          {
+            title: "璁惧缂栧彿",
+            required: true,
+            field: "deviceCode",
+            type: "string",
+          },
+          {
+            title: "璁惧鍚嶇О",
+            required: true,
+            field: "deviceName",
+            type: "string",
+          },
+          {
+            title: "璁惧绫诲瀷",
+            required: true,
+            field: "deviceType",
+            type: "string",
+          },
+          {
+            title: "璁惧鐘舵��",
+            required: true,
+            field: "deviceStatus",
+            type: "string",
+          },
+        ],
+        [
+          { title: "璁惧IP", required: true, field: "deviceIp", type: "string" },
+          {
+            title: "璁惧绔彛",
+            required: true,
+            field: "devicePort",
+            type: "string",
+          },
+          {
+            title: "PLC绫诲瀷",
+            required: true,
+            field: "devicePlcType",
+            type: "string",
+          },
+          {
+            title: "澶囨敞",
+            field: "deviceRemark",
+            type: "string",
+          },
+        ],
+      ]);
+      const searchFormFields = ref({
+        deviceCode: "",
+        deviceType: "",
+        deviceStatus: "",
+      });
+      const searchFormOptions = ref([
+        [
+          { title: "璁惧缂栧彿", field: "deviceCode" },
+          { title: "璁惧绫诲瀷", field: "deviceType" },
+          { title: "璁惧鐘舵��", field: "deviceStatus" },
+        ],
+      ]);
+      const columns = ref([
+      {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          align: "left",
+        },
+        {
+          field: "orderId",
+          title: "鍑哄簱鍗曚富閿�",
+          type: "string",
+          width: 90,
+          align: "left",
+          hidden: true,
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "batchNo",
+          title: "鎵规鍙�",
+          type: "decimal",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "orderQuantity",
+          title: "鍗曟嵁鏁伴噺",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "lockQuantity",
+          title: "閿佸畾鏁伴噺",
+          type: "int",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "overOutQuantity",
+          title: "宸插嚭鏁伴噺",
+          type: "string",
+          width: 200,
+          align: "left",
+        },
+        {
+          field: "orderDetailStatus",
+          title: "璁㈠崟鏄庣粏鐘舵��",
+          type: "string",
+          width: 180,
+          align: "left",
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ]);
+      const detail = ref({
+        cnName: "#detailCnName",
+        table: "",
+        columns: [],
+        sortName: "",
+      });
+      return {
+        table,
+        extend,
+        editFormFields,
+        editFormOptions,
+        searchFormFields,
+        searchFormOptions,
+        columns,
+        detail,
+      };
+    },
+  });
+  </script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail_Hty.vue b/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail_Hty.vue
new file mode 100644
index 0000000..704e977
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail_Hty.vue
@@ -0,0 +1,71 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_OutboundOrderDetail_Hty.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/outbound/outboundOrderDetail_Hty.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'id',
+                footer: "Foots",
+                cnName: '鍘嗗彶鍑哄簱鍗曟槑缁�',
+                name: 'outboundOrderDetail_Hty',
+                url: "/OutboundOrderDetail_Hty/",
+                sortName: "id"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({});
+            const searchFormOptions = ref([]);
+            const columns = ref([{field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'orderId',title:'鍑哄簱鍗曚富閿�',type:'int',width:110,require:true,align:'left',sort:true},
+                       {field:'materielCode',title:'鐗╂枡缂栧彿',type:'string',width:110,require:true,align:'left'},
+                       {field:'materielName',title:'鐗╂枡鍚嶇О',type:'string',width:180,align:'left'},
+                       {field:'batchNo',title:'鎵规鍙�',type:'string',width:110,require:true,align:'left'},
+                       {field:'orderQuantity',title:'鍗曟嵁鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                       {field:'lockQuantity',title:'閿佸畾鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                       {field:'overOutQuantity',title:'宸插嚭鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                       {field:'orderDetailStatus',title:'璁㈠崟鏄庣粏鐘舵��',type:'int',width:110,require:true,align:'left'},
+                       {field:'remark',title:'澶囨敞',type:'string',width:220,align:'left'},
+                       {field:'sourceId',title:'婧愪富閿�',type:'int',width:110,require:true,align:'left'},
+                       {field:'operateType',title:'澶囨敞',type:'string',width:110,require:true,align:'left'},
+                       {field:'creater',title:'鍒涘缓浜�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                table: "#detailTable",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/outbound/outboundOrder_Hty.vue b/WIDESEA_WMSClient/src/views/outbound/outboundOrder_Hty.vue
new file mode 100644
index 0000000..7019c6c
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/outbound/outboundOrder_Hty.vue
@@ -0,0 +1,115 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_OutboundOrder_Hty.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/outbound/outboundOrder_Hty.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'id',
+                footer: "Foots",
+                cnName: '鍘嗗彶鍑哄簱鍗�',
+                name: 'outboundOrder_Hty',
+                url: "/OutboundOrder_Hty/",
+                sortName: "id"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({});
+            const searchFormOptions = ref([
+                [
+                    { title: "鍗曟嵁缂栧彿", field: "orderNo", type: "like" },
+                    { title: "涓婃父鍗曟嵁缂栧彿", field: "upperOrderNo", type: "like" },
+                    {
+                    title: "鍗曟嵁绫诲瀷",
+                    field: "orderType",
+                    type: "select",
+                    dataKey: "outOrderType",
+                    data: [],
+                    },
+                    {
+                    title: "鍗曟嵁鐘舵��",
+                    field: "orderStatus",
+                    type: "select",
+                    dataKey: "inboundState",
+                    data: [],
+                    },
+                ],
+                [
+                    {
+                    title: "鍒涘缓鏂瑰紡",
+                    field: "createType",
+                    type: "select",
+                    dataKey: "createType",
+                    data: [],
+                    },
+                    { title: "鍒涘缓鑰�", field: "creater", type: "like" },
+                    { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+                ]
+            ]);
+            const columns = ref([{field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'orderNo',title:'鍗曟嵁缂栧彿',type:'string',width:110,require:true,align:'left',sort:true},
+                       {field:'upperOrderNo',title:'涓婃父鍗曟嵁缂栧彿',type:'string',width:110,align:'left'},
+                       {field:'orderType',title:'鍗曟嵁绫诲瀷',type:'int',width:110,require:true,align:'left'},
+                       {field:'orderStatus',title:'鍗曟嵁鐘舵��',type:'int',width:110,require:true,align:'left'},
+                       {field:'createType',title:'鍒涘缓鏂瑰紡',type:'int',width:110,require:true,align:'left'},
+                       {field:'remark',title:'澶囨敞',type:'string',width:180,align:'left'},
+                       {field:'sourceId',title:'婧愪富閿�',type:'int',width:110,require:true,align:'left'},
+                       {field:'operateType',title:'澶囨敞',type:'string',width:110,require:true,align:'left'},
+                       {field:'creater',title:'鍒涘缓浜�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "鍘嗗彶鍑哄簱鍗曟槑缁�",
+                table: "OutboundOrderDetail_Hty",
+                columns: [
+                    {field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                    {field:'orderId',title:'鍑哄簱鍗曚富閿�',type:'int',width:110,require:true,align:'left',sort:true},
+                    {field:'materielCode',title:'鐗╂枡缂栧彿',type:'string',width:110,require:true,align:'left'},
+                    {field:'materielName',title:'鐗╂枡鍚嶇О',type:'string',width:180,align:'left'},
+                    {field:'batchNo',title:'鎵规鍙�',type:'string',width:110,require:true,align:'left'},
+                    {field:'orderQuantity',title:'鍗曟嵁鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                    {field:'lockQuantity',title:'閿佸畾鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                    {field:'overOutQuantity',title:'宸插嚭鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                    {field:'orderDetailStatus',title:'璁㈠崟鏄庣粏鐘舵��',type:'int',width:110,require:true,align:'left'},
+                    {field:'remark',title:'澶囨敞',type:'string',width:220,align:'left'},
+                    {field:'sourceId',title:'婧愪富閿�',type:'int',width:110,require:true,align:'left'},
+                    {field:'operateType',title:'澶囨敞',type:'string',width:110,require:true,align:'left'},
+                    {field:'creater',title:'鍒涘缓浜�',type:'string',width:110,require:true,align:'left'},
+                    {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                    {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                    {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}
+                ],
+                sortName: "id",
+                key: "id"
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/record/locationStatusChangeRecord.vue b/WIDESEA_WMSClient/src/views/record/locationStatusChangeRecord.vue
new file mode 100644
index 0000000..a22ee58
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/record/locationStatusChangeRecord.vue
@@ -0,0 +1,207 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/record/locationStatusChangeRecord.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "璐т綅鐘舵�佸彉鍔ㄨ褰�",
+      name: "locationStatusChangeRecord",
+      url: "/LocationStatusChangeRecord/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      deviceCode: "",
+      deviceName: "",
+      deviceType: "",
+      deviceStatus: "",
+      deviceIp: "",
+      devicePort: "",
+      devicePlcType: "",
+      deviceRemark: "",
+    });
+    const editFormOptions = ref([]);
+    const searchFormFields = ref({
+      locationCode: "",
+      orderNo: "",
+      taskNum: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "璐т綅鍙�", field: "locationCode" },
+        { title: "鍗曟嵁缂栧彿", field: "orderNo" },
+        { title: "浠诲姟鍙�", field: "taskNum" },
+      ],
+      [
+        {
+          title: "鍙樺姩鍓嶈揣浣嶇姸鎬�",
+          field: "beforeStatus",
+          type: "selectList",
+          dataKey: "locationStatusEnum",
+          data: [],
+        },
+        {
+          title: "鍙樺姩鍚庤揣浣嶇姸鎬�",
+          field: "afterStatus",
+          type: "selectList",
+          dataKey: "locationStatusEnum",
+          data: [],
+        },
+        {
+          title: "鍙樺姩绫诲瀷",
+          field: "changeType",
+          type: "selectList",
+          dataKey: "locationChangeType",
+          data: [],
+        },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "locationId",
+        title: "璐т綅涓婚敭",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "taskNum",
+        title: "浠诲姟鍙�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "locationCode",
+        title: "璐т綅缂栧彿",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "beforeStatus",
+        title: "鍙樺姩鍓嶈揣浣嶇姸鎬�",
+        type: "string",
+        width: 150,
+        align: "left",
+        bind: { key: "locationStatusEnum", data: [] },
+      },
+      {
+        field: "afterStatus",
+        title: "鍙樺姩鍚庤揣浣嶇姸鎬�",
+        type: "decimal",
+        width: 150,
+        align: "left",
+        bind: { key: "locationStatusEnum", data: [] },
+      },
+      {
+        field: "changeType",
+        title: "鍙樺姩绫诲瀷",
+        type: "string",
+        width: 90,
+        align: "left",
+        bind: { key: "locationChangeType", data: [] },
+      },
+      {
+        field: "orderId",
+        title: "鍗曟嵁涓婚敭",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "orderNo",
+        title: "鍗曟嵁缂栧彿",
+        type: "int",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "orderDetailId",
+        title: "鍗曟嵁鏄庣粏涓婚敭",
+        type: "string",
+        width: 200,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue b/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue
new file mode 100644
index 0000000..f7d65a4
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue
@@ -0,0 +1,218 @@
+
+<template>
+    <view-grid
+      ref="grid"
+      :columns="columns"
+      :detail="detail"
+      :editFormFields="editFormFields"
+      :editFormOptions="editFormOptions"
+      :searchFormFields="searchFormFields"
+      :searchFormOptions="searchFormOptions"
+      :table="table"
+      :extend="extend"
+    >
+    </view-grid>
+  </template>
+    <script>
+  import extend from "@/extension/record/stockQuantityChangeRecord.js";
+  import { ref, defineComponent } from "vue";
+  export default defineComponent({
+    setup() {
+      const table = ref({
+        key: "id",
+        footer: "Foots",
+        cnName: "搴撳瓨鍙樺姩淇℃伅璁板綍",
+        name: "stockQuantityChangeRecord",
+        url: "/StockQuantityChangeRecord/",
+        sortName: "id",
+      });
+      const editFormFields = ref({
+        
+      });
+      const editFormOptions = ref([
+        
+      ]);
+      const searchFormFields = ref({
+        palleCode: "",
+        materielCode: "",
+        orderNo: "",
+      });
+      const searchFormOptions = ref([
+        [
+          { title: "鎵樼洏鍙�", field: "palleCode" },
+          { title: "鐗╂枡缂栧彿", field: "materielCode" },
+          { title: "鍗曟嵁缂栧彿", field: "orderNo" },
+          { title: "鍙樺姩绫诲瀷", field: "changeType" ,type: "selectList",dataKey: "stockChangeType",data: [],},
+        ],
+        [
+          { title: "鎵规鍙�", field: "batchNo" },
+          { title: "浠诲姟鍙�", field: "taskNum" },
+          { title: "搴忓垪鍙�", field: "serilNumber" },
+        ],
+      ]);
+      const columns = ref([
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "stockDetailId",
+          title: "搴撳瓨鏄庣粏ID",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "palleCode",
+          title: "鎵樼洏缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "decimal",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "batchNo",
+          title: "鎵规鍙�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "serilNumber",
+          title: "搴忓垪鍙�",
+          type: "int",
+          width: 280,
+          align: "left",
+        },
+        {
+          field: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "taskNum",
+          title: "浠诲姟鍙�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "changeType",
+          title: "鍙樺姩绫诲瀷",
+          type: "int",
+          width: 120,
+          align: "left",
+          bind: { key: "stockChangeType", data: [] },
+        },
+        {
+          field: "changeQuantity",
+          title: "鍙樺姩鏁伴噺",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "beforeQuantity",
+          title: "鍙樺姩鍓嶅簱瀛橀噺",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "afterQuantity",
+          title: "鍙樺姩鍚庡簱瀛橀噺",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "orderId",
+          title: "鍗曟嵁涓婚敭",
+          type: "string",
+          width: 180,
+          align: "left",
+        },
+        {
+          field: "orderDetailId",
+          title: "鍗曟嵁鏄庣粏涓婚敭",
+          type: "string",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ]);
+      const detail = ref({
+        cnName: "#detailCnName",
+        table: "",
+        columns: [],
+        sortName: "",
+      });
+      return {
+        table,
+        extend,
+        editFormFields,
+        editFormOptions,
+        searchFormFields,
+        searchFormOptions,
+        columns,
+        detail,
+      };
+    },
+  });
+  </script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/stock/stockInfo.vue b/WIDESEA_WMSClient/src/views/stock/stockInfo.vue
new file mode 100644
index 0000000..22f2eea
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/stock/stockInfo.vue
@@ -0,0 +1,154 @@
+
+<template>
+    <view-grid
+      ref="grid"
+      :columns="columns"
+      :detail="detail"
+      :editFormFields="editFormFields"
+      :editFormOptions="editFormOptions"
+      :searchFormFields="searchFormFields"
+      :searchFormOptions="searchFormOptions"
+      :table="table"
+      :extend="extend"
+    >
+    </view-grid>
+  </template>
+    <script>
+  import extend from "@/extension/stock/stockInfo.js";
+  import { ref, defineComponent } from "vue";
+  export default defineComponent({
+    setup() {
+      const table = ref({
+        key: "id",
+        footer: "Foots",
+        cnName: "搴撳瓨淇℃伅",
+        name: "stockInfo",
+        url: "/StockInfo/",
+        sortName: "id",
+      });
+      const editFormFields = ref({
+        deviceCode: "",
+        deviceName: "",
+        deviceType: "",
+        deviceStatus: "",
+        deviceIp: "",
+        devicePort: "",
+        devicePlcType: "",
+        deviceRemark: "",
+      });
+      const editFormOptions = ref([
+       [
+        {field:'palletCode',title:'鎵樼洏缂栧彿',type:'string'},
+        {field:'locationCode',title:'璐т綅缂栧彿',type:'string'},
+       ]
+      ]);
+      const searchFormFields = ref({
+        palletCode: "",
+        locationCode: "",
+      });
+      const searchFormOptions = ref([
+        [
+          { title: "鎵樼洏缂栧彿", field: "palletCode" },
+          { title: "璐т綅缂栧彿", field: "locationCode" },
+        ],
+      ]);
+      const columns = ref([
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "palletCode",
+          title: "鎵樼洏缂栧彿",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "locationCode",
+          title: "璐т綅缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        // {
+        //   field: "isFull",
+        //   title: "鏄惁婊$洏",
+        //   type: "string",
+        //   width: 150,
+        //   align: "left",
+        //   bind: { key: "yesno", data: [] },
+        // },
+         {
+          field: "warehouseId",
+          title: "浠撳簱",
+          type: "select",
+          width: 100,
+          align: "left",
+          bind: { key: "warehouses", data: [] },
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+          hidden:true
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+          hidden:true
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+          hidden:true
+        },
+      ]);
+      const detail = ref({
+        cnName: "#detailCnName",
+        table: "",
+        columns: [],
+        sortName: "",
+      });
+      return {
+        table,
+        extend,
+        editFormFields,
+        editFormOptions,
+        searchFormFields,
+        searchFormOptions,
+        columns,
+        detail,
+      };
+    },
+  });
+  </script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue b/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue
new file mode 100644
index 0000000..0b94c04
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue
@@ -0,0 +1,200 @@
+<template>
+  <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+    :table="table" :extend="extend">
+  </view-grid>
+</template>
+<script>
+import extend from "@/extension/stock/stockInfoDetail.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "搴撳瓨淇℃伅鏄庣粏",
+      name: "stockInfoDetail",
+      url: "/StockInfoDetail/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      deviceCode: "",
+      deviceName: "",
+      deviceType: "",
+      deviceStatus: "",
+      deviceIp: "",
+      devicePort: "",
+      devicePlcType: "",
+      deviceRemark: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "鐗╂枡缂栧彿",
+          required: true,
+          field: "materielCode",
+          type: "string",
+        },
+        {
+          title: "鍗曟嵁缂栧彿",
+          required: true,
+          field: "materielName",
+          type: "string",
+        },
+        {
+          title: "鎵规鍙�",
+          required: true,
+          field: "orderNo",
+          type: "string",
+        },
+        {
+          title: "搴忓垪鍙�",
+          required: true,
+          field: "serialNumber",
+          type: "string",
+        },
+      ],
+      
+    ]);
+    const searchFormFields = ref({
+      materielCode: "",
+      materielName: "",
+      orderNo: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鐗╂枡缂栧彿", field: "materielCode" },
+        { title: "鐗╂枡鍚嶇О", field: "materielName" },
+        { title: "鍗曟嵁缂栧彿", field: "orderNo" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "stockId",
+        title: "搴撳瓨淇℃伅涓婚敭",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "materielCode",
+        title: "鐗╂枡缂栧彿",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "materielName",
+        title: "鐗╂枡鍚嶇О",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "orderNo",
+        title: "鍗曟嵁缂栧彿",
+        type: "decimal",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "batchNo",
+        title: "鎵规鍙�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "serialNumber",
+        title: "搴忓垪鍙�",
+        type: "int",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "stockQuantity",
+        title: "搴撳瓨鏁伴噺",
+        type: "string",
+        width: 200,
+        align: "left",
+      },
+      {
+        field: "outboundQuantity",
+        title: "鍑哄簱鏁伴噺",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+      {
+        field: "status",
+        title: "搴撳瓨鏄庣粏鐘舵��",
+        type: "string",
+        width: 120,
+        align: "left",
+        bind: { key: "stockStatusEmun", data: [] },
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/stock/stockInfoDetail_Hty.vue b/WIDESEA_WMSClient/src/views/stock/stockInfoDetail_Hty.vue
new file mode 100644
index 0000000..e97706c
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/stock/stockInfoDetail_Hty.vue
@@ -0,0 +1,72 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_StockInfoDetail_Hty.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/stock/stockInfoDetail_Hty.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'id',
+                footer: "Foots",
+                cnName: '鍘嗗彶搴撳瓨淇℃伅鏄庣粏',
+                name: 'stockInfoDetail_Hty',
+                url: "/StockInfoDetail_Hty/",
+                sortName: "id"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({});
+            const searchFormOptions = ref([]);
+            const columns = ref([{field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'stockId',title:'搴撳瓨淇℃伅涓婚敭',type:'int',width:110,require:true,align:'left',sort:true},
+                       {field:'materielCode',title:'鐗╂枡缂栧彿',type:'string',width:110,require:true,align:'left'},
+                       {field:'materielName',title:'鐗╂枡鍚嶇О',type:'string',width:180,require:true,align:'left'},
+                       {field:'orderNo',title:'鍗曟嵁缂栧彿',type:'string',width:110,require:true,align:'left'},
+                       {field:'batchNo',title:'鎵规鍙�',type:'string',width:110,require:true,align:'left'},
+                       {field:'serialNumber',title:'搴忓垪鍙�',type:'string',width:120,require:true,align:'left'},
+                       {field:'stockQuantity',title:'搴撳瓨鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                       {field:'outboundQuantity',title:'鍑哄簱鏁伴噺',type:'decimal',width:110,require:true,align:'left'},
+                       {field:'status',title:'搴撳瓨鏄庣粏鐘舵��',type:'int',width:110,require:true,align:'left'},
+                       {field:'remark',title:'澶囨敞',type:'string',width:220,align:'left'},
+                       {field:'sourceId',title:'婧愪富閿�',type:'int',width:110,require:true,align:'left'},
+                       {field:'operateType',title:'澶囨敞',type:'string',width:110,require:true,align:'left'},
+                       {field:'creater',title:'鍒涘缓浜�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                table: "#detailTable",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/stock/stockInfo_Hty.vue b/WIDESEA_WMSClient/src/views/stock/stockInfo_Hty.vue
new file mode 100644
index 0000000..e0a65ff
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/stock/stockInfo_Hty.vue
@@ -0,0 +1,67 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/鍘嗗彶搴撳瓨淇℃伅/Dt_StockInfo_Hty.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/stock/stockInfo_Hty.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'id',
+                footer: "Foots",
+                cnName: '鍘嗗彶搴撳瓨淇℃伅',
+                name: 'stockInfo_Hty',
+                url: "/StockInfo_Hty/",
+                sortName: "id"
+            });
+            const editFormFields = ref({});
+            const editFormOptions = ref([]);
+            const searchFormFields = ref({});
+            const searchFormOptions = ref([]);
+            const columns = ref([{field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'palletCode',title:'鎵樼洏缂栧彿',type:'string',width:110,require:true,align:'left',sort:true},
+                       {field:'locationCode',title:'璐т綅缂栧彿',type:'string',width:110,align:'left'},
+                       {field:'isFull',title:'鏄惁婊$洏',type:'bool',width:110,require:true,align:'left'},
+                       {field:'stockStatus',title:'搴撳瓨鐘舵��',type:'int',width:110,require:true,align:'left'},
+                       {field:'remark',title:'澶囨敞',type:'string',width:220,align:'left'},
+                       {field:'sourceId',title:'婧愪富閿�',type:'int',width:110,require:true,align:'left'},
+                       {field:'operateType',title:'澶囨敞',type:'string',width:110,require:true,align:'left'},
+                       {field:'creater',title:'鍒涘缓浜�',type:'string',width:110,require:true,align:'left'},
+                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
+                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
+                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                table: "#detailTable",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/stock/stockView.vue b/WIDESEA_WMSClient/src/views/stock/stockView.vue
new file mode 100644
index 0000000..fc8b569
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/stock/stockView.vue
@@ -0,0 +1,392 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/stock/stockView.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "stockId",
+      footer: "Foots",
+      cnName: "搴撳瓨瑙嗗浘",
+      name: "stockView",
+      url: "/stockView/",
+      sortName: "stockId",
+    });
+    const editFormFields = ref({
+      palletCode: "",
+      locationCode: "",
+      locationName: "",
+    });
+    const editFormOptions = ref([
+      
+    ]);
+    const searchFormFields = ref({
+      palletCode: "",
+      // locationCode: "",
+      materielCode:"",
+      batchNo:""
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鎵樼洏缂栧彿", field: "palletCode",type: "like" },
+        // { title: "璐т綅缂栧彿", field: "locationCode",type: "like" },
+        { title: "璐т綅鐘舵��", field: "locationStatus" ,type: "selectList",dataKey: "locationStatusEnum",data: [],},
+        { title: "搴撳瓨鐘舵��", field: "stockStatus",type: "selectList",dataKey: "stockStatusEmun",data: [],},
+      ],
+      [
+        { title: "鐗╂枡缂栧彿", field: "materielCode",type: "like"},
+        { title: "鎵规鍙�", field: "batchNo",type: "like"},
+        { title: "鎵�灞炰粨搴�", field: "warehouseId",type: "selectList",dataKey: "warehouses",data: [],},
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "stockId",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "palletCode",
+        title: "鎵樼洏缂栧彿",
+        type: "string",
+        width: 150,
+        link: true,
+        align: "left",
+      },
+      {
+        field: "locationCode",
+        title: "璐т綅缂栧彿",
+        type: "string",
+        width: 200,
+        align: "left",
+      },
+      {
+        field: "locationName",
+        title: "璐т綅鍚嶇О",
+        type: "string",
+        width: 270,
+        align: "left",
+      },
+      {
+        field: "warehouseId",
+        title: "鎵�灞炰粨搴�",
+        type: "string",
+        width: 80,
+        align: "left",
+        bind: { key: "warehouses", data: [] },
+      },
+      {
+        field: "roadwayNo",
+        title: "宸烽亾缂栧彿",
+        type: "decimal",
+        width: 100,
+        align: "left",
+        hidden:true
+      },
+      {
+        field: "materielCode",
+        title: "鎵�鍚墿鏂欑紪鍙�",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "batchNo",
+        title: "鎵�鍚墿鏂欐壒娆�",
+        type: "string",
+        width: 200,
+        align: "left"
+      },
+      {
+        field: "materielInfo",
+        title: "鎵�鍚墿鏂欐渶鏃╀复鏈�",
+        type: "string",
+        width: 140,
+        align: "left",
+      },
+      {
+        field: "sumStock",
+        title: "鎬诲簱瀛�",
+        type: "string",
+        width: 140,
+        align: "left",
+      },
+      {
+        field: "row",
+        title: "璐т綅琛�",
+        type: "string",
+        width: 90,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "column",
+        title: "璐т綅鍒�",
+        type: "int",
+        width: 120,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "layer",
+        title: "璐т綅灞�",
+        type: "string",
+        width: 200,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "depth",
+        title: "璐т綅娣卞害",
+        type: "string",
+        width: 180,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "stockStatus",
+        title: "搴撳瓨鐘舵��",
+        type: "string",
+        width: 200,
+        align: "left",
+        bind: { key: "stockStatusEmun", data: [] },
+      },
+      {
+        field: "locationType",
+        title: "璐т綅绫诲瀷",
+        type: "string",
+        width: 100,
+        align: "left",
+        bind:{key: "locationTypeEnum", data: []}
+      },
+      {
+        field: "locationStatus",
+        title: "璐т綅鐘舵��",
+        type: "string",
+        width: 120,
+        align: "left",
+        bind: { key: "locationStatusEnum", data: [] },
+      },
+      {
+        field: "enalbeStatus",
+        title: "绂佺敤鐘舵��",
+        type: "string",
+        width: 80,
+        align: "left",
+        bind: { key: "enableStatusEnum", data: [] },
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+        hidden:true
+      },
+    ]);
+    const detail = ref({
+      cnName: "搴撳瓨鏄庣粏淇℃伅",
+      table: "StockInfoDetail",
+      columns: [
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "stockId",
+          title: "搴撳瓨淇℃伅涓婚敭",
+          type: "string",
+          width: 90,
+          align: "left",
+          hidden: true
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 110,
+          align: "left",
+        },
+        {
+          field: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 130,
+          align: "left",
+        },
+        {
+          field: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "decimal",
+          width: 130,
+          align: "left",
+        },
+        {
+          field: "batchNo",
+          title: "鎵规鍙�",
+          type: "string",
+          width: 180,
+          align: "left",
+        },
+        {
+          field: "serialNumber",
+          title: "搴忓垪鍙�",
+          type: "int",
+          width: 120,
+          align: "left",
+          hidden: true,
+        },
+        {
+          field: "stockQuantity",
+          title: "搴撳瓨鏁伴噺",
+          type: "string",
+          width: 80,
+          align: "left",
+        },
+        {
+          field: "outboundQuantity",
+          title: "鍑哄簱鏁伴噺",
+          type: "string",
+          width: 80,
+          align: "left",
+        },
+        {
+          field: "unit",
+          title: "鍗曚綅",
+          type: "string",
+          width: 50,
+          align: "left",
+        },
+        {
+          field: "productionDate",
+          title: "鐢熶骇鏃ユ湡",
+          type: "string",
+          width: 80,
+          align: "left",
+        },
+        {
+          field: "effectiveDate",
+          title: "鏈夋晥鏃ユ湡",
+          type: "string",
+          width: 80,
+          align: "left",
+        },
+        {
+          field: "status",
+          title: "搴撳瓨鏄庣粏鐘舵��",
+          type: "string",
+          width: 120,
+          align: "left",
+          bind: { key: "stockStatusEmun", data: [] }
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+          hidden: true
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+          hidden: true
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+          hidden: true
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+          hidden: true
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+          hidden: true
+        },
+      ],
+      sortName: "id",
+      key: "id",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/system/Permission.vue b/WIDESEA_WMSClient/src/views/system/Permission.vue
new file mode 100644
index 0000000..dd62254
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/Permission.vue
@@ -0,0 +1,359 @@
+<template>
+  <div class="role-container">
+    <div class="role-tree-left flex-col">
+      <div class="title"><i class="el-icon-user"></i>瑙掕壊鍒楄〃</div>
+      <el-scrollbar class="el-role-list">
+        <el-tree
+          :data="tree"
+          @node-click="nodeClick"
+          node-key="id"
+          :default-expanded-keys="openKeys"
+          :expand-on-click-node="false"
+          style="padding: 5px 0; margin-right: 2px"
+        >
+          <template #default="{ data }">
+            <div class="action-group">
+              <div class="action-text">
+                {{ data.roleName }}
+              </div>
+            </div>
+          </template>
+        </el-tree>
+      </el-scrollbar>
+    </div>
+    <div class="role-tree-right flex-col">
+      <div class="title">
+        <div><i class="el-icon-folder-opened"></i>鑿滃崟鏉冮檺</div>
+        <el-button type="primary" @click="save">淇濆瓨</el-button>
+      </div>
+      <el-scrollbar class="el-role-list">
+        <el-tree
+          @check-change="leftCheckChange"
+          @check="nodeCheck"
+          :data="roleTree"
+          :show-checkbox="false"
+          style="padding: 15px"
+          node-key="id"
+          default-expand-all
+          :expand-on-click-node="false"
+        >
+          <template #default="{ data }">
+            <div class="action-group">
+              <div
+                class="action-text"
+                :style="{ width: (4 - data.lv) * 18 + 150 + 'px' }"
+              >
+                <el-checkbox v-model="data.leftCk" @change="allChange(data)">{{
+                  // data.text + (data.isApp ? "(app)" : "")
+                  data.text 
+                }}</el-checkbox>
+              </div>
+              <div class="action-item">
+                <el-checkbox
+                  v-for="(item, index) in data.actions"
+                  :key="index"
+                  v-model="item.checked"
+                  @change="actionChange(data, item.checked)"
+                  >{{ item.text }}</el-checkbox
+                >
+              </div>
+            </div>
+          </template>
+        </el-tree>
+      </el-scrollbar>
+    </div>
+  </div>
+</template>
+
+<script>
+import { defineComponent, ref, reactive, getCurrentInstance } from "vue";
+import http from "@/../src/api/http.js";
+export default defineComponent({
+  setup() {
+    const selectId = ref(-1);
+    const checked = ref(false);
+    const tree = reactive([]);
+    const list = reactive([]);
+    const roles = reactive([]);
+    const roleList = reactive([]);
+    const roleTree = reactive([]);
+    const openKeys = reactive([]);
+
+    const leftCheckChange = (node, selected) => {
+      node.actions.forEach((x, index) => {
+        x.checked = selected;
+      });
+    };
+    const nodeCheck = (node, data) => {
+      let rootData = roleList.find((x) => {
+        return x.id === node.pid;
+      });
+      if (rootData && rootData.actions.length) {
+        rootData.actions[0].checked =
+          node.actions.some((x) => {
+            return x.checked;
+          }) ||
+          data.halfCheckedNodes.some((x) => {
+            return x.id === node.pid;
+          });
+      }
+    };
+
+    const allChange = (data) => {
+      data.actions.forEach((item) => {
+        item.checked = data.leftCk;
+      });
+      if (!data.children) {
+        return;
+      }
+      setChildrenChecked(data, data.leftCk);
+    };
+    const setChildrenChecked = (data, ck) => {
+      data.children.forEach((item) => {
+        item.leftCk = ck;
+        item.actions.forEach((c) => {
+          c.checked = ck;
+        });
+        if (item.children) {
+          setChildrenChecked(item, ck);
+        }
+      });
+    };
+    const actionChange = (data, ck) => {
+      ck =
+        data.actions.filter((x) => {
+          return x.checked;
+        }).length == data.actions.length;
+      data.leftCk = ck;
+    };
+
+    const load = () => {
+      const url = "api/Sys_Role/getUserChildRoles";
+      http.post(url, {}, true).then((result) => {
+        
+        if (!result.status) return;
+        list.splice(0);
+        list.push(...result.data);
+        list.forEach((x) => {
+          if (x.parentId == 0) {
+            x.lv = 1;
+            x.children = [];
+            tree.push(x);
+            getTree(x.id, x);
+          }
+        });
+        openKeys.push(tree[0].id);
+        selectId.value = openKeys[0];
+      });
+    };
+    const getTree = (id, data) => {
+      list.forEach((x) => {
+        if (x.parentId == id) {
+          x.lv = data.lv + 1;
+          if (!data.children) data.children = [];
+          data.children.push(x);
+          getTree(x.id, x);
+        }
+      });
+    };
+    const nodeClick = (node, selected) => {
+      selectId.value = node.id;
+      getUserRole(node);
+    };
+    const getUserRole = (item) => {
+      selectId.value = item.id;
+      roleList.forEach((x) => {
+        x.actions.forEach((a) => {
+          a.checked = false;
+        });
+      });
+      let url = `/api/Sys_Role/getUserTreePermission?roleId=${item.id}`;
+      http.post(url, {}, true).then((result) => {
+        if (!result.status) return;
+        result.data.forEach((item) => {
+          if (item.actions.length == 0) return;
+          let sourceItem = roleList.find((f) => f.id == item.id);
+          if (!sourceItem) return;
+          item.actions.forEach((actions) => {
+            sourceItem.actions.forEach((soure) => {
+              if (soure.value == actions.value) {
+                soure.checked = true;
+              }
+            });
+          });
+        });
+      });
+    };
+
+    const getRoleTree = (id, data, isRootId) => {
+      roleList.forEach((x) => {
+        if (x.pid == id) {
+          x.lv = data.lv + 1;
+          if (isRootId) {
+            x.rootId = id;
+          }
+          if (!data.children) data.children = [];
+          data.children.push(x);
+          getRoleTree(x.id, x, isRootId);
+        }
+      });
+    };
+
+    const getCurrentTreePermission = () => {
+      let url = "/api/Sys_Role/getCurrentTreePermission";
+      http.post(url, {}, true).then((result) => {
+        if (!result.status) return;
+        roleList.splice(0);
+        roles.splice(0);
+        roleList.push(...result.data.tree);
+        roles.push(...result.data.roles);
+        roleList.forEach((x) => {
+          if (x.pid == 0) {
+            x.lv = 1;
+            x.children = [];
+            roleTree.push(x);
+            getRoleTree(x.id, x);
+          }
+        });
+      });
+    };
+    let $message =
+      getCurrentInstance().appContext.config.globalProperties.$message;
+    const save = () => {
+      if (selectId.value <= 0) {
+        return $message.error("璇烽�夋嫨瑙掕壊!");
+      }
+      let userPermissions = [];
+      roleList.forEach((x) => {
+        let checkedPermission = x.actions.filter((f) => {
+          return f.checked;
+        });
+        if (checkedPermission.length > 0) {
+          let actions = checkedPermission.map((m) => {
+            return { text: m.text, value: m.value };
+          });
+          userPermissions.push({
+            id: x.id,
+            actions: actions,
+          });
+        }
+      });
+      let url = `api/Sys_Role/SavePermission?roleId=${selectId.value}`;
+      http.post(url, userPermissions, true).then((result) => {
+        $message[result.status ? "success" : "error"](result.message);
+      });
+    };
+
+    load();
+    getCurrentTreePermission();
+    return {
+      list,
+      nodeClick,
+      checked,
+      tree,
+      selectId,
+      openKeys,
+      getUserRole,
+      roles,
+      roleList,
+      getCurrentTreePermission,
+      leftCheckChange,
+      nodeCheck,
+      roleTree,
+      allChange,
+      actionChange,
+      save,
+    };
+  },
+});
+</script>
+<style lang="less" scoped>
+.role-container {
+  position: absolute;
+  background: #f6f6f6;
+  height: 100%;
+  width: 100%;
+  padding: 10px;
+  display: flex;
+  .flex-col {
+    display: flex;
+    flex-direction: column;
+  }
+  .role-tree-left {
+    border: 1px solid #f2f2f2;
+    background: #fff;
+    width: 230px;
+    margin-right: 10px;
+    .title {
+      i {
+        margin-left: 10px;
+      }
+    }
+  }
+  .role-tree-right {
+    background: #fff;
+    border: 1px solid #f2f2f2;
+    width: 0;
+    flex: 1;
+    .title {
+      display: flex;
+      i {
+        margin-left: 10px;
+      }
+      div {
+        flex: 1;
+      }
+    }
+    .action-group {
+      display: flex;
+      // line-height: 32px;
+      justify-content: center;
+      align-items: center;
+      label {
+        float: left;
+      }
+      .action-text {
+        line-height: 33px;
+        label {
+          margin-right: 5px;
+        }
+      }
+    }
+  }
+  .title {
+    padding: 10px;
+    background: rgb(246 250 255);
+    font-weight: bold;
+    font-size: 14px;
+    letter-spacing: 2px;
+  }
+  .el-role-list {
+    flex: 1;
+    height: 0;
+    overflow-x: hidden;
+  }
+}
+.role-tree-left ::v-deep(.el-tree-node__content) {
+  cursor: pointer;
+  height: auto;
+  padding: 5px;
+  margin: 2px 10px;
+  font-size: 15px;
+}
+.role-tree-left ::v-deep(.el-tree-node__content:hover) {
+  background: #f4f4f4;
+  border-radius: 20px;
+}
+.role-tree-left ::v-deep(.is-current > .el-tree-node__content:first-child) {
+  background: #f2f2f2;
+  border-radius: 20px;
+}
+.role-tree-right ::v-deep(.el-tree-node__content) {
+  margin-bottom: 5px;
+  height: auto;
+}
+.role-tree-right ::v-deep(.el-checkbox__label) {
+  position: relative;
+  top: 2px;
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/views/system/Permission/RoleTree.vue b/WIDESEA_WMSClient/src/views/system/Permission/RoleTree.vue
new file mode 100644
index 0000000..9ae4e6b
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/Permission/RoleTree.vue
@@ -0,0 +1,152 @@
+<template>
+  <div class="com-el-tree">
+
+      <div class="m-title"><i class="el-icon-warning-outline"></i>瑙掕壊鍒楄〃</div>
+
+    <el-scrollbar style="height: 100%; width: 200px" class="el-role-tree">
+      <el-tree
+        :data="tree"
+        @node-click="nodeClick"
+        node-key="id"
+        :default-expanded-keys="openKeys"
+        :expand-on-click-node="false"
+        style="padding: 5px 0; margin-right: 2px"
+      >
+        <template #default="{ node, data }">
+          <div class="action-group">
+            <div
+              class="action-text"
+              :class="{
+                actived: data.id == selectId,
+                'node-text': data.parentId !== 0,
+              }"
+              :style="{ width: (4 - data.lv) * 18 + 150 + 'px' }"
+            >
+              <Icon
+                v-if="data.parentId !== 0"
+                :type="data.id == selectId ? 'ios-paper' : 'ios-paper-outline'"
+              />
+              {{ data.roleName }}
+            </div>
+          </div>
+        </template>
+      </el-tree>
+    </el-scrollbar>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    // roles: {
+    //   type: Object,
+    //   default: () => {
+    //     return [];
+    //   }
+    // },
+    onChange: {
+      type: Function,
+      default: (treeId) => {},
+    },
+  },
+  data() {
+    return {
+      selectId: -1,
+      checked: false,
+      openKeys: [],
+      data: [],
+      tree: [],
+    };
+  },
+  created() {
+    this.load();
+  },
+  methods: {
+    load() {
+      this.http.post("/api/Sys_Role/getUserChildRoles", {}, true).then((result) => {
+        if (!result.status) return this.$message.error(result.message);
+        this.data.splice(0);
+        this.data = result.data;
+        this.data.forEach((x) => {
+          if (x.parentId == 0) {
+            x.lv = 1;
+            x.children = [];
+            this.tree.push(x);
+            this.getTree(x.id, x);
+          }
+        });
+        this.openKeys.push(this.tree[0].id);
+        this.selectId = this.openKeys[0];
+        //榛樿鍔犺浇绗竴涓爲褰㈣彍鍗曚笅闈㈢殑鏁版嵁
+
+        //this.onChange(this.selectId);
+      });
+    },
+    getTree(id, data) {
+      this.data.forEach((x) => {
+        if (x.parentId == id) {
+          x.lv = data.lv + 1;
+          if (!data.children) data.children = [];
+          data.children.push(x);
+          this.getTree(x.id, x);
+        }
+      });
+    },
+    nodeClick(node, selected) {
+      //  console.log(node);
+      this.selectId = node.id;
+      //缂撳瓨褰撳墠閫変腑鐨勮妭鐐�
+      //  this.$store.getters.data().treeDemo1.treeId = node.id;
+      this.onChange(node);
+    },
+  },
+};
+</script>
+<style lang="less" scoped>
+.com-el-tree {
+  //2020.06.03澧炲姞宸︿晶tree鍥哄畾瀹藉害
+  width: 200px;
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+  border-radius: 3px;
+  background: white;
+  .el-role-tree {
+    flex: 1;
+    // border-right: 1px solid #eee;
+  }
+  .actived {
+  }
+  .action-text {
+    font-size: 14px;
+  }
+}
+.role-list {
+  color: white;
+  line-height: 40px;
+  padding: 0 13px;
+  font-size: 16px;
+  top: 2px;
+  width: 200px;
+}
+.m-title {
+  line-height: 30px;
+  font-size: 15px;
+  background: #66b1ff0f;
+  font-weight: bold;
+  padding: 6px 16px;
+  border-bottom: 1px solid #eee;
+  i {
+    padding-right: 5px;
+  }
+}
+.com-el-tree ::v-dee(.el-tree-node) {
+  padding: 3px 0;
+}
+.com-el-tree ::v-dee(.el-scrollbar .el-scrollbar__thumb) {
+  width: 0 !important;
+}
+</style>
+<style scoped>
+
+</style>
diff --git a/WIDESEA_WMSClient/src/views/system/PermissionPDA.vue b/WIDESEA_WMSClient/src/views/system/PermissionPDA.vue
new file mode 100644
index 0000000..41d1f88
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/PermissionPDA.vue
@@ -0,0 +1,369 @@
+<template>
+  <div class="role-container">
+    <div class="role-tree-left flex-col">
+      <div class="title"><i class="el-icon-user"></i>瑙掕壊鍒楄〃</div>
+      <el-scrollbar class="el-role-list">
+        <el-tree
+          :data="tree"
+          @node-click="nodeClick"
+          node-key="id"
+          :default-expanded-keys="openKeys"
+          :expand-on-click-node="false"
+          style="padding: 5px 0; margin-right: 2px"
+        >
+          <template #default="{ data }">
+            <div class="action-group">
+              <div class="action-text">
+                {{ data.roleName }}
+              </div>
+            </div>
+          </template>
+        </el-tree>
+      </el-scrollbar>
+    </div>
+    <div class="role-tree-right flex-col">
+      <div class="title">
+        <div><i class="el-icon-folder-opened"></i>PDA鑿滃崟鏉冮檺</div>
+        <el-button type="primary" @click="save">淇濆瓨</el-button>
+      </div>
+      <el-scrollbar class="el-role-list">
+        <el-tree
+        ref="eltreerole"
+          @check-change="leftCheckChange"
+          @check="nodeCheck"
+          :data="roleTree"
+          :show-checkbox="false"
+          style="padding: 15px"
+          node-key="id"
+          default-expand-all
+          :expand-on-click-node="false"
+        >
+          <template #default="{ data }">
+            <div class="action-group">
+              <div
+                class="action-text"
+                :style="{ width: (4 - data.lv) * 18 + 150 + 'px' }"
+              >
+                <el-checkbox v-model="data.leftCk" @change="allChange(data)">{{
+                  // data.text + (data.isApp ? "(app)" : "")
+                  data.text 
+                }}</el-checkbox>
+              </div>
+              <div class="action-item">
+                <el-checkbox
+                  v-for="(item, index) in data.actions"
+                  :key="index"
+                  v-model="item.checked"
+                  @change="actionChange(data, item.checked)"
+                  >{{ item.text }}</el-checkbox
+                >
+              </div>
+            </div>
+          </template>
+        </el-tree>
+      </el-scrollbar>
+    </div>
+  </div>
+</template>
+
+<script>
+import { defineComponent, ref, reactive, getCurrentInstance } from "vue";
+import http from "@/../src/api/http.js";
+export default defineComponent({
+  setup() {
+    const selectId = ref(-1);
+    const checked = ref(false);
+    const tree = reactive([]);
+    const list = reactive([]);
+    const roles = reactive([]);
+    const roleList = reactive([]);
+    const roleTree = reactive([]);
+    const openKeys = reactive([]);
+
+    const leftCheckChange = (node, selected) => {
+      node.actions.forEach((x, index) => {
+        x.checked = selected;
+      });
+    };
+    const nodeCheck = (node, data) => {
+      let rootData = roleList.find((x) => {
+        return x.id === node.pid;
+      });
+      if (rootData && rootData.actions.length) {
+        rootData.actions[0].checked =
+          node.actions.some((x) => {
+            return x.checked;
+          }) ||
+          data.halfCheckedNodes.some((x) => {
+            return x.id === node.pid;
+          });
+      }
+    };
+
+    const allChange = (data) => {
+      data.actions.forEach((item) => {
+        item.checked = data.leftCk;
+      });
+      if (!data.children) {
+        return;
+      }
+      setChildrenChecked(data, data.leftCk);
+    };
+    const setChildrenChecked = (data, ck) => {
+      data.children.forEach((item) => {
+        item.leftCk = ck;
+        item.actions.forEach((c) => {
+          c.checked = ck;
+        });
+        if (item.children) {
+          setChildrenChecked(item, ck);
+        }
+      });
+    };
+    const actionChange = (data, ck) => {
+      ck =
+        data.actions.filter((x) => {
+          return x.checked;
+        }).length == data.actions.length;
+      data.leftCk = ck;
+    };
+
+    const load = () => {
+      const url = "api/Sys_Role/getUserChildRoles";
+      http.post(url, {}, true).then((result) => {
+        
+        if (!result.status) return;
+        list.splice(0);
+        list.push(...result.data);
+        list.forEach((x) => {
+          if (x.parentId == 0) {
+            x.lv = 1;
+            x.children = [];
+            tree.push(x);
+            getTree(x.id, x);
+          }
+        });
+        openKeys.push(tree[0].id);
+        selectId.value = openKeys[0];
+      });
+    };
+    const getTree = (id, data) => {
+      list.forEach((x) => {
+        if (x.parentId == id) {
+          x.lv = data.lv + 1;
+          if (!data.children) data.children = [];
+          data.children.push(x);
+          getTree(x.id, x);
+        }
+      });
+    };
+    const nodeClick = (node, selected) => {
+      selectId.value = node.id;
+      getUserRole(node);
+    };
+    const getUserRole = (item) => {
+      selectId.value = item.id;
+      roleList.forEach((x) => {
+        x.actions.forEach((a) => {
+          a.checked = false;
+        });
+      });
+      let url = `/api/Sys_Role/getUserTreePermissionPDA?roleId=${item.id}`;
+      http.post(url, {}, true).then((result) => {
+        if (!result.status) return;
+        result.data.forEach((item) => {
+          if (item.actions.length == 0) return;
+          let sourceItem = roleList.find((f) => f.id == item.id);
+          if (!sourceItem) return;
+          item.actions.forEach((actions) => {
+            sourceItem.actions.forEach((soure) => {
+              if (soure.value == actions.value) {
+                soure.checked = true;
+              }
+            });
+          });
+        });
+      });
+    };
+
+    const getRoleTree = (id, data, isRootId) => {
+      roleList.forEach((x) => {
+        if (x.pid == id) {
+          x.lv = data.lv + 1;
+          if (isRootId) {
+            x.rootId = id;
+          }
+          if (!data.children) data.children = [];
+          data.children.push(x);
+          getRoleTree(x.id, x, isRootId);
+        }
+      });
+    };
+
+    const getCurrentTreePermission = () => {
+      let url = "/api/Sys_Role/getCurrentTreePermissionPDA";
+      http.post(url, {}, true).then((result) => {
+        if (!result.status) return;
+        roleList.splice(0);
+        roles.splice(0);
+        roleList.push(...result.data.tree);
+        roles.push(...result.data.roles);
+        roleList.forEach((x) => {
+          if (x.pid == 0) {
+            x.lv = 1;
+            x.children = [];
+            roleTree.push(x);
+            getRoleTree(x.id, x);
+          }
+        });
+      });
+    };
+    let $message =
+      getCurrentInstance().appContext.config.globalProperties.$message;
+    const save = () => {
+      if (selectId.value <= 0) {
+        return $message.error("璇烽�夋嫨瑙掕壊!");
+      }
+      // var keys = this.$refs.eltreerole.getCheckedKeys().concat(this.$refs.eltreerole.getHalfCheckedKeys());
+      // console.log(keys)
+      let userPermissions = [];
+      // keys.forEach((x) => {
+      //   userPermissions.push({
+      //     id: x,
+      //     actions: null,
+      //     text: "PDA",
+      //   });
+      // });
+      roleList.forEach((x) => {
+        let checkedPermission = x.actions.filter((f) => {
+          return f.checked;
+        });
+        if (checkedPermission.length > 0) {
+          let actions = checkedPermission.map((m) => {
+            return { text: m.text, value: m.value };
+          });
+          userPermissions.push({
+            id: x.id,
+            actions: actions,
+          });
+        }
+      });
+      let url = `api/Sys_Role/SavePermissionPDA?roleId=${selectId.value}`;
+      http.post(url, userPermissions, true).then((result) => {
+        $message[result.status ? "success" : "error"](result.message);
+      });
+    };
+
+    load();
+    getCurrentTreePermission();
+    return {
+      list,
+      nodeClick,
+      checked,
+      tree,
+      selectId,
+      openKeys,
+      getUserRole,
+      roles,
+      roleList,
+      getCurrentTreePermission,
+      leftCheckChange,
+      nodeCheck,
+      roleTree,
+      allChange,
+      actionChange,
+      save,
+    };
+  },
+});
+</script>
+<style lang="less" scoped>
+.role-container {
+  position: absolute;
+  background: #f6f6f6;
+  height: 100%;
+  width: 100%;
+  padding: 10px;
+  display: flex;
+  .flex-col {
+    display: flex;
+    flex-direction: column;
+  }
+  .role-tree-left {
+    border: 1px solid #f2f2f2;
+    background: #fff;
+    width: 230px;
+    margin-right: 10px;
+    .title {
+      i {
+        margin-left: 10px;
+      }
+    }
+  }
+  .role-tree-right {
+    background: #fff;
+    border: 1px solid #f2f2f2;
+    width: 0;
+    flex: 1;
+    .title {
+      display: flex;
+      i {
+        margin-left: 10px;
+      }
+      div {
+        flex: 1;
+      }
+    }
+    .action-group {
+      display: flex;
+      // line-height: 32px;
+      justify-content: center;
+      align-items: center;
+      label {
+        float: left;
+      }
+      .action-text {
+        line-height: 33px;
+        label {
+          margin-right: 5px;
+        }
+      }
+    }
+  }
+  .title {
+    padding: 10px;
+    background: rgb(246 250 255);
+    font-weight: bold;
+    font-size: 14px;
+    letter-spacing: 2px;
+  }
+  .el-role-list {
+    flex: 1;
+    height: 0;
+    overflow-x: hidden;
+  }
+}
+.role-tree-left ::v-deep(.el-tree-node__content) {
+  cursor: pointer;
+  height: auto;
+  padding: 5px;
+  margin: 2px 10px;
+  font-size: 15px;
+}
+.role-tree-left ::v-deep(.el-tree-node__content:hover) {
+  background: #f4f4f4;
+  border-radius: 20px;
+}
+.role-tree-left ::v-deep(.is-current > .el-tree-node__content:first-child) {
+  background: #f2f2f2;
+  border-radius: 20px;
+}
+.role-tree-right ::v-deep(.el-tree-node__content) {
+  margin-bottom: 5px;
+  height: auto;
+}
+.role-tree-right ::v-deep(.el-checkbox__label) {
+  position: relative;
+  top: 2px;
+}
+</style>
diff --git a/WIDESEA_WMSClient/src/views/system/Sys_Dictionary.vue b/WIDESEA_WMSClient/src/views/system/Sys_Dictionary.vue
new file mode 100644
index 0000000..51df000
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/Sys_Dictionary.vue
@@ -0,0 +1,316 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/system/Sys_Dictionary.js姝ゅ缂栧啓
+ -->
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+<script>
+import extend from "@/extension/system/Sys_Dictionary.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "dicId",
+      footer: "Foots",
+      cnName: "瀛楀吀鏁版嵁",
+      name: "Sys_Dictionary",
+      url: "/Sys_Dictionary/",
+      sortName: "dicId",
+    });
+    const editFormFields = ref({
+      dicNo: "",
+      dicName: "",
+      parentId: "",
+      orderNo: "",
+      enable: "",
+      sql: "",
+      remark: "",
+    });
+    const editFormOptions = ref([
+      [
+        { title: "瀛楀吀缂栧彿", required: true, field: "dicNo" },
+        { title: "瀛楀吀鍚嶇О", required: true, field: "dicName" },
+        { title: "鐖剁骇ID", required: true, field: "parentId", type: "number" },
+      ],
+      [
+        { title: "鎺掑簭鍙�", field: "orderNo", type: "number" },
+        {
+          dataKey: "enable",
+          data: [],
+          title: "鏄惁鍚敤",
+          required: true,
+          field: "enable",
+          type: "select",
+        },
+      ],
+      [
+        { title: "sql璇彞", field: "sql", colSize: 8, type: "textarea" },
+        { title: "澶囨敞", field: "remark", type: "textarea" },
+      ],
+    ]);
+    const searchFormFields = ref({
+      dicNo: "",
+      dicName: "",
+      parentId: "",
+      enable: "",
+      createDate: "",
+      modifyDate: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "瀛楀吀缂栧彿", field: "dicNo" },
+        { title: "瀛楀吀鍚嶇О", field: "dicName", type: "textarea" },
+        { title: "鐖剁骇ID", field: "parentId", type: "number" },
+      ],
+      [
+        {
+          dataKey: "enable",
+          data: [],
+          title: "鏄惁鍚敤",
+          field: "enable",
+          type: "select",
+        },
+        { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+        { title: "淇敼鏃堕棿", field: "modifyDate", type: "datetime" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "dicId",
+        title: "瀛楀吀ID",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "dicNo",
+        title: "瀛楀吀缂栧彿",
+        type: "string",
+        width: 90,
+        require: true,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "dicName",
+        title: "瀛楀吀鍚嶇О",
+        type: "string",
+        link: true,
+        width: 140,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "parentId",
+        title: "鐖剁骇ID",
+        type: "int",
+        width: 90,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "config",
+        title: "閰嶇疆椤�",
+        type: "string",
+        width: 300,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "sql",
+        title: "sql璇彞",
+        type: "string",
+        width: 200,
+        align: "left",
+      },
+      {
+        field: "orderNo",
+        title: "鎺掑簭鍙�",
+        type: "int",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "enable",
+        title: "鏄惁鍚敤",
+        type: "byte",
+        bind: { key: "enable", data: [] },
+        width: 90,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 130,
+        hidden: true,
+        readonly: true,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 150,
+        readonly: true,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 130,
+        hidden: true,
+        readonly: true,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 150,
+        readonly: true,
+        align: "left",
+        sort: true,
+      },
+    ]);
+    const detail = ref({
+      cnName: "瀛楀吀鏄庣粏",
+      table: "Sys_DictionaryList",
+      columns: [
+        {
+          field: "dicList_ID",
+          title: "DicList_ID",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "dicId",
+          title: "鏁版嵁婧怚D",
+          type: "int",
+          width: 90,
+          readonly: true,
+          align: "left",
+          sort: true,
+        },
+        {
+          field: "dicValue",
+          title: "鏁版嵁婧怴alue",
+          type: "string",
+          width: 90,
+          edit: { type: "text" },
+          align: "left",
+        },
+        {
+          field: "dicName",
+          title: "鏁版嵁婧怲ext",
+          type: "string",
+          width: 90,
+          edit: { type: "text" },
+          align: "left",
+        },
+        {
+          field: "orderNo",
+          title: "鎺掑簭鍙�",
+          type: "int",
+          width: 90,
+          edit: { type: "text" },
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 90,
+          edit: { type: "text" },
+          align: "left",
+        },
+       
+        {
+          field: "createID",
+          title: "CreateID",
+          type: "int",
+          width: 90,
+          hidden: true,
+          align: "left",
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 130,
+          readonly: true,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 90,
+          readonly: true,
+          align: "left",
+          sort: true,
+        },
+        
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 130,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 90,
+          align: "left",
+          sort: true,
+        },
+      ],
+      sortName: "dicId",
+      key: "dicId",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
diff --git a/WIDESEA_WMSClient/src/views/system/Sys_DictionaryList.vue b/WIDESEA_WMSClient/src/views/system/Sys_DictionaryList.vue
new file mode 100644
index 0000000..02427fb
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/Sys_DictionaryList.vue
@@ -0,0 +1,65 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/system/Sys_DictionaryList.js姝ゅ缂栧啓
+ -->
+<template>
+    <div>
+        <view-grid :columns="columns"
+                   :detail="detail"
+                   :editFormFields="editFormFields"
+                   :editFormOptions="editFormOptions"
+                   :searchFormFields="searchFormFields"
+                   :searchFormOptions="searchFormOptions"
+                   :table="table"
+                   :extend="extend">
+        </view-grid>
+    </div>
+</template>
+
+<script>
+    import extend from "@/extension/system/Sys_DictionaryList.js";
+    var vueParam = {
+        data() {
+            return {
+                table: {
+                    key: 'DicList_ID',
+                    footer: "Foots",
+                    cnName: '瀛楀吀鏄庣粏',
+                    name: 'Sys_DictionaryList',
+                    url: "/Sys_DictionaryList/",
+                    sortName: "DicList_ID"
+                },
+                extend: extend,
+                editFormFields: {"DicValue":"","DicName":"","OrderNo":"","Remark":"","Enable":""},
+                editFormOptions: [[{"columnType":"string","title":"鏁版嵁婧怴alue","field":"DicValue","type":"text"},
+                               {"columnType":"string","title":"鏁版嵁婧怲ext","field":"DicName","type":"text"},
+                               {"columnType":"int","title":"鎺掑簭鍙�","field":"OrderNo","type":"text"},
+                               {"columnType":"int","title":"澶囨敞","field":"Remark","type":"text"},
+                               {"columnType":"byte","dataKey":"enable","title":"鏄惁鍙敤","field":"Enable","type":"switch"}]],
+                searchFormFields: {},
+                searchFormOptions: [],
+                columns: [{field:'DicList_ID',title:'DicList_ID',type:'int',width:90,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'Dic_ID',title:'鏁版嵁婧怚D',type:'int',width:90,readonly:true,align:'left',sortable:true},
+                       {field:'DicValue',title:'鏁版嵁婧怴alue',type:'string',width:90,align:'left'},
+                       {field:'DicName',title:'鏁版嵁婧怲ext',type:'string',width:90,align:'left'},
+                       {field:'OrderNo',title:'鎺掑簭鍙�',type:'int',width:90,align:'left'},
+                       {field:'Remark',title:'澶囨敞',type:'int',width:90,align:'left'},
+                       {field:'Enable',title:'鏄惁鍙敤',type:'byte',bind:{ key:'enable',data:[]},width:90,align:'left'},
+                       {field:'CreateID',title:'CreateID',type:'int',width:90,hidden:true,align:'left'},
+                       {field:'Creator',title:'鍒涘缓浜�',type:'string',width:130,readonly:true,align:'left'},
+                       {field:'CreateDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:90,readonly:true,align:'left',sortable:true},
+                       {field:'ModifyID',title:'ModifyID',type:'int',width:90,hidden:true,align:'left'},
+                       {field:'Modifier',title:'淇敼浜�',type:'string',width:130,align:'left'},
+                       {field:'ModifyDate',title:'淇敼鏃堕棿',type:'datetime',width:90,align:'left',sortable:true}],
+                detail: {
+                    cnName:"#detailCnName",
+                    columns: [],
+                    sortName: "#detailSortName"
+                }
+            };
+        }
+    };
+    export default vueParam;
+</script>
diff --git a/WIDESEA_WMSClient/src/views/system/Sys_Log.vue b/WIDESEA_WMSClient/src/views/system/Sys_Log.vue
new file mode 100644
index 0000000..67e913d
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/Sys_Log.vue
@@ -0,0 +1,157 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/system/Sys_Log.js姝ゅ缂栧啓
+ -->
+ <template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+  <script>
+import extend from "@/extension/system/Sys_Log.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "Id",
+      footer: "Foots",
+      cnName: "绯荤粺鏃ュ織",
+      name: "Sys_Log",
+      url: "/Sys_Log/",
+      sortName: "Id",
+    });
+    const editFormFields = ref({});
+    const editFormOptions = ref([]);
+    const searchFormFields = ref({
+      url: "",
+      requestParam: "",
+      responseParam: "",
+      beginDate: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "璇锋眰鍦板潃", field: "url", type: "like" },
+        { title: "璇锋眰鍙傛暟", field: "requestParam", type: "like" },
+        { title: "鍝嶅簲鍙傛暟", field: "responseParam", type: "like" },
+      ],
+      [{ title: "寮�濮嬫椂闂�", field: "beginDate", type: "datetime" }],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "beginDate",
+        title: "寮�濮嬫椂闂�",
+        type: "datetime",
+        width: 140,
+        align: "left",
+        sortable: true,
+      },
+      {
+        field: "elapsedTime",
+        title: "鏃堕暱",
+        type: "int",
+        width: 60,
+        align: "left",
+      },
+      {
+        field: "endDate",
+        title: "缁撴潫鏃堕棿",
+        type: "datetime",
+        width: 150,
+        hidden: true,
+        align: "left",
+        sortable: true,
+      },
+      {
+        field: "requestParam",
+        title: "璇锋眰鍙傛暟",
+        type: "string",
+        width: 70,
+        align: "left",
+      },
+      {
+        field: "responseParam",
+        title: "鍝嶅簲鍙傛暟",
+        type: "string",
+        width: 70,
+        align: "left",
+      },
+      {
+        field: "url",
+        title: "璇锋眰鍦板潃",
+        type: "string",
+        width: 110,
+        align: "left",
+      },
+      {
+        field: "userName",
+        title: "鐢ㄦ埛鍚嶇О",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "success",
+        title: "鍝嶅簲鐘舵��",
+        type: "int",
+        bind: { key: "restatus", data: [] },
+        width: 80,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "userIP",
+        title: "鐢ㄦ埛IP",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "userId",
+        title: "鐢ㄦ埛ID",
+        type: "int",
+        width: 90,
+        hidden: true,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      columns: [],
+      sortName: "",
+      key: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+  
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/system/Sys_Menu.vue b/WIDESEA_WMSClient/src/views/system/Sys_Menu.vue
new file mode 100644
index 0000000..4eee23d
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/Sys_Menu.vue
@@ -0,0 +1,672 @@
+<template>
+  <div class="menu-container">
+    <!-- <el-input/> -->
+    <vol-box
+      :width="940"
+      :mask="true"
+      :height="500"
+      title="鍥炬爣鍒楄〃"
+      v-model="model"
+    >
+      <Icons :onSelect="onSelect"></Icons>
+      <template #footer>
+        <el-button type="primary" size="mini" @click="model = false"
+          >纭� 璁�</el-button
+        >
+      </template>
+    </vol-box>
+    <vol-box
+      :width="600"
+      :mask="true"
+      :height="270"
+      title="鍏朵粬鏉冮檺"
+      v-model="actionModel"
+    >
+      <vol-form
+        ref="actionForm"
+        :formRules="actionOptions"
+        :formFields="actionFields"
+      >
+        <template #header>
+          <div>
+            <el-alert show-icon type="success">
+              閰嶇疆鐨勫叾浠栨潈闄�
+              <br />1銆佹坊鍔犳柊鐨勬潈闄愬悗璇峰湪vue椤圭洰涓璫onfig鏂囦欢澶逛笅buttns.js娣诲姞姝ゆ潈闄愮殑鎸夐挳銆�
+              <br />2銆佸鏋滄潈闄愬彧鍦ㄦ煇灏戞暟鍑犱釜鍔熻兘涓娇鐢�,鍦╲ue鐨勫搴旈〉闈㈡墿灞昬xtension鏂囦欢鎵惧埌瀵瑰簲js,娣诲姞鍒癳l-buttons瀵硅薄涓�,鏍煎紡鍚宑onfig鏂囦欢澶逛笅buttns.js涓�鏍枫��
+            </el-alert>
+          </div>
+        </template>
+      </vol-form>
+      <template #footer>
+        <el-button type="primary" size="mini" @click="otherAction"
+          >纭� 璁�</el-button
+        >
+      </template>
+    </vol-box>
+
+    <!-- v-if="tree.length" -->
+    <div class="menu-left">
+      <div class="m-title"><i class="el-icon-warning-outline"></i>鑿滃崟鍒楄〃</div>
+      <el-scrollbar style="height: 100%; width: 200px">
+        <VolMenu
+          :onSelect="getTreeItem"
+          :list="tree"
+          :isCollapse="false"
+        ></VolMenu>
+      </el-scrollbar>
+    </div>
+    <div class="menu-right">
+      <el-scrollbar style="height: 100%">
+        <el-alert
+          title="鑿滃崟閰嶇疆璇存槑"
+          type="warning"
+          :closable="false"
+          show-icon
+        >
+          <div>
+            1銆佸鏋滄槸鐢ㄤ唬鐮佺敓鍣ㄧ敓鎴愮殑Vue椤甸潰,Url涓篤ue椤圭洰涓璼rc->router->viewGrid.js瀵瑰簲琛ㄥ悕鐨刾ath灞炴��
+          </div>
+          <div style="padding-top: 5px">
+            2銆� 濡傛灉鍙槸寤轰竴绾ц彍鍗曟垨绌鸿彍鍗晆rl涓嶇敤濉啓,銆愯鍥�/琛ㄥ悕銆戝~鍐�.鎴栬��/
+          </div>
+        </el-alert>
+        <div style="padding: 0px 30px 0 20px">
+          <vol-form
+            class="form-content"
+            ref="form"
+            :formRules="options"
+            :formFields="fields"
+          >
+          </vol-form>
+          <div>
+            <div class="auth-group">
+              <label style="width: 100px">鏉冮檺鎸夐挳锛�</label>
+              <div class="ck">
+                <el-checkbox-group v-model="actions">
+                  <el-checkbox
+                    v-for="(item, index) in action"
+                    :key="index"
+                    :label="item.value"
+                    >{{ item.text + "(" + item.value + ")" }}</el-checkbox
+                  >
+                </el-checkbox-group>
+              </div>
+            </div>
+          </div>
+          <div style="padding-left: 100px">
+            <el-button @click="handleCheckAll" size="mini" type="success" plain
+              ><i class="el-icon-check"></i>鍏� 閫�</el-button
+            >
+            <el-button
+              @click="actionModel = true"
+              size="mini"
+              type="primary"
+              plain
+              ><i class="el-icon-plus"></i>鍏朵粬鏉冮檺</el-button
+            >
+          </div>
+          <div class="m-btn">
+            <el-button type="primary" @click="save"
+              ><i class="el-icon-check"></i>淇濆瓨</el-button
+            >
+            <el-button type="success" @click="add"
+              ><i class="el-icon-plus"></i>鏂板缓</el-button
+            >
+            <el-button type="warning" @click="addChild"
+              ><i class="el-icon-plus"></i>娣诲姞瀛愮骇</el-button
+            >
+            <el-button type="primary" plain @click="addBrother"
+              ><i class="el-icon-circle-plus"></i> 娣诲姞鍚岀骇</el-button
+            >
+            <el-button type="warning" plain @click="delMenu"
+              ><i class="el-icon-delete"></i> 鍒犻櫎鑿滃崟</el-button
+            >
+          </div>
+        </div>
+      </el-scrollbar>
+    </div>
+  </div>
+</template>
+<script>
+import VolForm from "@/components/basic/VolForm.vue";
+import VolBox from "@/components/basic/VolBox.vue";
+import Icons from "@/components/basic/Icons.vue";
+import VolMenu from "@/components/basic/VolElementMenu.vue";
+import {
+  defineComponent,
+  reactive,
+  ref,
+  toRefs,
+  onMounted,
+  h,
+  resolveComponent,
+} from "vue";
+
+import http from "@/api/http";
+export default defineComponent({
+  components: {
+    VolForm: VolForm,
+    VolBox: VolBox,
+    Icons: Icons,
+    VolMenu,
+  },
+  methods: {
+    otherAction() {
+      this.$refs.actionForm.validate(() => {
+        let exist = this.action.some((x) => {
+          return (
+            x.text == this.actionFields.name ||
+            x.value == this.actionFields.value
+          );
+        });
+        if (exist) {
+          return this.$message.error("鏉冮檺鍚嶇О鎴栨潈闄愬�煎凡瀛樺湪");
+        }
+        this.actionModel = false;
+        this.action.push({
+          text: this.actionFields.name,
+          value: this.actionFields.value,
+        });
+      });
+    },
+    handleCheckAll() {
+      if (this.actions == this.action.length) {
+        this.checkAll = false;
+      } else {
+        this.checkAll = !this.checkAll;
+      }
+      if (this.checkAll) {
+        this.actions = this.action.map((x) => {
+          return x.value;
+        });
+      } else {
+        this.actions = [];
+      }
+    },
+    checkAllGroupChange(data) {
+      if (data.length === this.action.length) {
+        this.checkAll = true;
+      } else if (data.length > 0) {
+        this.checkAll = false;
+      } else {
+        this.checkAll = false;
+      }
+    },
+    add(obj) {
+      this.$refs.form.reset(
+        Object.assign({ enable: 1 }, obj || { parentId: 0 })
+      );
+      this.icon = "";
+      // this.actions = [];
+      //2020.08.07鏂板缓鑿滃崟鏃讹紝榛樿閫変腑鏌ヨ鎸夐挳鏉冮檺
+      this.actions = ["Search"];
+    },
+    addChild() {
+      if (!this.isSelect()) return;
+      this.add({ parentId: this.fields.menuId });
+    },
+    addBrother() {
+      if (!this.isSelect()) return;
+      this.add({ parentId: this.fields.parentId });
+    },
+    delMenu() {
+      //2020.08.07澧炲姞鑿滃崟鍒犻櫎鍔熻兘
+      if (this.fields.menuId == 0) {
+        return this.$Message.error("璇烽�夋嫨鑿滃崟");
+      }
+
+      let tigger = false;
+      this.$confirm(
+        "纭瑕佸垹闄ゃ��" + this.fields.menuName + "銆戣彍鍗曞悧锛�",
+        "璀﹀憡",
+        {
+          confirmButtonText: "纭畾",
+          cancelButtonText: "鍙栨秷",
+          type: "warning",
+          center: true,
+        }
+      ).then(() => {
+        if (tigger) return;
+        tigger = true;
+        let menuId = this.fields.menuId;
+        this.http
+          .post(
+            "/api/Sys_Menu/delMenu?menuId=" + menuId,
+            {},
+            "姝e湪鍒犻櫎鏁版嵁...."
+          )
+          .then((x) => {
+            if (!x.status) return this.$Message.error(x.message);
+            this.$refs.form.reset();
+            this.$Message.info(x.message);
+            this.initTree();
+          });
+      });
+    },
+    save() {
+      this.$refs.form.validate(() => {
+        this.fields.auth = "";
+        if (this.actions) {
+          this.fields.auth = this.action.filter((x) => {
+            return this.actions.indexOf(x.value) != -1;
+          });
+        }
+        if (
+          this.fields.auth &&
+          this.fields.auth instanceof Array &&
+          this.fields.auth.length > 0
+        ) {
+          this.fields.auth = JSON.stringify(this.fields.auth);
+        } else {
+          this.fields.auth = "";
+        }
+        this.http.post("/api/Sys_Menu/save", this.fields, true).then((x) => {
+          if (!x.status) {
+            this.$Message.error(x.message);
+            return;
+          }
+
+          this.$Message.info(x.message);
+          if (this.fields.menuId) {
+            this.tree.forEach((t) => {
+              if (t.id == this.fields.menuId) {
+                t.name = this.fields.menuName;
+                t.orderNo = this.fields.orderNo;
+                t.parentId = this.fields.parentId;
+              }
+            });
+            return;
+          }
+          this.fields.menuId = x.data.menuId;
+          this.fields.createDate = x.data.createDate;
+          this.tree.push({
+            id: x.data.menuId,
+            name: this.fields.menuName,
+            orderNo: this.fields.orderNo,
+            parentId: this.fields.parentId,
+          });
+          console.log(this.tree);
+        });
+      });
+    },
+    isSelect() {
+      let id = this.fields.menuId;
+      if (!id) {
+        this.$message.error("璇烽�夋嫨鑺傜偣");
+        return false;
+      }
+      return true;
+    },
+    onSelect(icon) {
+      this.fields.icon = icon;
+      this.$message.info(icon);
+    },
+    onOpenChange(node) {
+      if (node.length == 0) return;
+      this.getTreeItem(node[node.length > 1 ? node.length - 1 : 0]);
+    },
+  },
+  created() {},
+  setup() {
+    const tree = ref([]);
+    const actionValues = ref([]);
+    const action = ref([
+      { text: "鏌ヨ", value: "Search" },
+      { text: "鏂板缓", value: "Add" },
+      { text: "鍒犻櫎", value: "Delete" },
+      { text: "缂栬緫", value: "Update" },
+      { text: "瀵煎叆", value: "Import" },
+      { text: "瀵煎嚭", value: "Export" },
+      // { text: "涓婁紶", value: "Upload" },
+      // { text: "瀹℃牳", value: "Audit" },
+    ]);
+    const actions = ref([]);
+    actionValues.value = action.value.map((x) => {
+      return x.value;
+    });
+    const initTree = () => {
+      http.post("/api/Sys_Menu/getMenu", {}, true).then((x) => {
+        x.forEach((item) => {
+          item.icon = "el-icon-menu";
+        });
+
+        tree.value = x;
+      });
+    };
+    onMounted(() => {
+      initTree();
+    });
+    const actionModel = ref(false);
+    const checkAll = ref(false);
+    const model = ref(false);
+
+    const fields = ref({
+      menuId: 0,
+      parentId: 0,
+      menuName: "",
+      tableName: "",
+      url: "",
+      auth: "",
+      icon: "",
+      orderNo: "",
+      enable: 1,
+      menuType: 0,
+    });
+
+    const actionFields = ref({
+      name: "",
+      value: "",
+    });
+    const actionOptions = ref([
+      [
+        {
+          title: "鏉冮檺鍚嶇О",
+          field: "name",
+          placeholder: "鏉冮檺鍚嶇О,濡傦細鏂板",
+          required: true,
+        },
+      ],
+      [
+        {
+          title: "鏉� 闄� 鍊�",
+          field: "value",
+          placeholder: "鏉冮檺鍊�,濡傦細Add",
+          required: true,
+        },
+      ],
+    ]);
+
+    const options = ref([
+      [
+        {
+          title: "鑿� 鍗� ID",
+          field: "menuId",
+          placeholder: "鑿滃崟ID",
+          min: 0,
+          disabled: true,
+        },
+        {
+          title: "鐖� 绾� ID",
+          required: true,
+          type: "number",
+          min: 0,
+          field: "parentId",
+          // min: 0, max: 50
+        },
+        {
+          title: "鑿滃崟鍚嶇О",
+          field: "menuName",
+          required: true,
+        },
+      ],
+      [
+        {
+          title: "瑙嗗浘/琛ㄥ悕",
+          field: "tableName",
+          placeholder: "涓庝唬鐮佺敓鎴愬櫒浣跨敤鐨勫悕绉扮浉鍚�",
+          required: true,
+        },
+        {
+          title: "(璺敱)Url",
+          field: "url",
+          placeholder: "瑙�:涓婇潰鑿滃崟閰嶇疆璇存槑",
+        },
+        {
+          title: "鎺掑簭鍙�",
+          field: "orderNo",
+          type: "number",
+          min: 0,
+          placeholder: "鍊艰秺澶ф樉绀鸿秺闈犲墠",
+          required: true,
+        },
+      ],
+      [
+        {
+          title: "鏄惁鍚敤",
+          field: "enable",
+          required: true,
+          type: "select",
+          colSize: 4,
+          data: [
+            { key: 1, value: "鍚敤" },
+            { key: 2, value: "鍚敤涓嶆樉绀�" },
+            { key: 0, value: "绂佺敤" },
+          ],
+        },
+        {
+          title: "鑿滃崟绫诲瀷",
+          field: "menuType",
+          required: true,
+          type: "select",
+          colSize: 4,
+          data: [
+            { key: 0, value: "PC绔彍鍗�" },
+            { key: 1, value: "绉诲姩绔彍鍗�" },
+          ],
+        },
+        {
+          title: "鍥炬爣Icon",
+          field: "icon",
+          render: (h) => {
+            return h("div", {}, [
+              h("i", {
+                style: {
+                  "font-size": "25px",
+                  margin: "0px 9px",
+                  position: "relative",
+                  top: "4px",
+                },
+                class: [fields.value.icon],
+              }),
+              h(
+                resolveComponent("el-button"),
+                {
+                  size: "small",
+                  style: { padding: "0px 9px" },
+                  type: "primary",
+                  plain: true,
+                  onClick: () => {
+                    model.value = true;
+                  },
+                },
+                "閫夋嫨鍥炬爣"
+              ),
+            ]);
+          },
+        },
+      ],
+    ]);
+    const refForm = ref();
+    const getTreeItem = (node) => {
+      http
+        .post("api/Sys_Menu/getTreeItem?menuId=" + node, {}, true)
+        .then((x) => {
+          try {
+            fields.value.icon = x.icon;
+            if (x.auth) {
+              x.auth = JSON.parse(x.auth);
+              action.value.splice(8, action.value.length);
+
+              actions.value = x.auth.map((element) => {
+                if (actionValues.value.indexOf(element.value) == -1) {
+                  action.value.push(element);
+                }
+                return element.value;
+              });
+            } else {
+              action.value.splice(8, action.value.length);
+              x.auth = [];
+              fields.value.icon = "";
+              actions.value = [];
+            }
+          } catch (error) {
+            console.log("鑿滃崟鍔熻兘鏉冮檺杞崲鎴怞SON澶辫触:" + x.auth);
+            x.auth = [];
+            //   this.icon = "";
+            actions.value = [];
+          }
+          refForm.value.reset(x);
+        });
+    };
+    return {
+      tree,
+      initTree,
+      action,
+      actions,
+      actionValues,
+      actionModel,
+      checkAll,
+      model,
+      fields,
+      actionFields,
+      actionOptions,
+      options,
+      form: refForm,
+      getTreeItem,
+    };
+  },
+  data() {
+    return {};
+  },
+});
+</script>
+
+<style lang="less" scoped>
+.on-icon {
+  line-height: 20px;
+  position: relative;
+
+  .remove {
+    display: none;
+    color: red;
+    right: 7px;
+    position: absolute;
+    top: -14px;
+    font-size: 13px;
+  }
+}
+
+.on-icon:hover {
+  cursor: pointer;
+
+  .remove {
+    display: block;
+  }
+}
+
+.action {
+  width: 100%;
+  display: flex;
+
+  margin-bottom: 15px;
+
+  .ivu-checkbox-wrapper {
+    margin-right: 20px;
+  }
+
+  .ck {
+    line-height: 33px;
+    display: inline-block;
+    display: flex;
+
+    label:first-child {
+      min-width: 58px;
+      float: left;
+      margin-top: 1px;
+    }
+
+    > div {
+      float: left;
+    }
+  }
+}
+
+.menu-container {
+  display: flex;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  padding: 8px;
+  background: #f7f7f7;
+
+  .menu-left {
+    height: 100%;
+    width: 201px;
+    border: 1px solid #eee;
+    display: flex;
+    background: white;
+    flex-direction: column;
+
+    .module-name {
+      border-radius: 0px;
+      /* height: 5%; */
+      line-height: 21px;
+      margin-bottom: 0;
+    }
+  }
+
+  .menu-right {
+    flex: 1;
+    border-radius: 3px;
+    border: 1px solid #eee;
+    background: white;
+    margin-left: 9px;
+    margin-right: 3px;
+  }
+}
+
+.m-btn {
+  margin-top: 20px;
+  text-align: center;
+}
+
+.m-title {
+  line-height: 40px;
+  font-size: 15px;
+  background: #66b1ff0f;
+  font-weight: bold;
+  padding: 6px 16px;
+  border-bottom: 1px solid #eee;
+
+  i {
+    padding-right: 5px;
+  }
+}
+
+.form-content {
+  margin-top: 30px;
+}
+
+.menu-left ::v-deep(.el-scrollbar__bar.is-vertical) {
+  width: 2px;
+}
+
+.auth-group {
+  display: flex;
+
+  label {
+    display: inline-block;
+    width: 100px;
+    text-align: right;
+    color: #797979;
+    font-size: 14px;
+  }
+
+  .ck {
+    flex: 1;
+  }
+
+  .el-checkbox {
+    min-width: 105px;
+    width: auto !important;
+    margin-right: 5px;
+    display: inline-block;
+    padding-bottom: 10px;
+  }
+}
+
+.auth-group ::v-deep(.el-checkbox__label) {
+  padding-left: 4px;
+}
+</style>
+
diff --git a/WIDESEA_WMSClient/src/views/system/Sys_Role.vue b/WIDESEA_WMSClient/src/views/system/Sys_Role.vue
new file mode 100644
index 0000000..7da98d2
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/Sys_Role.vue
@@ -0,0 +1,220 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/system/Sys_Role.js姝ゅ缂栧啓
+ -->
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+<script>
+import extend from "@/extension/system/Sys_Role.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "roleId",
+      footer: "Foots",
+      cnName: "瑙掕壊绠$悊",
+      name: "Sys_Role",
+      url: "/Sys_Role/",
+      sortName: "roleId",
+    });
+    const editFormFields = ref({
+      parentId: "",
+      roleName: "",
+      deptId: "",
+      enable: "",
+      // creater: "",
+      // createDate: "",
+      // modifier: "",
+      // modifyDate: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          dataKey: "tree_roles",
+          data: [],
+          title: "鐖剁骇ID",
+          required: true,
+          field: "parentId",
+          type: "select",
+        },
+        { title: "瑙掕壊鍚嶇О", required: true, field: "roleName" },
+        {
+          title: "鏁版嵁鏉冮檺",
+          field: "authorityScope",
+          type: "selectList",
+          dataKey: "authorityScope",
+          data: [],
+        },
+      ],
+      [
+        { title: "閮ㄩ棬ID", field: "deptId" },
+        {
+          dataKey: "enable",
+          data: [],
+          title: "鏄惁鍚敤",
+          field: "enable",
+          type: "switch",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      roleName: "",
+      deptId: "",
+      enable: "",
+      createDate: "",
+      modifyDate: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "瑙掕壊鍚嶇О", field: "roleName", type: "text" },
+        { title: "閮ㄩ棬ID", field: "deptId", type: "text" },
+        {
+          dataKey: "enable",
+          data: [],
+          title: "鏄惁鍚敤",
+          field: "enable",
+          type: "select",
+        },
+      ],
+      [
+        { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+        { title: "淇敼鏃堕棿", field: "modifyDate", type: "datetime" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "roleId",
+        title: "瑙掕壊ID",
+        type: "int",
+        width: 70,
+        readonly: true,
+        require: true,
+        align: "left",
+        sortable: true,
+      },
+      {
+        field: "parentId",
+        title: "鐖剁骇ID",
+        type: "int",
+        bind: { key: "tree_roles", data: [] },
+        width: 70,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "roleName",
+        title: "瑙掕壊鍚嶇О",
+        type: "string",
+        link: true,
+        width: 90,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "roleId",
+        title: "鏁版嵁鏉冮檺",
+        type: "string",
+        width: 90,
+        require: true,
+        align: "left",
+        bind: { key: "authorityScopes", data: [] },
+      },
+      {
+        field: "deptId",
+        title: "閮ㄩ棬ID",
+        type: "int",
+        width: 90,
+        // hidden: true,
+        align: "left",
+      },
+      //   {
+      //     field: "deptName",
+      //     title: "閮ㄩ棬鍚嶇О",
+      //     type: "string",
+      //     width: 90,
+      //     align: "left",
+      //   },
+      {
+        field: "enable",
+        title: "鏄惁鍚敤",
+        type: "byte",
+        bind: { key: "enable", data: [] },
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "orderNo",
+        title: "鎺掑簭",
+        type: "int",
+        width: 90,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 130,
+        readonly: true,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 90,
+        readonly: true,
+        align: "left",
+        sortable: true,
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 130,
+        readonly: true,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 90,
+        readonly: true,
+        align: "left",
+        sortable: true,
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      columns: [],
+      sortName: "",
+      key: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
diff --git a/WIDESEA_WMSClient/src/views/system/Sys_Role1.vue b/WIDESEA_WMSClient/src/views/system/Sys_Role1.vue
new file mode 100644
index 0000000..19ed48a
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/Sys_Role1.vue
@@ -0,0 +1,72 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/system/Sys_Role.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/system/Sys_Role1.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'Role_Id',
+                footer: "Foots",
+                cnName: '瑙掕壊绠$悊',
+                name: 'Sys_Role',
+                url: "/Sys_Role/",
+                sortName: "Role_Id"
+            });
+            const editFormFields = ref({"ParentId":[],"RoleName":"","DeptName":"","Enable":"","Creator":"","CreateDate":"","Modifier":"","ModifyDate":""});
+            const editFormOptions = ref([[{"dataKey":"tree_roles","data":[],"title":"鐖剁骇ID","required":true,"field":"ParentId","type":"cascader"},
+                               {"title":"瑙掕壊鍚嶇О","required":true,"field":"RoleName"}],
+                              [{"title":"閮ㄩ棬鍚嶇О","field":"DeptName"},
+                               {"dataKey":"enable","data":[],"title":"鏄惁鍚敤","field":"Enable","type":"switch"}],
+                              [{"title":"鍒涘缓浜�","field":"Creator","disabled":true},
+                               {"title":"鍒涘缓鏃堕棿","field":"CreateDate","disabled":true,"type":"datetime"}],
+                              [{"title":"淇敼浜�","field":"Modifier","disabled":true},
+                               {"title":"淇敼鏃堕棿","field":"ModifyDate","disabled":true}]]);
+            const searchFormFields = ref({"RoleName":"","DeptName":"","Enable":"","CreateDate":"","ModifyDate":""});
+            const searchFormOptions = ref([[{"title":"瑙掕壊鍚嶇О","field":"RoleName","type":"text"},{"title":"閮ㄩ棬鍚嶇О","field":"DeptName","type":"text"},{"dataKey":"enable","data":[],"title":"鏄惁鍚敤","field":"Enable","type":"select"}],[{"title":"鍒涘缓鏃堕棿","field":"CreateDate","type":"datetime"},{"title":"淇敼鏃堕棿","field":"ModifyDate","type":"datetime"}]]);
+            const columns = ref([{field:'Role_Id',title:'瑙掕壊ID',type:'int',width:70,readonly:true,require:true,align:'left',sortable:true},
+                      // {field:'ParentId',title:'鐖剁骇ID',type:'int',bind:{ key:'tree_roles',data:[]},width:70,require:true,align:'left'},
+                       {field:'RoleName',title:'瑙掕壊鍚嶇О',type:'string',link:true,width:90,require:true,align:'left'},
+                       {field:'Dept_Id',title:'閮ㄩ棬ID',type:'int',width:90,hidden:true,align:'left'},
+                       {field:'DeptName',title:'閮ㄩ棬鍚嶇О',type:'string',width:90,align:'left'},
+                       {field:'Enable',title:'鏄惁鍚敤',type:'byte',bind:{ key:'enable',data:[]},width:90,align:'left'},
+                       {field:'OrderNo',title:'鎺掑簭',type:'int',width:90,hidden:true,align:'left'},
+                       {field:'Creator',title:'鍒涘缓浜�',type:'string',width:130,readonly:true,align:'left'},
+                       {field:'CreateDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:90,readonly:true,align:'left',sortable:true},
+                       {field:'Modifier',title:'淇敼浜�',type:'string',width:130,readonly:true,align:'left'},
+                       {field:'ModifyDate',title:'淇敼鏃堕棿',type:'datetime',width:90,readonly:true,align:'left',sortable:true}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/system/Sys_User.vue b/WIDESEA_WMSClient/src/views/system/Sys_User.vue
new file mode 100644
index 0000000..b53cf53
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/Sys_User.vue
@@ -0,0 +1,369 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+<script>
+import extend from "@/extension/system/Sys_User.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "userId",
+      footer: "Foots",
+      cnName: "鐢ㄦ埛绠$悊",
+      name: "Sys_User",
+      url: "/User/",
+      sortName: "userId",
+    });
+    const editFormFields = ref({
+      systemType: "0",
+      userName: "",
+      userTrueName: "",
+      roleId: "",
+      deptIds: "",
+      enable: "",
+      gender: "",
+      remark: "",
+      headImageUrl: "",
+    });
+    const editFormOptions = ref([
+      [{ title: "甯愬彿", required: true, field: "userName"}],
+      [{ title: "濮撳悕", required: true, field: "userTrueName", type: "text" }],
+      [
+        {
+          dataKey: "tree_roles",
+          data: [],
+          title: "瑙掕壊",
+          required: true,
+          field: "roleId",
+          type: "select",
+        },
+      ],
+      // [
+      //   {
+      //     dataKey: "缁勭粐鏈烘瀯",
+      //     data: [],
+      //     title: "缁勭粐鏋勬灦",
+      //     field: "deptIds",
+      //     colSize: 12,
+      //     type: "treeSelect",
+      //   },
+      // ],
+      [
+        {
+          dataKey: "enable",
+          data: [],
+          title: "鏄惁鍙敤",
+          required: true,
+          field: "enable",
+          type: "select",
+        },
+      ],
+      [
+        {
+          dataKey: "gender",
+          data: [],
+          title: "鎬у埆",
+          field: "gender",
+          type: "select",
+        },
+      ],
+      [{ title: "澶囨敞", field: "remark", colSize: 12, type: "textarea" }],
+      [{ title: "澶村儚", field: "headImageUrl", type: "img" }],
+    ]);
+    const searchFormFields = ref({
+      systemType: "0",
+      userName: "",
+      userTrueName: "",
+      gender: "",
+      deptName: "",
+      role_Id: [],
+      token: "",
+      appType: [],
+      createDate: "",
+      isRegregisterPhone: "",
+      phoneNo: "",
+      enable: "",
+      lastLoginDate: "",
+      address: "",
+      email: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "甯愬彿", field: "userName" },
+        { title: "濮撳悕", field: "userTrueName" },
+        {
+          dataKey: "gender",
+          data: [],
+          title: "鎬у埆",
+          field: "gender",
+          type: "select",
+        },
+      ],
+      [
+        {
+          dataKey: "enable",
+          data: [],
+          title: "鏄惁鍙敤",
+          field: "enable",
+          type: "select",
+        },
+        { title: "娉ㄥ唽鏃堕棿", field: "createDate", type: "datetime" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "userId",
+        title: "UserId",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "userName",
+        title: "甯愬彿",
+        type: "string",
+        link: true,
+        width: 120,
+        readonly: true,
+        require: true,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "userTrueName",
+        title: "濮撳悕",
+        type: "string",
+        width: 120,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "gender",
+        title: "鎬у埆",
+        type: "int",
+        bind: { key: "gender", data: [] },
+        width: 80,
+        align: "left",
+      },
+      {
+        field: "headImageUrl",
+        title: "澶村儚",
+        type: "img",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "deptId",
+        title: "涓嶇敤",
+        type: "int",
+        width: 90,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "deptName",
+        title: "涓嶇敤",
+        type: "string",
+        width: 150,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "roleId",
+        title: "瑙掕壊",
+        type: "int",
+        bind: { key: "tree_roles", data: [] },
+        width: 130,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "roleName",
+        title: "涓嶇敤",
+        type: "string",
+        width: 90,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "token",
+        title: "Token",
+        type: "string",
+        width: 180,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "appType",
+        title: "绫诲瀷",
+        type: "int",
+        bind: { key: "ut", data: [] },
+        width: 150,
+        hidden: true,
+        align: "left",
+      },
+      // {
+      //   field: "deptIds",
+      //   title: "缁勭粐鏋勬灦",
+      //   type: "string",
+      //   bind: { key: "缁勭粐鏈烘瀯", data: [] },
+      //   width: 140,
+      //   hidden: true,
+      //   align: "left",
+      // },
+      {
+        field: "createDate",
+        title: "娉ㄥ唽鏃堕棿",
+        type: "datetime",
+        width: 150,
+        readonly: true,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "phoneNo",
+        title: "鎵嬫満鍙�",
+        type: "string",
+        width: 150,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "tel",
+        title: "Tel",
+        type: "string",
+        width: 90,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 130,
+        readonly: true,
+        align: "left",
+      },
+      {
+        field: "enable",
+        title: "鏄惁鍙敤",
+        type: "byte",
+        bind: { key: "enable", data: [] },
+        width: 90,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 130,
+        hidden: true,
+        readonly: true,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "auditStatus",
+        title: "瀹℃牳鐘舵��",
+        type: "int",
+        bind: { key: "audit", data: [] },
+        width: 90,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "auditor",
+        title: "瀹℃牳浜�",
+        type: "string",
+        width: 90,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "auditDate",
+        title: "瀹℃牳鏃堕棿",
+        type: "datetime",
+        width: 150,
+        hidden: true,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "lastModifyPwdDate",
+        title: "鏈�鍚庡瘑鐮佷慨鏀规椂闂�",
+        type: "datetime",
+        width: 150,
+        hidden: true,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "address",
+        title: "鍦板潃",
+        type: "string",
+        width: 190,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "email",
+        title: "Email",
+        type: "string",
+        width: 140,
+        hidden: true,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 180,
+        hidden: true,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "#detailTable",
+      columns: [],
+      sortName: "",
+      key: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
diff --git a/WIDESEA_WMSClient/src/views/system/UserInfo.vue b/WIDESEA_WMSClient/src/views/system/UserInfo.vue
new file mode 100644
index 0000000..aeeaf2e
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/UserInfo.vue
@@ -0,0 +1,317 @@
+<template>
+  <VolBox :width="500" :height="270" v-model="modifyOptions.model" title="淇敼瀵嗙爜">
+    <div style="padding:10px;20px;">
+      <VolForm ref="pwd" :formRules="modifyOptions.data" :formFields="modifyOptions.fields"></VolForm>
+    </div>
+    <template #footer>
+      <div style="text-align: center;">
+        <el-button type="primary" size="mini" icon="md-checkmark-circle" long @click="savePwd">淇濆瓨</el-button>
+      </div>
+    </template>
+  </VolBox>
+  <div class="user-info">
+    <div class="left">
+      <div>
+        <img class="header-img" :src="userInfo.img" :onerror="errorImg" />
+        <div class="text">
+          <p class="name">
+            <span style="font-size: 13px">{{ userInfo.userName }}</span>
+          </p>
+          <p class="date">
+            <span>娉ㄥ唽鏃ユ湡锛歿{ userInfo.createDate }}</span>
+          </p>
+          <p>
+            <el-button type="error" @click="modifyPwd" size="small" icon="md-lock" long>淇敼瀵嗙爜</el-button>
+            <!-- <el-button
+              style="padding: 3px 16px"
+              @click="modifyImg"
+              type="primary"
+              size="mini"
+              ghost
+              >淇敼澶村儚</el-button
+            > -->
+          </p>
+        </div>
+      </div>
+    </div>
+    <div class="right">
+      <vol-form ref="form" :load-key="true" :width="500" :formRules="editFormOptions" :formFields="editFormFields">
+        <div class="footer">
+          <!-- <el-button
+            style="margin-top: 2px"
+            type="primary"
+            size="small"
+            icon="md-checkmark-circle"
+            long
+            @click="modifyInfo"
+            >淇濆瓨</el-button
+          > -->
+        </div>
+      </vol-form>
+    </div>
+
+  </div>
+</template>
+<script>
+import VolForm from "@/components/basic/VolForm.vue";
+import VolBox from "@/components/basic/VolBox.vue";
+export default {
+  components: {
+    VolForm,
+    VolBox,
+  },
+  methods: {
+    modifyImg() {
+      this.$message.info("淇敼澶村儚");
+    },
+    modifyEmail() {
+      this.$message.info("淇敼閭");
+    },
+    modifyPhone() {
+      this.$message.info("淇敼鐢佃瘽");
+    },
+    modifyPwd() {
+      this.modifyOptions.model = true;
+    },
+    savePwd() {
+      if (!this.$refs.pwd.validate()) return;
+      if (
+        this.modifyOptions.fields.newPwd != this.modifyOptions.fields.newPwd1
+      ) {
+        return this.$message.error("涓ゆ瀵嗙爜涓嶄竴鑷�");
+      }
+      let url =
+        "/api/User/modifyPwd?oldPwd=" +
+        this.modifyOptions.fields.oldPwd +
+        "&newPwd=" +
+        this.modifyOptions.fields.newPwd;
+      this.http.post(url, {}, true).then((x) => {
+        if (!x.status) {
+          return this.$message.error(x.message);
+        }
+        this.modifyOptions.model = false;
+        this.$Message.success(x.message);
+        this.$refs.pwd.reset();
+      });
+    },
+    modifyInfo() {
+      this.$message.info("淇敼涓汉淇℃伅");
+    },
+  },
+  created() {
+    this.http.post("/api/User/getCurrentUserInfo", {}, true).then((x) => {
+      if (!x.status) {
+        return this.$message(x.message);
+      }
+      x.data.createDate = (x.data.createDate || "").replace("T", " ");
+      x.data.gender = x.data.gender + "";
+      this.$refs.form.reset(x.data);
+      this.userInfo.img = this.base.getImgSrc(
+        x.data.headImageUrl,
+        this.http.ipAddress
+      );
+      this.userInfo.createDate = x.data.createDate;
+      this.userInfo.userName = x.data.userTrueName;
+      this.userInfo.phoneNo = x.data.phoneNo;
+      this.userInfo.email = x.data.email;
+      //   this.editFormFields = x.data;
+    });
+  },
+  data() {
+    return {
+      errorImg: 'this.src="' + require("@/assets/imgs/error-img.png") + '"',
+      modifyOptions: {
+        model: false,
+        fields: { oldPwd: "", newPwd: "", newPwd1: "" },
+        data: [
+          [
+            {
+              columnType: "string",
+              required: true,
+              title: "鏃у瘑鐮�",
+              field: "oldPwd",
+            },
+          ],
+          [
+            {
+              type: "password",
+              required: true,
+              title: "鏂板瘑鐮�",
+              field: "newPwd",
+            },
+          ],
+          [
+            {
+              type: "password",
+              required: true,
+              title: "纭瀵嗙爜",
+              field: "newPwd1",
+            },
+          ],
+        ],
+      },
+      binging: [{}],
+      userInfo: {
+        img: "",
+        createDate: "--",
+        userName: "--",
+        email: "",
+        phoneNo: "",
+      },
+      editFormFields: {
+        roleName: "",
+        userName: "",
+        userTrueName: "",
+        address: "",
+        gender: "",
+        remark: "",
+      },
+      editFormOptions: [
+        [
+          {
+            columnType: "string",
+            title: "鐢ㄦ埛鍚�",
+            field: "userName",
+            disabled: true,
+          },
+        ],
+        [
+          {
+            columnType: "string",
+            title: "瑙掕壊",
+            field: "roleName",
+            disabled: true,
+            type: "text",
+          },
+        ],
+        [
+          {
+            columnType: "string",
+            title: "鐪熷疄濮撳悕",
+            field: "userTrueName",
+            required: true,
+            disabled: true,
+            type: "text",
+          },
+        ],
+        [
+          {
+            columnType: "string",
+            title: "鍦板潃",
+            field: "address",
+            disabled: true,
+            type: "text",
+          },
+        ],
+        [
+          {
+            dataKey: "gender",
+            title: "鎬у埆",
+            field: "gender",
+            disabled: true,
+            data: [],
+            type: "select",
+          },
+        ],
+        [
+          {
+            columnType: "string",
+            title: "澶囨敞",
+            field: "remark",
+            disabled: true,
+            colSize: 12,
+            type: "textarea",
+          },
+        ],
+      ],
+    };
+  },
+};
+</script>
+<style scoped>
+.binding-group {
+  width: 100%;
+  padding-bottom: 20px;
+}
+
+.binding-group>>>.ivu-cell-link {
+  text-align: left;
+}
+
+.binding-group>>>.ivu-card-body {
+  padding: 0 16px;
+}
+
+.binding-group>>>.ivu-cell-title {
+  line-height: 24px;
+  font-size: 12px;
+}
+</style>
+
+<style lang="less" scoped>
+img[src=""],
+img:not([src]) {
+  opacity: 0;
+}
+
+.user-info {
+  box-shadow: #d6d6d6 0px 4px 21px;
+  position: absolute;
+  transform: translateY(-40%);
+  top: 40%;
+  /* position: relative; */
+  margin: 0 auto;
+  left: 0;
+  width: 950px;
+  right: 0;
+  text-align: center;
+  padding: 0px;
+  padding: 20px;
+
+  .text {
+    padding: 5px;
+
+    .name {
+      font-weight: bolder;
+      font-size: 15px;
+      font-weight: 900;
+    }
+
+    >p {
+      padding-top: 5px;
+    }
+  }
+
+  .header-img {
+    height: 150px;
+    width: 150px;
+    border-radius: 50%;
+    margin-right: 0px;
+    top: 4px;
+    position: relative;
+    border: 3px solid #dfdfdf;
+  }
+
+  >div {
+    float: left;
+    // height: 480px;
+    padding-top: 10px;
+  }
+
+  .left {
+    width: 320px;
+    border-right: 1px solid #eee;
+    // box-shadow: #d6d6d6 7px 4px 20px;
+    // flex: 1;
+  }
+
+  .right {
+    padding-left: 30px;
+    width: 570px;
+    // background: #fefefe;
+    // flex: 3;
+  }
+}
+</style>
+
+
diff --git a/WIDESEA_WMSClient/src/views/system/system/Sys_Department.vue b/WIDESEA_WMSClient/src/views/system/system/Sys_Department.vue
new file mode 100644
index 0000000..0ee20af
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/system/Sys_Department.vue
@@ -0,0 +1,71 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/system/system/Sys_Department.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid"
+               :columns="columns"
+               :detail="detail"
+               :editFormFields="editFormFields"
+               :editFormOptions="editFormOptions"
+               :searchFormFields="searchFormFields"
+               :searchFormOptions="searchFormOptions"
+               :table="table"
+               :extend="extend">
+    </view-grid>
+</template>
+<script>
+    import extend from "@/extension/system/system/Sys_Department.js";
+    import { ref, defineComponent } from "vue";
+    export default defineComponent({
+        setup() {
+            const table = ref({
+                key: 'DepartmentId',
+                footer: "Foots",
+                cnName: '缁勭粐鏋舵瀯',
+                name: 'system/Sys_Department',
+                url: "/Sys_Department/",
+                sortName: "CreateDate"
+            });
+            const editFormFields = ref({"DepartmentName":"","DepartmentCode":"","ParentId":[],"Remark":""});
+            const editFormOptions = ref([[{"title":"缁勭粐鍚嶇О","required":true,"field":"DepartmentName"}],
+                              [{"title":"缁勭粐缂栧彿","field":"DepartmentCode"}],
+                              [{"dataKey":"缁勭粐鏈烘瀯","data":[],"title":"涓婄骇缁勭粐","field":"ParentId","type":"cascader"}],
+                              [{"title":"澶囨敞","field":"Remark","type":"textarea"}]]);
+            const searchFormFields = ref({"DepartmentName":"","DepartmentCode":"","Creator":"","CreateDate":""});
+            const searchFormOptions = ref([[{"title":"缁勭粐鍚嶇О","field":"DepartmentName","type":"like"},{"title":"缁勭粐缂栧彿","field":"DepartmentCode"},{"title":"鍒涘缓浜�","field":"Creator"},{"title":"鍒涘缓鏃堕棿","field":"CreateDate","type":"datetime"}]]);
+            const columns = ref([{field:'DepartmentId',title:'DepartmentId',type:'guid',width:110,hidden:true,readonly:true,require:true,align:'left'},
+                       {field:'DepartmentName',title:'缁勭粐鍚嶇О',type:'string',link:true,width:180,require:true,align:'left',sort:true},
+                       {field:'DepartmentCode',title:'缁勭粐缂栧彿',type:'string',width:90,align:'left'},
+                       {field:'ParentId',title:'涓婄骇缁勭粐',type:'guid',bind:{ key:'缁勭粐鏈烘瀯',data:[]},width:110,hidden:true,align:'left'},
+                       {field:'DepartmentType',title:'缁勭粐绫诲瀷',type:'string',width:110,hidden:true,align:'left'},
+                       {field:'Enable',title:'鏄惁鍙敤',type:'int',width:110,hidden:true,align:'left'},
+                       {field:'Remark',title:'澶囨敞',type:'string',width:100,align:'left'},
+                       {field:'CreateID',title:'CreateID',type:'int',width:100,hidden:true,align:'left'},
+                       {field:'Creator',title:'鍒涘缓浜�',type:'string',width:90,align:'left'},
+                       {field:'CreateDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:145,align:'left',sort:true},
+                       {field:'ModifyID',title:'ModifyID',type:'int',width:100,hidden:true,align:'left'},
+                       {field:'Modifier',title:'淇敼浜�',type:'string',width:90,align:'left'},
+                       {field:'ModifyDate',title:'淇敼鏃堕棿',type:'datetime',width:140,align:'left',sort:true}]);
+            const detail = ref({
+                cnName: "#detailCnName",
+                table: "#detailTable",
+                columns: [],
+                sortName: "",
+                key: ""
+            });
+            return {
+                table,
+                extend,
+                editFormFields,
+                editFormOptions,
+                searchFormFields,
+                searchFormOptions,
+                columns,
+                detail,
+            };
+        },
+    });
+</script>
diff --git a/WIDESEA_WMSClient/src/views/system/test.vue b/WIDESEA_WMSClient/src/views/system/test.vue
new file mode 100644
index 0000000..64786be
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/system/test.vue
@@ -0,0 +1,18 @@
+<template>
+
+</template>
+
+<script>
+export default {
+  props:{
+        list: {
+      type: Array,
+      default: [],
+    },
+  }
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/taskinfo/task.vue b/WIDESEA_WMSClient/src/views/taskinfo/task.vue
new file mode 100644
index 0000000..f8fed3d
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/taskinfo/task.vue
@@ -0,0 +1,230 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/taskinfo/task.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "taskId",
+      footer: "Foots",
+      cnName: "浠诲姟淇℃伅",
+      name: "task",
+      url: "/Task/",
+      sortName: "CreateDate",
+    });
+    const editFormFields = ref({});
+    const editFormOptions = ref([]);
+    const searchFormFields = ref({
+      taskNum: "",
+      palletCode: "",
+      roadway: "",
+      taskStatus: "",
+      taskType: "",
+      sourceAddress: "",
+      targetAddress: "",
+      currentAddress: "",
+      nextAddress: "",
+      creater: "",
+      createDate: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "浠诲姟鍙�", field: "taskNum", type: "int" },
+        { title: "鎵樼洏缂栧彿", field: "palletCode", type: "like" },
+        { title: "鍒涘缓浜�", field: "creater", type: "like" },
+      ],
+      [
+        { title: "浠诲姟绫诲瀷",field: "taskType",type: "selectList",dataKey: "taskType",data: [],},
+        { title: "浠诲姟鐘舵��",field: "taskStatus",type: "selectList",dataKey: "taskStatusEnum",data: [],},
+        { title: "宸烽亾鍙�", field: "roadway", type: "like" },
+      ],
+      [
+        { title: "璧峰鍦板潃", field: "sourceAddress", type: "like" },
+        { title: "鐩爣鍦板潃", field: "targetAddress", type: "like" },
+        { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "taskId",
+        title: "taskId",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "taskNum",
+        title: "浠诲姟鍙�",
+        type: "int",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "palletCode",
+        title: "鎵樼洏缂栧彿",
+        type: "string",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "roadway",
+        title: "宸烽亾鍙�",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "taskType",
+        title: "浠诲姟绫诲瀷",
+        type: "int",
+        width: 120,
+        align: "left",
+        bind: { key: "taskType", data: [] },
+      },
+      {
+        field: "taskStatus",
+        title: "浠诲姟鐘舵��",
+        type: "int",
+        width: 150,
+        align: "left",
+        bind: { key: "taskStatusEnum", data: [] },
+      },
+      {
+        field: "sourceAddress",
+        title: "璧峰鍦板潃",
+        type: "int",
+        width: 220,
+        align: "left",
+      },
+      {
+        field: "targetAddress",
+        title: "鐩爣鍦板潃",
+        type: "string",
+        width: 220,
+        align: "left",
+      },
+      // {
+      //   field: "currentAddress",
+      //   title: "褰撳墠浣嶇疆",
+      //   type: "string",
+      //   width: 120,
+      //   align: "left",
+      // },
+      // {
+      //   field: "nextAddress",
+      //   title: "涓嬩竴浣嶇疆",
+      //   type: "string",
+      //   width: 120,
+      //   align: "left",
+      // },
+      {
+        field: "exceptionMessage",
+        title: "寮傚父淇℃伅",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "grade",
+        title: "浼樺厛绾�",
+        type: "int",
+        width: 80,
+        align: "left",
+      },
+      {
+        field: "depth",
+        title: "娣卞害",
+        type: "int",
+        width: 80,
+        align: "left",
+      },
+      {
+        field: "dispatchertime",
+        title: "浠诲姟涓嬪彂鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        hidden:true,
+      },
+      {
+        field: "wMSId",
+        title: "WMS浠诲姟涓婚敭",
+        type: "int",
+        width: 120,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+        hidden: true,
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue b/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue
new file mode 100644
index 0000000..c0ade98
--- /dev/null
+++ b/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue
@@ -0,0 +1,230 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/taskinfo/task_hty.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "taskId",
+      footer: "Foots",
+      cnName: "浠诲姟鍘嗗彶淇℃伅",
+      name: "task_hty",
+      url: "/Task_Hty/",
+      sortName: "taskId",
+    });
+    const editFormFields = ref({});
+    const editFormOptions = ref([]);
+    const searchFormFields = ref({
+      taskNum: "",
+      palletCode: "",
+      roadway: "",
+      taskStatus: "",
+      taskType: "",
+      sourceAddress: "",
+      targetAddress: "",
+      currentAddress: "",
+      nextAddress: "",
+      creater: "",
+      createDate: "",
+    });
+    const searchFormOptions = ref([
+    [
+        { title: "浠诲姟鍙�", field: "taskNum", type: "int" },
+        { title: "鎵樼洏缂栧彿", field: "palletCode", type: "like" },
+        { title: "鍒涘缓浜�", field: "creater", type: "like" },
+      ],
+      [
+        { title: "浠诲姟绫诲瀷",field: "taskType",type: "selectList",dataKey: "taskType",data: [],},
+        { title: "浠诲姟鐘舵��",field: "taskStatus",type: "selectList",dataKey: "taskStatusEnum",data: [],},
+        { title: "宸烽亾鍙�", field: "roadway", type: "like" },
+      ],
+      [
+        { title: "璧峰鍦板潃", field: "sourceAddress", type: "like" },
+        { title: "鐩爣鍦板潃", field: "targetAddress", type: "like" },
+        { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "taskId",
+        title: "taskId",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "taskNum",
+        title: "浠诲姟鍙�",
+        type: "int",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "palletCode",
+        title: "鎵樼洏缂栧彿",
+        type: "string",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "roadway",
+        title: "宸烽亾鍙�",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "taskType",
+        title: "浠诲姟绫诲瀷",
+        type: "int",
+        width: 120,
+        align: "left",
+        bind: { key: "taskType", data: [] },
+      },
+      {
+        field: "taskStatus",
+        title: "浠诲姟鐘舵��",
+        type: "int",
+        width: 150,
+        align: "left",
+        bind: { key: "taskStatusEnum", data: [] },
+      },
+      {
+        field: "sourceAddress",
+        title: "璧峰鍦板潃",
+        type: "int",
+        width: 220,
+        align: "left",
+      },
+      {
+        field: "targetAddress",
+        title: "鐩爣鍦板潃",
+        type: "string",
+        width: 220,
+        align: "left",
+      },
+      // {
+      //   field: "currentAddress",
+      //   title: "褰撳墠浣嶇疆",
+      //   type: "string",
+      //   width: 120,
+      //   align: "left",
+      // },
+      // {
+      //   field: "nextAddress",
+      //   title: "涓嬩竴浣嶇疆",
+      //   type: "string",
+      //   width: 120,
+      //   align: "left",
+      // },
+      {
+        field: "exceptionMessage",
+        title: "寮傚父淇℃伅",
+        type: "string",
+        width: 90,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "grade",
+        title: "浼樺厛绾�",
+        type: "int",
+        width: 80,
+        align: "left",
+      },
+      {
+        field: "depth",
+        title: "娣卞害",
+        type: "int",
+        width: 80,
+        align: "left",
+      },
+      {
+        field: "dispatchertime",
+        title: "浠诲姟涓嬪彂鏃堕棿",
+        type: "datetime",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "wMSId",
+        title: "WMS浠诲姟涓婚敭",
+        type: "int",
+        width: 120,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+        hidden: true,
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ No newline at end of file
diff --git a/WIDESEA_WMSClient/tests/unit/example.spec.js b/WIDESEA_WMSClient/tests/unit/example.spec.js
new file mode 100644
index 0000000..bc9939b
--- /dev/null
+++ b/WIDESEA_WMSClient/tests/unit/example.spec.js
@@ -0,0 +1,13 @@
+import { expect } from 'chai'
+import { shallowMount } from '@vue/test-utils'
+import HelloWorld from '@/components/HelloWorld.vue'
+
+describe('HelloWorld.vue', () => {
+  it('renders props.msg when passed', () => {
+    const msg = 'new message'
+    const wrapper = shallowMount(HelloWorld, {
+      props: { msg }
+    })
+    expect(wrapper.text()).to.include(msg)
+  })
+})
diff --git a/WIDESEA_WMSClient/vue.config.js b/WIDESEA_WMSClient/vue.config.js
new file mode 100644
index 0000000..2d3d8d5
--- /dev/null
+++ b/WIDESEA_WMSClient/vue.config.js
@@ -0,0 +1,59 @@
+// const webpack = require("webpack");
+
+module.exports = {
+  productionSourceMap: false,
+  lintOnSave: false,
+  devServer: {
+    port: 8080,
+    overlay: {
+      warning: false,
+      errors: false
+    }
+  },
+  css: {
+    //鏌ョ湅CSS灞炰簬鍝釜css鏂囦欢
+    sourceMap: true
+  },
+  configureWebpack: {
+    module: {
+      rules: [
+        {
+          test: /\.mjs$/,
+          include: /node_modules/,
+          type: "javascript/auto"
+        },
+        {
+          test: /\.s[ac]ss$/,
+          use: [
+            'sass-loader'
+          ]
+        }
+      ]
+    }
+  },
+  //https://cli.vuejs.org/zh/guide/html-and-static-assets.html#html
+  chainWebpack: (config) => {
+    // 绉婚櫎 prefetch 鎻掍欢
+    config.plugins.delete('prefetch');
+    //鑷笅瀹氫箟title
+    config.plugin('html').tap((args) => {
+      args[0].title = 'WMS';
+      return args;
+    });
+
+    // 鎴栬��
+    // 淇敼瀹冪殑閫夐」锛�
+    // config.plugin('prefetch').tap(options => {
+    //   options[0].fileBlacklist = options[0].fileBlacklist || []
+    //   options[0].fileBlacklist.push(/myasyncRoute(.)+?\.js$/)
+    //   return options
+    // })
+  }
+  // configureWebpack: {
+  //     plugins: [
+  //         new webpack.optimize.MinChunkSizePlugin({
+  //             minChunkSize: 100000 // 閫氳繃鍚堝苟灏忎簬 minChunkSize 澶у皬鐨� chunk锛屽皢 chunk 浣撶Н淇濇寔鍦ㄦ寚瀹氬ぇ灏忛檺鍒朵互涓�
+  //         })
+  //     ]
+  // }
+};
diff --git a/WIDESEA_WMSClient/yarn.lock b/WIDESEA_WMSClient/yarn.lock
new file mode 100644
index 0000000..c510891
--- /dev/null
+++ b/WIDESEA_WMSClient/yarn.lock
@@ -0,0 +1,10203 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@achrinza/node-ipc@9.2.2":
+  "integrity" "sha512-b90U39dx0cU6emsOvy5hxU4ApNXnE3+Tuo8XQZfiKTGelDwpMwBVgBP7QX6dGTcJgu/miyJuNJ/2naFBliNWEw=="
+  "resolved" "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.2.tgz"
+  "version" "9.2.2"
+  dependencies:
+    "@node-ipc/js-queue" "2.0.3"
+    "event-pubsub" "4.3.0"
+    "js-message" "1.0.7"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5":
+  "integrity" "sha1-I7CNdA6D9JxeWZRfvxtD6Au/Tts="
+  "resolved" "https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/highlight" "^7.14.5"
+
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7":
+  "integrity" "sha1-ewR9ejqJpn0iWNxh9gTwmPG8fgg="
+  "resolved" "https://registry.nlark.com/@babel/compat-data/download/@babel/compat-data-7.14.7.tgz"
+  "version" "7.14.7"
+
+"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.0", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0":
+  "integrity" "sha1-4IFOwalQAy/xbBOich3jmoQW/Ks="
+  "resolved" "https://registry.nlark.com/@babel/core/download/@babel/core-7.14.6.tgz"
+  "version" "7.14.6"
+  dependencies:
+    "@babel/code-frame" "^7.14.5"
+    "@babel/generator" "^7.14.5"
+    "@babel/helper-compilation-targets" "^7.14.5"
+    "@babel/helper-module-transforms" "^7.14.5"
+    "@babel/helpers" "^7.14.6"
+    "@babel/parser" "^7.14.6"
+    "@babel/template" "^7.14.5"
+    "@babel/traverse" "^7.14.5"
+    "@babel/types" "^7.14.5"
+    "convert-source-map" "^1.7.0"
+    "debug" "^4.1.0"
+    "gensync" "^1.0.0-beta.2"
+    "json5" "^2.1.2"
+    "semver" "^6.3.0"
+    "source-map" "^0.5.0"
+
+"@babel/generator@^7.14.5":
+  "integrity" "sha1-hI17nwMcrKnQzQrwGwY/Im9S14U="
+  "resolved" "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/types" "^7.14.5"
+    "jsesc" "^2.5.1"
+    "source-map" "^0.5.0"
+
+"@babel/helper-annotate-as-pure@^7.14.5":
+  "integrity" "sha1-e/R47Dtxcm1WqMpXdbBG/CmHnmE="
+  "resolved" "https://registry.nlark.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5":
+  "integrity" "sha1-uTm0P4w3dlRDoZrnStixWXjgoZE="
+  "resolved" "https://registry.nlark.com/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz?cache=0&sync_timestamp=1623280539341&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor%2Fdownload%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-explode-assignable-expression" "^7.14.5"
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5", "@babel/helper-compilation-targets@^7.9.6":
+  "integrity" "sha1-epnF0JZ5Eely/iw0EffVtJhJjs8="
+  "resolved" "https://registry.nlark.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.14.5.tgz?cache=0&sync_timestamp=1623280514256&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/compat-data" "^7.14.5"
+    "@babel/helper-validator-option" "^7.14.5"
+    "browserslist" "^4.16.6"
+    "semver" "^6.3.0"
+
+"@babel/helper-create-class-features-plugin@^7.14.5":
+  "integrity" "sha1-8RRGm2wG+LXFnGxOdGIfUIU2JUI="
+  "resolved" "https://registry.nlark.com/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.14.6.tgz"
+  "version" "7.14.6"
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.14.5"
+    "@babel/helper-function-name" "^7.14.5"
+    "@babel/helper-member-expression-to-functions" "^7.14.5"
+    "@babel/helper-optimise-call-expression" "^7.14.5"
+    "@babel/helper-replace-supers" "^7.14.5"
+    "@babel/helper-split-export-declaration" "^7.14.5"
+
+"@babel/helper-create-regexp-features-plugin@^7.14.5":
+  "integrity" "sha1-x9WsXpz2IcJgV3Ivt6ikxYiTWMQ="
+  "resolved" "https://registry.nlark.com/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.14.5"
+    "regexpu-core" "^4.7.1"
+
+"@babel/helper-define-polyfill-provider@^0.2.2":
+  "integrity" "sha1-BSXt7FCUZTooJojTTYRuTHXpwLY="
+  "resolved" "https://registry.nlark.com/@babel/helper-define-polyfill-provider/download/@babel/helper-define-polyfill-provider-0.2.3.tgz?cache=0&sync_timestamp=1622025430652&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-define-polyfill-provider%2Fdownload%2F%40babel%2Fhelper-define-polyfill-provider-0.2.3.tgz"
+  "version" "0.2.3"
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.13.0"
+    "@babel/helper-module-imports" "^7.12.13"
+    "@babel/helper-plugin-utils" "^7.13.0"
+    "@babel/traverse" "^7.13.0"
+    "debug" "^4.1.1"
+    "lodash.debounce" "^4.0.8"
+    "resolve" "^1.14.2"
+    "semver" "^6.1.2"
+
+"@babel/helper-explode-assignable-expression@^7.14.5":
+  "integrity" "sha1-iqcucIIFx7tkPkXHO0OGzfKh9kU="
+  "resolved" "https://registry.nlark.com/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-function-name@^7.14.5":
+  "integrity" "sha1-ieLEdJcvFdjiM7Uu6MSA4s/NUMQ="
+  "resolved" "https://registry.nlark.com/@babel/helper-function-name/download/@babel/helper-function-name-7.14.5.tgz?cache=0&sync_timestamp=1623280544273&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-get-function-arity" "^7.14.5"
+    "@babel/template" "^7.14.5"
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-get-function-arity@^7.14.5":
+  "integrity" "sha1-Jfv6V5sJN+7h87gF7OTOOYxDGBU="
+  "resolved" "https://registry.nlark.com/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-hoist-variables@^7.14.5":
+  "integrity" "sha1-4N0nwzp45XfXyIhJFqPn7x98f40="
+  "resolved" "https://registry.nlark.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-member-expression-to-functions@^7.14.5":
+  "integrity" "sha1-l+ViRL65QhH+J3vYGOOjKcZveXA="
+  "resolved" "https://registry.nlark.com/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.14.7.tgz"
+  "version" "7.14.7"
+  dependencies:
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.8.3":
+  "integrity" "sha1-bRpE32o4yVeqfDEtoHZCnxG0IvM="
+  "resolved" "https://registry.nlark.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-module-transforms@^7.14.5":
+  "integrity" "sha1-feQvENeJtCPrkC69JAMcp3yx4Q4="
+  "resolved" "https://registry.nlark.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.14.5.tgz?cache=0&sync_timestamp=1623280540631&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-module-imports" "^7.14.5"
+    "@babel/helper-replace-supers" "^7.14.5"
+    "@babel/helper-simple-access" "^7.14.5"
+    "@babel/helper-split-export-declaration" "^7.14.5"
+    "@babel/helper-validator-identifier" "^7.14.5"
+    "@babel/template" "^7.14.5"
+    "@babel/traverse" "^7.14.5"
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-optimise-call-expression@^7.14.5":
+  "integrity" "sha1-8nOVqGGeBmWz8DZM3bQcJdcbSZw="
+  "resolved" "https://registry.nlark.com/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+  "integrity" "sha1-WsgizpfuxGdBq3ClF5ceRDpwxak="
+  "resolved" "https://registry.nlark.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.14.5.tgz"
+  "version" "7.14.5"
+
+"@babel/helper-remap-async-to-generator@^7.14.5":
+  "integrity" "sha1-UUOckTYSlY9UqYek/8nuWHogRdY="
+  "resolved" "https://registry.nlark.com/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.14.5.tgz?cache=0&sync_timestamp=1623280541106&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-remap-async-to-generator%2Fdownload%2F%40babel%2Fhelper-remap-async-to-generator-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.14.5"
+    "@babel/helper-wrap-function" "^7.14.5"
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-replace-supers@^7.14.5":
+  "integrity" "sha1-DswLA8Qc1We0Ak6gFhNMKEFKu5Q="
+  "resolved" "https://registry.nlark.com/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.14.5.tgz?cache=0&sync_timestamp=1623280539767&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-member-expression-to-functions" "^7.14.5"
+    "@babel/helper-optimise-call-expression" "^7.14.5"
+    "@babel/traverse" "^7.14.5"
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-simple-access@^7.14.5":
+  "integrity" "sha1-ZuqFz1O6C05Yi6d/yBP1OryqQcQ="
+  "resolved" "https://registry.nlark.com/@babel/helper-simple-access/download/@babel/helper-simple-access-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.14.5":
+  "integrity" "sha1-lvSGrAUMqfRLAJ++W305TKs6DuQ="
+  "resolved" "https://registry.nlark.com/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-split-export-declaration@^7.14.5":
+  "integrity" "sha1-IrI6VO9RwrdgXYUZMMGXbdC8aTo="
+  "resolved" "https://registry.nlark.com/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.14.5.tgz?cache=0&sync_timestamp=1623280535830&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/types" "^7.14.5"
+
+"@babel/helper-validator-identifier@^7.14.5":
+  "integrity" "sha1-0PDid8US4Mk4J3+qhaOWjJpEwOg="
+  "resolved" "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.14.5.tgz"
+  "version" "7.14.5"
+
+"@babel/helper-validator-option@^7.14.5":
+  "integrity" "sha1-bnKh//GNXfy4eOHmLxoCHEty1aM="
+  "resolved" "https://registry.nlark.com/@babel/helper-validator-option/download/@babel/helper-validator-option-7.14.5.tgz"
+  "version" "7.14.5"
+
+"@babel/helper-wrap-function@^7.14.5":
+  "integrity" "sha1-WRnRFb8P4yi4pdY7y2EPUWAfK/8="
+  "resolved" "https://registry.nlark.com/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.14.5.tgz?cache=0&sync_timestamp=1623280540387&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-wrap-function%2Fdownload%2F%40babel%2Fhelper-wrap-function-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-function-name" "^7.14.5"
+    "@babel/template" "^7.14.5"
+    "@babel/traverse" "^7.14.5"
+    "@babel/types" "^7.14.5"
+
+"@babel/helpers@^7.14.6":
+  "integrity" "sha1-W1gwa5XxtH4qAZlDT6hlj6bCFjU="
+  "resolved" "https://registry.nlark.com/@babel/helpers/download/@babel/helpers-7.14.6.tgz"
+  "version" "7.14.6"
+  dependencies:
+    "@babel/template" "^7.14.5"
+    "@babel/traverse" "^7.14.5"
+    "@babel/types" "^7.14.5"
+
+"@babel/highlight@^7.14.5":
+  "integrity" "sha1-aGGlLwOWZAUAH2qlNKAaJNmejNk="
+  "resolved" "https://registry.nlark.com/@babel/highlight/download/@babel/highlight-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.14.5"
+    "chalk" "^2.0.0"
+    "js-tokens" "^4.0.0"
+
+"@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7", "@babel/parser@^7.16.4", "@babel/parser@^7.7.0":
+  "integrity" "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ=="
+  "resolved" "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.11.tgz"
+  "version" "7.18.11"
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5":
+  "integrity" "sha1-S0ZzAuFUjtOxvkO+rizJz0Xgu34="
+  "resolved" "https://registry.nlark.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
+    "@babel/plugin-proposal-optional-chaining" "^7.14.5"
+
+"@babel/plugin-proposal-async-generator-functions@^7.14.7":
+  "integrity" "sha1-eEpIw9jtBz9lrc8wtXvL9sgRms4="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.14.7.tgz"
+  "version" "7.14.7"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-remap-async-to-generator" "^7.14.5"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+
+"@babel/plugin-proposal-class-properties@^7.14.5", "@babel/plugin-proposal-class-properties@^7.8.3":
+  "integrity" "sha1-QNHuFAxbHjGjUPT17tlFCWVZtC4="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.14.5.tgz?cache=0&sync_timestamp=1623280542725&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-class-properties%2Fdownload%2F%40babel%2Fplugin-proposal-class-properties-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-proposal-class-static-block@^7.14.5":
+  "integrity" "sha1-FY6eENRJw4Se8+zelKA9nxhBtoE="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-proposal-decorators@^7.8.3":
+  "integrity" "sha1-WbxN/B1mW1pnSc95j/Qil+0bLB0="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.14.5.tgz?cache=0&sync_timestamp=1623280534359&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-decorators%2Fdownload%2F%40babel%2Fplugin-proposal-decorators-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-decorators" "^7.14.5"
+
+"@babel/plugin-proposal-dynamic-import@^7.14.5":
+  "integrity" "sha1-DGYX30YcDB+P/ztHzVl3I2AQHSw="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-proposal-export-namespace-from@^7.14.5":
+  "integrity" "sha1-260kQxDObM0IMHIWfYzqg6Uvr3Y="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.14.5":
+  "integrity" "sha1-ON5g2zYug6PYyUSshY3fnwwiOes="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+
+"@babel/plugin-proposal-logical-assignment-operators@^7.14.5":
+  "integrity" "sha1-bmIpwqmbAqspFfglceDMZGpAxzg="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5":
+  "integrity" "sha1-7jhYnOAOLMWbKZ7D6kBvzToP2vY="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-proposal-numeric-separator@^7.14.5":
+  "integrity" "sha1-g2Mb8z2aUd8YTCECoGmsDFjAXxg="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-proposal-object-rest-spread@^7.14.7":
+  "integrity" "sha1-WSCis99/eQHfAgWXTAZBsT/Z02M="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.14.7.tgz"
+  "version" "7.14.7"
+  dependencies:
+    "@babel/compat-data" "^7.14.7"
+    "@babel/helper-compilation-targets" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-transform-parameters" "^7.14.5"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.14.5":
+  "integrity" "sha1-k53W7d7/Omf997PwRLU0cmJZjDw="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-proposal-optional-chaining@^7.14.5":
+  "integrity" "sha1-+oNlHmCjYOPxN5fu8AuNUZaVtgM="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.14.5.tgz?cache=0&sync_timestamp=1623281177929&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-optional-chaining%2Fdownload%2F%40babel%2Fplugin-proposal-optional-chaining-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-proposal-private-methods@^7.14.5":
+  "integrity" "sha1-N0RklZlrKUXzD1vltg1eKqT1eS0="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-proposal-private-property-in-object@^7.14.5":
+  "integrity" "sha1-n2Wk0Ek6lAtMAfiqnT8YlKWH9jY="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.14.5"
+    "@babel/helper-create-class-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+  "integrity" "sha1-D5XuDnV6XWR/N42qDsp+k/qou+g="
+  "resolved" "https://registry.nlark.com/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.14.5.tgz?cache=0&sync_timestamp=1623280542681&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-proposal-unicode-property-regex%2Fdownload%2F%40babel%2Fplugin-proposal-unicode-property-regex-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+  "integrity" "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0="
+  "resolved" "https://registry.nlark.com/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz"
+  "version" "7.8.4"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.12.13":
+  "integrity" "sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA="
+  "resolved" "https://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz"
+  "version" "7.12.13"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+  "integrity" "sha1-GV34mxRrS3izv4l/16JXyEZZ1AY="
+  "resolved" "https://registry.nlark.com/@babel/plugin-syntax-class-static-block/download/@babel/plugin-syntax-class-static-block-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-decorators@^7.14.5":
+  "integrity" "sha1-6vucDL4JyK/rlkujp7vWOUWnLyA="
+  "resolved" "https://registry.nlark.com/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.3":
+  "integrity" "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM="
+  "resolved" "https://registry.nlark.com/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz?cache=0&sync_timestamp=1618847125283&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-syntax-dynamic-import%2Fdownload%2F%40babel%2Fplugin-syntax-dynamic-import-7.8.3.tgz"
+  "version" "7.8.3"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+  "integrity" "sha1-AolkqbqA28CUyRXEh618TnpmRlo="
+  "resolved" "https://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz"
+  "version" "7.8.3"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+  "integrity" "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo="
+  "resolved" "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz"
+  "version" "7.8.3"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.8.3":
+  "integrity" "sha1-AA4uJdhnPM5JMAUXo+2kTCY+QgE="
+  "resolved" "https://registry.nlark.com/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.14.5.tgz?cache=0&sync_timestamp=1623280667234&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-syntax-jsx%2Fdownload%2F%40babel%2Fplugin-syntax-jsx-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
+  "integrity" "sha1-ypHvRjA1MESLkGZSusLp/plB9pk="
+  "resolved" "https://registry.nlark.com/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz"
+  "version" "7.10.4"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+  "integrity" "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak="
+  "resolved" "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz"
+  "version" "7.8.3"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4":
+  "integrity" "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c="
+  "resolved" "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz"
+  "version" "7.10.4"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.3":
+  "integrity" "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE="
+  "resolved" "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz"
+  "version" "7.8.3"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+  "integrity" "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE="
+  "resolved" "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz"
+  "version" "7.8.3"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+  "integrity" "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io="
+  "resolved" "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz"
+  "version" "7.8.3"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+  "integrity" "sha1-DcZnHsDqIrbpShEU+FeXDNOd4a0="
+  "resolved" "https://registry.nlark.com/@babel/plugin-syntax-private-property-in-object/download/@babel/plugin-syntax-private-property-in-object-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-top-level-await@^7.14.5":
+  "integrity" "sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw="
+  "resolved" "https://registry.nlark.com/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-arrow-functions@^7.14.5":
+  "integrity" "sha1-9xh9lYinaN0IC/TJ/+EX6mL3hio="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-async-to-generator@^7.14.5":
+  "integrity" "sha1-cseJCE2PIJSsuUVjOUPvhEPTnmc="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.14.5.tgz?cache=0&sync_timestamp=1623280543644&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-async-to-generator%2Fdownload%2F%40babel%2Fplugin-transform-async-to-generator-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-module-imports" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-remap-async-to-generator" "^7.14.5"
+
+"@babel/plugin-transform-block-scoped-functions@^7.14.5":
+  "integrity" "sha1-5IZB2ZnUvBV6Z+8zautUvET9OtQ="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-block-scoping@^7.14.5":
+  "integrity" "sha1-jMY+YeUPQuB45vCb53WnXyPvmTk="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-classes@^7.14.5":
+  "integrity" "sha1-DpjoIJezhVCwO0g/m1GnjeCsss8="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.14.5.tgz?cache=0&sync_timestamp=1623280541378&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.14.5"
+    "@babel/helper-function-name" "^7.14.5"
+    "@babel/helper-optimise-call-expression" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-replace-supers" "^7.14.5"
+    "@babel/helper-split-export-declaration" "^7.14.5"
+    "globals" "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.14.5":
+  "integrity" "sha1-G514mHQg0RIj1BGVRhzEO5dLIE8="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-destructuring@^7.14.7":
+  "integrity" "sha1-CtWO034j4iCE0QnxhSYINeVVdXY="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.14.7.tgz"
+  "version" "7.14.7"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4":
+  "integrity" "sha1-L2v3bka9+AQ7Tn4WzyRTJim6DHo="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.14.5.tgz?cache=0&sync_timestamp=1623280544588&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-dotall-regex%2Fdownload%2F%40babel%2Fplugin-transform-dotall-regex-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-duplicate-keys@^7.14.5":
+  "integrity" "sha1-NlpIRIgb3xUB46nwJw5/D5EXeVQ="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-exponentiation-operator@^7.14.5":
+  "integrity" "sha1-UVS43Wo9/m2Qkj1hckvT3uuQtJM="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.14.5.tgz?cache=0&sync_timestamp=1623280545524&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-exponentiation-operator%2Fdownload%2F%40babel%2Fplugin-transform-exponentiation-operator-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-for-of@^7.14.5":
+  "integrity" "sha1-2uOEYT3o93wZaohpy/YCpE9/wOs="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-function-name@^7.14.5":
+  "integrity" "sha1-6Bxl7LkAdG1/MYAva+0fUtkV1vI="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.14.5.tgz?cache=0&sync_timestamp=1623280538359&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-function-name%2Fdownload%2F%40babel%2Fplugin-transform-function-name-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-function-name" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-literals@^7.14.5":
+  "integrity" "sha1-QdBsf/XU0J489Fh70+zzkwxzD3g="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-member-expression-literals@^7.14.5":
+  "integrity" "sha1-s5zVISor8jWmF9Mg7CtIvMCRuKc="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-modules-amd@^7.14.5":
+  "integrity" "sha1-T9nOfjQRy4uDhISAtwQdgwBIWPc="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.14.5.tgz?cache=0&sync_timestamp=1623280543412&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-module-transforms" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "babel-plugin-dynamic-import-node" "^2.3.3"
+
+"@babel/plugin-transform-modules-commonjs@^7.14.5":
+  "integrity" "sha1-eq7g6pgoPelNqYso+MNXAUKdrZc="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.14.5.tgz?cache=0&sync_timestamp=1623280545201&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-commonjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-commonjs-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-module-transforms" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-simple-access" "^7.14.5"
+    "babel-plugin-dynamic-import-node" "^2.3.3"
+
+"@babel/plugin-transform-modules-systemjs@^7.14.5":
+  "integrity" "sha1-x1NC74sw3N5CldNAGq4k5lY47Sk="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.14.5.tgz?cache=0&sync_timestamp=1623280544915&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-hoist-variables" "^7.14.5"
+    "@babel/helper-module-transforms" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-validator-identifier" "^7.14.5"
+    "babel-plugin-dynamic-import-node" "^2.3.3"
+
+"@babel/plugin-transform-modules-umd@^7.14.5":
+  "integrity" "sha1-+2Yt/uaXzOJ0p82lJRkKeQlqpuA="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.14.5.tgz?cache=0&sync_timestamp=1623280545520&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-modules-umd%2Fdownload%2F%40babel%2Fplugin-transform-modules-umd-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-module-transforms" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7":
+  "integrity" "sha1-YMBokqz53yMeJWwkRkv+ywkI/U4="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.14.7.tgz"
+  "version" "7.14.7"
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+
+"@babel/plugin-transform-new-target@^7.14.5":
+  "integrity" "sha1-Mb2ui5JdyEB26/zSqZQBQ67X2/g="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-object-super@^7.14.5":
+  "integrity" "sha1-0LX66snphZehYanPeMUn7ZNM3EU="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.14.5.tgz?cache=0&sync_timestamp=1623280540862&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-object-super%2Fdownload%2F%40babel%2Fplugin-transform-object-super-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-replace-supers" "^7.14.5"
+
+"@babel/plugin-transform-parameters@^7.14.5":
+  "integrity" "sha1-SWYuhqHz3cysY2On37H/ChWK/rM="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-property-literals@^7.14.5":
+  "integrity" "sha1-DduqH4PbNgbxzfSEb6HftHNFizQ="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-regenerator@^7.14.5":
+  "integrity" "sha1-lnb9VwftKPUicnxbPAqoVERAsE8="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "regenerator-transform" "^0.14.2"
+
+"@babel/plugin-transform-reserved-words@^7.14.5":
+  "integrity" "sha1-xEWJtmHP2++NQwDcx0ad/6kvgwQ="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-runtime@^7.11.0":
+  "integrity" "sha1-MEkdrUnGBZ+Pj6XuiJagCJ6YdSM="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.14.5.tgz?cache=0&sync_timestamp=1623280540797&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-runtime%2Fdownload%2F%40babel%2Fplugin-transform-runtime-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-module-imports" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "babel-plugin-polyfill-corejs2" "^0.2.2"
+    "babel-plugin-polyfill-corejs3" "^0.2.2"
+    "babel-plugin-polyfill-regenerator" "^0.2.2"
+    "semver" "^6.3.0"
+
+"@babel/plugin-transform-shorthand-properties@^7.14.5":
+  "integrity" "sha1-l/E4VfFAkzjYyty6ymcK154JGlg="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-spread@^7.14.6":
+  "integrity" "sha1-a9QOV/596UqpBIUZY7VhZlL3MUQ="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.14.6.tgz"
+  "version" "7.14.6"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
+
+"@babel/plugin-transform-sticky-regex@^7.14.5":
+  "integrity" "sha1-W2F1Qmdei3dhKUOB88KMYz9Arrk="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-template-literals@^7.14.5":
+  "integrity" "sha1-pfK8Izk32EU4hdxza92Nn/q/PZM="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-typeof-symbol@^7.14.5":
+  "integrity" "sha1-Oa8nOemJor0pG/a1PxaYFCPUV9Q="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-unicode-escapes@^7.14.5":
+  "integrity" "sha1-nUvSpoHjxdes9PV/qeURddkdDGs="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-unicode-regex@^7.14.5":
+  "integrity" "sha1-TNCbbIQl3YElXHzrP7GDbnQUOC4="
+  "resolved" "https://registry.nlark.com/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.14.5.tgz?cache=0&sync_timestamp=1623280536838&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-unicode-regex%2Fdownload%2F%40babel%2Fplugin-transform-unicode-regex-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/preset-env@^7.11.0":
+  "integrity" "sha1-XHCyLUwtiTsD2MiGpcF0IlArkyo="
+  "resolved" "https://registry.nlark.com/@babel/preset-env/download/@babel/preset-env-7.14.7.tgz?cache=0&sync_timestamp=1624313309952&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.14.7.tgz"
+  "version" "7.14.7"
+  dependencies:
+    "@babel/compat-data" "^7.14.7"
+    "@babel/helper-compilation-targets" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-validator-option" "^7.14.5"
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5"
+    "@babel/plugin-proposal-async-generator-functions" "^7.14.7"
+    "@babel/plugin-proposal-class-properties" "^7.14.5"
+    "@babel/plugin-proposal-class-static-block" "^7.14.5"
+    "@babel/plugin-proposal-dynamic-import" "^7.14.5"
+    "@babel/plugin-proposal-export-namespace-from" "^7.14.5"
+    "@babel/plugin-proposal-json-strings" "^7.14.5"
+    "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5"
+    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"
+    "@babel/plugin-proposal-numeric-separator" "^7.14.5"
+    "@babel/plugin-proposal-object-rest-spread" "^7.14.7"
+    "@babel/plugin-proposal-optional-catch-binding" "^7.14.5"
+    "@babel/plugin-proposal-optional-chaining" "^7.14.5"
+    "@babel/plugin-proposal-private-methods" "^7.14.5"
+    "@babel/plugin-proposal-private-property-in-object" "^7.14.5"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.14.5"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+    "@babel/plugin-syntax-class-properties" "^7.12.13"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+    "@babel/plugin-syntax-top-level-await" "^7.14.5"
+    "@babel/plugin-transform-arrow-functions" "^7.14.5"
+    "@babel/plugin-transform-async-to-generator" "^7.14.5"
+    "@babel/plugin-transform-block-scoped-functions" "^7.14.5"
+    "@babel/plugin-transform-block-scoping" "^7.14.5"
+    "@babel/plugin-transform-classes" "^7.14.5"
+    "@babel/plugin-transform-computed-properties" "^7.14.5"
+    "@babel/plugin-transform-destructuring" "^7.14.7"
+    "@babel/plugin-transform-dotall-regex" "^7.14.5"
+    "@babel/plugin-transform-duplicate-keys" "^7.14.5"
+    "@babel/plugin-transform-exponentiation-operator" "^7.14.5"
+    "@babel/plugin-transform-for-of" "^7.14.5"
+    "@babel/plugin-transform-function-name" "^7.14.5"
+    "@babel/plugin-transform-literals" "^7.14.5"
+    "@babel/plugin-transform-member-expression-literals" "^7.14.5"
+    "@babel/plugin-transform-modules-amd" "^7.14.5"
+    "@babel/plugin-transform-modules-commonjs" "^7.14.5"
+    "@babel/plugin-transform-modules-systemjs" "^7.14.5"
+    "@babel/plugin-transform-modules-umd" "^7.14.5"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7"
+    "@babel/plugin-transform-new-target" "^7.14.5"
+    "@babel/plugin-transform-object-super" "^7.14.5"
+    "@babel/plugin-transform-parameters" "^7.14.5"
+    "@babel/plugin-transform-property-literals" "^7.14.5"
+    "@babel/plugin-transform-regenerator" "^7.14.5"
+    "@babel/plugin-transform-reserved-words" "^7.14.5"
+    "@babel/plugin-transform-shorthand-properties" "^7.14.5"
+    "@babel/plugin-transform-spread" "^7.14.6"
+    "@babel/plugin-transform-sticky-regex" "^7.14.5"
+    "@babel/plugin-transform-template-literals" "^7.14.5"
+    "@babel/plugin-transform-typeof-symbol" "^7.14.5"
+    "@babel/plugin-transform-unicode-escapes" "^7.14.5"
+    "@babel/plugin-transform-unicode-regex" "^7.14.5"
+    "@babel/preset-modules" "^0.1.4"
+    "@babel/types" "^7.14.5"
+    "babel-plugin-polyfill-corejs2" "^0.2.2"
+    "babel-plugin-polyfill-corejs3" "^0.2.2"
+    "babel-plugin-polyfill-regenerator" "^0.2.2"
+    "core-js-compat" "^3.15.0"
+    "semver" "^6.3.0"
+
+"@babel/preset-modules@^0.1.4":
+  "integrity" "sha1-Ni8raMZihClw/bXiVP/I/BwuQV4="
+  "resolved" "https://registry.nlark.com/@babel/preset-modules/download/@babel/preset-modules-0.1.4.tgz"
+  "version" "0.1.4"
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+    "@babel/plugin-transform-dotall-regex" "^7.4.4"
+    "@babel/types" "^7.4.4"
+    "esutils" "^2.0.2"
+
+"@babel/runtime-corejs2@^7.0.0":
+  "integrity" "sha1-5dOhpaCPRJhzTdNwGvT9GN2Gd7U="
+  "resolved" "https://registry.nlark.com/@babel/runtime-corejs2/download/@babel/runtime-corejs2-7.14.6.tgz"
+  "version" "7.14.6"
+  dependencies:
+    "core-js" "^2.6.5"
+    "regenerator-runtime" "^0.13.4"
+
+"@babel/runtime-corejs3@^7.11.2":
+  "integrity" "sha1-+yGxzxFlDcuPz03i5rO4z0Edo/M="
+  "resolved" "https://registry.nlark.com/@babel/runtime-corejs3/download/@babel/runtime-corejs3-7.14.9.tgz?cache=0&sync_timestamp=1627804572552&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fruntime-corejs3%2Fdownload%2F%40babel%2Fruntime-corejs3-7.14.9.tgz"
+  "version" "7.14.9"
+  dependencies:
+    "core-js-pure" "^3.16.0"
+    "regenerator-runtime" "^0.13.4"
+
+"@babel/runtime@^7.11.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.8.4":
+  "integrity" "sha1-U1IDvAiS78fexgvcJ7Ls9uQJBi0="
+  "resolved" "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.14.6.tgz"
+  "version" "7.14.6"
+  dependencies:
+    "regenerator-runtime" "^0.13.4"
+
+"@babel/template@^7.0.0", "@babel/template@^7.14.5":
+  "integrity" "sha1-qbydizM1T/blWpxg0RCSAKaJdPQ="
+  "resolved" "https://registry.nlark.com/@babel/template/download/@babel/template-7.14.5.tgz?cache=0&sync_timestamp=1623280543555&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/code-frame" "^7.14.5"
+    "@babel/parser" "^7.14.5"
+    "@babel/types" "^7.14.5"
+
+"@babel/traverse@^7.0.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.7.0":
+  "integrity" "sha1-ZAB8l3TP3Dq9I7B4C8GKPONjF1M="
+  "resolved" "https://registry.nlark.com/@babel/traverse/download/@babel/traverse-7.14.7.tgz?cache=0&sync_timestamp=1624313310223&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.14.7.tgz"
+  "version" "7.14.7"
+  dependencies:
+    "@babel/code-frame" "^7.14.5"
+    "@babel/generator" "^7.14.5"
+    "@babel/helper-function-name" "^7.14.5"
+    "@babel/helper-hoist-variables" "^7.14.5"
+    "@babel/helper-split-export-declaration" "^7.14.5"
+    "@babel/parser" "^7.14.7"
+    "@babel/types" "^7.14.5"
+    "debug" "^4.1.0"
+    "globals" "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
+  "integrity" "sha1-O7mXuoKaIQTO2yBonEpbgSHTg/8="
+  "resolved" "https://registry.nlark.com/@babel/types/download/@babel/types-7.14.5.tgz"
+  "version" "7.14.5"
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.14.5"
+    "to-fast-properties" "^2.0.0"
+
+"@ctrl/tinycolor@^3.4.1":
+  "integrity" "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw=="
+  "resolved" "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz"
+  "version" "3.4.1"
+
+"@element-plus/icons-vue@^2.0.6", "@element-plus/icons-vue@^2.1.0":
+  "integrity" "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA=="
+  "resolved" "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz"
+  "version" "2.1.0"
+
+"@floating-ui/core@^0.7.3":
+  "integrity" "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg=="
+  "resolved" "https://registry.npmmirror.com/@floating-ui/core/-/core-0.7.3.tgz"
+  "version" "0.7.3"
+
+"@floating-ui/dom@^0.5.4":
+  "integrity" "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg=="
+  "resolved" "https://registry.npmmirror.com/@floating-ui/dom/-/dom-0.5.4.tgz"
+  "version" "0.5.4"
+  dependencies:
+    "@floating-ui/core" "^0.7.3"
+
+"@hapi/address@2.x.x":
+  "integrity" "sha1-XWftQ/P9QaadS5/3tW58DR0KgeU="
+  "resolved" "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-2.1.4.tgz"
+  "version" "2.1.4"
+
+"@hapi/bourne@1.x.x":
+  "integrity" "sha1-CnCVreoGckPOMoPhtWuKj0U7JCo="
+  "resolved" "https://registry.npm.taobao.org/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz"
+  "version" "1.3.2"
+
+"@hapi/hoek@^8.3.0", "@hapi/hoek@8.x.x":
+  "integrity" "sha1-/elgZMpEbeyMVajC8TCVewcMbgY="
+  "resolved" "https://registry.nlark.com/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz"
+  "version" "8.5.1"
+
+"@hapi/joi@^15.0.1":
+  "integrity" "sha1-xnW4pxKW8Cgz+NbSQ7NMV7jOGdc="
+  "resolved" "https://registry.npm.taobao.org/@hapi/joi/download/@hapi/joi-15.1.1.tgz"
+  "version" "15.1.1"
+  dependencies:
+    "@hapi/address" "2.x.x"
+    "@hapi/bourne" "1.x.x"
+    "@hapi/hoek" "8.x.x"
+    "@hapi/topo" "3.x.x"
+
+"@hapi/topo@3.x.x":
+  "integrity" "sha1-aNk1+j6uf91asNf5U/MgXYsr/Ck="
+  "resolved" "https://registry.nlark.com/@hapi/topo/download/@hapi/topo-3.1.6.tgz"
+  "version" "3.1.6"
+  dependencies:
+    "@hapi/hoek" "^8.3.0"
+
+"@intervolga/optimize-cssnano-plugin@^1.0.5":
+  "integrity" "sha1-vnx4RhKLiPapsdEmGgrQbrXA/fg="
+  "resolved" "https://registry.npm.taobao.org/@intervolga/optimize-cssnano-plugin/download/@intervolga/optimize-cssnano-plugin-1.0.6.tgz"
+  "version" "1.0.6"
+  dependencies:
+    "cssnano" "^4.0.0"
+    "cssnano-preset-default" "^4.0.0"
+    "postcss" "^7.0.0"
+
+"@microsoft/signalr@^6.0.4":
+  "integrity" "sha512-YeWRh4LxfYnq4I5CKw17/HOq8rY+ouTv6Bq+s55122StE3pK29j8j2OpP+1PA3D1ksHPfy7dFIgC33yr/E+01A=="
+  "resolved" "https://registry.npmmirror.com/@microsoft/signalr/-/signalr-6.0.4.tgz"
+  "version" "6.0.4"
+  dependencies:
+    "abort-controller" "^3.0.0"
+    "eventsource" "^1.0.7"
+    "fetch-cookie" "^0.11.0"
+    "node-fetch" "^2.6.7"
+    "ws" "^7.4.5"
+
+"@mrmlnc/readdir-enhanced@^2.2.1":
+  "integrity" "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4="
+  "resolved" "https://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz"
+  "version" "2.2.1"
+  dependencies:
+    "call-me-maybe" "^1.0.1"
+    "glob-to-regexp" "^0.3.0"
+
+"@node-ipc/js-queue@2.0.3":
+  "integrity" "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw=="
+  "resolved" "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz"
+  "version" "2.0.3"
+  dependencies:
+    "easy-stack" "1.0.1"
+
+"@nodelib/fs.scandir@2.1.5":
+  "integrity" "sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U="
+  "resolved" "https://registry.nlark.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz"
+  "version" "2.1.5"
+  dependencies:
+    "@nodelib/fs.stat" "2.0.5"
+    "run-parallel" "^1.1.9"
+
+"@nodelib/fs.stat@^1.1.2":
+  "integrity" "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs="
+  "resolved" "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz"
+  "version" "1.1.3"
+
+"@nodelib/fs.stat@^2.0.2":
+  "integrity" "sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos="
+  "resolved" "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-2.0.5.tgz"
+  "version" "2.0.5"
+
+"@nodelib/fs.stat@2.0.5":
+  "integrity" "sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos="
+  "resolved" "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-2.0.5.tgz"
+  "version" "2.0.5"
+
+"@nodelib/fs.walk@^1.2.3":
+  "integrity" "sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po="
+  "resolved" "https://registry.nlark.com/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz?cache=0&sync_timestamp=1625769855088&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.8.tgz"
+  "version" "1.2.8"
+  dependencies:
+    "@nodelib/fs.scandir" "2.1.5"
+    "fastq" "^1.6.0"
+
+"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7":
+  "integrity" "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
+  "resolved" "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz"
+  "version" "2.11.7"
+
+"@soda/friendly-errors-webpack-plugin@^1.7.1":
+  "integrity" "sha1-hHUdgqkwGdXJLAzw5FrFkIfNIkA="
+  "resolved" "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.0.tgz?cache=0&sync_timestamp=1607927406873&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40soda%2Ffriendly-errors-webpack-plugin%2Fdownload%2F%40soda%2Ffriendly-errors-webpack-plugin-1.8.0.tgz"
+  "version" "1.8.0"
+  dependencies:
+    "chalk" "^2.4.2"
+    "error-stack-parser" "^2.0.2"
+    "string-width" "^2.0.0"
+    "strip-ansi" "^5"
+
+"@soda/get-current-script@^1.0.0":
+  "integrity" "sha1-pTUV2yXYA4N0OBtzryC7Ty5QjYc="
+  "resolved" "https://registry.npm.taobao.org/@soda/get-current-script/download/@soda/get-current-script-1.0.2.tgz"
+  "version" "1.0.2"
+
+"@tootallnate/once@1":
+  "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
+  "resolved" "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz"
+  "version" "1.1.2"
+
+"@types/body-parser@*":
+  "integrity" "sha1-DAF0xCp9AXuBgwPUtdlpywt1kpw="
+  "resolved" "https://registry.nlark.com/@types/body-parser/download/@types/body-parser-1.19.1.tgz?cache=0&sync_timestamp=1625595908991&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fbody-parser%2Fdownload%2F%40types%2Fbody-parser-1.19.1.tgz"
+  "version" "1.19.1"
+  dependencies:
+    "@types/connect" "*"
+    "@types/node" "*"
+
+"@types/connect-history-api-fallback@*":
+  "integrity" "sha1-0feooJ0O1aV67lrpwYq5uAMgXa4="
+  "resolved" "https://registry.nlark.com/@types/connect-history-api-fallback/download/@types/connect-history-api-fallback-1.3.5.tgz"
+  "version" "1.3.5"
+  dependencies:
+    "@types/express-serve-static-core" "*"
+    "@types/node" "*"
+
+"@types/connect@*":
+  "integrity" "sha1-X89q5EXkAh0fwiGaSHPMc6O7KtE="
+  "resolved" "https://registry.nlark.com/@types/connect/download/@types/connect-3.4.35.tgz"
+  "version" "3.4.35"
+  dependencies:
+    "@types/node" "*"
+
+"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18":
+  "integrity" "sha1-6kH5O/fg1ZzVp2ZlBo7WqraBXAc="
+  "resolved" "https://registry.nlark.com/@types/express-serve-static-core/download/@types/express-serve-static-core-4.17.24.tgz?cache=0&sync_timestamp=1625762134763&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fexpress-serve-static-core%2Fdownload%2F%40types%2Fexpress-serve-static-core-4.17.24.tgz"
+  "version" "4.17.24"
+  dependencies:
+    "@types/node" "*"
+    "@types/qs" "*"
+    "@types/range-parser" "*"
+
+"@types/express@*":
+  "integrity" "sha1-p24plXKJmbq1GjP6vOHXBaNwkDQ="
+  "resolved" "https://registry.nlark.com/@types/express/download/@types/express-4.17.13.tgz?cache=0&sync_timestamp=1625605304761&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fexpress%2Fdownload%2F%40types%2Fexpress-4.17.13.tgz"
+  "version" "4.17.13"
+  dependencies:
+    "@types/body-parser" "*"
+    "@types/express-serve-static-core" "^4.17.18"
+    "@types/qs" "*"
+    "@types/serve-static" "*"
+
+"@types/glob@^7.1.1":
+  "integrity" "sha1-6lniHS7lxReRTLS8jkFTuZ5WZnI="
+  "resolved" "https://registry.nlark.com/@types/glob/download/@types/glob-7.1.4.tgz?cache=0&sync_timestamp=1625605304235&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.1.4.tgz"
+  "version" "7.1.4"
+  dependencies:
+    "@types/minimatch" "*"
+    "@types/node" "*"
+
+"@types/http-proxy@^1.17.5":
+  "integrity" "sha1-MOqFzCyGg2g1Kjfw0NNYHiSDTG8="
+  "resolved" "https://registry.nlark.com/@types/http-proxy/download/@types/http-proxy-1.17.7.tgz"
+  "version" "1.17.7"
+  dependencies:
+    "@types/node" "*"
+
+"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7":
+  "integrity" "sha1-7fG/Hb9OBEE8qOWxezt9fVS1mBg="
+  "resolved" "https://registry.nlark.com/@types/json-schema/download/@types/json-schema-7.0.8.tgz"
+  "version" "7.0.8"
+
+"@types/lodash-es@*", "@types/lodash-es@^4.17.6":
+  "integrity" "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg=="
+  "resolved" "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz"
+  "version" "4.17.6"
+  dependencies:
+    "@types/lodash" "*"
+
+"@types/lodash@*", "@types/lodash@^4.14.182":
+  "integrity" "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q=="
+  "resolved" "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.184.tgz"
+  "version" "4.14.184"
+
+"@types/mime@^1":
+  "integrity" "sha1-k+Jb+e51/g/YC1lLxP6w6GIRG1o="
+  "resolved" "https://registry.nlark.com/@types/mime/download/@types/mime-1.3.2.tgz"
+  "version" "1.3.2"
+
+"@types/minimatch@*":
+  "integrity" "sha1-EAHMXmo3BLg8I2An538vWOoBD0A="
+  "resolved" "https://registry.nlark.com/@types/minimatch/download/@types/minimatch-3.0.5.tgz?cache=0&sync_timestamp=1625616310061&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.5.tgz"
+  "version" "3.0.5"
+
+"@types/minimist@^1.2.0":
+  "integrity" "sha1-7nceK6Sz3Fs3KTXVSf2WF780W4w="
+  "resolved" "https://registry.nlark.com/@types/minimist/download/@types/minimist-1.2.2.tgz?cache=0&sync_timestamp=1625616254387&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fminimist%2Fdownload%2F%40types%2Fminimist-1.2.2.tgz"
+  "version" "1.2.2"
+
+"@types/node@*":
+  "integrity" "sha1-ZVQygX+DtRrIacLVHdgwX7g0LhY="
+  "resolved" "https://registry.nlark.com/@types/node/download/@types/node-16.3.2.tgz?cache=0&sync_timestamp=1626221012858&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-16.3.2.tgz"
+  "version" "16.3.2"
+
+"@types/normalize-package-data@^2.4.0":
+  "integrity" "sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE="
+  "resolved" "https://registry.nlark.com/@types/normalize-package-data/download/@types/normalize-package-data-2.4.1.tgz?cache=0&sync_timestamp=1625675733240&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.1.tgz"
+  "version" "2.4.1"
+
+"@types/q@^1.5.1":
+  "integrity" "sha1-daKo59irSyMEFFBdkjNdHctTpt8="
+  "resolved" "https://registry.nlark.com/@types/q/download/@types/q-1.5.5.tgz?cache=0&sync_timestamp=1625678452535&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.5.tgz"
+  "version" "1.5.5"
+
+"@types/qs@*":
+  "integrity" "sha1-Y7t9Bn2xB8weRXwwO8JdUR/r9ss="
+  "resolved" "https://registry.nlark.com/@types/qs/download/@types/qs-6.9.7.tgz"
+  "version" "6.9.7"
+
+"@types/range-parser@*":
+  "integrity" "sha1-zWZ7z90CUhOq+3ylkVqTJZCs3Nw="
+  "resolved" "https://registry.nlark.com/@types/range-parser/download/@types/range-parser-1.2.4.tgz"
+  "version" "1.2.4"
+
+"@types/serve-static@*":
+  "integrity" "sha1-9eDOh5fS18xevtpIpSyWxPpHqNk="
+  "resolved" "https://registry.nlark.com/@types/serve-static/download/@types/serve-static-1.13.10.tgz"
+  "version" "1.13.10"
+  dependencies:
+    "@types/mime" "^1"
+    "@types/node" "*"
+
+"@types/source-list-map@*":
+  "integrity" "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk="
+  "resolved" "https://registry.nlark.com/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz"
+  "version" "0.1.2"
+
+"@types/tapable@^1":
+  "integrity" "sha1-uUpDkchWZse3Mpn9OtedT6pDUxA="
+  "resolved" "https://registry.nlark.com/@types/tapable/download/@types/tapable-1.0.8.tgz"
+  "version" "1.0.8"
+
+"@types/uglify-js@*":
+  "integrity" "sha1-XoienoHpQkXHW2RQYA4cXqKHiuo="
+  "resolved" "https://registry.nlark.com/@types/uglify-js/download/@types/uglify-js-3.13.1.tgz?cache=0&sync_timestamp=1625249395387&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fuglify-js%2Fdownload%2F%40types%2Fuglify-js-3.13.1.tgz"
+  "version" "3.13.1"
+  dependencies:
+    "source-map" "^0.6.1"
+
+"@types/web-bluetooth@^0.0.15":
+  "integrity" "sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA=="
+  "resolved" "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.15.tgz"
+  "version" "0.0.15"
+
+"@types/webpack-dev-server@^3.11.0":
+  "integrity" "sha1-9KJUo90GZ8juSvkNQq/bStHWB/M="
+  "resolved" "https://registry.nlark.com/@types/webpack-dev-server/download/@types/webpack-dev-server-3.11.5.tgz?cache=0&sync_timestamp=1625251651898&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fwebpack-dev-server%2Fdownload%2F%40types%2Fwebpack-dev-server-3.11.5.tgz"
+  "version" "3.11.5"
+  dependencies:
+    "@types/connect-history-api-fallback" "*"
+    "@types/express" "*"
+    "@types/serve-static" "*"
+    "@types/webpack" "^4"
+    "http-proxy-middleware" "^1.0.0"
+
+"@types/webpack-sources@*":
+  "integrity" "sha1-avF+Oj3tce7CuYAI18EvSYoKRQY="
+  "resolved" "https://registry.nlark.com/@types/webpack-sources/download/@types/webpack-sources-2.1.1.tgz?cache=0&sync_timestamp=1625251653385&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fwebpack-sources%2Fdownload%2F%40types%2Fwebpack-sources-2.1.1.tgz"
+  "version" "2.1.1"
+  dependencies:
+    "@types/node" "*"
+    "@types/source-list-map" "*"
+    "source-map" "^0.7.3"
+
+"@types/webpack@^4", "@types/webpack@^4.0.0":
+  "integrity" "sha1-/T220NQeFFqO7q/NPEp8zekGjdw="
+  "resolved" "https://registry.nlark.com/@types/webpack/download/@types/webpack-4.41.30.tgz?cache=0&sync_timestamp=1625251660875&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fwebpack%2Fdownload%2F%40types%2Fwebpack-4.41.30.tgz"
+  "version" "4.41.30"
+  dependencies:
+    "@types/node" "*"
+    "@types/tapable" "^1"
+    "@types/uglify-js" "*"
+    "@types/webpack-sources" "*"
+    "anymatch" "^3.0.0"
+    "source-map" "^0.6.0"
+
+"@vue/babel-helper-vue-jsx-merge-props@^1.2.1":
+  "integrity" "sha1-MWJKelBfsU2h1YAjclpMXycOaoE="
+  "resolved" "https://registry.nlark.com/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz"
+  "version" "1.2.1"
+
+"@vue/babel-helper-vue-transform-on@^1.0.2":
+  "integrity" "sha1-m5xpHNBvyFUiGiR1w8yDHXdLx9w="
+  "resolved" "https://registry.nlark.com/@vue/babel-helper-vue-transform-on/download/@vue/babel-helper-vue-transform-on-1.0.2.tgz"
+  "version" "1.0.2"
+
+"@vue/babel-plugin-jsx@^1.0.3":
+  "integrity" "sha1-GEvzVBq279vlB5q4sgwZ4q8QC/s="
+  "resolved" "https://registry.nlark.com/@vue/babel-plugin-jsx/download/@vue/babel-plugin-jsx-1.0.6.tgz"
+  "version" "1.0.6"
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@babel/plugin-syntax-jsx" "^7.0.0"
+    "@babel/template" "^7.0.0"
+    "@babel/traverse" "^7.0.0"
+    "@babel/types" "^7.0.0"
+    "@vue/babel-helper-vue-transform-on" "^1.0.2"
+    "camelcase" "^6.0.0"
+    "html-tags" "^3.1.0"
+    "svg-tags" "^1.0.0"
+
+"@vue/babel-plugin-transform-vue-jsx@^1.2.1":
+  "integrity" "sha1-ZGBGxlLC8CQnJ/NFGdkXsGQEHtc="
+  "resolved" "https://registry.npm.taobao.org/@vue/babel-plugin-transform-vue-jsx/download/@vue/babel-plugin-transform-vue-jsx-1.2.1.tgz"
+  "version" "1.2.1"
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1"
+    "html-tags" "^2.0.0"
+    "lodash.kebabcase" "^4.1.1"
+    "svg-tags" "^1.0.0"
+
+"@vue/babel-preset-app@^4.5.13":
+  "integrity" "sha1-y0dTIeTHP38RDawppIwqnLgK/rY="
+  "resolved" "https://registry.nlark.com/@vue/babel-preset-app/download/@vue/babel-preset-app-4.5.13.tgz?cache=0&sync_timestamp=1623215857834&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fbabel-preset-app%2Fdownload%2F%40vue%2Fbabel-preset-app-4.5.13.tgz"
+  "version" "4.5.13"
+  dependencies:
+    "@babel/core" "^7.11.0"
+    "@babel/helper-compilation-targets" "^7.9.6"
+    "@babel/helper-module-imports" "^7.8.3"
+    "@babel/plugin-proposal-class-properties" "^7.8.3"
+    "@babel/plugin-proposal-decorators" "^7.8.3"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+    "@babel/plugin-syntax-jsx" "^7.8.3"
+    "@babel/plugin-transform-runtime" "^7.11.0"
+    "@babel/preset-env" "^7.11.0"
+    "@babel/runtime" "^7.11.0"
+    "@vue/babel-plugin-jsx" "^1.0.3"
+    "@vue/babel-preset-jsx" "^1.2.4"
+    "babel-plugin-dynamic-import-node" "^2.3.3"
+    "core-js" "^3.6.5"
+    "core-js-compat" "^3.6.5"
+    "semver" "^6.1.0"
+
+"@vue/babel-preset-jsx@^1.2.4":
+  "integrity" "sha1-kv6nnbbxOwHoDToAmeKSS9y+Toc="
+  "resolved" "https://registry.npm.taobao.org/@vue/babel-preset-jsx/download/@vue/babel-preset-jsx-1.2.4.tgz"
+  "version" "1.2.4"
+  dependencies:
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1"
+    "@vue/babel-plugin-transform-vue-jsx" "^1.2.1"
+    "@vue/babel-sugar-composition-api-inject-h" "^1.2.1"
+    "@vue/babel-sugar-composition-api-render-instance" "^1.2.4"
+    "@vue/babel-sugar-functional-vue" "^1.2.2"
+    "@vue/babel-sugar-inject-h" "^1.2.2"
+    "@vue/babel-sugar-v-model" "^1.2.3"
+    "@vue/babel-sugar-v-on" "^1.2.3"
+
+"@vue/babel-sugar-composition-api-inject-h@^1.2.1":
+  "integrity" "sha1-BdbgxDJxDjdYKyvppgSbaJtvA+s="
+  "resolved" "https://registry.npm.taobao.org/@vue/babel-sugar-composition-api-inject-h/download/@vue/babel-sugar-composition-api-inject-h-1.2.1.tgz"
+  "version" "1.2.1"
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@vue/babel-sugar-composition-api-render-instance@^1.2.4":
+  "integrity" "sha1-5MvGmXw0T6wnF4WteikyXFHWjRk="
+  "resolved" "https://registry.nlark.com/@vue/babel-sugar-composition-api-render-instance/download/@vue/babel-sugar-composition-api-render-instance-1.2.4.tgz"
+  "version" "1.2.4"
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@vue/babel-sugar-functional-vue@^1.2.2":
+  "integrity" "sha1-JnqayNeHyW7b8Dzj85LEnam9Jlg="
+  "resolved" "https://registry.npm.taobao.org/@vue/babel-sugar-functional-vue/download/@vue/babel-sugar-functional-vue-1.2.2.tgz?cache=0&sync_timestamp=1602929625505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-functional-vue%2Fdownload%2F%40vue%2Fbabel-sugar-functional-vue-1.2.2.tgz"
+  "version" "1.2.2"
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@vue/babel-sugar-inject-h@^1.2.2":
+  "integrity" "sha1-1zjTyJM2fshJHcu2abAAkZKT46o="
+  "resolved" "https://registry.npm.taobao.org/@vue/babel-sugar-inject-h/download/@vue/babel-sugar-inject-h-1.2.2.tgz?cache=0&sync_timestamp=1602929625678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-inject-h%2Fdownload%2F%40vue%2Fbabel-sugar-inject-h-1.2.2.tgz"
+  "version" "1.2.2"
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@vue/babel-sugar-v-model@^1.2.3":
+  "integrity" "sha1-+h8pulHr8KoabDX6ZtU5vEWaGPI="
+  "resolved" "https://registry.npm.taobao.org/@vue/babel-sugar-v-model/download/@vue/babel-sugar-v-model-1.2.3.tgz"
+  "version" "1.2.3"
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1"
+    "@vue/babel-plugin-transform-vue-jsx" "^1.2.1"
+    "camelcase" "^5.0.0"
+    "html-tags" "^2.0.0"
+    "svg-tags" "^1.0.0"
+
+"@vue/babel-sugar-v-on@^1.2.3":
+  "integrity" "sha1-NCNnF4WGpp85LwS/ujICHQKROto="
+  "resolved" "https://registry.npm.taobao.org/@vue/babel-sugar-v-on/download/@vue/babel-sugar-v-on-1.2.3.tgz?cache=0&sync_timestamp=1603181880042&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-v-on%2Fdownload%2F%40vue%2Fbabel-sugar-v-on-1.2.3.tgz"
+  "version" "1.2.3"
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+    "@vue/babel-plugin-transform-vue-jsx" "^1.2.1"
+    "camelcase" "^5.0.0"
+
+"@vue/cli-overlay@^4.5.13":
+  "integrity" "sha1-Tx/SFhvo9p1suoB58/DX3E3uR6c="
+  "resolved" "https://registry.nlark.com/@vue/cli-overlay/download/@vue/cli-overlay-4.5.13.tgz"
+  "version" "4.5.13"
+
+"@vue/cli-plugin-babel@~4.5.0":
+  "integrity" "sha1-qJxILtzE6h0TVkXOxQKn9f1MMOc="
+  "resolved" "https://registry.nlark.com/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-4.5.13.tgz"
+  "version" "4.5.13"
+  dependencies:
+    "@babel/core" "^7.11.0"
+    "@vue/babel-preset-app" "^4.5.13"
+    "@vue/cli-shared-utils" "^4.5.13"
+    "babel-loader" "^8.1.0"
+    "cache-loader" "^4.1.0"
+    "thread-loader" "^2.1.3"
+    "webpack" "^4.0.0"
+
+"@vue/cli-plugin-eslint@~4.5.0":
+  "integrity" "sha1-i68i0NltdnIMdQZka5b09iwFvfo="
+  "resolved" "https://registry.nlark.com/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-4.5.13.tgz"
+  "version" "4.5.13"
+  dependencies:
+    "@vue/cli-shared-utils" "^4.5.13"
+    "eslint-loader" "^2.2.1"
+    "globby" "^9.2.0"
+    "inquirer" "^7.1.0"
+    "webpack" "^4.0.0"
+    "yorkie" "^2.0.0"
+
+"@vue/cli-plugin-router@^4.5.13", "@vue/cli-plugin-router@~4.5.0":
+  "integrity" "sha512-3icGzH1IbVYmMMsOwYa0lal/gtvZLebFXdE5hcQJo2mnTwngXGMTyYAzL56EgHBPjbMmRpyj6Iw9k4aVInVX6A=="
+  "resolved" "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.19.tgz"
+  "version" "4.5.19"
+  dependencies:
+    "@vue/cli-shared-utils" "^4.5.19"
+
+"@vue/cli-plugin-unit-mocha@~4.5.0":
+  "integrity" "sha1-GBCMawtx7psyvs+/dk9cvk112tY="
+  "resolved" "https://registry.nlark.com/@vue/cli-plugin-unit-mocha/download/@vue/cli-plugin-unit-mocha-4.5.13.tgz?cache=0&sync_timestamp=1623216922909&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-plugin-unit-mocha%2Fdownload%2F%40vue%2Fcli-plugin-unit-mocha-4.5.13.tgz"
+  "version" "4.5.13"
+  dependencies:
+    "@vue/cli-shared-utils" "^4.5.13"
+    "jsdom" "^15.2.1"
+    "jsdom-global" "^3.0.2"
+    "mocha" "^6.2.2"
+    "mochapack" "^1.1.15"
+
+"@vue/cli-plugin-vuex@^4.5.13", "@vue/cli-plugin-vuex@~4.5.0":
+  "integrity" "sha512-DUmfdkG3pCdkP7Iznd87RfE9Qm42mgp2hcrNcYQYSru1W1gX2dG/JcW8bxmeGSa06lsxi9LEIc/QD1yPajSCZw=="
+  "resolved" "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.19.tgz"
+  "version" "4.5.19"
+
+"@vue/cli-service@^3.0.0 || ^4.0.0-0", "@vue/cli-service@~4.5.0":
+  "integrity" "sha1-oJ5oSoAWhLbiTlQUrTBlCXDuye0="
+  "resolved" "https://registry.nlark.com/@vue/cli-service/download/@vue/cli-service-4.5.13.tgz"
+  "version" "4.5.13"
+  dependencies:
+    "@intervolga/optimize-cssnano-plugin" "^1.0.5"
+    "@soda/friendly-errors-webpack-plugin" "^1.7.1"
+    "@soda/get-current-script" "^1.0.0"
+    "@types/minimist" "^1.2.0"
+    "@types/webpack" "^4.0.0"
+    "@types/webpack-dev-server" "^3.11.0"
+    "@vue/cli-overlay" "^4.5.13"
+    "@vue/cli-plugin-router" "^4.5.13"
+    "@vue/cli-plugin-vuex" "^4.5.13"
+    "@vue/cli-shared-utils" "^4.5.13"
+    "@vue/component-compiler-utils" "^3.1.2"
+    "@vue/preload-webpack-plugin" "^1.1.0"
+    "@vue/web-component-wrapper" "^1.2.0"
+    "acorn" "^7.4.0"
+    "acorn-walk" "^7.1.1"
+    "address" "^1.1.2"
+    "autoprefixer" "^9.8.6"
+    "browserslist" "^4.12.0"
+    "cache-loader" "^4.1.0"
+    "case-sensitive-paths-webpack-plugin" "^2.3.0"
+    "cli-highlight" "^2.1.4"
+    "clipboardy" "^2.3.0"
+    "cliui" "^6.0.0"
+    "copy-webpack-plugin" "^5.1.1"
+    "css-loader" "^3.5.3"
+    "cssnano" "^4.1.10"
+    "debug" "^4.1.1"
+    "default-gateway" "^5.0.5"
+    "dotenv" "^8.2.0"
+    "dotenv-expand" "^5.1.0"
+    "file-loader" "^4.2.0"
+    "fs-extra" "^7.0.1"
+    "globby" "^9.2.0"
+    "hash-sum" "^2.0.0"
+    "html-webpack-plugin" "^3.2.0"
+    "launch-editor-middleware" "^2.2.1"
+    "lodash.defaultsdeep" "^4.6.1"
+    "lodash.mapvalues" "^4.6.0"
+    "lodash.transform" "^4.6.0"
+    "mini-css-extract-plugin" "^0.9.0"
+    "minimist" "^1.2.5"
+    "pnp-webpack-plugin" "^1.6.4"
+    "portfinder" "^1.0.26"
+    "postcss-loader" "^3.0.0"
+    "ssri" "^8.0.1"
+    "terser-webpack-plugin" "^1.4.4"
+    "thread-loader" "^2.1.3"
+    "url-loader" "^2.2.0"
+    "vue-loader" "^15.9.2"
+    "vue-style-loader" "^4.1.2"
+    "webpack" "^4.0.0"
+    "webpack-bundle-analyzer" "^3.8.0"
+    "webpack-chain" "^6.4.0"
+    "webpack-dev-server" "^3.11.0"
+    "webpack-merge" "^4.2.2"
+  optionalDependencies:
+    "vue-loader-v16" "npm:vue-loader@^16.1.0"
+
+"@vue/cli-shared-utils@^4.5.13", "@vue/cli-shared-utils@^4.5.19":
+  "integrity" "sha512-JYpdsrC/d9elerKxbEUtmSSU6QRM60rirVubOewECHkBHj+tLNznWq/EhCjswywtePyLaMUK25eTqnTSZlEE+g=="
+  "resolved" "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.19.tgz"
+  "version" "4.5.19"
+  dependencies:
+    "@achrinza/node-ipc" "9.2.2"
+    "@hapi/joi" "^15.0.1"
+    "chalk" "^2.4.2"
+    "execa" "^1.0.0"
+    "launch-editor" "^2.2.1"
+    "lru-cache" "^5.1.1"
+    "open" "^6.3.0"
+    "ora" "^3.4.0"
+    "read-pkg" "^5.1.1"
+    "request" "^2.88.2"
+    "semver" "^6.1.0"
+    "strip-ansi" "^6.0.0"
+
+"@vue/compiler-core@3.2.37":
+  "integrity" "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg=="
+  "resolved" "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz"
+  "version" "3.2.37"
+  dependencies:
+    "@babel/parser" "^7.16.4"
+    "@vue/shared" "3.2.37"
+    "estree-walker" "^2.0.2"
+    "source-map" "^0.6.1"
+
+"@vue/compiler-dom@3.2.37":
+  "integrity" "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ=="
+  "resolved" "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz"
+  "version" "3.2.37"
+  dependencies:
+    "@vue/compiler-core" "3.2.37"
+    "@vue/shared" "3.2.37"
+
+"@vue/compiler-sfc@^3.0.0", "@vue/compiler-sfc@^3.0.0-beta.14", "@vue/compiler-sfc@3.2.37":
+  "integrity" "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg=="
+  "resolved" "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz"
+  "version" "3.2.37"
+  dependencies:
+    "@babel/parser" "^7.16.4"
+    "@vue/compiler-core" "3.2.37"
+    "@vue/compiler-dom" "3.2.37"
+    "@vue/compiler-ssr" "3.2.37"
+    "@vue/reactivity-transform" "3.2.37"
+    "@vue/shared" "3.2.37"
+    "estree-walker" "^2.0.2"
+    "magic-string" "^0.25.7"
+    "postcss" "^8.1.10"
+    "source-map" "^0.6.1"
+
+"@vue/compiler-ssr@3.2.37":
+  "integrity" "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw=="
+  "resolved" "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz"
+  "version" "3.2.37"
+  dependencies:
+    "@vue/compiler-dom" "3.2.37"
+    "@vue/shared" "3.2.37"
+
+"@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.1.2":
+  "integrity" "sha1-L37V/u2C/38ChKzBHVJe5+/yJGA="
+  "resolved" "https://registry.nlark.com/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.2.2.tgz"
+  "version" "3.2.2"
+  dependencies:
+    "consolidate" "^0.15.1"
+    "hash-sum" "^1.0.2"
+    "lru-cache" "^4.1.2"
+    "merge-source-map" "^1.1.0"
+    "postcss" "^7.0.36"
+    "postcss-selector-parser" "^6.0.2"
+    "source-map" "~0.6.1"
+    "vue-template-es2015-compiler" "^1.9.0"
+  optionalDependencies:
+    "prettier" "^1.18.2"
+
+"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.0.0-beta.14":
+  "integrity" "sha1-rXyzhOBi8WW8+cg3MhJb/7wq2D0="
+  "resolved" "https://registry.nlark.com/@vue/devtools-api/download/@vue/devtools-api-6.0.0-beta.15.tgz?cache=0&sync_timestamp=1624900514906&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fdevtools-api%2Fdownload%2F%40vue%2Fdevtools-api-6.0.0-beta.15.tgz"
+  "version" "6.0.0-beta.15"
+
+"@vue/preload-webpack-plugin@^1.1.0":
+  "integrity" "sha1-zrkktOyzucQ4ccekKaAvhCPmIas="
+  "resolved" "https://registry.nlark.com/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz"
+  "version" "1.1.2"
+
+"@vue/reactivity-transform@3.2.37":
+  "integrity" "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg=="
+  "resolved" "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz"
+  "version" "3.2.37"
+  dependencies:
+    "@babel/parser" "^7.16.4"
+    "@vue/compiler-core" "3.2.37"
+    "@vue/shared" "3.2.37"
+    "estree-walker" "^2.0.2"
+    "magic-string" "^0.25.7"
+
+"@vue/reactivity@3.2.37":
+  "integrity" "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A=="
+  "resolved" "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz"
+  "version" "3.2.37"
+  dependencies:
+    "@vue/shared" "3.2.37"
+
+"@vue/runtime-core@3.2.37":
+  "integrity" "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ=="
+  "resolved" "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz"
+  "version" "3.2.37"
+  dependencies:
+    "@vue/reactivity" "3.2.37"
+    "@vue/shared" "3.2.37"
+
+"@vue/runtime-dom@3.2.37":
+  "integrity" "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw=="
+  "resolved" "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz"
+  "version" "3.2.37"
+  dependencies:
+    "@vue/runtime-core" "3.2.37"
+    "@vue/shared" "3.2.37"
+    "csstype" "^2.6.8"
+
+"@vue/server-renderer@3.2.37":
+  "integrity" "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA=="
+  "resolved" "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz"
+  "version" "3.2.37"
+  dependencies:
+    "@vue/compiler-ssr" "3.2.37"
+    "@vue/shared" "3.2.37"
+
+"@vue/shared@3.2.37":
+  "integrity" "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw=="
+  "resolved" "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz"
+  "version" "3.2.37"
+
+"@vue/test-utils@^2.0.0-0":
+  "integrity" "sha1-ntaJzX1aHJ72aTgGAQ5GTS7ME7I="
+  "resolved" "https://registry.nlark.com/@vue/test-utils/download/@vue/test-utils-2.0.0-rc.10.tgz"
+  "version" "2.0.0-rc.10"
+
+"@vue/web-component-wrapper@^1.2.0":
+  "integrity" "sha1-trQKdiVCnSvXwigd26YB7QXcfxo="
+  "resolved" "https://registry.npm.taobao.org/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.3.0.tgz?cache=0&sync_timestamp=1613216912643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fweb-component-wrapper%2Fdownload%2F%40vue%2Fweb-component-wrapper-1.3.0.tgz"
+  "version" "1.3.0"
+
+"@vueuse/core@^9.1.0":
+  "integrity" "sha512-BIroqvXEqt826aE9r3K5cox1zobuPuAzdYJ36kouC2TVhlXvFKIILgFVWrpp9HZPwB3aLzasmG3K87q7TSyXZg=="
+  "resolved" "https://registry.npmmirror.com/@vueuse/core/-/core-9.1.0.tgz"
+  "version" "9.1.0"
+  dependencies:
+    "@types/web-bluetooth" "^0.0.15"
+    "@vueuse/metadata" "9.1.0"
+    "@vueuse/shared" "9.1.0"
+    "vue-demi" "*"
+
+"@vueuse/metadata@9.1.0":
+  "integrity" "sha512-8OEhlog1iaAGTD3LICZ8oBGQdYeMwByvXetOtAOZCJOzyCRSwqwdggTsmVZZ1rkgYIEqgUBk942AsAPwM21s6A=="
+  "resolved" "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.1.0.tgz"
+  "version" "9.1.0"
+
+"@vueuse/shared@9.1.0":
+  "integrity" "sha512-pB/3njQu4tfJJ78ajELNda0yMG6lKfpToQW7Soe09CprF1k3QuyoNi1tBNvo75wBDJWD+LOnr+c4B5HZ39jY/Q=="
+  "resolved" "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.1.0.tgz"
+  "version" "9.1.0"
+  dependencies:
+    "vue-demi" "*"
+
+"@webassemblyjs/ast@1.9.0":
+  "integrity" "sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz?cache=0&sync_timestamp=1625473466238&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.9.0.tgz"
+  "version" "1.9.0"
+  dependencies:
+    "@webassemblyjs/helper-module-context" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/wast-parser" "1.9.0"
+
+"@webassemblyjs/floating-point-hex-parser@1.9.0":
+  "integrity" "sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz?cache=0&sync_timestamp=1625473463638&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.9.0.tgz"
+  "version" "1.9.0"
+
+"@webassemblyjs/helper-api-error@1.9.0":
+  "integrity" "sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz?cache=0&sync_timestamp=1625473346773&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.9.0.tgz"
+  "version" "1.9.0"
+
+"@webassemblyjs/helper-buffer@1.9.0":
+  "integrity" "sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz?cache=0&sync_timestamp=1625473462686&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-buffer%2Fdownload%2F%40webassemblyjs%2Fhelper-buffer-1.9.0.tgz"
+  "version" "1.9.0"
+
+"@webassemblyjs/helper-code-frame@1.9.0":
+  "integrity" "sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz"
+  "version" "1.9.0"
+  dependencies:
+    "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/helper-fsm@1.9.0":
+  "integrity" "sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz"
+  "version" "1.9.0"
+
+"@webassemblyjs/helper-module-context@1.9.0":
+  "integrity" "sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc="
+  "resolved" "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz"
+  "version" "1.9.0"
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+
+"@webassemblyjs/helper-wasm-bytecode@1.9.0":
+  "integrity" "sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz"
+  "version" "1.9.0"
+
+"@webassemblyjs/helper-wasm-section@1.9.0":
+  "integrity" "sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz?cache=0&sync_timestamp=1625473466570&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-wasm-section%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-section-1.9.0.tgz"
+  "version" "1.9.0"
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-buffer" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/wasm-gen" "1.9.0"
+
+"@webassemblyjs/ieee754@1.9.0":
+  "integrity" "sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz?cache=0&sync_timestamp=1625473461909&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fieee754%2Fdownload%2F%40webassemblyjs%2Fieee754-1.9.0.tgz"
+  "version" "1.9.0"
+  dependencies:
+    "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.9.0":
+  "integrity" "sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz?cache=0&sync_timestamp=1625473463971&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fleb128%2Fdownload%2F%40webassemblyjs%2Fleb128-1.9.0.tgz"
+  "version" "1.9.0"
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.9.0":
+  "integrity" "sha1-BNM7Y2945qaBMifoJAL3Y3tiKas="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz?cache=0&sync_timestamp=1625473462317&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Futf8%2Fdownload%2F%40webassemblyjs%2Futf8-1.9.0.tgz"
+  "version" "1.9.0"
+
+"@webassemblyjs/wasm-edit@1.9.0":
+  "integrity" "sha1-P+bXnT8PkiGDqoYALELdJWz+6c8="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz?cache=0&sync_timestamp=1625473468202&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-edit%2Fdownload%2F%40webassemblyjs%2Fwasm-edit-1.9.0.tgz"
+  "version" "1.9.0"
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-buffer" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/helper-wasm-section" "1.9.0"
+    "@webassemblyjs/wasm-gen" "1.9.0"
+    "@webassemblyjs/wasm-opt" "1.9.0"
+    "@webassemblyjs/wasm-parser" "1.9.0"
+    "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/wasm-gen@1.9.0":
+  "integrity" "sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz?cache=0&sync_timestamp=1625473464969&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-gen%2Fdownload%2F%40webassemblyjs%2Fwasm-gen-1.9.0.tgz"
+  "version" "1.9.0"
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/ieee754" "1.9.0"
+    "@webassemblyjs/leb128" "1.9.0"
+    "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wasm-opt@1.9.0":
+  "integrity" "sha1-IhEYHlsxMmRDzIES658LkChyGmE="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz?cache=0&sync_timestamp=1625473467198&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-opt%2Fdownload%2F%40webassemblyjs%2Fwasm-opt-1.9.0.tgz"
+  "version" "1.9.0"
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-buffer" "1.9.0"
+    "@webassemblyjs/wasm-gen" "1.9.0"
+    "@webassemblyjs/wasm-parser" "1.9.0"
+
+"@webassemblyjs/wasm-parser@1.9.0":
+  "integrity" "sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz?cache=0&sync_timestamp=1625473464593&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwasm-parser%2Fdownload%2F%40webassemblyjs%2Fwasm-parser-1.9.0.tgz"
+  "version" "1.9.0"
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-api-error" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/ieee754" "1.9.0"
+    "@webassemblyjs/leb128" "1.9.0"
+    "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wast-parser@1.9.0":
+  "integrity" "sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwast-parser%2Fdownload%2F%40webassemblyjs%2Fwast-parser-1.9.0.tgz"
+  "version" "1.9.0"
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/floating-point-hex-parser" "1.9.0"
+    "@webassemblyjs/helper-api-error" "1.9.0"
+    "@webassemblyjs/helper-code-frame" "1.9.0"
+    "@webassemblyjs/helper-fsm" "1.9.0"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.9.0":
+  "integrity" "sha1-STXVTIX+9jewDOn1I3dFHQDUeJk="
+  "resolved" "https://registry.nlark.com/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz?cache=0&sync_timestamp=1625473465901&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fwast-printer%2Fdownload%2F%40webassemblyjs%2Fwast-printer-1.9.0.tgz"
+  "version" "1.9.0"
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/wast-parser" "1.9.0"
+    "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+  "integrity" "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A="
+  "resolved" "https://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz"
+  "version" "1.2.0"
+
+"@xtuc/long@4.2.2":
+  "integrity" "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0="
+  "resolved" "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz"
+  "version" "4.2.2"
+
+"abab@^2.0.0":
+  "integrity" "sha1-wLZ4+zLWD8EhnHhNaoJv44Wut5o="
+  "resolved" "https://registry.npm.taobao.org/abab/download/abab-2.0.5.tgz"
+  "version" "2.0.5"
+
+"abort-controller@^3.0.0":
+  "integrity" "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="
+  "resolved" "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "event-target-shim" "^5.0.0"
+
+"accepts@~1.3.4", "accepts@~1.3.5", "accepts@~1.3.7":
+  "integrity" "sha1-UxvHJlF6OytB+FACHGzBXqq1B80="
+  "resolved" "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz"
+  "version" "1.3.7"
+  dependencies:
+    "mime-types" "~2.1.24"
+    "negotiator" "0.6.2"
+
+"acorn-globals@^4.3.2":
+  "integrity" "sha1-n6GSat3BHJcwjE5m163Q1Awycuc="
+  "resolved" "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.3.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-globals%2Fdownload%2Facorn-globals-4.3.4.tgz"
+  "version" "4.3.4"
+  dependencies:
+    "acorn" "^6.0.1"
+    "acorn-walk" "^6.0.1"
+
+"acorn-jsx@^5.2.0":
+  "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
+  "resolved" "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
+  "version" "5.3.2"
+
+"acorn-walk@^6.0.1":
+  "integrity" "sha1-Ejy487hMIXHx9/slJhWxx4prGow="
+  "resolved" "https://registry.nlark.com/acorn-walk/download/acorn-walk-6.2.0.tgz"
+  "version" "6.2.0"
+
+"acorn-walk@^7.1.1":
+  "integrity" "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w="
+  "resolved" "https://registry.nlark.com/acorn-walk/download/acorn-walk-7.2.0.tgz"
+  "version" "7.2.0"
+
+"acorn-walk@^8.2.0":
+  "integrity" "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA=="
+  "resolved" "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz"
+  "version" "8.2.0"
+
+"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.1.0", "acorn@^7.1.1", "acorn@^7.4.0":
+  "integrity" "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo="
+  "resolved" "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1624526907659&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz"
+  "version" "7.4.1"
+
+"acorn@^6.0.1":
+  "integrity" "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY="
+  "resolved" "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1624526907659&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz"
+  "version" "6.4.2"
+
+"acorn@^6.4.1":
+  "integrity" "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY="
+  "resolved" "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1624526907659&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz"
+  "version" "6.4.2"
+
+"acorn@^8.7.0":
+  "integrity" "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw=="
+  "resolved" "https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz"
+  "version" "8.8.2"
+
+"address@^1.0.0", "address@^1.1.2":
+  "integrity" "sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY="
+  "resolved" "https://registry.npm.taobao.org/address/download/address-1.1.2.tgz"
+  "version" "1.1.2"
+
+"agent-base@^6.0.0", "agent-base@^6.0.2", "agent-base@6":
+  "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="
+  "resolved" "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz"
+  "version" "6.0.2"
+  dependencies:
+    "debug" "4"
+
+"agentkeepalive@^3.4.1":
+  "integrity" "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ=="
+  "resolved" "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz"
+  "version" "3.5.2"
+  dependencies:
+    "humanize-ms" "^1.2.1"
+
+"ajv-errors@^1.0.0":
+  "integrity" "sha1-81mGrOuRr63sQQL72FAUlQzvpk0="
+  "resolved" "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz"
+  "version" "1.0.1"
+
+"ajv-keywords@^3.1.0", "ajv-keywords@^3.4.1", "ajv-keywords@^3.5.2":
+  "integrity" "sha1-MfKdpatuANHC0yms97WSlhTVAU0="
+  "resolved" "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1616882441894&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz"
+  "version" "3.5.2"
+
+"ajv@^6.1.0", "ajv@^6.10.0", "ajv@^6.10.2", "ajv@^6.12.3", "ajv@^6.12.4", "ajv@^6.12.5", "ajv@^6.9.1", "ajv@>=5.0.0":
+  "integrity" "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ="
+  "resolved" "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz"
+  "version" "6.12.6"
+  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"
+
+"ali-oss@^6.17.1":
+  "integrity" "sha512-v2oT3UhSJTH/LrsscVvi7iEGrnundydNaFzpYAKatqOl4JNcBV4UiwtlJU+ZHLys040JH2k+CutznA0GoE+P2w=="
+  "resolved" "https://registry.npmmirror.com/ali-oss/-/ali-oss-6.17.1.tgz"
+  "version" "6.17.1"
+  dependencies:
+    "address" "^1.0.0"
+    "agentkeepalive" "^3.4.1"
+    "bowser" "^1.6.0"
+    "copy-to" "^2.0.1"
+    "dateformat" "^2.0.0"
+    "debug" "^2.2.0"
+    "destroy" "^1.0.4"
+    "end-or-error" "^1.0.1"
+    "get-ready" "^1.0.0"
+    "humanize-ms" "^1.2.0"
+    "is-type-of" "^1.0.0"
+    "js-base64" "^2.5.2"
+    "jstoxml" "^2.0.0"
+    "merge-descriptors" "^1.0.1"
+    "mime" "^2.4.5"
+    "mz-modules" "^2.1.0"
+    "platform" "^1.3.1"
+    "pump" "^3.0.0"
+    "sdk-base" "^2.0.1"
+    "stream-http" "2.8.2"
+    "stream-wormhole" "^1.0.4"
+    "urllib" "^2.33.1"
+    "utility" "^1.8.0"
+    "xml2js" "^0.4.16"
+
+"alphanum-sort@^1.0.0":
+  "integrity" "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
+  "resolved" "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz"
+  "version" "1.0.2"
+
+"ansi-colors@^3.0.0", "ansi-colors@3.2.3":
+  "integrity" "sha1-V9NbhoboUeLMBMQD8cACA5dqGBM="
+  "resolved" "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.3.tgz"
+  "version" "3.2.3"
+
+"ansi-escapes@^4.2.1":
+  "integrity" "sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4="
+  "resolved" "https://registry.nlark.com/ansi-escapes/download/ansi-escapes-4.3.2.tgz?cache=0&sync_timestamp=1618847144938&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.2.tgz"
+  "version" "4.3.2"
+  dependencies:
+    "type-fest" "^0.21.3"
+
+"ansi-html@0.0.7":
+  "integrity" "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
+  "resolved" "https://registry.nlark.com/ansi-html/download/ansi-html-0.0.7.tgz?cache=0&sync_timestamp=1618846919541&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-html%2Fdownload%2Fansi-html-0.0.7.tgz"
+  "version" "0.0.7"
+
+"ansi-regex@^2.0.0":
+  "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+  "resolved" "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz"
+  "version" "2.1.1"
+
+"ansi-regex@^3.0.0":
+  "integrity" "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+  "resolved" "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-3.0.0.tgz"
+  "version" "3.0.0"
+
+"ansi-regex@^4.1.0":
+  "integrity" "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc="
+  "resolved" "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz"
+  "version" "4.1.0"
+
+"ansi-regex@^5.0.0":
+  "integrity" "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U="
+  "resolved" "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1618552978881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz"
+  "version" "5.0.0"
+
+"ansi-styles@^3.2.0", "ansi-styles@^3.2.1":
+  "integrity" "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0="
+  "resolved" "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1618995547052&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz"
+  "version" "3.2.1"
+  dependencies:
+    "color-convert" "^1.9.0"
+
+"ansi-styles@^4.0.0":
+  "integrity" "sha1-7dgDYornHATIWuegkG7a00tkiTc="
+  "resolved" "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1618995547052&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz"
+  "version" "4.3.0"
+  dependencies:
+    "color-convert" "^2.0.1"
+
+"ansi-styles@^4.1.0":
+  "integrity" "sha1-7dgDYornHATIWuegkG7a00tkiTc="
+  "resolved" "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1618995547052&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz"
+  "version" "4.3.0"
+  dependencies:
+    "color-convert" "^2.0.1"
+
+"any-promise@^1.0.0", "any-promise@^1.3.0":
+  "integrity" "sha1-q8av7tzqUugJzcA3au0845Y10X8="
+  "resolved" "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz"
+  "version" "1.3.0"
+
+"anymatch@^2.0.0":
+  "integrity" "sha1-vLJLTzeTTZqnrBe0ra+J58du8us="
+  "resolved" "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "micromatch" "^3.1.4"
+    "normalize-path" "^2.1.1"
+
+"anymatch@^3.0.0", "anymatch@~3.1.2":
+  "integrity" "sha1-wFV8CWrzLxBhmPT04qODU343hxY="
+  "resolved" "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.2.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-3.1.2.tgz"
+  "version" "3.1.2"
+  dependencies:
+    "normalize-path" "^3.0.0"
+    "picomatch" "^2.0.4"
+
+"aproba@^1.1.1":
+  "integrity" "sha1-aALmJk79GMeQobDVF/DyYnvyyUo="
+  "resolved" "https://registry.nlark.com/aproba/download/aproba-1.2.0.tgz"
+  "version" "1.2.0"
+
+"arch@^2.1.1":
+  "integrity" "sha1-G8R4GPMFdk8jqzMGsL/AhsWinRE="
+  "resolved" "https://registry.npm.taobao.org/arch/download/arch-2.2.0.tgz"
+  "version" "2.2.0"
+
+"argparse@^1.0.7":
+  "integrity" "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE="
+  "resolved" "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz"
+  "version" "1.0.10"
+  dependencies:
+    "sprintf-js" "~1.0.2"
+
+"arr-diff@^4.0.0":
+  "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+  "resolved" "https://registry.nlark.com/arr-diff/download/arr-diff-4.0.0.tgz?cache=0&sync_timestamp=1618847029174&other_urls=https%3A%2F%2Fregistry.nlark.com%2Farr-diff%2Fdownload%2Farr-diff-4.0.0.tgz"
+  "version" "4.0.0"
+
+"arr-flatten@^1.1.0":
+  "integrity" "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE="
+  "resolved" "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz"
+  "version" "1.1.0"
+
+"arr-union@^3.1.0":
+  "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+  "resolved" "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz"
+  "version" "3.1.0"
+
+"array-equal@^1.0.0":
+  "integrity" "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
+  "resolved" "https://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz"
+  "version" "1.0.0"
+
+"array-flatten@^2.1.0":
+  "integrity" "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk="
+  "resolved" "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz"
+  "version" "2.1.2"
+
+"array-flatten@1.1.1":
+  "integrity" "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+  "resolved" "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz"
+  "version" "1.1.1"
+
+"array-union@^1.0.1", "array-union@^1.0.2":
+  "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk="
+  "resolved" "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz?cache=0&sync_timestamp=1614624861176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-union%2Fdownload%2Farray-union-1.0.2.tgz"
+  "version" "1.0.2"
+  dependencies:
+    "array-uniq" "^1.0.1"
+
+"array-union@^2.1.0":
+  "integrity" "sha1-t5hCCtvrHego2ErNii4j0+/oXo0="
+  "resolved" "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz?cache=0&sync_timestamp=1614624861176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-union%2Fdownload%2Farray-union-2.1.0.tgz"
+  "version" "2.1.0"
+
+"array-uniq@^1.0.1":
+  "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
+  "resolved" "https://registry.nlark.com/array-uniq/download/array-uniq-1.0.3.tgz"
+  "version" "1.0.3"
+
+"array-unique@^0.3.2":
+  "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+  "resolved" "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz"
+  "version" "0.3.2"
+
+"asn1.js@^5.2.0":
+  "integrity" "sha1-EamAuE67kXgc41sP3C7ilON4Pwc="
+  "resolved" "https://registry.npm.taobao.org/asn1.js/download/asn1.js-5.4.1.tgz"
+  "version" "5.4.1"
+  dependencies:
+    "bn.js" "^4.0.0"
+    "inherits" "^2.0.1"
+    "minimalistic-assert" "^1.0.0"
+    "safer-buffer" "^2.1.0"
+
+"asn1@~0.2.3":
+  "integrity" "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY="
+  "resolved" "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz"
+  "version" "0.2.4"
+  dependencies:
+    "safer-buffer" "~2.1.0"
+
+"assert-plus@^1.0.0", "assert-plus@1.0.0":
+  "integrity" "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+  "resolved" "https://registry.nlark.com/assert-plus/download/assert-plus-1.0.0.tgz"
+  "version" "1.0.0"
+
+"assert@^1.1.1":
+  "integrity" "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs="
+  "resolved" "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz"
+  "version" "1.5.0"
+  dependencies:
+    "object-assign" "^4.1.1"
+    "util" "0.10.3"
+
+"assertion-error@^1.1.0":
+  "integrity" "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs="
+  "resolved" "https://registry.nlark.com/assertion-error/download/assertion-error-1.1.0.tgz"
+  "version" "1.1.0"
+
+"assign-symbols@^1.0.0":
+  "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+  "resolved" "https://registry.nlark.com/assign-symbols/download/assign-symbols-1.0.0.tgz"
+  "version" "1.0.0"
+
+"ast-types@^0.13.2":
+  "integrity" "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="
+  "resolved" "https://registry.npmmirror.com/ast-types/-/ast-types-0.13.4.tgz"
+  "version" "0.13.4"
+  dependencies:
+    "tslib" "^2.0.1"
+
+"astral-regex@^1.0.0":
+  "integrity" "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
+  "resolved" "https://registry.npmmirror.com/astral-regex/-/astral-regex-1.0.0.tgz"
+  "version" "1.0.0"
+
+"async-each@^1.0.1":
+  "integrity" "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8="
+  "resolved" "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz"
+  "version" "1.0.3"
+
+"async-limiter@~1.0.0":
+  "integrity" "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0="
+  "resolved" "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz"
+  "version" "1.0.1"
+
+"async-validator@^4.2.5":
+  "integrity" "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
+  "resolved" "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz"
+  "version" "4.2.5"
+
+"async@^2.6.2":
+  "integrity" "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8="
+  "resolved" "https://registry.nlark.com/async/download/async-2.6.3.tgz"
+  "version" "2.6.3"
+  dependencies:
+    "lodash" "^4.17.14"
+
+"asynckit@^0.4.0":
+  "integrity" "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+  "resolved" "https://registry.nlark.com/asynckit/download/asynckit-0.4.0.tgz"
+  "version" "0.4.0"
+
+"atob@^2.1.2":
+  "integrity" "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k="
+  "resolved" "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz"
+  "version" "2.1.2"
+
+"autoprefixer@^9.8.6":
+  "integrity" "sha1-O3NZTKG/kmYyDFrPFYjXTep0IQ8="
+  "resolved" "https://registry.nlark.com/autoprefixer/download/autoprefixer-9.8.6.tgz?cache=0&sync_timestamp=1626111053301&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fautoprefixer%2Fdownload%2Fautoprefixer-9.8.6.tgz"
+  "version" "9.8.6"
+  dependencies:
+    "browserslist" "^4.12.0"
+    "caniuse-lite" "^1.0.30001109"
+    "colorette" "^1.2.1"
+    "normalize-range" "^0.1.2"
+    "num2fraction" "^1.2.2"
+    "postcss" "^7.0.32"
+    "postcss-value-parser" "^4.1.0"
+
+"aws-sign2@~0.7.0":
+  "integrity" "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+  "resolved" "https://registry.nlark.com/aws-sign2/download/aws-sign2-0.7.0.tgz"
+  "version" "0.7.0"
+
+"aws4@^1.8.0":
+  "integrity" "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk="
+  "resolved" "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz?cache=0&sync_timestamp=1604101244098&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.11.0.tgz"
+  "version" "1.11.0"
+
+"axios@^0.21.1":
+  "integrity" "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg="
+  "resolved" "https://registry.nlark.com/axios/download/axios-0.21.1.tgz"
+  "version" "0.21.1"
+  dependencies:
+    "follow-redirects" "^1.10.0"
+
+"babel-eslint@^10.1.0":
+  "integrity" "sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI="
+  "resolved" "https://registry.nlark.com/babel-eslint/download/babel-eslint-10.1.0.tgz"
+  "version" "10.1.0"
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "@babel/parser" "^7.7.0"
+    "@babel/traverse" "^7.7.0"
+    "@babel/types" "^7.7.0"
+    "eslint-visitor-keys" "^1.0.0"
+    "resolve" "^1.12.0"
+
+"babel-loader@^8.1.0":
+  "integrity" "sha1-k2POhMEMmkDmx1N0jhRBtgyKC4E="
+  "resolved" "https://registry.nlark.com/babel-loader/download/babel-loader-8.2.2.tgz"
+  "version" "8.2.2"
+  dependencies:
+    "find-cache-dir" "^3.3.1"
+    "loader-utils" "^1.4.0"
+    "make-dir" "^3.1.0"
+    "schema-utils" "^2.6.5"
+
+"babel-plugin-dynamic-import-node@^2.3.3":
+  "integrity" "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M="
+  "resolved" "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz"
+  "version" "2.3.3"
+  dependencies:
+    "object.assign" "^4.1.0"
+
+"babel-plugin-polyfill-corejs2@^0.2.2":
+  "integrity" "sha1-6RJHheb9lPlLYYp5VOVpMFO/Uyc="
+  "resolved" "https://registry.nlark.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.2.2.tgz"
+  "version" "0.2.2"
+  dependencies:
+    "@babel/compat-data" "^7.13.11"
+    "@babel/helper-define-polyfill-provider" "^0.2.2"
+    "semver" "^6.1.1"
+
+"babel-plugin-polyfill-corejs3@^0.2.2":
+  "integrity" "sha1-cq3WjPCKi/E5um5t/AsdUECY5Xs="
+  "resolved" "https://registry.nlark.com/babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.2.3.tgz?cache=0&sync_timestamp=1623878015630&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-polyfill-corejs3%2Fdownload%2Fbabel-plugin-polyfill-corejs3-0.2.3.tgz"
+  "version" "0.2.3"
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.2.2"
+    "core-js-compat" "^3.14.0"
+
+"babel-plugin-polyfill-regenerator@^0.2.2":
+  "integrity" "sha1-sxDI1kKsraNIwfo7Pmzg6FG+4Hc="
+  "resolved" "https://registry.nlark.com/babel-plugin-polyfill-regenerator/download/babel-plugin-polyfill-regenerator-0.2.2.tgz"
+  "version" "0.2.2"
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.2.2"
+
+"balanced-match@^1.0.0":
+  "integrity" "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4="
+  "resolved" "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&sync_timestamp=1617714298273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz"
+  "version" "1.0.2"
+
+"base@^0.11.1":
+  "integrity" "sha1-e95c7RRbbVUakNuH+DxVi060io8="
+  "resolved" "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz"
+  "version" "0.11.2"
+  dependencies:
+    "cache-base" "^1.0.1"
+    "class-utils" "^0.3.5"
+    "component-emitter" "^1.2.1"
+    "define-property" "^1.0.0"
+    "isobject" "^3.0.1"
+    "mixin-deep" "^1.2.0"
+    "pascalcase" "^0.1.1"
+
+"base64-js@^1.0.2":
+  "integrity" "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo="
+  "resolved" "https://registry.npm.taobao.org/base64-js/download/base64-js-1.5.1.tgz"
+  "version" "1.5.1"
+
+"batch@0.6.1":
+  "integrity" "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
+  "resolved" "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz"
+  "version" "0.6.1"
+
+"bcrypt-pbkdf@^1.0.0":
+  "integrity" "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4="
+  "resolved" "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz"
+  "version" "1.0.2"
+  dependencies:
+    "tweetnacl" "^0.14.3"
+
+"bfj@^6.1.1":
+  "integrity" "sha1-MlyGGoIryzWKQceKM7jm4ght3n8="
+  "resolved" "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz"
+  "version" "6.1.2"
+  dependencies:
+    "bluebird" "^3.5.5"
+    "check-types" "^8.0.3"
+    "hoopy" "^0.1.4"
+    "tryer" "^1.0.1"
+
+"big.js@^3.1.3":
+  "integrity" "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4="
+  "resolved" "https://registry.nlark.com/big.js/download/big.js-3.2.0.tgz"
+  "version" "3.2.0"
+
+"big.js@^5.2.2":
+  "integrity" "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg="
+  "resolved" "https://registry.nlark.com/big.js/download/big.js-5.2.2.tgz"
+  "version" "5.2.2"
+
+"binary-extensions@^1.0.0":
+  "integrity" "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U="
+  "resolved" "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1610299322955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz"
+  "version" "1.13.1"
+
+"binary-extensions@^2.0.0":
+  "integrity" "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0="
+  "resolved" "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz?cache=0&sync_timestamp=1610299322955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.2.0.tgz"
+  "version" "2.2.0"
+
+"bluebird@^3.1.1", "bluebird@^3.5.5":
+  "integrity" "sha1-nyKcFb4nJFT/qXOs4NvueaGww28="
+  "resolved" "https://registry.nlark.com/bluebird/download/bluebird-3.7.2.tgz"
+  "version" "3.7.2"
+
+"bn.js@^4.0.0":
+  "integrity" "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og="
+  "resolved" "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz"
+  "version" "4.12.0"
+
+"bn.js@^4.1.0":
+  "integrity" "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og="
+  "resolved" "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz"
+  "version" "4.12.0"
+
+"bn.js@^4.11.9":
+  "integrity" "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og="
+  "resolved" "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz"
+  "version" "4.12.0"
+
+"bn.js@^5.0.0", "bn.js@^5.1.1":
+  "integrity" "sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI="
+  "resolved" "https://registry.npm.taobao.org/bn.js/download/bn.js-5.2.0.tgz"
+  "version" "5.2.0"
+
+"body-parser@1.19.0":
+  "integrity" "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io="
+  "resolved" "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz"
+  "version" "1.19.0"
+  dependencies:
+    "bytes" "3.1.0"
+    "content-type" "~1.0.4"
+    "debug" "2.6.9"
+    "depd" "~1.1.2"
+    "http-errors" "1.7.2"
+    "iconv-lite" "0.4.24"
+    "on-finished" "~2.3.0"
+    "qs" "6.7.0"
+    "raw-body" "2.4.0"
+    "type-is" "~1.6.17"
+
+"bonjour@^3.5.0":
+  "integrity" "sha1-jokKGD2O6aI5OzhExpGkK897yfU="
+  "resolved" "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz"
+  "version" "3.5.0"
+  dependencies:
+    "array-flatten" "^2.1.0"
+    "deep-equal" "^1.0.1"
+    "dns-equal" "^1.0.0"
+    "dns-txt" "^2.0.2"
+    "multicast-dns" "^6.0.1"
+    "multicast-dns-service-types" "^1.1.0"
+
+"boolbase@^1.0.0", "boolbase@~1.0.0":
+  "integrity" "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
+  "resolved" "https://registry.nlark.com/boolbase/download/boolbase-1.0.0.tgz"
+  "version" "1.0.0"
+
+"bowser@^1.6.0":
+  "integrity" "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ=="
+  "resolved" "https://registry.npmmirror.com/bowser/-/bowser-1.9.4.tgz"
+  "version" "1.9.4"
+
+"brace-expansion@^1.1.7":
+  "integrity" "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0="
+  "resolved" "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz"
+  "version" "1.1.11"
+  dependencies:
+    "balanced-match" "^1.0.0"
+    "concat-map" "0.0.1"
+
+"braces@^2.3.1", "braces@^2.3.2":
+  "integrity" "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk="
+  "resolved" "https://registry.nlark.com/braces/download/braces-2.3.2.tgz"
+  "version" "2.3.2"
+  dependencies:
+    "arr-flatten" "^1.1.0"
+    "array-unique" "^0.3.2"
+    "extend-shallow" "^2.0.1"
+    "fill-range" "^4.0.0"
+    "isobject" "^3.0.1"
+    "repeat-element" "^1.1.2"
+    "snapdragon" "^0.8.1"
+    "snapdragon-node" "^2.0.1"
+    "split-string" "^3.0.2"
+    "to-regex" "^3.0.1"
+
+"braces@^3.0.1":
+  "integrity" "sha1-NFThpGLujVmeI23zNs2epPiv4Qc="
+  "resolved" "https://registry.nlark.com/braces/download/braces-3.0.2.tgz"
+  "version" "3.0.2"
+  dependencies:
+    "fill-range" "^7.0.1"
+
+"braces@~3.0.2":
+  "integrity" "sha1-NFThpGLujVmeI23zNs2epPiv4Qc="
+  "resolved" "https://registry.nlark.com/braces/download/braces-3.0.2.tgz"
+  "version" "3.0.2"
+  dependencies:
+    "fill-range" "^7.0.1"
+
+"brorand@^1.0.1", "brorand@^1.1.0":
+  "integrity" "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+  "resolved" "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz"
+  "version" "1.1.0"
+
+"browser-process-hrtime@^1.0.0":
+  "integrity" "sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY="
+  "resolved" "https://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz"
+  "version" "1.0.0"
+
+"browser-stdout@1.3.1":
+  "integrity" "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA="
+  "resolved" "https://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.1.tgz"
+  "version" "1.3.1"
+
+"browserify-aes@^1.0.0", "browserify-aes@^1.0.4":
+  "integrity" "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g="
+  "resolved" "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz"
+  "version" "1.2.0"
+  dependencies:
+    "buffer-xor" "^1.0.3"
+    "cipher-base" "^1.0.0"
+    "create-hash" "^1.1.0"
+    "evp_bytestokey" "^1.0.3"
+    "inherits" "^2.0.1"
+    "safe-buffer" "^5.0.1"
+
+"browserify-cipher@^1.0.0":
+  "integrity" "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA="
+  "resolved" "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "browserify-aes" "^1.0.4"
+    "browserify-des" "^1.0.0"
+    "evp_bytestokey" "^1.0.0"
+
+"browserify-des@^1.0.0":
+  "integrity" "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw="
+  "resolved" "https://registry.nlark.com/browserify-des/download/browserify-des-1.0.2.tgz"
+  "version" "1.0.2"
+  dependencies:
+    "cipher-base" "^1.0.1"
+    "des.js" "^1.0.0"
+    "inherits" "^2.0.1"
+    "safe-buffer" "^5.1.2"
+
+"browserify-rsa@^4.0.0", "browserify-rsa@^4.0.1":
+  "integrity" "sha1-sv0Gtbda4pf3zi3GUfkY9b4VjI0="
+  "resolved" "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.1.0.tgz?cache=0&sync_timestamp=1605194257215&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-rsa%2Fdownload%2Fbrowserify-rsa-4.1.0.tgz"
+  "version" "4.1.0"
+  dependencies:
+    "bn.js" "^5.0.0"
+    "randombytes" "^2.0.1"
+
+"browserify-sign@^4.0.0":
+  "integrity" "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM="
+  "resolved" "https://registry.nlark.com/browserify-sign/download/browserify-sign-4.2.1.tgz"
+  "version" "4.2.1"
+  dependencies:
+    "bn.js" "^5.1.1"
+    "browserify-rsa" "^4.0.1"
+    "create-hash" "^1.2.0"
+    "create-hmac" "^1.1.7"
+    "elliptic" "^6.5.3"
+    "inherits" "^2.0.4"
+    "parse-asn1" "^5.1.5"
+    "readable-stream" "^3.6.0"
+    "safe-buffer" "^5.2.0"
+
+"browserify-zlib@^0.2.0":
+  "integrity" "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8="
+  "resolved" "https://registry.nlark.com/browserify-zlib/download/browserify-zlib-0.2.0.tgz"
+  "version" "0.2.0"
+  dependencies:
+    "pako" "~1.0.5"
+
+"browserslist@^4.0.0", "browserslist@^4.12.0", "browserslist@^4.16.6":
+  "integrity" "sha1-15ASd6WojlVO0wWxg+ybDAj2b6I="
+  "resolved" "https://registry.nlark.com/browserslist/download/browserslist-4.16.6.tgz?cache=0&sync_timestamp=1619789072079&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.16.6.tgz"
+  "version" "4.16.6"
+  dependencies:
+    "caniuse-lite" "^1.0.30001219"
+    "colorette" "^1.2.2"
+    "electron-to-chromium" "^1.3.723"
+    "escalade" "^3.1.1"
+    "node-releases" "^1.1.71"
+
+"buffer-from@^1.0.0":
+  "integrity" "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8="
+  "resolved" "https://registry.nlark.com/buffer-from/download/buffer-from-1.1.1.tgz"
+  "version" "1.1.1"
+
+"buffer-indexof@^1.0.0":
+  "integrity" "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow="
+  "resolved" "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz"
+  "version" "1.1.1"
+
+"buffer-json@^2.0.0":
+  "integrity" "sha1-9z4TseQvGW/i/WfQAcfXEH7dfCM="
+  "resolved" "https://registry.nlark.com/buffer-json/download/buffer-json-2.0.0.tgz"
+  "version" "2.0.0"
+
+"buffer-xor@^1.0.3":
+  "integrity" "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+  "resolved" "https://registry.nlark.com/buffer-xor/download/buffer-xor-1.0.3.tgz"
+  "version" "1.0.3"
+
+"buffer@^4.3.0":
+  "integrity" "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg="
+  "resolved" "https://registry.nlark.com/buffer/download/buffer-4.9.2.tgz"
+  "version" "4.9.2"
+  dependencies:
+    "base64-js" "^1.0.2"
+    "ieee754" "^1.1.4"
+    "isarray" "^1.0.0"
+
+"builtin-status-codes@^3.0.0":
+  "integrity" "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
+  "resolved" "https://registry.nlark.com/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz"
+  "version" "3.0.0"
+
+"bytes@3.0.0":
+  "integrity" "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+  "resolved" "https://registry.nlark.com/bytes/download/bytes-3.0.0.tgz"
+  "version" "3.0.0"
+
+"bytes@3.1.0":
+  "integrity" "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY="
+  "resolved" "https://registry.nlark.com/bytes/download/bytes-3.1.0.tgz"
+  "version" "3.1.0"
+
+"cacache@^12.0.2", "cacache@^12.0.3":
+  "integrity" "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw="
+  "resolved" "https://registry.nlark.com/cacache/download/cacache-12.0.4.tgz?cache=0&sync_timestamp=1621949700715&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcacache%2Fdownload%2Fcacache-12.0.4.tgz"
+  "version" "12.0.4"
+  dependencies:
+    "bluebird" "^3.5.5"
+    "chownr" "^1.1.1"
+    "figgy-pudding" "^3.5.1"
+    "glob" "^7.1.4"
+    "graceful-fs" "^4.1.15"
+    "infer-owner" "^1.0.3"
+    "lru-cache" "^5.1.1"
+    "mississippi" "^3.0.0"
+    "mkdirp" "^0.5.1"
+    "move-concurrently" "^1.0.1"
+    "promise-inflight" "^1.0.1"
+    "rimraf" "^2.6.3"
+    "ssri" "^6.0.1"
+    "unique-filename" "^1.1.1"
+    "y18n" "^4.0.0"
+
+"cache-base@^1.0.1":
+  "integrity" "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI="
+  "resolved" "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "collection-visit" "^1.0.0"
+    "component-emitter" "^1.2.1"
+    "get-value" "^2.0.6"
+    "has-value" "^1.0.0"
+    "isobject" "^3.0.1"
+    "set-value" "^2.0.0"
+    "to-object-path" "^0.3.0"
+    "union-value" "^1.0.0"
+    "unset-value" "^1.0.0"
+
+"cache-loader@^4.1.0":
+  "integrity" "sha1-mUjK41OuwKH8ser9ojAIFuyFOH4="
+  "resolved" "https://registry.nlark.com/cache-loader/download/cache-loader-4.1.0.tgz"
+  "version" "4.1.0"
+  dependencies:
+    "buffer-json" "^2.0.0"
+    "find-cache-dir" "^3.0.0"
+    "loader-utils" "^1.2.3"
+    "mkdirp" "^0.5.1"
+    "neo-async" "^2.6.1"
+    "schema-utils" "^2.0.0"
+
+"call-bind@^1.0.0", "call-bind@^1.0.2":
+  "integrity" "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw="
+  "resolved" "https://registry.nlark.com/call-bind/download/call-bind-1.0.2.tgz"
+  "version" "1.0.2"
+  dependencies:
+    "function-bind" "^1.1.1"
+    "get-intrinsic" "^1.0.2"
+
+"call-me-maybe@^1.0.1":
+  "integrity" "sha1-JtII6onje1y95gJQoV8DHBak1ms="
+  "resolved" "https://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz"
+  "version" "1.0.1"
+
+"caller-callsite@^2.0.0":
+  "integrity" "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ="
+  "resolved" "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "callsites" "^2.0.0"
+
+"caller-path@^2.0.0":
+  "integrity" "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ="
+  "resolved" "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz?cache=0&sync_timestamp=1618738159926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaller-path%2Fdownload%2Fcaller-path-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "caller-callsite" "^2.0.0"
+
+"callsites@^2.0.0":
+  "integrity" "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
+  "resolved" "https://registry.nlark.com/callsites/download/callsites-2.0.0.tgz"
+  "version" "2.0.0"
+
+"callsites@^3.0.0":
+  "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+  "resolved" "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz"
+  "version" "3.1.0"
+
+"camel-case@3.0.x":
+  "integrity" "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M="
+  "resolved" "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz?cache=0&sync_timestamp=1606867311564&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "no-case" "^2.2.0"
+    "upper-case" "^1.1.1"
+
+"camelcase@^5.0.0":
+  "integrity" "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA="
+  "resolved" "https://registry.nlark.com/camelcase/download/camelcase-5.3.1.tgz"
+  "version" "5.3.1"
+
+"camelcase@^5.3.1":
+  "integrity" "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA="
+  "resolved" "https://registry.nlark.com/camelcase/download/camelcase-5.3.1.tgz"
+  "version" "5.3.1"
+
+"camelcase@^6.0.0":
+  "integrity" "sha1-kkr4gcnVJaydh/QNlk5c6pgqGAk="
+  "resolved" "https://registry.nlark.com/camelcase/download/camelcase-6.2.0.tgz"
+  "version" "6.2.0"
+
+"caniuse-api@^3.0.0":
+  "integrity" "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA="
+  "resolved" "https://registry.nlark.com/caniuse-api/download/caniuse-api-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "browserslist" "^4.0.0"
+    "caniuse-lite" "^1.0.0"
+    "lodash.memoize" "^4.1.2"
+    "lodash.uniq" "^4.5.0"
+
+"caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30001109", "caniuse-lite@^1.0.30001219":
+  "integrity" "sha1-RblBu9gzyw+lOGH/K650azxspdQ="
+  "resolved" "https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001245.tgz?cache=0&sync_timestamp=1626238653626&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001245.tgz"
+  "version" "1.0.30001245"
+
+"case-sensitive-paths-webpack-plugin@^2.3.0":
+  "integrity" "sha1-22QGbGQi7tLgjMFLmGykN5bbxtQ="
+  "resolved" "https://registry.npm.taobao.org/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.4.0.tgz"
+  "version" "2.4.0"
+
+"caseless@~0.12.0":
+  "integrity" "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+  "resolved" "https://registry.nlark.com/caseless/download/caseless-0.12.0.tgz"
+  "version" "0.12.0"
+
+"chai@^4.1.2":
+  "integrity" "sha1-tV5lWzHh6scJm+TAjCGWT84ubEk="
+  "resolved" "https://registry.npm.taobao.org/chai/download/chai-4.3.4.tgz"
+  "version" "4.3.4"
+  dependencies:
+    "assertion-error" "^1.1.0"
+    "check-error" "^1.0.2"
+    "deep-eql" "^3.0.1"
+    "get-func-name" "^2.0.0"
+    "pathval" "^1.1.1"
+    "type-detect" "^4.0.5"
+
+"chalk@^2.0.0", "chalk@^2.0.1", "chalk@^2.1.0", "chalk@^2.3.0", "chalk@^2.4.1", "chalk@^2.4.2":
+  "integrity" "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ="
+  "resolved" "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1618995354302&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz"
+  "version" "2.4.2"
+  dependencies:
+    "ansi-styles" "^3.2.1"
+    "escape-string-regexp" "^1.0.5"
+    "supports-color" "^5.3.0"
+
+"chalk@^4.0.0":
+  "integrity" "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0="
+  "resolved" "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995354302&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz"
+  "version" "4.1.1"
+  dependencies:
+    "ansi-styles" "^4.1.0"
+    "supports-color" "^7.1.0"
+
+"chalk@^4.1.0":
+  "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
+  "resolved" "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz"
+  "version" "4.1.2"
+  dependencies:
+    "ansi-styles" "^4.1.0"
+    "supports-color" "^7.1.0"
+
+"chardet@^0.7.0":
+  "integrity" "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4="
+  "resolved" "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz"
+  "version" "0.7.0"
+
+"check-error@^1.0.2":
+  "integrity" "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII="
+  "resolved" "https://registry.npm.taobao.org/check-error/download/check-error-1.0.2.tgz"
+  "version" "1.0.2"
+
+"check-types@^8.0.3":
+  "integrity" "sha1-M1bMoZyIlUTy16le1JzlCKDs9VI="
+  "resolved" "https://registry.npm.taobao.org/check-types/download/check-types-8.0.3.tgz"
+  "version" "8.0.3"
+
+"chokidar@^2.0.0", "chokidar@^2.1.8":
+  "integrity" "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc="
+  "resolved" "https://registry.nlark.com/chokidar/download/chokidar-2.1.8.tgz"
+  "version" "2.1.8"
+  dependencies:
+    "anymatch" "^2.0.0"
+    "async-each" "^1.0.1"
+    "braces" "^2.3.2"
+    "glob-parent" "^3.1.0"
+    "inherits" "^2.0.3"
+    "is-binary-path" "^1.0.0"
+    "is-glob" "^4.0.0"
+    "normalize-path" "^3.0.0"
+    "path-is-absolute" "^1.0.0"
+    "readdirp" "^2.2.1"
+    "upath" "^1.1.1"
+  optionalDependencies:
+    "fsevents" "^1.2.7"
+
+"chokidar@^3.4.1":
+  "integrity" "sha1-26OXb8rbAW9m/TZQIdkWANAcHnU="
+  "resolved" "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz"
+  "version" "3.5.2"
+  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"
+  optionalDependencies:
+    "fsevents" "~2.3.2"
+
+"chownr@^1.1.1":
+  "integrity" "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs="
+  "resolved" "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz"
+  "version" "1.1.4"
+
+"chrome-trace-event@^1.0.2":
+  "integrity" "sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw="
+  "resolved" "https://registry.nlark.com/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz"
+  "version" "1.0.3"
+
+"ci-info@^1.5.0":
+  "integrity" "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc="
+  "resolved" "https://registry.nlark.com/ci-info/download/ci-info-1.6.0.tgz?cache=0&sync_timestamp=1622039942508&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fci-info%2Fdownload%2Fci-info-1.6.0.tgz"
+  "version" "1.6.0"
+
+"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3":
+  "integrity" "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94="
+  "resolved" "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz"
+  "version" "1.0.4"
+  dependencies:
+    "inherits" "^2.0.1"
+    "safe-buffer" "^5.0.1"
+
+"class-utils@^0.3.5":
+  "integrity" "sha1-+TNprouafOAv1B+q0MqDAzGQxGM="
+  "resolved" "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz"
+  "version" "0.3.6"
+  dependencies:
+    "arr-union" "^3.1.0"
+    "define-property" "^0.2.5"
+    "isobject" "^3.0.0"
+    "static-extend" "^0.1.1"
+
+"clean-css@4.2.x":
+  "integrity" "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g="
+  "resolved" "https://registry.nlark.com/clean-css/download/clean-css-4.2.3.tgz?cache=0&sync_timestamp=1624616709466&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fclean-css%2Fdownload%2Fclean-css-4.2.3.tgz"
+  "version" "4.2.3"
+  dependencies:
+    "source-map" "~0.6.0"
+
+"cli-cursor@^2.1.0":
+  "integrity" "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU="
+  "resolved" "https://registry.nlark.com/cli-cursor/download/cli-cursor-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "restore-cursor" "^2.0.0"
+
+"cli-cursor@^3.1.0":
+  "integrity" "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc="
+  "resolved" "https://registry.nlark.com/cli-cursor/download/cli-cursor-3.1.0.tgz"
+  "version" "3.1.0"
+  dependencies:
+    "restore-cursor" "^3.1.0"
+
+"cli-highlight@^2.1.4":
+  "integrity" "sha1-SXNvpFLwqvT65YDjCssmgo0twb8="
+  "resolved" "https://registry.npm.taobao.org/cli-highlight/download/cli-highlight-2.1.11.tgz?cache=0&sync_timestamp=1616955426054&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-highlight%2Fdownload%2Fcli-highlight-2.1.11.tgz"
+  "version" "2.1.11"
+  dependencies:
+    "chalk" "^4.0.0"
+    "highlight.js" "^10.7.1"
+    "mz" "^2.4.0"
+    "parse5" "^5.1.1"
+    "parse5-htmlparser2-tree-adapter" "^6.0.0"
+    "yargs" "^16.0.0"
+
+"cli-spinners@^2.0.0":
+  "integrity" "sha1-NsfcmPtqmna9YjjsP3fiQlYn6Tk="
+  "resolved" "https://registry.nlark.com/cli-spinners/download/cli-spinners-2.6.0.tgz"
+  "version" "2.6.0"
+
+"cli-width@^3.0.0":
+  "integrity" "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY="
+  "resolved" "https://registry.nlark.com/cli-width/download/cli-width-3.0.0.tgz"
+  "version" "3.0.0"
+
+"clipboardy@^2.3.0":
+  "integrity" "sha1-PCkDZQxo5GqRs4iYW8J3QofbopA="
+  "resolved" "https://registry.npm.taobao.org/clipboardy/download/clipboardy-2.3.0.tgz"
+  "version" "2.3.0"
+  dependencies:
+    "arch" "^2.1.1"
+    "execa" "^1.0.0"
+    "is-wsl" "^2.1.1"
+
+"cliui@^5.0.0":
+  "integrity" "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U="
+  "resolved" "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz"
+  "version" "5.0.0"
+  dependencies:
+    "string-width" "^3.1.0"
+    "strip-ansi" "^5.2.0"
+    "wrap-ansi" "^5.1.0"
+
+"cliui@^6.0.0":
+  "integrity" "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE="
+  "resolved" "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-6.0.0.tgz"
+  "version" "6.0.0"
+  dependencies:
+    "string-width" "^4.2.0"
+    "strip-ansi" "^6.0.0"
+    "wrap-ansi" "^6.2.0"
+
+"cliui@^7.0.2":
+  "integrity" "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08="
+  "resolved" "https://registry.npm.taobao.org/cliui/download/cliui-7.0.4.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-7.0.4.tgz"
+  "version" "7.0.4"
+  dependencies:
+    "string-width" "^4.2.0"
+    "strip-ansi" "^6.0.0"
+    "wrap-ansi" "^7.0.0"
+
+"clone@^1.0.2":
+  "integrity" "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
+  "resolved" "https://registry.nlark.com/clone/download/clone-1.0.4.tgz"
+  "version" "1.0.4"
+
+"coa@^2.0.2":
+  "integrity" "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM="
+  "resolved" "https://registry.nlark.com/coa/download/coa-2.0.2.tgz"
+  "version" "2.0.2"
+  dependencies:
+    "@types/q" "^1.5.1"
+    "chalk" "^2.4.1"
+    "q" "^1.1.2"
+
+"collection-visit@^1.0.0":
+  "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA="
+  "resolved" "https://registry.nlark.com/collection-visit/download/collection-visit-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "map-visit" "^1.0.0"
+    "object-visit" "^1.0.0"
+
+"color-convert@^1.9.0", "color-convert@^1.9.1":
+  "integrity" "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg="
+  "resolved" "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz"
+  "version" "1.9.3"
+  dependencies:
+    "color-name" "1.1.3"
+
+"color-convert@^2.0.1":
+  "integrity" "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM="
+  "resolved" "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz"
+  "version" "2.0.1"
+  dependencies:
+    "color-name" "~1.1.4"
+
+"color-name@^1.0.0", "color-name@1.1.3":
+  "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+  "resolved" "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz"
+  "version" "1.1.3"
+
+"color-name@~1.1.4":
+  "integrity" "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI="
+  "resolved" "https://registry.nlark.com/color-name/download/color-name-1.1.4.tgz"
+  "version" "1.1.4"
+
+"color-string@^1.5.4":
+  "integrity" "sha1-ZUdKjw50OWJfPSemoZ2J/EUiMBQ="
+  "resolved" "https://registry.npm.taobao.org/color-string/download/color-string-1.5.5.tgz"
+  "version" "1.5.5"
+  dependencies:
+    "color-name" "^1.0.0"
+    "simple-swizzle" "^0.2.2"
+
+"color@^3.0.0":
+  "integrity" "sha1-ymf7TnuX1hHc3jns7tQiBn2RWW4="
+  "resolved" "https://registry.npm.taobao.org/color/download/color-3.1.3.tgz"
+  "version" "3.1.3"
+  dependencies:
+    "color-convert" "^1.9.1"
+    "color-string" "^1.5.4"
+
+"colorette@^1.2.1", "colorette@^1.2.2":
+  "integrity" "sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ="
+  "resolved" "https://registry.nlark.com/colorette/download/colorette-1.2.2.tgz?cache=0&sync_timestamp=1618847174680&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcolorette%2Fdownload%2Fcolorette-1.2.2.tgz"
+  "version" "1.2.2"
+
+"combined-stream@^1.0.6", "combined-stream@~1.0.6":
+  "integrity" "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8="
+  "resolved" "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz"
+  "version" "1.0.8"
+  dependencies:
+    "delayed-stream" "~1.0.0"
+
+"commander@^2.18.0":
+  "integrity" "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM="
+  "resolved" "https://registry.nlark.com/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1624609533517&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz"
+  "version" "2.20.3"
+
+"commander@^2.20.0":
+  "integrity" "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM="
+  "resolved" "https://registry.nlark.com/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1624609533517&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz"
+  "version" "2.20.3"
+
+"commander@~2.19.0":
+  "integrity" "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So="
+  "resolved" "https://registry.nlark.com/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1624609533517&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz"
+  "version" "2.19.0"
+
+"commander@2.17.x":
+  "integrity" "sha1-vXerfebelCBc6sxy8XFtKfIKd78="
+  "resolved" "https://registry.nlark.com/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1624609533517&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz"
+  "version" "2.17.1"
+
+"commondir@^1.0.1":
+  "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+  "resolved" "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz"
+  "version" "1.0.1"
+
+"component-emitter@^1.2.1":
+  "integrity" "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A="
+  "resolved" "https://registry.nlark.com/component-emitter/download/component-emitter-1.3.0.tgz"
+  "version" "1.3.0"
+
+"compressible@~2.0.16":
+  "integrity" "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o="
+  "resolved" "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz"
+  "version" "2.0.18"
+  dependencies:
+    "mime-db" ">= 1.43.0 < 2"
+
+"compression@^1.7.4":
+  "integrity" "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48="
+  "resolved" "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz"
+  "version" "1.7.4"
+  dependencies:
+    "accepts" "~1.3.5"
+    "bytes" "3.0.0"
+    "compressible" "~2.0.16"
+    "debug" "2.6.9"
+    "on-headers" "~1.0.2"
+    "safe-buffer" "5.1.2"
+    "vary" "~1.1.2"
+
+"concat-map@0.0.1":
+  "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+  "resolved" "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz"
+  "version" "0.0.1"
+
+"concat-stream@^1.5.0":
+  "integrity" "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ="
+  "resolved" "https://registry.nlark.com/concat-stream/download/concat-stream-1.6.2.tgz"
+  "version" "1.6.2"
+  dependencies:
+    "buffer-from" "^1.0.0"
+    "inherits" "^2.0.3"
+    "readable-stream" "^2.2.2"
+    "typedarray" "^0.0.6"
+
+"connect-history-api-fallback@^1.6.0":
+  "integrity" "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w="
+  "resolved" "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz"
+  "version" "1.6.0"
+
+"console-browserify@^1.1.0":
+  "integrity" "sha1-ZwY871fOts9Jk6KrOlWECujEkzY="
+  "resolved" "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz"
+  "version" "1.2.0"
+
+"consolidate@^0.15.1":
+  "integrity" "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc="
+  "resolved" "https://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz"
+  "version" "0.15.1"
+  dependencies:
+    "bluebird" "^3.1.1"
+
+"constants-browserify@^1.0.0":
+  "integrity" "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+  "resolved" "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz"
+  "version" "1.0.0"
+
+"content-disposition@0.5.3":
+  "integrity" "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70="
+  "resolved" "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz"
+  "version" "0.5.3"
+  dependencies:
+    "safe-buffer" "5.1.2"
+
+"content-type@^1.0.2", "content-type@~1.0.4":
+  "integrity" "sha1-4TjMdeBAxyexlm/l5fjJruJW/js="
+  "resolved" "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz"
+  "version" "1.0.4"
+
+"convert-source-map@^1.7.0":
+  "integrity" "sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k="
+  "resolved" "https://registry.nlark.com/convert-source-map/download/convert-source-map-1.8.0.tgz"
+  "version" "1.8.0"
+  dependencies:
+    "safe-buffer" "~5.1.1"
+
+"cookie-signature@1.0.6":
+  "integrity" "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+  "resolved" "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz"
+  "version" "1.0.6"
+
+"cookie@0.4.0":
+  "integrity" "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo="
+  "resolved" "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz"
+  "version" "0.4.0"
+
+"copy-anything@^2.0.1":
+  "integrity" "sha1-hCQHugJGaw34RIGbvjuuu+XUXYc="
+  "resolved" "https://registry.npm.taobao.org/copy-anything/download/copy-anything-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-anything%2Fdownload%2Fcopy-anything-2.0.3.tgz"
+  "version" "2.0.3"
+  dependencies:
+    "is-what" "^3.12.0"
+
+"copy-concurrently@^1.0.0":
+  "integrity" "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA="
+  "resolved" "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz"
+  "version" "1.0.5"
+  dependencies:
+    "aproba" "^1.1.1"
+    "fs-write-stream-atomic" "^1.0.8"
+    "iferr" "^0.1.5"
+    "mkdirp" "^0.5.1"
+    "rimraf" "^2.5.4"
+    "run-queue" "^1.0.0"
+
+"copy-descriptor@^0.1.0":
+  "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+  "resolved" "https://registry.nlark.com/copy-descriptor/download/copy-descriptor-0.1.1.tgz"
+  "version" "0.1.1"
+
+"copy-to@^2.0.1":
+  "integrity" "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w=="
+  "resolved" "https://registry.npmmirror.com/copy-to/-/copy-to-2.0.1.tgz"
+  "version" "2.0.1"
+
+"copy-webpack-plugin@^5.1.1":
+  "integrity" "sha1-ioieHcr6bJHGzUvhrRWPHTgjuuI="
+  "resolved" "https://registry.nlark.com/copy-webpack-plugin/download/copy-webpack-plugin-5.1.2.tgz?cache=0&sync_timestamp=1624628458516&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-5.1.2.tgz"
+  "version" "5.1.2"
+  dependencies:
+    "cacache" "^12.0.3"
+    "find-cache-dir" "^2.1.0"
+    "glob-parent" "^3.1.0"
+    "globby" "^7.1.1"
+    "is-glob" "^4.0.1"
+    "loader-utils" "^1.2.3"
+    "minimatch" "^3.0.4"
+    "normalize-path" "^3.0.0"
+    "p-limit" "^2.2.1"
+    "schema-utils" "^1.0.0"
+    "serialize-javascript" "^4.0.0"
+    "webpack-log" "^2.0.0"
+
+"core-js-compat@^3.14.0", "core-js-compat@^3.15.0", "core-js-compat@^3.6.5":
+  "integrity" "sha1-Rycvu0eYgN4UtOYIH3HzSS9b08s="
+  "resolved" "https://registry.nlark.com/core-js-compat/download/core-js-compat-3.15.2.tgz?cache=0&sync_timestamp=1624966048946&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-js-compat%2Fdownload%2Fcore-js-compat-3.15.2.tgz"
+  "version" "3.15.2"
+  dependencies:
+    "browserslist" "^4.16.6"
+    "semver" "7.0.0"
+
+"core-js-pure@^3.16.0":
+  "integrity" "sha1-IY4HrdPxhE5T+rGVxHhx/Fuhjeg="
+  "resolved" "https://registry.nlark.com/core-js-pure/download/core-js-pure-3.16.0.tgz?cache=0&sync_timestamp=1627616508554&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-js-pure%2Fdownload%2Fcore-js-pure-3.16.0.tgz"
+  "version" "3.16.0"
+
+"core-js@^2.6.5":
+  "integrity" "sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw="
+  "resolved" "https://registry.nlark.com/core-js/download/core-js-2.6.12.tgz?cache=0&sync_timestamp=1624966012065&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-js%2Fdownload%2Fcore-js-2.6.12.tgz"
+  "version" "2.6.12"
+
+"core-js@^3.6.5":
+  "integrity" "sha1-dAZg0v9V7zTOZk1+JFURnFvdPWE="
+  "resolved" "https://registry.nlark.com/core-js/download/core-js-3.15.2.tgz?cache=0&sync_timestamp=1624966012065&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-js%2Fdownload%2Fcore-js-3.15.2.tgz"
+  "version" "3.15.2"
+
+"core-util-is@^1.0.2", "core-util-is@~1.0.0", "core-util-is@1.0.2":
+  "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+  "resolved" "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.2.tgz"
+  "version" "1.0.2"
+
+"cosmiconfig@^5.0.0":
+  "integrity" "sha1-BA9yaAnFked6F8CjYmykW08Wixo="
+  "resolved" "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz"
+  "version" "5.2.1"
+  dependencies:
+    "import-fresh" "^2.0.0"
+    "is-directory" "^0.3.1"
+    "js-yaml" "^3.13.1"
+    "parse-json" "^4.0.0"
+
+"create-ecdh@^4.0.0":
+  "integrity" "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4="
+  "resolved" "https://registry.nlark.com/create-ecdh/download/create-ecdh-4.0.4.tgz"
+  "version" "4.0.4"
+  dependencies:
+    "bn.js" "^4.1.0"
+    "elliptic" "^6.5.3"
+
+"create-hash@^1.1.0", "create-hash@^1.1.2", "create-hash@^1.2.0":
+  "integrity" "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY="
+  "resolved" "https://registry.nlark.com/create-hash/download/create-hash-1.2.0.tgz"
+  "version" "1.2.0"
+  dependencies:
+    "cipher-base" "^1.0.1"
+    "inherits" "^2.0.1"
+    "md5.js" "^1.3.4"
+    "ripemd160" "^2.0.1"
+    "sha.js" "^2.4.0"
+
+"create-hmac@^1.1.0", "create-hmac@^1.1.4", "create-hmac@^1.1.7":
+  "integrity" "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8="
+  "resolved" "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz"
+  "version" "1.1.7"
+  dependencies:
+    "cipher-base" "^1.0.3"
+    "create-hash" "^1.1.0"
+    "inherits" "^2.0.1"
+    "ripemd160" "^2.0.0"
+    "safe-buffer" "^5.0.1"
+    "sha.js" "^2.4.8"
+
+"cross-env@^7.0.3":
+  "integrity" "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw=="
+  "resolved" "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz"
+  "version" "7.0.3"
+  dependencies:
+    "cross-spawn" "^7.0.1"
+
+"cross-spawn@^5.0.1":
+  "integrity" "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk="
+  "resolved" "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz"
+  "version" "5.1.0"
+  dependencies:
+    "lru-cache" "^4.0.1"
+    "shebang-command" "^1.2.0"
+    "which" "^1.2.9"
+
+"cross-spawn@^6.0.0":
+  "integrity" "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q="
+  "resolved" "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz"
+  "version" "6.0.5"
+  dependencies:
+    "nice-try" "^1.0.4"
+    "path-key" "^2.0.1"
+    "semver" "^5.5.0"
+    "shebang-command" "^1.2.0"
+    "which" "^1.2.9"
+
+"cross-spawn@^6.0.5":
+  "integrity" "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q="
+  "resolved" "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz"
+  "version" "6.0.5"
+  dependencies:
+    "nice-try" "^1.0.4"
+    "path-key" "^2.0.1"
+    "semver" "^5.5.0"
+    "shebang-command" "^1.2.0"
+    "which" "^1.2.9"
+
+"cross-spawn@^7.0.0", "cross-spawn@^7.0.1":
+  "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="
+  "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
+  "version" "7.0.3"
+  dependencies:
+    "path-key" "^3.1.0"
+    "shebang-command" "^2.0.0"
+    "which" "^2.0.1"
+
+"crypto-browserify@^3.11.0":
+  "integrity" "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw="
+  "resolved" "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz"
+  "version" "3.12.0"
+  dependencies:
+    "browserify-cipher" "^1.0.0"
+    "browserify-sign" "^4.0.0"
+    "create-ecdh" "^4.0.0"
+    "create-hash" "^1.1.0"
+    "create-hmac" "^1.1.0"
+    "diffie-hellman" "^5.0.0"
+    "inherits" "^2.0.1"
+    "pbkdf2" "^3.0.3"
+    "public-encrypt" "^4.0.0"
+    "randombytes" "^2.0.0"
+    "randomfill" "^1.0.3"
+
+"css-color-names@^0.0.4", "css-color-names@0.0.4":
+  "integrity" "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
+  "resolved" "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz"
+  "version" "0.0.4"
+
+"css-declaration-sorter@^4.0.1":
+  "integrity" "sha1-wZiUD2OnbX42wecQGLABchBUyyI="
+  "resolved" "https://registry.nlark.com/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz?cache=0&sync_timestamp=1620754845858&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-declaration-sorter%2Fdownload%2Fcss-declaration-sorter-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "postcss" "^7.0.1"
+    "timsort" "^0.3.0"
+
+"css-loader@*", "css-loader@^3.5.3":
+  "integrity" "sha1-Lkssfm4tJ/jI8o9hv/zS5ske9kU="
+  "resolved" "https://registry.nlark.com/css-loader/download/css-loader-3.6.0.tgz"
+  "version" "3.6.0"
+  dependencies:
+    "camelcase" "^5.3.1"
+    "cssesc" "^3.0.0"
+    "icss-utils" "^4.1.1"
+    "loader-utils" "^1.2.3"
+    "normalize-path" "^3.0.0"
+    "postcss" "^7.0.32"
+    "postcss-modules-extract-imports" "^2.0.0"
+    "postcss-modules-local-by-default" "^3.0.2"
+    "postcss-modules-scope" "^2.2.0"
+    "postcss-modules-values" "^3.0.0"
+    "postcss-value-parser" "^4.1.0"
+    "schema-utils" "^2.7.0"
+    "semver" "^6.3.0"
+
+"css-parse@~2.0.0":
+  "integrity" "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q="
+  "resolved" "https://registry.npm.taobao.org/css-parse/download/css-parse-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "css" "^2.0.0"
+
+"css-select-base-adapter@^0.1.1":
+  "integrity" "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc="
+  "resolved" "https://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz"
+  "version" "0.1.1"
+
+"css-select@^2.0.0":
+  "integrity" "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8="
+  "resolved" "https://registry.nlark.com/css-select/download/css-select-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "boolbase" "^1.0.0"
+    "css-what" "^3.2.1"
+    "domutils" "^1.7.0"
+    "nth-check" "^1.0.2"
+
+"css-select@^4.1.3":
+  "integrity" "sha1-pwRA9wMX8maRGK10/xBeZYSccGc="
+  "resolved" "https://registry.nlark.com/css-select/download/css-select-4.1.3.tgz"
+  "version" "4.1.3"
+  dependencies:
+    "boolbase" "^1.0.0"
+    "css-what" "^5.0.0"
+    "domhandler" "^4.2.0"
+    "domutils" "^2.6.0"
+    "nth-check" "^2.0.0"
+
+"css-tree@^1.1.2":
+  "integrity" "sha1-60hw+2/XcHMn7JXC/yqwm16NuR0="
+  "resolved" "https://registry.nlark.com/css-tree/download/css-tree-1.1.3.tgz"
+  "version" "1.1.3"
+  dependencies:
+    "mdn-data" "2.0.14"
+    "source-map" "^0.6.1"
+
+"css-tree@1.0.0-alpha.37":
+  "integrity" "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI="
+  "resolved" "https://registry.nlark.com/css-tree/download/css-tree-1.0.0-alpha.37.tgz"
+  "version" "1.0.0-alpha.37"
+  dependencies:
+    "mdn-data" "2.0.4"
+    "source-map" "^0.6.1"
+
+"css-what@^3.2.1":
+  "integrity" "sha1-6nAm/LAXd+295SEk4h8yfnrpUOQ="
+  "resolved" "https://registry.nlark.com/css-what/download/css-what-3.4.2.tgz?cache=0&sync_timestamp=1622227630859&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-what%2Fdownload%2Fcss-what-3.4.2.tgz"
+  "version" "3.4.2"
+
+"css-what@^5.0.0":
+  "integrity" "sha1-PvqCATH0ZpqKwkCPnDLnx96fTK0="
+  "resolved" "https://registry.nlark.com/css-what/download/css-what-5.0.1.tgz?cache=0&sync_timestamp=1622227630859&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-what%2Fdownload%2Fcss-what-5.0.1.tgz"
+  "version" "5.0.1"
+
+"css@^2.0.0":
+  "integrity" "sha1-xkZ1XHOXHyu6amAeLPL9cbEpiSk="
+  "resolved" "https://registry.npm.taobao.org/css/download/css-2.2.4.tgz"
+  "version" "2.2.4"
+  dependencies:
+    "inherits" "^2.0.3"
+    "source-map" "^0.6.1"
+    "source-map-resolve" "^0.5.2"
+    "urix" "^0.1.0"
+
+"cssesc@^3.0.0":
+  "integrity" "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4="
+  "resolved" "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz"
+  "version" "3.0.0"
+
+"cssnano-preset-default@^4.0.0", "cssnano-preset-default@^4.0.8":
+  "integrity" "sha1-kgYisfwelaNOiDggPxOXpQTy0/8="
+  "resolved" "https://registry.nlark.com/cssnano-preset-default/download/cssnano-preset-default-4.0.8.tgz?cache=0&sync_timestamp=1623330257156&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssnano-preset-default%2Fdownload%2Fcssnano-preset-default-4.0.8.tgz"
+  "version" "4.0.8"
+  dependencies:
+    "css-declaration-sorter" "^4.0.1"
+    "cssnano-util-raw-cache" "^4.0.1"
+    "postcss" "^7.0.0"
+    "postcss-calc" "^7.0.1"
+    "postcss-colormin" "^4.0.3"
+    "postcss-convert-values" "^4.0.1"
+    "postcss-discard-comments" "^4.0.2"
+    "postcss-discard-duplicates" "^4.0.2"
+    "postcss-discard-empty" "^4.0.1"
+    "postcss-discard-overridden" "^4.0.1"
+    "postcss-merge-longhand" "^4.0.11"
+    "postcss-merge-rules" "^4.0.3"
+    "postcss-minify-font-values" "^4.0.2"
+    "postcss-minify-gradients" "^4.0.2"
+    "postcss-minify-params" "^4.0.2"
+    "postcss-minify-selectors" "^4.0.2"
+    "postcss-normalize-charset" "^4.0.1"
+    "postcss-normalize-display-values" "^4.0.2"
+    "postcss-normalize-positions" "^4.0.2"
+    "postcss-normalize-repeat-style" "^4.0.2"
+    "postcss-normalize-string" "^4.0.2"
+    "postcss-normalize-timing-functions" "^4.0.2"
+    "postcss-normalize-unicode" "^4.0.1"
+    "postcss-normalize-url" "^4.0.1"
+    "postcss-normalize-whitespace" "^4.0.2"
+    "postcss-ordered-values" "^4.1.2"
+    "postcss-reduce-initial" "^4.0.3"
+    "postcss-reduce-transforms" "^4.0.2"
+    "postcss-svgo" "^4.0.3"
+    "postcss-unique-selectors" "^4.0.1"
+
+"cssnano-util-get-arguments@^4.0.0":
+  "integrity" "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8="
+  "resolved" "https://registry.nlark.com/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz"
+  "version" "4.0.0"
+
+"cssnano-util-get-match@^4.0.0":
+  "integrity" "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0="
+  "resolved" "https://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz"
+  "version" "4.0.0"
+
+"cssnano-util-raw-cache@^4.0.1":
+  "integrity" "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI="
+  "resolved" "https://registry.npm.taobao.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "postcss" "^7.0.0"
+
+"cssnano-util-same-parent@^4.0.0":
+  "integrity" "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M="
+  "resolved" "https://registry.npm.taobao.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz"
+  "version" "4.0.1"
+
+"cssnano@^4.0.0", "cssnano@^4.1.10":
+  "integrity" "sha1-x7X1uB2iacsf2YLLlgwSAJEMmpk="
+  "resolved" "https://registry.nlark.com/cssnano/download/cssnano-4.1.11.tgz?cache=0&sync_timestamp=1623330418944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssnano%2Fdownload%2Fcssnano-4.1.11.tgz"
+  "version" "4.1.11"
+  dependencies:
+    "cosmiconfig" "^5.0.0"
+    "cssnano-preset-default" "^4.0.8"
+    "is-resolvable" "^1.0.0"
+    "postcss" "^7.0.0"
+
+"csso@^4.0.2":
+  "integrity" "sha1-6jpWE0bo3J9UbW/r7dUBh884lSk="
+  "resolved" "https://registry.nlark.com/csso/download/csso-4.2.0.tgz"
+  "version" "4.2.0"
+  dependencies:
+    "css-tree" "^1.1.2"
+
+"cssom@^0.4.1":
+  "integrity" "sha1-WmbPk9LQtmHYC/akT7ZfXC5OChA="
+  "resolved" "https://registry.nlark.com/cssom/download/cssom-0.4.4.tgz?cache=0&sync_timestamp=1624219249710&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssom%2Fdownload%2Fcssom-0.4.4.tgz"
+  "version" "0.4.4"
+
+"cssom@~0.3.6":
+  "integrity" "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o="
+  "resolved" "https://registry.nlark.com/cssom/download/cssom-0.3.8.tgz?cache=0&sync_timestamp=1624219249710&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssom%2Fdownload%2Fcssom-0.3.8.tgz"
+  "version" "0.3.8"
+
+"cssstyle@^2.0.0":
+  "integrity" "sha1-/2ZaDdvcMYZLCWR/NBY0Q9kLCFI="
+  "resolved" "https://registry.nlark.com/cssstyle/download/cssstyle-2.3.0.tgz"
+  "version" "2.3.0"
+  dependencies:
+    "cssom" "~0.3.6"
+
+"csstype@^2.6.8":
+  "integrity" "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA=="
+  "resolved" "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz"
+  "version" "2.6.20"
+
+"cyclist@^1.0.1":
+  "integrity" "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
+  "resolved" "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz"
+  "version" "1.0.1"
+
+"dashdash@^1.12.0":
+  "integrity" "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA="
+  "resolved" "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz"
+  "version" "1.14.1"
+  dependencies:
+    "assert-plus" "^1.0.0"
+
+"data-uri-to-buffer@3":
+  "integrity" "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og=="
+  "resolved" "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz"
+  "version" "3.0.1"
+
+"data-urls@^1.1.0":
+  "integrity" "sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4="
+  "resolved" "https://registry.npm.taobao.org/data-urls/download/data-urls-1.1.0.tgz"
+  "version" "1.1.0"
+  dependencies:
+    "abab" "^2.0.0"
+    "whatwg-mimetype" "^2.2.0"
+    "whatwg-url" "^7.0.0"
+
+"dateformat@^2.0.0":
+  "integrity" "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw=="
+  "resolved" "https://registry.npmmirror.com/dateformat/-/dateformat-2.2.0.tgz"
+  "version" "2.2.0"
+
+"dayjs@^1.11.3":
+  "integrity" "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA=="
+  "resolved" "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz"
+  "version" "1.11.5"
+
+"debug@^2.2.0":
+  "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
+  "resolved" "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz"
+  "version" "2.6.9"
+  dependencies:
+    "ms" "2.0.0"
+
+"debug@^2.3.3":
+  "integrity" "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8="
+  "resolved" "https://registry.nlark.com/debug/download/debug-2.6.9.tgz"
+  "version" "2.6.9"
+  dependencies:
+    "ms" "2.0.0"
+
+"debug@^2.6.9":
+  "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
+  "resolved" "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz"
+  "version" "2.6.9"
+  dependencies:
+    "ms" "2.0.0"
+
+"debug@^3.1.1":
+  "integrity" "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o="
+  "resolved" "https://registry.nlark.com/debug/download/debug-3.2.7.tgz"
+  "version" "3.2.7"
+  dependencies:
+    "ms" "^2.1.1"
+
+"debug@^3.2.6":
+  "integrity" "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o="
+  "resolved" "https://registry.nlark.com/debug/download/debug-3.2.7.tgz"
+  "version" "3.2.7"
+  dependencies:
+    "ms" "^2.1.1"
+
+"debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1", "debug@4":
+  "integrity" "sha1-8KScGKyHeeMdSgxgKd+3aHPHQos="
+  "resolved" "https://registry.nlark.com/debug/download/debug-4.3.2.tgz"
+  "version" "4.3.2"
+  dependencies:
+    "ms" "2.1.2"
+
+"debug@~3.1.0":
+  "integrity" "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE="
+  "resolved" "https://registry.nlark.com/debug/download/debug-3.1.0.tgz"
+  "version" "3.1.0"
+  dependencies:
+    "ms" "2.0.0"
+
+"debug@2.6.9":
+  "integrity" "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8="
+  "resolved" "https://registry.nlark.com/debug/download/debug-2.6.9.tgz"
+  "version" "2.6.9"
+  dependencies:
+    "ms" "2.0.0"
+
+"debug@3.2.6":
+  "integrity" "sha1-6D0X3hbYp++3cX7b5fsQE17uYps="
+  "resolved" "https://registry.nlark.com/debug/download/debug-3.2.6.tgz"
+  "version" "3.2.6"
+  dependencies:
+    "ms" "^2.1.1"
+
+"decamelize@^1.2.0":
+  "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+  "resolved" "https://registry.nlark.com/decamelize/download/decamelize-1.2.0.tgz"
+  "version" "1.2.0"
+
+"decode-uri-component@^0.2.0":
+  "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+  "resolved" "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz"
+  "version" "0.2.0"
+
+"deep-eql@^3.0.1":
+  "integrity" "sha1-38lARACtHI/gI+faHfHBR8S0RN8="
+  "resolved" "https://registry.npm.taobao.org/deep-eql/download/deep-eql-3.0.1.tgz"
+  "version" "3.0.1"
+  dependencies:
+    "type-detect" "^4.0.0"
+
+"deep-equal@^1.0.1":
+  "integrity" "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o="
+  "resolved" "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz?cache=0&sync_timestamp=1606860101281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz"
+  "version" "1.1.1"
+  dependencies:
+    "is-arguments" "^1.0.4"
+    "is-date-object" "^1.0.1"
+    "is-regex" "^1.0.4"
+    "object-is" "^1.0.1"
+    "object-keys" "^1.1.1"
+    "regexp.prototype.flags" "^1.2.0"
+
+"deep-is@~0.1.3":
+  "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
+  "resolved" "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz"
+  "version" "0.1.3"
+
+"deepmerge@^1.5.2":
+  "integrity" "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
+  "resolved" "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1606805746825&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz"
+  "version" "1.5.2"
+
+"default-gateway@^4.2.0":
+  "integrity" "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs="
+  "resolved" "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz?cache=0&sync_timestamp=1610365816953&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-4.2.0.tgz"
+  "version" "4.2.0"
+  dependencies:
+    "execa" "^1.0.0"
+    "ip-regex" "^2.1.0"
+
+"default-gateway@^5.0.5":
+  "integrity" "sha1-T9a9XShV05s0zFpZUFSG6ar8mxA="
+  "resolved" "https://registry.npm.taobao.org/default-gateway/download/default-gateway-5.0.5.tgz?cache=0&sync_timestamp=1610365816953&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-5.0.5.tgz"
+  "version" "5.0.5"
+  dependencies:
+    "execa" "^3.3.0"
+
+"default-user-agent@^1.0.0":
+  "integrity" "sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw=="
+  "resolved" "https://registry.npmmirror.com/default-user-agent/-/default-user-agent-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "os-name" "~1.0.3"
+
+"defaults@^1.0.3":
+  "integrity" "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730="
+  "resolved" "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz"
+  "version" "1.0.3"
+  dependencies:
+    "clone" "^1.0.2"
+
+"define-properties@^1.1.2", "define-properties@^1.1.3":
+  "integrity" "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE="
+  "resolved" "https://registry.nlark.com/define-properties/download/define-properties-1.1.3.tgz"
+  "version" "1.1.3"
+  dependencies:
+    "object-keys" "^1.0.12"
+
+"define-property@^0.2.5":
+  "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY="
+  "resolved" "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz"
+  "version" "0.2.5"
+  dependencies:
+    "is-descriptor" "^0.1.0"
+
+"define-property@^1.0.0":
+  "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY="
+  "resolved" "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "is-descriptor" "^1.0.0"
+
+"define-property@^2.0.2":
+  "integrity" "sha1-1Flono1lS6d+AqgX+HENcCyxbp0="
+  "resolved" "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz"
+  "version" "2.0.2"
+  dependencies:
+    "is-descriptor" "^1.0.2"
+    "isobject" "^3.0.1"
+
+"degenerator@^3.0.2":
+  "integrity" "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ=="
+  "resolved" "https://registry.npmmirror.com/degenerator/-/degenerator-3.0.2.tgz"
+  "version" "3.0.2"
+  dependencies:
+    "ast-types" "^0.13.2"
+    "escodegen" "^1.8.1"
+    "esprima" "^4.0.0"
+    "vm2" "^3.9.8"
+
+"del@^4.1.1":
+  "integrity" "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ="
+  "resolved" "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz"
+  "version" "4.1.1"
+  dependencies:
+    "@types/glob" "^7.1.1"
+    "globby" "^6.1.0"
+    "is-path-cwd" "^2.0.0"
+    "is-path-in-cwd" "^2.0.0"
+    "p-map" "^2.0.0"
+    "pify" "^4.0.1"
+    "rimraf" "^2.6.3"
+
+"delayed-stream@~1.0.0":
+  "integrity" "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+  "resolved" "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz"
+  "version" "1.0.0"
+
+"depd@~1.1.2":
+  "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+  "resolved" "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz"
+  "version" "1.1.2"
+
+"des.js@^1.0.0":
+  "integrity" "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM="
+  "resolved" "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "inherits" "^2.0.1"
+    "minimalistic-assert" "^1.0.0"
+
+"destroy@^1.0.4", "destroy@~1.0.4":
+  "integrity" "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+  "resolved" "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz"
+  "version" "1.0.4"
+
+"detect-node@^2.0.4":
+  "integrity" "sha1-yccHdaScPQO8LAbZpzvlUPl4+LE="
+  "resolved" "https://registry.nlark.com/detect-node/download/detect-node-2.1.0.tgz?cache=0&sync_timestamp=1621146954463&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdetect-node%2Fdownload%2Fdetect-node-2.1.0.tgz"
+  "version" "2.1.0"
+
+"diff@3.5.0":
+  "integrity" "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI="
+  "resolved" "https://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-3.5.0.tgz"
+  "version" "3.5.0"
+
+"diffie-hellman@^5.0.0":
+  "integrity" "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU="
+  "resolved" "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz"
+  "version" "5.0.3"
+  dependencies:
+    "bn.js" "^4.1.0"
+    "miller-rabin" "^4.0.0"
+    "randombytes" "^2.0.0"
+
+"digest-header@^1.0.0":
+  "integrity" "sha512-sRTuakZ2PkOUCuAaVv+SLjhr/hRf8ldZP0XnGEQ69RFGxmll5fVaMsnRXWKKK4XsUTnJf8+eRPSFNgE/lWa9wQ=="
+  "resolved" "https://registry.npmmirror.com/digest-header/-/digest-header-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "utility" "^1.17.0"
+
+"dir-glob@^2.0.0", "dir-glob@^2.2.2":
+  "integrity" "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ="
+  "resolved" "https://registry.nlark.com/dir-glob/download/dir-glob-2.2.2.tgz"
+  "version" "2.2.2"
+  dependencies:
+    "path-type" "^3.0.0"
+
+"dir-glob@^3.0.1":
+  "integrity" "sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8="
+  "resolved" "https://registry.nlark.com/dir-glob/download/dir-glob-3.0.1.tgz"
+  "version" "3.0.1"
+  dependencies:
+    "path-type" "^4.0.0"
+
+"dns-equal@^1.0.0":
+  "integrity" "sha1-s55/HabrCnW6nBcySzR1PEfgZU0="
+  "resolved" "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz"
+  "version" "1.0.0"
+
+"dns-packet@^1.3.1":
+  "integrity" "sha1-40VQZYJKJQe6iGxVqJljuxB97G8="
+  "resolved" "https://registry.nlark.com/dns-packet/download/dns-packet-1.3.4.tgz"
+  "version" "1.3.4"
+  dependencies:
+    "ip" "^1.1.0"
+    "safe-buffer" "^5.0.1"
+
+"dns-txt@^2.0.2":
+  "integrity" "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY="
+  "resolved" "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz"
+  "version" "2.0.2"
+  dependencies:
+    "buffer-indexof" "^1.0.0"
+
+"doctrine@^3.0.0":
+  "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="
+  "resolved" "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "esutils" "^2.0.2"
+
+"dom-converter@^0.2.0":
+  "integrity" "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g="
+  "resolved" "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz"
+  "version" "0.2.0"
+  dependencies:
+    "utila" "~0.4"
+
+"dom-serializer@^1.0.1":
+  "integrity" "sha1-YgZDfTLO767HFhgDIwx6ILwbTZE="
+  "resolved" "https://registry.nlark.com/dom-serializer/download/dom-serializer-1.3.2.tgz?cache=0&sync_timestamp=1621256819522&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-1.3.2.tgz"
+  "version" "1.3.2"
+  dependencies:
+    "domelementtype" "^2.0.1"
+    "domhandler" "^4.2.0"
+    "entities" "^2.0.0"
+
+"dom-serializer@0":
+  "integrity" "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E="
+  "resolved" "https://registry.nlark.com/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1621256819522&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz"
+  "version" "0.2.2"
+  dependencies:
+    "domelementtype" "^2.0.1"
+    "entities" "^2.0.0"
+
+"domain-browser@^1.1.1":
+  "integrity" "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto="
+  "resolved" "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz"
+  "version" "1.2.0"
+
+"domelementtype@^2.0.1", "domelementtype@^2.2.0":
+  "integrity" "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc="
+  "resolved" "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz"
+  "version" "2.2.0"
+
+"domelementtype@1":
+  "integrity" "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8="
+  "resolved" "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz"
+  "version" "1.3.1"
+
+"domexception@^1.0.1":
+  "integrity" "sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA="
+  "resolved" "https://registry.nlark.com/domexception/download/domexception-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "webidl-conversions" "^4.0.2"
+
+"domhandler@^4.0.0", "domhandler@^4.2.0":
+  "integrity" "sha1-+XaKXwNL5gqJonwuTQ9066DYsFk="
+  "resolved" "https://registry.nlark.com/domhandler/download/domhandler-4.2.0.tgz"
+  "version" "4.2.0"
+  dependencies:
+    "domelementtype" "^2.2.0"
+
+"domutils@^1.7.0":
+  "integrity" "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo="
+  "resolved" "https://registry.nlark.com/domutils/download/domutils-1.7.0.tgz"
+  "version" "1.7.0"
+  dependencies:
+    "dom-serializer" "0"
+    "domelementtype" "1"
+
+"domutils@^2.5.2", "domutils@^2.6.0":
+  "integrity" "sha1-jrrwxB66/PVbC3LsMcVjI3EsVEI="
+  "resolved" "https://registry.nlark.com/domutils/download/domutils-2.7.0.tgz"
+  "version" "2.7.0"
+  dependencies:
+    "dom-serializer" "^1.0.1"
+    "domelementtype" "^2.2.0"
+    "domhandler" "^4.2.0"
+
+"dot-prop@^5.2.0":
+  "integrity" "sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog="
+  "resolved" "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz?cache=0&sync_timestamp=1605778235569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.3.0.tgz"
+  "version" "5.3.0"
+  dependencies:
+    "is-obj" "^2.0.0"
+
+"dotenv-expand@^5.1.0":
+  "integrity" "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA="
+  "resolved" "https://registry.npm.taobao.org/dotenv-expand/download/dotenv-expand-5.1.0.tgz"
+  "version" "5.1.0"
+
+"dotenv@^8.2.0":
+  "integrity" "sha1-Bhr2ZNGff02PxuT/m1hM4jety4s="
+  "resolved" "https://registry.nlark.com/dotenv/download/dotenv-8.6.0.tgz"
+  "version" "8.6.0"
+
+"duplexer@^0.1.1":
+  "integrity" "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY="
+  "resolved" "https://registry.nlark.com/duplexer/download/duplexer-0.1.2.tgz"
+  "version" "0.1.2"
+
+"duplexify@^3.4.2", "duplexify@^3.6.0":
+  "integrity" "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk="
+  "resolved" "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz"
+  "version" "3.7.1"
+  dependencies:
+    "end-of-stream" "^1.0.0"
+    "inherits" "^2.0.1"
+    "readable-stream" "^2.0.0"
+    "stream-shift" "^1.0.0"
+
+"easy-stack@1.0.1":
+  "integrity" "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w=="
+  "resolved" "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz"
+  "version" "1.0.1"
+
+"ecc-jsbn@~0.1.1":
+  "integrity" "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk="
+  "resolved" "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz"
+  "version" "0.1.2"
+  dependencies:
+    "jsbn" "~0.1.0"
+    "safer-buffer" "^2.1.0"
+
+"echarts@^5.0.2":
+  "integrity" "sha1-FybRelfPBdYs0FZ7QyXhIBpWuvY="
+  "resolved" "https://registry.nlark.com/echarts/download/echarts-5.0.2.tgz"
+  "version" "5.0.2"
+  dependencies:
+    "tslib" "2.0.3"
+    "zrender" "5.0.4"
+
+"ee-first@~1.1.1", "ee-first@1.1.1":
+  "integrity" "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+  "resolved" "https://registry.nlark.com/ee-first/download/ee-first-1.1.1.tgz"
+  "version" "1.1.1"
+
+"ejs@^2.6.1":
+  "integrity" "sha1-SGYSh1c9zFPjZsehrlLDoSDuybo="
+  "resolved" "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz?cache=0&sync_timestamp=1612644037163&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fejs%2Fdownload%2Fejs-2.7.4.tgz"
+  "version" "2.7.4"
+
+"electron-to-chromium@^1.3.723":
+  "integrity" "sha1-BGUX0fLOp1Pgb/9UmZW53EXiAII="
+  "resolved" "https://registry.nlark.com/electron-to-chromium/download/electron-to-chromium-1.3.775.tgz"
+  "version" "1.3.775"
+
+"element-plus@^2.2.14":
+  "integrity" "sha512-V5Pis0OHhePg1RgVogZrcefaVl8vjVn4Pn9Qsh/t2CbFgjg9kKOYFqf/tuP3ObSXGm3X89hpe0W+nLVAsaFnpw=="
+  "resolved" "https://registry.npmmirror.com/element-plus/-/element-plus-2.2.14.tgz"
+  "version" "2.2.14"
+  dependencies:
+    "@ctrl/tinycolor" "^3.4.1"
+    "@element-plus/icons-vue" "^2.0.6"
+    "@floating-ui/dom" "^0.5.4"
+    "@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.7"
+    "@types/lodash" "^4.14.182"
+    "@types/lodash-es" "^4.17.6"
+    "@vueuse/core" "^9.1.0"
+    "async-validator" "^4.2.5"
+    "dayjs" "^1.11.3"
+    "escape-html" "^1.0.3"
+    "lodash" "^4.17.21"
+    "lodash-es" "^4.17.21"
+    "lodash-unified" "^1.0.2"
+    "memoize-one" "^6.0.0"
+    "normalize-wheel-es" "^1.2.0"
+
+"elliptic@^6.5.3":
+  "integrity" "sha1-2jfOvTHnmhNn6UG1ku0fvr1Yq7s="
+  "resolved" "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.4.tgz?cache=0&sync_timestamp=1612290836352&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.4.tgz"
+  "version" "6.5.4"
+  dependencies:
+    "bn.js" "^4.11.9"
+    "brorand" "^1.1.0"
+    "hash.js" "^1.0.0"
+    "hmac-drbg" "^1.0.1"
+    "inherits" "^2.0.4"
+    "minimalistic-assert" "^1.0.1"
+    "minimalistic-crypto-utils" "^1.0.1"
+
+"emoji-regex@^7.0.1":
+  "integrity" "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY="
+  "resolved" "https://registry.nlark.com/emoji-regex/download/emoji-regex-7.0.3.tgz"
+  "version" "7.0.3"
+
+"emoji-regex@^8.0.0":
+  "integrity" "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc="
+  "resolved" "https://registry.nlark.com/emoji-regex/download/emoji-regex-8.0.0.tgz"
+  "version" "8.0.0"
+
+"emojis-list@^2.0.0":
+  "integrity" "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+  "resolved" "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz"
+  "version" "2.1.0"
+
+"emojis-list@^3.0.0":
+  "integrity" "sha1-VXBmIEatKeLpFucariYKvf9Pang="
+  "resolved" "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz"
+  "version" "3.0.0"
+
+"encodeurl@~1.0.2":
+  "integrity" "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+  "resolved" "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz"
+  "version" "1.0.2"
+
+"end-of-stream@^1.0.0", "end-of-stream@^1.1.0":
+  "integrity" "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA="
+  "resolved" "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz"
+  "version" "1.4.4"
+  dependencies:
+    "once" "^1.4.0"
+
+"end-or-error@^1.0.1":
+  "integrity" "sha512-OclLMSug+k2A0JKuf494im25ANRBVW8qsjmwbgX7lQ8P82H21PQ1PWkoYwb9y5yMBS69BPlwtzdIFClo3+7kOQ=="
+  "resolved" "https://registry.npmmirror.com/end-or-error/-/end-or-error-1.0.1.tgz"
+  "version" "1.0.1"
+
+"enhanced-resolve@^4.5.0":
+  "integrity" "sha1-Lzz9hNvjtIfxjy2y7x4GSlccpew="
+  "resolved" "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-4.5.0.tgz?cache=0&sync_timestamp=1620663831689&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.5.0.tgz"
+  "version" "4.5.0"
+  dependencies:
+    "graceful-fs" "^4.1.2"
+    "memory-fs" "^0.5.0"
+    "tapable" "^1.0.0"
+
+"entities@^2.0.0":
+  "integrity" "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU="
+  "resolved" "https://registry.npm.taobao.org/entities/download/entities-2.2.0.tgz?cache=0&sync_timestamp=1611535322406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-2.2.0.tgz"
+  "version" "2.2.0"
+
+"errno@^0.1.1", "errno@^0.1.3", "errno@~0.1.7":
+  "integrity" "sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8="
+  "resolved" "https://registry.npm.taobao.org/errno/download/errno-0.1.8.tgz"
+  "version" "0.1.8"
+  dependencies:
+    "prr" "~1.0.1"
+
+"error-ex@^1.3.1":
+  "integrity" "sha1-tKxAZIEH/c3PriQvQovqihTU8b8="
+  "resolved" "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz"
+  "version" "1.3.2"
+  dependencies:
+    "is-arrayish" "^0.2.1"
+
+"error-stack-parser@^2.0.2":
+  "integrity" "sha1-WpmnB716TFinl5AtSNgoA+3mqtg="
+  "resolved" "https://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.6.tgz"
+  "version" "2.0.6"
+  dependencies:
+    "stackframe" "^1.1.1"
+
+"es-abstract@^1.18.0-next.2", "es-abstract@^1.18.2":
+  "integrity" "sha1-JcTDOAonqiA8RLK2hbupTaMbY+A="
+  "resolved" "https://registry.nlark.com/es-abstract/download/es-abstract-1.18.3.tgz?cache=0&sync_timestamp=1622158101826&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fes-abstract%2Fdownload%2Fes-abstract-1.18.3.tgz"
+  "version" "1.18.3"
+  dependencies:
+    "call-bind" "^1.0.2"
+    "es-to-primitive" "^1.2.1"
+    "function-bind" "^1.1.1"
+    "get-intrinsic" "^1.1.1"
+    "has" "^1.0.3"
+    "has-symbols" "^1.0.2"
+    "is-callable" "^1.2.3"
+    "is-negative-zero" "^2.0.1"
+    "is-regex" "^1.1.3"
+    "is-string" "^1.0.6"
+    "object-inspect" "^1.10.3"
+    "object-keys" "^1.1.1"
+    "object.assign" "^4.1.2"
+    "string.prototype.trimend" "^1.0.4"
+    "string.prototype.trimstart" "^1.0.4"
+    "unbox-primitive" "^1.0.1"
+
+"es-to-primitive@^1.2.1":
+  "integrity" "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo="
+  "resolved" "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz"
+  "version" "1.2.1"
+  dependencies:
+    "is-callable" "^1.1.4"
+    "is-date-object" "^1.0.1"
+    "is-symbol" "^1.0.2"
+
+"escalade@^3.1.1":
+  "integrity" "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA="
+  "resolved" "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz"
+  "version" "3.1.1"
+
+"escape-html@^1.0.3", "escape-html@~1.0.3":
+  "integrity" "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+  "resolved" "https://registry.nlark.com/escape-html/download/escape-html-1.0.3.tgz"
+  "version" "1.0.3"
+
+"escape-string-regexp@^1.0.5", "escape-string-regexp@1.0.5":
+  "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+  "resolved" "https://registry.nlark.com/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz"
+  "version" "1.0.5"
+
+"escodegen@^1.11.1", "escodegen@^1.8.1":
+  "integrity" "sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM="
+  "resolved" "https://registry.nlark.com/escodegen/download/escodegen-1.14.3.tgz"
+  "version" "1.14.3"
+  dependencies:
+    "esprima" "^4.0.1"
+    "estraverse" "^4.2.0"
+    "esutils" "^2.0.2"
+    "optionator" "^0.8.1"
+  optionalDependencies:
+    "source-map" "~0.6.1"
+
+"eslint-loader@^2.2.1":
+  "integrity" "sha1-KLnBLaVAV68IReKmEScBova/gzc="
+  "resolved" "https://registry.npm.taobao.org/eslint-loader/download/eslint-loader-2.2.1.tgz"
+  "version" "2.2.1"
+  dependencies:
+    "loader-fs-cache" "^1.0.0"
+    "loader-utils" "^1.0.2"
+    "object-assign" "^4.0.1"
+    "object-hash" "^1.1.4"
+    "rimraf" "^2.6.1"
+
+"eslint-scope@^4.0.3":
+  "integrity" "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg="
+  "resolved" "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz"
+  "version" "4.0.3"
+  dependencies:
+    "esrecurse" "^4.1.0"
+    "estraverse" "^4.1.1"
+
+"eslint-scope@^5.0.0":
+  "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="
+  "resolved" "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz"
+  "version" "5.1.1"
+  dependencies:
+    "esrecurse" "^4.3.0"
+    "estraverse" "^4.1.1"
+
+"eslint-utils@^1.4.3":
+  "integrity" "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q=="
+  "resolved" "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-1.4.3.tgz"
+  "version" "1.4.3"
+  dependencies:
+    "eslint-visitor-keys" "^1.1.0"
+
+"eslint-visitor-keys@^1.0.0", "eslint-visitor-keys@^1.1.0":
+  "integrity" "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4="
+  "resolved" "https://registry.nlark.com/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz"
+  "version" "1.3.0"
+
+"eslint@>= 1.6.0 < 7.0.0", "eslint@>= 4.12.1", "eslint@>=1.6.0 <7.0.0":
+  "integrity" "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig=="
+  "resolved" "https://registry.npmmirror.com/eslint/-/eslint-6.8.0.tgz"
+  "version" "6.8.0"
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "ajv" "^6.10.0"
+    "chalk" "^2.1.0"
+    "cross-spawn" "^6.0.5"
+    "debug" "^4.0.1"
+    "doctrine" "^3.0.0"
+    "eslint-scope" "^5.0.0"
+    "eslint-utils" "^1.4.3"
+    "eslint-visitor-keys" "^1.1.0"
+    "espree" "^6.1.2"
+    "esquery" "^1.0.1"
+    "esutils" "^2.0.2"
+    "file-entry-cache" "^5.0.1"
+    "functional-red-black-tree" "^1.0.1"
+    "glob-parent" "^5.0.0"
+    "globals" "^12.1.0"
+    "ignore" "^4.0.6"
+    "import-fresh" "^3.0.0"
+    "imurmurhash" "^0.1.4"
+    "inquirer" "^7.0.0"
+    "is-glob" "^4.0.0"
+    "js-yaml" "^3.13.1"
+    "json-stable-stringify-without-jsonify" "^1.0.1"
+    "levn" "^0.3.0"
+    "lodash" "^4.17.14"
+    "minimatch" "^3.0.4"
+    "mkdirp" "^0.5.1"
+    "natural-compare" "^1.4.0"
+    "optionator" "^0.8.3"
+    "progress" "^2.0.0"
+    "regexpp" "^2.0.1"
+    "semver" "^6.1.2"
+    "strip-ansi" "^5.2.0"
+    "strip-json-comments" "^3.0.1"
+    "table" "^5.2.3"
+    "text-table" "^0.2.0"
+    "v8-compile-cache" "^2.0.3"
+
+"espree@^6.1.2":
+  "integrity" "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw=="
+  "resolved" "https://registry.npmmirror.com/espree/-/espree-6.2.1.tgz"
+  "version" "6.2.1"
+  dependencies:
+    "acorn" "^7.1.1"
+    "acorn-jsx" "^5.2.0"
+    "eslint-visitor-keys" "^1.1.0"
+
+"esprima@^4.0.0", "esprima@^4.0.1":
+  "integrity" "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE="
+  "resolved" "https://registry.nlark.com/esprima/download/esprima-4.0.1.tgz"
+  "version" "4.0.1"
+
+"esquery@^1.0.1":
+  "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w=="
+  "resolved" "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz"
+  "version" "1.4.0"
+  dependencies:
+    "estraverse" "^5.1.0"
+
+"esrecurse@^4.1.0", "esrecurse@^4.3.0":
+  "integrity" "sha1-eteWTWeauyi+5yzsY3WLHF0smSE="
+  "resolved" "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz"
+  "version" "4.3.0"
+  dependencies:
+    "estraverse" "^5.2.0"
+
+"estraverse@^4.1.1", "estraverse@^4.2.0":
+  "integrity" "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0="
+  "resolved" "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz"
+  "version" "4.3.0"
+
+"estraverse@^5.1.0":
+  "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
+  "resolved" "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz"
+  "version" "5.3.0"
+
+"estraverse@^5.2.0":
+  "integrity" "sha1-MH30JUfmzHMk088DwVXVzbjFOIA="
+  "resolved" "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz"
+  "version" "5.2.0"
+
+"estree-walker@^2.0.2":
+  "integrity" "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+  "resolved" "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz"
+  "version" "2.0.2"
+
+"esutils@^2.0.2":
+  "integrity" "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q="
+  "resolved" "https://registry.nlark.com/esutils/download/esutils-2.0.3.tgz"
+  "version" "2.0.3"
+
+"etag@~1.8.1":
+  "integrity" "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+  "resolved" "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz"
+  "version" "1.8.1"
+
+"event-pubsub@4.3.0":
+  "integrity" "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ=="
+  "resolved" "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz"
+  "version" "4.3.0"
+
+"event-target-shim@^5.0.0":
+  "integrity" "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
+  "resolved" "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz"
+  "version" "5.0.1"
+
+"eventemitter3@^4.0.0":
+  "integrity" "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8="
+  "resolved" "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz"
+  "version" "4.0.7"
+
+"events@^3.0.0":
+  "integrity" "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA="
+  "resolved" "https://registry.npm.taobao.org/events/download/events-3.3.0.tgz"
+  "version" "3.3.0"
+
+"eventsource@^1.0.7":
+  "integrity" "sha1-AOjKfJIQnpSw3fMtrGd9hBAoz68="
+  "resolved" "https://registry.npm.taobao.org/eventsource/download/eventsource-1.1.0.tgz?cache=0&sync_timestamp=1616041748498&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventsource%2Fdownload%2Feventsource-1.1.0.tgz"
+  "version" "1.1.0"
+  dependencies:
+    "original" "^1.0.0"
+
+"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3":
+  "integrity" "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI="
+  "resolved" "https://registry.nlark.com/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz"
+  "version" "1.0.3"
+  dependencies:
+    "md5.js" "^1.3.4"
+    "safe-buffer" "^5.1.1"
+
+"execa@^0.8.0":
+  "integrity" "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo="
+  "resolved" "https://registry.nlark.com/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1622825859616&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz"
+  "version" "0.8.0"
+  dependencies:
+    "cross-spawn" "^5.0.1"
+    "get-stream" "^3.0.0"
+    "is-stream" "^1.1.0"
+    "npm-run-path" "^2.0.0"
+    "p-finally" "^1.0.0"
+    "signal-exit" "^3.0.0"
+    "strip-eof" "^1.0.0"
+
+"execa@^1.0.0":
+  "integrity" "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg="
+  "resolved" "https://registry.nlark.com/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1622825859616&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "cross-spawn" "^6.0.0"
+    "get-stream" "^4.0.0"
+    "is-stream" "^1.1.0"
+    "npm-run-path" "^2.0.0"
+    "p-finally" "^1.0.0"
+    "signal-exit" "^3.0.0"
+    "strip-eof" "^1.0.0"
+
+"execa@^3.3.0":
+  "integrity" "sha1-wI7UVQ72XYWPrCaf/IVyRG8364k="
+  "resolved" "https://registry.nlark.com/execa/download/execa-3.4.0.tgz?cache=0&sync_timestamp=1622825859616&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fexeca%2Fdownload%2Fexeca-3.4.0.tgz"
+  "version" "3.4.0"
+  dependencies:
+    "cross-spawn" "^7.0.0"
+    "get-stream" "^5.0.0"
+    "human-signals" "^1.1.1"
+    "is-stream" "^2.0.0"
+    "merge-stream" "^2.0.0"
+    "npm-run-path" "^4.0.0"
+    "onetime" "^5.1.0"
+    "p-finally" "^2.0.0"
+    "signal-exit" "^3.0.2"
+    "strip-final-newline" "^2.0.0"
+
+"expand-brackets@^2.1.4":
+  "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI="
+  "resolved" "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz"
+  "version" "2.1.4"
+  dependencies:
+    "debug" "^2.3.3"
+    "define-property" "^0.2.5"
+    "extend-shallow" "^2.0.1"
+    "posix-character-classes" "^0.1.0"
+    "regex-not" "^1.0.0"
+    "snapdragon" "^0.8.1"
+    "to-regex" "^3.0.1"
+
+"express@^4.16.3", "express@^4.17.1":
+  "integrity" "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ="
+  "resolved" "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz"
+  "version" "4.17.1"
+  dependencies:
+    "accepts" "~1.3.7"
+    "array-flatten" "1.1.1"
+    "body-parser" "1.19.0"
+    "content-disposition" "0.5.3"
+    "content-type" "~1.0.4"
+    "cookie" "0.4.0"
+    "cookie-signature" "1.0.6"
+    "debug" "2.6.9"
+    "depd" "~1.1.2"
+    "encodeurl" "~1.0.2"
+    "escape-html" "~1.0.3"
+    "etag" "~1.8.1"
+    "finalhandler" "~1.1.2"
+    "fresh" "0.5.2"
+    "merge-descriptors" "1.0.1"
+    "methods" "~1.1.2"
+    "on-finished" "~2.3.0"
+    "parseurl" "~1.3.3"
+    "path-to-regexp" "0.1.7"
+    "proxy-addr" "~2.0.5"
+    "qs" "6.7.0"
+    "range-parser" "~1.2.1"
+    "safe-buffer" "5.1.2"
+    "send" "0.17.1"
+    "serve-static" "1.14.1"
+    "setprototypeof" "1.1.1"
+    "statuses" "~1.5.0"
+    "type-is" "~1.6.18"
+    "utils-merge" "1.0.1"
+    "vary" "~1.1.2"
+
+"extend-shallow@^2.0.1":
+  "integrity" "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8="
+  "resolved" "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz"
+  "version" "2.0.1"
+  dependencies:
+    "is-extendable" "^0.1.0"
+
+"extend-shallow@^3.0.0", "extend-shallow@^3.0.2":
+  "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg="
+  "resolved" "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz"
+  "version" "3.0.2"
+  dependencies:
+    "assign-symbols" "^1.0.0"
+    "is-extendable" "^1.0.1"
+
+"extend@~3.0.2":
+  "integrity" "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo="
+  "resolved" "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz"
+  "version" "3.0.2"
+
+"external-editor@^3.0.3":
+  "integrity" "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU="
+  "resolved" "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz"
+  "version" "3.1.0"
+  dependencies:
+    "chardet" "^0.7.0"
+    "iconv-lite" "^0.4.24"
+    "tmp" "^0.0.33"
+
+"extglob@^2.0.4":
+  "integrity" "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM="
+  "resolved" "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz"
+  "version" "2.0.4"
+  dependencies:
+    "array-unique" "^0.3.2"
+    "define-property" "^1.0.0"
+    "expand-brackets" "^2.1.4"
+    "extend-shallow" "^2.0.1"
+    "fragment-cache" "^0.2.1"
+    "regex-not" "^1.0.0"
+    "snapdragon" "^0.8.1"
+    "to-regex" "^3.0.1"
+
+"extsprintf@^1.2.0", "extsprintf@1.3.0":
+  "integrity" "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+  "resolved" "https://registry.nlark.com/extsprintf/download/extsprintf-1.3.0.tgz"
+  "version" "1.3.0"
+
+"fast-deep-equal@^3.1.1":
+  "integrity" "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU="
+  "resolved" "https://registry.nlark.com/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz"
+  "version" "3.1.3"
+
+"fast-glob@^2.2.6":
+  "integrity" "sha1-aVOFfDr6R1//ku5gFdUtpwpM050="
+  "resolved" "https://registry.nlark.com/fast-glob/download/fast-glob-2.2.7.tgz"
+  "version" "2.2.7"
+  dependencies:
+    "@mrmlnc/readdir-enhanced" "^2.2.1"
+    "@nodelib/fs.stat" "^1.1.2"
+    "glob-parent" "^3.1.0"
+    "is-glob" "^4.0.0"
+    "merge2" "^1.2.3"
+    "micromatch" "^3.1.10"
+
+"fast-glob@^3.0.3":
+  "integrity" "sha1-/Wy3otfpqnp4RhEehaGW1rL3ZqE="
+  "resolved" "https://registry.nlark.com/fast-glob/download/fast-glob-3.2.7.tgz"
+  "version" "3.2.7"
+  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.4"
+
+"fast-json-stable-stringify@^2.0.0":
+  "integrity" "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM="
+  "resolved" "https://registry.nlark.com/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&sync_timestamp=1618847186091&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz"
+  "version" "2.1.0"
+
+"fast-levenshtein@~2.0.6":
+  "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+  "resolved" "https://registry.nlark.com/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz"
+  "version" "2.0.6"
+
+"fastq@^1.6.0":
+  "integrity" "sha1-XYF1quF9thlH+LFiz8f2MmTSKAc="
+  "resolved" "https://registry.nlark.com/fastq/download/fastq-1.11.1.tgz"
+  "version" "1.11.1"
+  dependencies:
+    "reusify" "^1.0.4"
+
+"faye-websocket@^0.11.3":
+  "integrity" "sha1-fw2Sdc/dhqHJY9yLZfzEUe3Lsdo="
+  "resolved" "https://registry.nlark.com/faye-websocket/download/faye-websocket-0.11.4.tgz?cache=0&sync_timestamp=1621894499766&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffaye-websocket%2Fdownload%2Ffaye-websocket-0.11.4.tgz"
+  "version" "0.11.4"
+  dependencies:
+    "websocket-driver" ">=0.5.1"
+
+"fetch-cookie@^0.11.0":
+  "integrity" "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA=="
+  "resolved" "https://registry.npmmirror.com/fetch-cookie/-/fetch-cookie-0.11.0.tgz"
+  "version" "0.11.0"
+  dependencies:
+    "tough-cookie" "^2.3.3 || ^3.0.1 || ^4.0.0"
+
+"figgy-pudding@^3.5.1":
+  "integrity" "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4="
+  "resolved" "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz"
+  "version" "3.5.2"
+
+"figures@^3.0.0":
+  "integrity" "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8="
+  "resolved" "https://registry.nlark.com/figures/download/figures-3.2.0.tgz"
+  "version" "3.2.0"
+  dependencies:
+    "escape-string-regexp" "^1.0.5"
+
+"file-entry-cache@^5.0.1":
+  "integrity" "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g=="
+  "resolved" "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz"
+  "version" "5.0.1"
+  dependencies:
+    "flat-cache" "^2.0.1"
+
+"file-loader@*", "file-loader@^4.2.0":
+  "integrity" "sha1-eA8ED3KbPRgBnyBgX3I+hEuKWK8="
+  "resolved" "https://registry.npm.taobao.org/file-loader/download/file-loader-4.3.0.tgz"
+  "version" "4.3.0"
+  dependencies:
+    "loader-utils" "^1.2.3"
+    "schema-utils" "^2.5.0"
+
+"file-uri-to-path@2":
+  "integrity" "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg=="
+  "resolved" "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz"
+  "version" "2.0.0"
+
+"filesize@^3.6.1":
+  "integrity" "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc="
+  "resolved" "https://registry.nlark.com/filesize/download/filesize-3.6.1.tgz?cache=0&sync_timestamp=1626007234928&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffilesize%2Fdownload%2Ffilesize-3.6.1.tgz"
+  "version" "3.6.1"
+
+"fill-range@^4.0.0":
+  "integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc="
+  "resolved" "https://registry.nlark.com/fill-range/download/fill-range-4.0.0.tgz"
+  "version" "4.0.0"
+  dependencies:
+    "extend-shallow" "^2.0.1"
+    "is-number" "^3.0.0"
+    "repeat-string" "^1.6.1"
+    "to-regex-range" "^2.1.0"
+
+"fill-range@^7.0.1":
+  "integrity" "sha1-GRmmp8df44ssfHflGYU12prN2kA="
+  "resolved" "https://registry.nlark.com/fill-range/download/fill-range-7.0.1.tgz"
+  "version" "7.0.1"
+  dependencies:
+    "to-regex-range" "^5.0.1"
+
+"finalhandler@~1.1.2":
+  "integrity" "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0="
+  "resolved" "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz"
+  "version" "1.1.2"
+  dependencies:
+    "debug" "2.6.9"
+    "encodeurl" "~1.0.2"
+    "escape-html" "~1.0.3"
+    "on-finished" "~2.3.0"
+    "parseurl" "~1.3.3"
+    "statuses" "~1.5.0"
+    "unpipe" "~1.0.0"
+
+"find-cache-dir@^0.1.1":
+  "integrity" "sha1-yN765XyKUqinhPnjHFfHQumToLk="
+  "resolved" "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-0.1.1.tgz"
+  "version" "0.1.1"
+  dependencies:
+    "commondir" "^1.0.1"
+    "mkdirp" "^0.5.1"
+    "pkg-dir" "^1.0.0"
+
+"find-cache-dir@^2.1.0":
+  "integrity" "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc="
+  "resolved" "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "commondir" "^1.0.1"
+    "make-dir" "^2.0.0"
+    "pkg-dir" "^3.0.0"
+
+"find-cache-dir@^3.0.0", "find-cache-dir@^3.3.1":
+  "integrity" "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA="
+  "resolved" "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz"
+  "version" "3.3.1"
+  dependencies:
+    "commondir" "^1.0.1"
+    "make-dir" "^3.0.2"
+    "pkg-dir" "^4.1.0"
+
+"find-up@^1.0.0":
+  "integrity" "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8="
+  "resolved" "https://registry.nlark.com/find-up/download/find-up-1.1.2.tgz"
+  "version" "1.1.2"
+  dependencies:
+    "path-exists" "^2.0.0"
+    "pinkie-promise" "^2.0.0"
+
+"find-up@^3.0.0", "find-up@3.0.0":
+  "integrity" "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M="
+  "resolved" "https://registry.nlark.com/find-up/download/find-up-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "locate-path" "^3.0.0"
+
+"find-up@^4.0.0":
+  "integrity" "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk="
+  "resolved" "https://registry.nlark.com/find-up/download/find-up-4.1.0.tgz"
+  "version" "4.1.0"
+  dependencies:
+    "locate-path" "^5.0.0"
+    "path-exists" "^4.0.0"
+
+"flat-cache@^2.0.1":
+  "integrity" "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA=="
+  "resolved" "https://registry.npmmirror.com/flat-cache/-/flat-cache-2.0.1.tgz"
+  "version" "2.0.1"
+  dependencies:
+    "flatted" "^2.0.0"
+    "rimraf" "2.6.3"
+    "write" "1.0.3"
+
+"flat@^4.1.0":
+  "integrity" "sha1-o5IFnMOCiB/5hkL12k3eCpWfMJs="
+  "resolved" "https://registry.npm.taobao.org/flat/download/flat-4.1.1.tgz?cache=0&sync_timestamp=1602723427161&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflat%2Fdownload%2Fflat-4.1.1.tgz"
+  "version" "4.1.1"
+  dependencies:
+    "is-buffer" "~2.0.3"
+
+"flatted@^2.0.0":
+  "integrity" "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA=="
+  "resolved" "https://registry.npmmirror.com/flatted/-/flatted-2.0.2.tgz"
+  "version" "2.0.2"
+
+"flush-write-stream@^1.0.0":
+  "integrity" "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug="
+  "resolved" "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz"
+  "version" "1.1.1"
+  dependencies:
+    "inherits" "^2.0.3"
+    "readable-stream" "^2.3.6"
+
+"follow-redirects@^1.0.0", "follow-redirects@^1.10.0":
+  "integrity" "sha1-2RFN7Qoc/dM04WTmZirQK/2R/0M="
+  "resolved" "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.1.tgz?cache=0&sync_timestamp=1620555246888&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.14.1.tgz"
+  "version" "1.14.1"
+
+"for-in@^1.0.2":
+  "integrity" "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+  "resolved" "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz"
+  "version" "1.0.2"
+
+"forever-agent@~0.6.1":
+  "integrity" "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+  "resolved" "https://registry.nlark.com/forever-agent/download/forever-agent-0.6.1.tgz"
+  "version" "0.6.1"
+
+"form-data@~2.3.2":
+  "integrity" "sha1-3M5SwF9kTymManq5Nr1yTO/786Y="
+  "resolved" "https://registry.nlark.com/form-data/download/form-data-2.3.3.tgz"
+  "version" "2.3.3"
+  dependencies:
+    "asynckit" "^0.4.0"
+    "combined-stream" "^1.0.6"
+    "mime-types" "^2.1.12"
+
+"formstream@^1.1.0":
+  "integrity" "sha512-yHRxt3qLFnhsKAfhReM4w17jP+U1OlhUjnKPPtonwKbIJO7oBP0MvoxkRUwb8AU9n0MIkYy5X5dK6pQnbj+R2Q=="
+  "resolved" "https://registry.npmmirror.com/formstream/-/formstream-1.1.1.tgz"
+  "version" "1.1.1"
+  dependencies:
+    "destroy" "^1.0.4"
+    "mime" "^2.5.2"
+    "pause-stream" "~0.0.11"
+
+"forwarded@0.2.0":
+  "integrity" "sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE="
+  "resolved" "https://registry.nlark.com/forwarded/download/forwarded-0.2.0.tgz?cache=0&sync_timestamp=1622503508967&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fforwarded%2Fdownload%2Fforwarded-0.2.0.tgz"
+  "version" "0.2.0"
+
+"fragment-cache@^0.2.1":
+  "integrity" "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk="
+  "resolved" "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz"
+  "version" "0.2.1"
+  dependencies:
+    "map-cache" "^0.2.2"
+
+"fresh@0.5.2":
+  "integrity" "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+  "resolved" "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz"
+  "version" "0.5.2"
+
+"from2@^2.1.0":
+  "integrity" "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8="
+  "resolved" "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz"
+  "version" "2.3.0"
+  dependencies:
+    "inherits" "^2.0.1"
+    "readable-stream" "^2.0.0"
+
+"fs-extra@^7.0.1":
+  "integrity" "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk="
+  "resolved" "https://registry.nlark.com/fs-extra/download/fs-extra-7.0.1.tgz?cache=0&sync_timestamp=1620079845472&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffs-extra%2Fdownload%2Ffs-extra-7.0.1.tgz"
+  "version" "7.0.1"
+  dependencies:
+    "graceful-fs" "^4.1.2"
+    "jsonfile" "^4.0.0"
+    "universalify" "^0.1.0"
+
+"fs-extra@^8.1.0":
+  "integrity" "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="
+  "resolved" "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz"
+  "version" "8.1.0"
+  dependencies:
+    "graceful-fs" "^4.2.0"
+    "jsonfile" "^4.0.0"
+    "universalify" "^0.1.0"
+
+"fs-write-stream-atomic@^1.0.8":
+  "integrity" "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk="
+  "resolved" "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz"
+  "version" "1.0.10"
+  dependencies:
+    "graceful-fs" "^4.1.2"
+    "iferr" "^0.1.5"
+    "imurmurhash" "^0.1.4"
+    "readable-stream" "1 || 2"
+
+"fs.realpath@^1.0.0":
+  "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+  "resolved" "https://registry.nlark.com/fs.realpath/download/fs.realpath-1.0.0.tgz"
+  "version" "1.0.0"
+
+"ftp@^0.3.10":
+  "integrity" "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ=="
+  "resolved" "https://registry.npmmirror.com/ftp/-/ftp-0.3.10.tgz"
+  "version" "0.3.10"
+  dependencies:
+    "readable-stream" "1.1.x"
+    "xregexp" "2.0.0"
+
+"function-bind@^1.1.1":
+  "integrity" "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
+  "resolved" "https://registry.nlark.com/function-bind/download/function-bind-1.1.1.tgz"
+  "version" "1.1.1"
+
+"functional-red-black-tree@^1.0.1":
+  "integrity" "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g=="
+  "resolved" "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz"
+  "version" "1.0.1"
+
+"gensync@^1.0.0-beta.2":
+  "integrity" "sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA="
+  "resolved" "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.2.tgz"
+  "version" "1.0.0-beta.2"
+
+"get-caller-file@^2.0.1", "get-caller-file@^2.0.5":
+  "integrity" "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34="
+  "resolved" "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz"
+  "version" "2.0.5"
+
+"get-func-name@^2.0.0":
+  "integrity" "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE="
+  "resolved" "https://registry.npm.taobao.org/get-func-name/download/get-func-name-2.0.0.tgz"
+  "version" "2.0.0"
+
+"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.1":
+  "integrity" "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y="
+  "resolved" "https://registry.nlark.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz"
+  "version" "1.1.1"
+  dependencies:
+    "function-bind" "^1.1.1"
+    "has" "^1.0.3"
+    "has-symbols" "^1.0.1"
+
+"get-ready@^1.0.0", "get-ready@~1.0.0":
+  "integrity" "sha512-mFXCZPJIlcYcth+N8267+mghfYN9h3EhsDa6JSnbA3Wrhh/XFpuowviFcsDeYZtKspQyWyJqfs4O6P8CHeTwzw=="
+  "resolved" "https://registry.npmmirror.com/get-ready/-/get-ready-1.0.0.tgz"
+  "version" "1.0.0"
+
+"get-stream@^3.0.0":
+  "integrity" "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+  "resolved" "https://registry.nlark.com/get-stream/download/get-stream-3.0.0.tgz"
+  "version" "3.0.0"
+
+"get-stream@^4.0.0":
+  "integrity" "sha1-wbJVV189wh1Zv8ec09K0axw6VLU="
+  "resolved" "https://registry.nlark.com/get-stream/download/get-stream-4.1.0.tgz"
+  "version" "4.1.0"
+  dependencies:
+    "pump" "^3.0.0"
+
+"get-stream@^5.0.0":
+  "integrity" "sha1-SWaheV7lrOZecGxLe+txJX1uItM="
+  "resolved" "https://registry.nlark.com/get-stream/download/get-stream-5.2.0.tgz"
+  "version" "5.2.0"
+  dependencies:
+    "pump" "^3.0.0"
+
+"get-uri@3":
+  "integrity" "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg=="
+  "resolved" "https://registry.npmmirror.com/get-uri/-/get-uri-3.0.2.tgz"
+  "version" "3.0.2"
+  dependencies:
+    "@tootallnate/once" "1"
+    "data-uri-to-buffer" "3"
+    "debug" "4"
+    "file-uri-to-path" "2"
+    "fs-extra" "^8.1.0"
+    "ftp" "^0.3.10"
+
+"get-value@^2.0.3", "get-value@^2.0.6":
+  "integrity" "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+  "resolved" "https://registry.nlark.com/get-value/download/get-value-2.0.6.tgz"
+  "version" "2.0.6"
+
+"getpass@^0.1.1":
+  "integrity" "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo="
+  "resolved" "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz"
+  "version" "0.1.7"
+  dependencies:
+    "assert-plus" "^1.0.0"
+
+"glob-parent@^3.1.0":
+  "integrity" "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4="
+  "resolved" "https://registry.nlark.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1620073303944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz"
+  "version" "3.1.0"
+  dependencies:
+    "is-glob" "^3.1.0"
+    "path-dirname" "^1.0.0"
+
+"glob-parent@^5.0.0":
+  "integrity" "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ="
+  "resolved" "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073303944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz"
+  "version" "5.1.2"
+  dependencies:
+    "is-glob" "^4.0.1"
+
+"glob-parent@^5.1.2":
+  "integrity" "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ="
+  "resolved" "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073303944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz"
+  "version" "5.1.2"
+  dependencies:
+    "is-glob" "^4.0.1"
+
+"glob-parent@~5.1.2":
+  "integrity" "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ="
+  "resolved" "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073303944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz"
+  "version" "5.1.2"
+  dependencies:
+    "is-glob" "^4.0.1"
+
+"glob-parent@5.1.0":
+  "integrity" "sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI="
+  "resolved" "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.0.tgz?cache=0&sync_timestamp=1620073303944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.0.tgz"
+  "version" "5.1.0"
+  dependencies:
+    "is-glob" "^4.0.1"
+
+"glob-to-regexp@^0.3.0":
+  "integrity" "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs="
+  "resolved" "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz"
+  "version" "0.3.0"
+
+"glob@^7.0.3", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6":
+  "integrity" "sha1-Oxk+kjPwHULQs/eClLvutBj5SpA="
+  "resolved" "https://registry.nlark.com/glob/download/glob-7.1.7.tgz?cache=0&sync_timestamp=1620337498129&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob%2Fdownload%2Fglob-7.1.7.tgz"
+  "version" "7.1.7"
+  dependencies:
+    "fs.realpath" "^1.0.0"
+    "inflight" "^1.0.4"
+    "inherits" "2"
+    "minimatch" "^3.0.4"
+    "once" "^1.3.0"
+    "path-is-absolute" "^1.0.0"
+
+"glob@7.1.3":
+  "integrity" "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE="
+  "resolved" "https://registry.nlark.com/glob/download/glob-7.1.3.tgz?cache=0&sync_timestamp=1620337498129&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob%2Fdownload%2Fglob-7.1.3.tgz"
+  "version" "7.1.3"
+  dependencies:
+    "fs.realpath" "^1.0.0"
+    "inflight" "^1.0.4"
+    "inherits" "2"
+    "minimatch" "^3.0.4"
+    "once" "^1.3.0"
+    "path-is-absolute" "^1.0.0"
+
+"globals@^11.1.0":
+  "integrity" "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4="
+  "resolved" "https://registry.nlark.com/globals/download/globals-11.12.0.tgz"
+  "version" "11.12.0"
+
+"globals@^12.1.0":
+  "integrity" "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg=="
+  "resolved" "https://registry.npmmirror.com/globals/-/globals-12.4.0.tgz"
+  "version" "12.4.0"
+  dependencies:
+    "type-fest" "^0.8.1"
+
+"globby@^10.0.1":
+  "integrity" "sha1-J3WT50WsqkZGw6tBEonsR6A5JUM="
+  "resolved" "https://registry.nlark.com/globby/download/globby-10.0.2.tgz"
+  "version" "10.0.2"
+  dependencies:
+    "@types/glob" "^7.1.1"
+    "array-union" "^2.1.0"
+    "dir-glob" "^3.0.1"
+    "fast-glob" "^3.0.3"
+    "glob" "^7.1.3"
+    "ignore" "^5.1.1"
+    "merge2" "^1.2.3"
+    "slash" "^3.0.0"
+
+"globby@^6.1.0":
+  "integrity" "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw="
+  "resolved" "https://registry.nlark.com/globby/download/globby-6.1.0.tgz"
+  "version" "6.1.0"
+  dependencies:
+    "array-union" "^1.0.1"
+    "glob" "^7.0.3"
+    "object-assign" "^4.0.1"
+    "pify" "^2.0.0"
+    "pinkie-promise" "^2.0.0"
+
+"globby@^7.1.1":
+  "integrity" "sha1-+yzP+UAfhgCUXfral0QMypcrhoA="
+  "resolved" "https://registry.nlark.com/globby/download/globby-7.1.1.tgz"
+  "version" "7.1.1"
+  dependencies:
+    "array-union" "^1.0.1"
+    "dir-glob" "^2.0.0"
+    "glob" "^7.1.2"
+    "ignore" "^3.3.5"
+    "pify" "^3.0.0"
+    "slash" "^1.0.0"
+
+"globby@^9.2.0":
+  "integrity" "sha1-/QKacGxwPSm90XD0tts6P3p8tj0="
+  "resolved" "https://registry.nlark.com/globby/download/globby-9.2.0.tgz"
+  "version" "9.2.0"
+  dependencies:
+    "@types/glob" "^7.1.1"
+    "array-union" "^1.0.2"
+    "dir-glob" "^2.2.2"
+    "fast-glob" "^2.2.6"
+    "glob" "^7.1.3"
+    "ignore" "^4.0.3"
+    "pify" "^4.0.1"
+    "slash" "^2.0.0"
+
+"graceful-fs@^4.1.11", "graceful-fs@^4.1.15", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0":
+  "integrity" "sha1-/wQLKwhTsjw9MQJ1I3BvGIXXa+4="
+  "resolved" "https://registry.nlark.com/graceful-fs/download/graceful-fs-4.2.6.tgz"
+  "version" "4.2.6"
+
+"growl@1.10.5":
+  "integrity" "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4="
+  "resolved" "https://registry.npm.taobao.org/growl/download/growl-1.10.5.tgz"
+  "version" "1.10.5"
+
+"gzip-size@^5.0.0":
+  "integrity" "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ="
+  "resolved" "https://registry.npm.taobao.org/gzip-size/download/gzip-size-5.1.1.tgz?cache=0&sync_timestamp=1605523260680&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgzip-size%2Fdownload%2Fgzip-size-5.1.1.tgz"
+  "version" "5.1.1"
+  dependencies:
+    "duplexer" "^0.1.1"
+    "pify" "^4.0.1"
+
+"handle-thing@^2.0.0":
+  "integrity" "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04="
+  "resolved" "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz"
+  "version" "2.0.1"
+
+"har-schema@^2.0.0":
+  "integrity" "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+  "resolved" "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz"
+  "version" "2.0.0"
+
+"har-validator@~5.1.3":
+  "integrity" "sha1-HwgDufjLIMD6E4It8ezds2veHv0="
+  "resolved" "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz"
+  "version" "5.1.5"
+  dependencies:
+    "ajv" "^6.12.3"
+    "har-schema" "^2.0.0"
+
+"has-bigints@^1.0.1":
+  "integrity" "sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM="
+  "resolved" "https://registry.npm.taobao.org/has-bigints/download/has-bigints-1.0.1.tgz?cache=0&sync_timestamp=1615461293395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-bigints%2Fdownload%2Fhas-bigints-1.0.1.tgz"
+  "version" "1.0.1"
+
+"has-flag@^3.0.0":
+  "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+  "resolved" "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz?cache=0&sync_timestamp=1618559744568&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-flag%2Fdownload%2Fhas-flag-3.0.0.tgz"
+  "version" "3.0.0"
+
+"has-flag@^4.0.0":
+  "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+  "resolved" "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz"
+  "version" "4.0.0"
+
+"has-symbols@^1.0.0", "has-symbols@^1.0.1", "has-symbols@^1.0.2":
+  "integrity" "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM="
+  "resolved" "https://registry.nlark.com/has-symbols/download/has-symbols-1.0.2.tgz"
+  "version" "1.0.2"
+
+"has-value@^0.3.1":
+  "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8="
+  "resolved" "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz"
+  "version" "0.3.1"
+  dependencies:
+    "get-value" "^2.0.3"
+    "has-values" "^0.1.4"
+    "isobject" "^2.0.0"
+
+"has-value@^1.0.0":
+  "integrity" "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc="
+  "resolved" "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "get-value" "^2.0.6"
+    "has-values" "^1.0.0"
+    "isobject" "^3.0.0"
+
+"has-values@^0.1.4":
+  "integrity" "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+  "resolved" "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz"
+  "version" "0.1.4"
+
+"has-values@^1.0.0":
+  "integrity" "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8="
+  "resolved" "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "is-number" "^3.0.0"
+    "kind-of" "^4.0.0"
+
+"has@^1.0.0", "has@^1.0.3":
+  "integrity" "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y="
+  "resolved" "https://registry.nlark.com/has/download/has-1.0.3.tgz"
+  "version" "1.0.3"
+  dependencies:
+    "function-bind" "^1.1.1"
+
+"hash-base@^3.0.0":
+  "integrity" "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM="
+  "resolved" "https://registry.npm.taobao.org/hash-base/download/hash-base-3.1.0.tgz"
+  "version" "3.1.0"
+  dependencies:
+    "inherits" "^2.0.4"
+    "readable-stream" "^3.6.0"
+    "safe-buffer" "^5.2.0"
+
+"hash-sum@^1.0.2":
+  "integrity" "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ="
+  "resolved" "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz"
+  "version" "1.0.2"
+
+"hash-sum@^2.0.0":
+  "integrity" "sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo="
+  "resolved" "https://registry.npm.taobao.org/hash-sum/download/hash-sum-2.0.0.tgz"
+  "version" "2.0.0"
+
+"hash.js@^1.0.0", "hash.js@^1.0.3":
+  "integrity" "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I="
+  "resolved" "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz"
+  "version" "1.1.7"
+  dependencies:
+    "inherits" "^2.0.3"
+    "minimalistic-assert" "^1.0.1"
+
+"he@1.2.0", "he@1.2.x":
+  "integrity" "sha1-hK5l+n6vsWX922FWauFLrwVmTw8="
+  "resolved" "https://registry.nlark.com/he/download/he-1.2.0.tgz"
+  "version" "1.2.0"
+
+"hex-color-regex@^1.1.0":
+  "integrity" "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4="
+  "resolved" "https://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz"
+  "version" "1.1.0"
+
+"highlight.js@^10.7.1":
+  "integrity" "sha1-aXJy45kTVuQMPKxWanTu9oF1ZTE="
+  "resolved" "https://registry.nlark.com/highlight.js/download/highlight.js-10.7.3.tgz"
+  "version" "10.7.3"
+
+"hmac-drbg@^1.0.1":
+  "integrity" "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE="
+  "resolved" "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "hash.js" "^1.0.3"
+    "minimalistic-assert" "^1.0.0"
+    "minimalistic-crypto-utils" "^1.0.1"
+
+"hoopy@^0.1.4":
+  "integrity" "sha1-YJIH1mEQADOpqUAq096mdzgcGx0="
+  "resolved" "https://registry.npm.taobao.org/hoopy/download/hoopy-0.1.4.tgz"
+  "version" "0.1.4"
+
+"hosted-git-info@^2.1.4":
+  "integrity" "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k="
+  "resolved" "https://registry.nlark.com/hosted-git-info/download/hosted-git-info-2.8.9.tgz"
+  "version" "2.8.9"
+
+"hpack.js@^2.1.6":
+  "integrity" "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI="
+  "resolved" "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz"
+  "version" "2.1.6"
+  dependencies:
+    "inherits" "^2.0.1"
+    "obuf" "^1.0.0"
+    "readable-stream" "^2.0.1"
+    "wbuf" "^1.1.0"
+
+"hsl-regex@^1.0.0":
+  "integrity" "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4="
+  "resolved" "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz"
+  "version" "1.0.0"
+
+"hsla-regex@^1.0.0":
+  "integrity" "sha1-wc56MWjIxmFAM6S194d/OyJfnDg="
+  "resolved" "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz"
+  "version" "1.0.0"
+
+"html-encoding-sniffer@^1.0.2":
+  "integrity" "sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg="
+  "resolved" "https://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz"
+  "version" "1.0.2"
+  dependencies:
+    "whatwg-encoding" "^1.0.1"
+
+"html-entities@^1.3.1":
+  "integrity" "sha1-z70bAdKvr5rcobEK59/6uYxx0tw="
+  "resolved" "https://registry.npm.taobao.org/html-entities/download/html-entities-1.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.4.0.tgz"
+  "version" "1.4.0"
+
+"html-minifier@^3.2.3":
+  "integrity" "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw="
+  "resolved" "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz"
+  "version" "3.5.21"
+  dependencies:
+    "camel-case" "3.0.x"
+    "clean-css" "4.2.x"
+    "commander" "2.17.x"
+    "he" "1.2.x"
+    "param-case" "2.1.x"
+    "relateurl" "0.2.x"
+    "uglify-js" "3.4.x"
+
+"html-tags@^2.0.0":
+  "integrity" "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos="
+  "resolved" "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz"
+  "version" "2.0.0"
+
+"html-tags@^3.1.0":
+  "integrity" "sha1-e15vfmZen7QfMAB+2eDUHpf7IUA="
+  "resolved" "https://registry.npm.taobao.org/html-tags/download/html-tags-3.1.0.tgz"
+  "version" "3.1.0"
+
+"html-webpack-plugin@^3.2.0", "html-webpack-plugin@>=2.26.0":
+  "integrity" "sha1-sBq71yOsqqeze2r0SS69oD2d03s="
+  "resolved" "https://registry.nlark.com/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz"
+  "version" "3.2.0"
+  dependencies:
+    "html-minifier" "^3.2.3"
+    "loader-utils" "^0.2.16"
+    "lodash" "^4.17.3"
+    "pretty-error" "^2.0.2"
+    "tapable" "^1.0.0"
+    "toposort" "^1.0.0"
+    "util.promisify" "1.0.0"
+
+"htmlparser2@^6.1.0":
+  "integrity" "sha1-xNditsM3GgXb5l6UrkOp+EX7j7c="
+  "resolved" "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-6.1.0.tgz?cache=0&sync_timestamp=1617915295732&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-6.1.0.tgz"
+  "version" "6.1.0"
+  dependencies:
+    "domelementtype" "^2.0.1"
+    "domhandler" "^4.0.0"
+    "domutils" "^2.5.2"
+    "entities" "^2.0.0"
+
+"http-deceiver@^1.2.7":
+  "integrity" "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc="
+  "resolved" "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz"
+  "version" "1.2.7"
+
+"http-errors@~1.6.2":
+  "integrity" "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0="
+  "resolved" "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz"
+  "version" "1.6.3"
+  dependencies:
+    "depd" "~1.1.2"
+    "inherits" "2.0.3"
+    "setprototypeof" "1.1.0"
+    "statuses" ">= 1.4.0 < 2"
+
+"http-errors@~1.7.2", "http-errors@1.7.2":
+  "integrity" "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8="
+  "resolved" "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz"
+  "version" "1.7.2"
+  dependencies:
+    "depd" "~1.1.2"
+    "inherits" "2.0.3"
+    "setprototypeof" "1.1.1"
+    "statuses" ">= 1.5.0 < 2"
+    "toidentifier" "1.0.0"
+
+"http-parser-js@>=0.5.1":
+  "integrity" "sha1-AdJwnHnUFpi7AdTezF6dpOSgM9k="
+  "resolved" "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.5.3.tgz?cache=0&sync_timestamp=1609540073700&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-parser-js%2Fdownload%2Fhttp-parser-js-0.5.3.tgz"
+  "version" "0.5.3"
+
+"http-proxy-agent@^4.0.0", "http-proxy-agent@^4.0.1":
+  "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg=="
+  "resolved" "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "@tootallnate/once" "1"
+    "agent-base" "6"
+    "debug" "4"
+
+"http-proxy-middleware@^1.0.0":
+  "integrity" "sha1-Q3ANbZ7st0Gb8IahKND3IF2etmU="
+  "resolved" "https://registry.nlark.com/http-proxy-middleware/download/http-proxy-middleware-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-1.3.1.tgz"
+  "version" "1.3.1"
+  dependencies:
+    "@types/http-proxy" "^1.17.5"
+    "http-proxy" "^1.18.1"
+    "is-glob" "^4.0.1"
+    "is-plain-obj" "^3.0.0"
+    "micromatch" "^4.0.2"
+
+"http-proxy-middleware@0.19.1":
+  "integrity" "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo="
+  "resolved" "https://registry.nlark.com/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-0.19.1.tgz"
+  "version" "0.19.1"
+  dependencies:
+    "http-proxy" "^1.17.0"
+    "is-glob" "^4.0.0"
+    "lodash" "^4.17.11"
+    "micromatch" "^3.1.10"
+
+"http-proxy@^1.17.0", "http-proxy@^1.18.1":
+  "integrity" "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk="
+  "resolved" "https://registry.nlark.com/http-proxy/download/http-proxy-1.18.1.tgz"
+  "version" "1.18.1"
+  dependencies:
+    "eventemitter3" "^4.0.0"
+    "follow-redirects" "^1.0.0"
+    "requires-port" "^1.0.0"
+
+"http-signature@~1.2.0":
+  "integrity" "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE="
+  "resolved" "https://registry.nlark.com/http-signature/download/http-signature-1.2.0.tgz"
+  "version" "1.2.0"
+  dependencies:
+    "assert-plus" "^1.0.0"
+    "jsprim" "^1.2.2"
+    "sshpk" "^1.7.0"
+
+"https-browserify@^1.0.0":
+  "integrity" "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
+  "resolved" "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz"
+  "version" "1.0.0"
+
+"https-proxy-agent@^5.0.0", "https-proxy-agent@5":
+  "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="
+  "resolved" "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz"
+  "version" "5.0.1"
+  dependencies:
+    "agent-base" "6"
+    "debug" "4"
+
+"human-signals@^1.1.1":
+  "integrity" "sha1-xbHNFPUK6uCatsWf5jujOV/k36M="
+  "resolved" "https://registry.nlark.com/human-signals/download/human-signals-1.1.1.tgz"
+  "version" "1.1.1"
+
+"humanize-ms@^1.2.0", "humanize-ms@^1.2.1":
+  "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ=="
+  "resolved" "https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz"
+  "version" "1.2.1"
+  dependencies:
+    "ms" "^2.0.0"
+
+"iconv-lite@^0.4.15", "iconv-lite@^0.4.24", "iconv-lite@^0.4.4", "iconv-lite@0.4.24":
+  "integrity" "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs="
+  "resolved" "https://registry.nlark.com/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz"
+  "version" "0.4.24"
+  dependencies:
+    "safer-buffer" ">= 2.1.2 < 3"
+
+"icss-utils@^4.0.0", "icss-utils@^4.1.1":
+  "integrity" "sha1-IRcLU3ie4nRHwvR91oMIFAP5pGc="
+  "resolved" "https://registry.npm.taobao.org/icss-utils/download/icss-utils-4.1.1.tgz?cache=0&sync_timestamp=1605801312995&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-4.1.1.tgz"
+  "version" "4.1.1"
+  dependencies:
+    "postcss" "^7.0.14"
+
+"ieee754@^1.1.4":
+  "integrity" "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I="
+  "resolved" "https://registry.npm.taobao.org/ieee754/download/ieee754-1.2.1.tgz"
+  "version" "1.2.1"
+
+"iferr@^0.1.5":
+  "integrity" "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
+  "resolved" "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz"
+  "version" "0.1.5"
+
+"ignore@^3.3.5":
+  "integrity" "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM="
+  "resolved" "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz"
+  "version" "3.3.10"
+
+"ignore@^4.0.3", "ignore@^4.0.6":
+  "integrity" "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw="
+  "resolved" "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz"
+  "version" "4.0.6"
+
+"ignore@^5.1.1":
+  "integrity" "sha1-8VCotQo0KJsz4i9YiavU2AFvDlc="
+  "resolved" "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz"
+  "version" "5.1.8"
+
+"image-size@~0.5.0":
+  "integrity" "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w="
+  "resolved" "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz?cache=0&sync_timestamp=1618422657851&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimage-size%2Fdownload%2Fimage-size-0.5.5.tgz"
+  "version" "0.5.5"
+
+"import-cwd@^2.0.0":
+  "integrity" "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk="
+  "resolved" "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "import-from" "^2.1.0"
+
+"import-fresh@^2.0.0":
+  "integrity" "sha1-2BNVwVYS04bGH53dOSLUMEgipUY="
+  "resolved" "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz?cache=0&sync_timestamp=1608469532269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "caller-path" "^2.0.0"
+    "resolve-from" "^3.0.0"
+
+"import-fresh@^3.0.0":
+  "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="
+  "resolved" "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz"
+  "version" "3.3.0"
+  dependencies:
+    "parent-module" "^1.0.0"
+    "resolve-from" "^4.0.0"
+
+"import-from@^2.1.0":
+  "integrity" "sha1-M1238qev/VOqpHHUuAId7ja387E="
+  "resolved" "https://registry.nlark.com/import-from/download/import-from-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "resolve-from" "^3.0.0"
+
+"import-local@^2.0.0":
+  "integrity" "sha1-VQcL44pZk88Y72236WH1vuXFoJ0="
+  "resolved" "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "pkg-dir" "^3.0.0"
+    "resolve-cwd" "^2.0.0"
+
+"imurmurhash@^0.1.4":
+  "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+  "resolved" "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz"
+  "version" "0.1.4"
+
+"indexes-of@^1.0.1":
+  "integrity" "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+  "resolved" "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz"
+  "version" "1.0.1"
+
+"infer-owner@^1.0.3":
+  "integrity" "sha1-xM78qo5RBRwqQLos6KPScpWvlGc="
+  "resolved" "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz"
+  "version" "1.0.4"
+
+"inflight@^1.0.4":
+  "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk="
+  "resolved" "https://registry.nlark.com/inflight/download/inflight-1.0.6.tgz"
+  "version" "1.0.6"
+  dependencies:
+    "once" "^1.3.0"
+    "wrappy" "1"
+
+"inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@2":
+  "integrity" "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w="
+  "resolved" "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz"
+  "version" "2.0.4"
+
+"inherits@2.0.1":
+  "integrity" "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+  "resolved" "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz"
+  "version" "2.0.1"
+
+"inherits@2.0.3":
+  "integrity" "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+  "resolved" "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz"
+  "version" "2.0.3"
+
+"inquirer@^7.0.0", "inquirer@^7.1.0":
+  "integrity" "sha1-BNF2sq8Er8FXqD/XwQDpjuCq0AM="
+  "resolved" "https://registry.nlark.com/inquirer/download/inquirer-7.3.3.tgz?cache=0&sync_timestamp=1623781150792&other_urls=https%3A%2F%2Fregistry.nlark.com%2Finquirer%2Fdownload%2Finquirer-7.3.3.tgz"
+  "version" "7.3.3"
+  dependencies:
+    "ansi-escapes" "^4.2.1"
+    "chalk" "^4.1.0"
+    "cli-cursor" "^3.1.0"
+    "cli-width" "^3.0.0"
+    "external-editor" "^3.0.3"
+    "figures" "^3.0.0"
+    "lodash" "^4.17.19"
+    "mute-stream" "0.0.8"
+    "run-async" "^2.4.0"
+    "rxjs" "^6.6.0"
+    "string-width" "^4.1.0"
+    "strip-ansi" "^6.0.0"
+    "through" "^2.3.6"
+
+"internal-ip@^4.3.0":
+  "integrity" "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc="
+  "resolved" "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz"
+  "version" "4.3.0"
+  dependencies:
+    "default-gateway" "^4.2.0"
+    "ipaddr.js" "^1.9.0"
+
+"interpret@^1.2.0":
+  "integrity" "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4="
+  "resolved" "https://registry.npm.taobao.org/interpret/download/interpret-1.4.0.tgz"
+  "version" "1.4.0"
+
+"ip-regex@^2.1.0":
+  "integrity" "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk="
+  "resolved" "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz"
+  "version" "2.1.0"
+
+"ip@^1.1.0", "ip@^1.1.5":
+  "integrity" "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
+  "resolved" "https://registry.nlark.com/ip/download/ip-1.1.5.tgz"
+  "version" "1.1.5"
+
+"ip@^2.0.0":
+  "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
+  "resolved" "https://registry.npmmirror.com/ip/-/ip-2.0.0.tgz"
+  "version" "2.0.0"
+
+"ipaddr.js@^1.9.0", "ipaddr.js@1.9.1":
+  "integrity" "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM="
+  "resolved" "https://registry.nlark.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz"
+  "version" "1.9.1"
+
+"is-absolute-url@^2.0.0":
+  "integrity" "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY="
+  "resolved" "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz"
+  "version" "2.1.0"
+
+"is-absolute-url@^3.0.3":
+  "integrity" "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg="
+  "resolved" "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-3.0.3.tgz"
+  "version" "3.0.3"
+
+"is-accessor-descriptor@^0.1.6":
+  "integrity" "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY="
+  "resolved" "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz"
+  "version" "0.1.6"
+  dependencies:
+    "kind-of" "^3.0.2"
+
+"is-accessor-descriptor@^1.0.0":
+  "integrity" "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY="
+  "resolved" "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "kind-of" "^6.0.0"
+
+"is-arguments@^1.0.4":
+  "integrity" "sha1-YjUwMd++4HzrNGVqa95Z7+yujdk="
+  "resolved" "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.1.0.tgz?cache=0&sync_timestamp=1607117404740&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-arguments%2Fdownload%2Fis-arguments-1.1.0.tgz"
+  "version" "1.1.0"
+  dependencies:
+    "call-bind" "^1.0.0"
+
+"is-arrayish@^0.2.1":
+  "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+  "resolved" "https://registry.nlark.com/is-arrayish/download/is-arrayish-0.2.1.tgz"
+  "version" "0.2.1"
+
+"is-arrayish@^0.3.1":
+  "integrity" "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM="
+  "resolved" "https://registry.nlark.com/is-arrayish/download/is-arrayish-0.3.2.tgz"
+  "version" "0.3.2"
+
+"is-bigint@^1.0.1":
+  "integrity" "sha1-/7OBRCUDI1rSReqJ5Fs9v/BA7lo="
+  "resolved" "https://registry.nlark.com/is-bigint/download/is-bigint-1.0.2.tgz"
+  "version" "1.0.2"
+
+"is-binary-path@^1.0.0":
+  "integrity" "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg="
+  "resolved" "https://registry.nlark.com/is-binary-path/download/is-binary-path-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "binary-extensions" "^1.0.0"
+
+"is-binary-path@~2.1.0":
+  "integrity" "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk="
+  "resolved" "https://registry.nlark.com/is-binary-path/download/is-binary-path-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "binary-extensions" "^2.0.0"
+
+"is-boolean-object@^1.1.0":
+  "integrity" "sha1-PAh48DXLghIo01DS4eNnGXFqPeg="
+  "resolved" "https://registry.nlark.com/is-boolean-object/download/is-boolean-object-1.1.1.tgz?cache=0&sync_timestamp=1620428521406&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-boolean-object%2Fdownload%2Fis-boolean-object-1.1.1.tgz"
+  "version" "1.1.1"
+  dependencies:
+    "call-bind" "^1.0.2"
+
+"is-buffer@^1.1.5":
+  "integrity" "sha1-76ouqdqg16suoTqXsritUf776L4="
+  "resolved" "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz"
+  "version" "1.1.6"
+
+"is-buffer@~2.0.3":
+  "integrity" "sha1-68JS5ADSL/jXf6CYiIIaJKZYwZE="
+  "resolved" "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-2.0.5.tgz"
+  "version" "2.0.5"
+
+"is-callable@^1.1.4", "is-callable@^1.2.3":
+  "integrity" "sha1-ix4FALc6HXbHBIdjbzaOUZ3o244="
+  "resolved" "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.3.tgz"
+  "version" "1.2.3"
+
+"is-ci@^1.0.10":
+  "integrity" "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw="
+  "resolved" "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz?cache=0&sync_timestamp=1613632097993&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-ci%2Fdownload%2Fis-ci-1.2.1.tgz"
+  "version" "1.2.1"
+  dependencies:
+    "ci-info" "^1.5.0"
+
+"is-class-hotfix@~0.0.6":
+  "integrity" "sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ=="
+  "resolved" "https://registry.npmmirror.com/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz"
+  "version" "0.0.6"
+
+"is-color-stop@^1.0.0":
+  "integrity" "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U="
+  "resolved" "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz"
+  "version" "1.1.0"
+  dependencies:
+    "css-color-names" "^0.0.4"
+    "hex-color-regex" "^1.1.0"
+    "hsl-regex" "^1.0.0"
+    "hsla-regex" "^1.0.0"
+    "rgb-regex" "^1.0.1"
+    "rgba-regex" "^1.0.0"
+
+"is-core-module@^2.2.0":
+  "integrity" "sha1-91SENhfHC/0pt72HMnQAzaXBhJE="
+  "resolved" "https://registry.nlark.com/is-core-module/download/is-core-module-2.5.0.tgz?cache=0&sync_timestamp=1626158736739&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-core-module%2Fdownload%2Fis-core-module-2.5.0.tgz"
+  "version" "2.5.0"
+  dependencies:
+    "has" "^1.0.3"
+
+"is-data-descriptor@^0.1.4":
+  "integrity" "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y="
+  "resolved" "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz"
+  "version" "0.1.4"
+  dependencies:
+    "kind-of" "^3.0.2"
+
+"is-data-descriptor@^1.0.0":
+  "integrity" "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc="
+  "resolved" "https://registry.nlark.com/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "kind-of" "^6.0.0"
+
+"is-date-object@^1.0.1":
+  "integrity" "sha1-VQz8wDr62gXuo90wmBx7CVUfc+U="
+  "resolved" "https://registry.nlark.com/is-date-object/download/is-date-object-1.0.4.tgz"
+  "version" "1.0.4"
+
+"is-descriptor@^0.1.0":
+  "integrity" "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco="
+  "resolved" "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz"
+  "version" "0.1.6"
+  dependencies:
+    "is-accessor-descriptor" "^0.1.6"
+    "is-data-descriptor" "^0.1.4"
+    "kind-of" "^5.0.0"
+
+"is-descriptor@^1.0.0", "is-descriptor@^1.0.2":
+  "integrity" "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw="
+  "resolved" "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz"
+  "version" "1.0.2"
+  dependencies:
+    "is-accessor-descriptor" "^1.0.0"
+    "is-data-descriptor" "^1.0.0"
+    "kind-of" "^6.0.2"
+
+"is-directory@^0.3.1":
+  "integrity" "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="
+  "resolved" "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz"
+  "version" "0.3.1"
+
+"is-docker@^2.0.0":
+  "integrity" "sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao="
+  "resolved" "https://registry.npm.taobao.org/is-docker/download/is-docker-2.2.1.tgz?cache=0&sync_timestamp=1617958823824&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-docker%2Fdownload%2Fis-docker-2.2.1.tgz"
+  "version" "2.2.1"
+
+"is-extendable@^0.1.0", "is-extendable@^0.1.1":
+  "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+  "resolved" "https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz"
+  "version" "0.1.1"
+
+"is-extendable@^0.1.1":
+  "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+  "resolved" "https://registry.nlark.com/is-extendable/download/is-extendable-0.1.1.tgz"
+  "version" "0.1.1"
+
+"is-extendable@^1.0.1":
+  "integrity" "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ="
+  "resolved" "https://registry.nlark.com/is-extendable/download/is-extendable-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "is-plain-object" "^2.0.4"
+
+"is-extglob@^2.1.0", "is-extglob@^2.1.1":
+  "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+  "resolved" "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz"
+  "version" "2.1.1"
+
+"is-fullwidth-code-point@^2.0.0":
+  "integrity" "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+  "resolved" "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz?cache=0&sync_timestamp=1618552469710&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-2.0.0.tgz"
+  "version" "2.0.0"
+
+"is-fullwidth-code-point@^3.0.0":
+  "integrity" "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0="
+  "resolved" "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&sync_timestamp=1618552469710&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz"
+  "version" "3.0.0"
+
+"is-glob@^3.1.0":
+  "integrity" "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo="
+  "resolved" "https://registry.nlark.com/is-glob/download/is-glob-3.1.0.tgz"
+  "version" "3.1.0"
+  dependencies:
+    "is-extglob" "^2.1.0"
+
+"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@~4.0.1":
+  "integrity" "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw="
+  "resolved" "https://registry.nlark.com/is-glob/download/is-glob-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "is-extglob" "^2.1.1"
+
+"is-negative-zero@^2.0.1":
+  "integrity" "sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ="
+  "resolved" "https://registry.nlark.com/is-negative-zero/download/is-negative-zero-2.0.1.tgz"
+  "version" "2.0.1"
+
+"is-number-object@^1.0.4":
+  "integrity" "sha1-bt+u7XlQz/Ga/tzp+/yp7m3Sies="
+  "resolved" "https://registry.nlark.com/is-number-object/download/is-number-object-1.0.5.tgz?cache=0&sync_timestamp=1620421575334&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-number-object%2Fdownload%2Fis-number-object-1.0.5.tgz"
+  "version" "1.0.5"
+
+"is-number@^3.0.0":
+  "integrity" "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU="
+  "resolved" "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "kind-of" "^3.0.2"
+
+"is-number@^7.0.0":
+  "integrity" "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss="
+  "resolved" "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz"
+  "version" "7.0.0"
+
+"is-obj@^2.0.0":
+  "integrity" "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI="
+  "resolved" "https://registry.nlark.com/is-obj/download/is-obj-2.0.0.tgz"
+  "version" "2.0.0"
+
+"is-path-cwd@^2.0.0":
+  "integrity" "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s="
+  "resolved" "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz"
+  "version" "2.2.0"
+
+"is-path-in-cwd@^2.0.0":
+  "integrity" "sha1-v+Lcomxp85cmWkAJljYCk1oFOss="
+  "resolved" "https://registry.nlark.com/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz?cache=0&sync_timestamp=1620047110449&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "is-path-inside" "^2.1.0"
+
+"is-path-inside@^2.1.0":
+  "integrity" "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI="
+  "resolved" "https://registry.nlark.com/is-path-inside/download/is-path-inside-2.1.0.tgz?cache=0&sync_timestamp=1620046845369&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-inside%2Fdownload%2Fis-path-inside-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "path-is-inside" "^1.0.2"
+
+"is-plain-obj@^1.0.0":
+  "integrity" "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
+  "resolved" "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz?cache=0&sync_timestamp=1618600554597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-1.1.0.tgz"
+  "version" "1.1.0"
+
+"is-plain-obj@^3.0.0":
+  "integrity" "sha1-r28uoUrFpkYYOlu9tbqrvBVq2dc="
+  "resolved" "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-3.0.0.tgz?cache=0&sync_timestamp=1618600554597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-3.0.0.tgz"
+  "version" "3.0.0"
+
+"is-plain-object@^2.0.3", "is-plain-object@^2.0.4":
+  "integrity" "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc="
+  "resolved" "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz"
+  "version" "2.0.4"
+  dependencies:
+    "isobject" "^3.0.1"
+
+"is-regex@^1.0.4", "is-regex@^1.1.3":
+  "integrity" "sha1-0Cn5r/ZEi5Prvj8z2scVEf3L758="
+  "resolved" "https://registry.nlark.com/is-regex/download/is-regex-1.1.3.tgz"
+  "version" "1.1.3"
+  dependencies:
+    "call-bind" "^1.0.2"
+    "has-symbols" "^1.0.2"
+
+"is-resolvable@^1.0.0":
+  "integrity" "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg="
+  "resolved" "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz"
+  "version" "1.1.0"
+
+"is-stream@^1.1.0":
+  "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+  "resolved" "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz"
+  "version" "1.1.0"
+
+"is-stream@^2.0.0":
+  "integrity" "sha1-venDJoDW+uBBKdasnZIc54FfeOM="
+  "resolved" "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz"
+  "version" "2.0.0"
+
+"is-string@^1.0.5", "is-string@^1.0.6":
+  "integrity" "sha1-P+XVmS+w2TQE8yWE1LAXmnG1Sl8="
+  "resolved" "https://registry.nlark.com/is-string/download/is-string-1.0.6.tgz?cache=0&sync_timestamp=1620448217105&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-string%2Fdownload%2Fis-string-1.0.6.tgz"
+  "version" "1.0.6"
+
+"is-symbol@^1.0.2", "is-symbol@^1.0.3":
+  "integrity" "sha1-ptrJO2NbBjymhyI23oiRClevE5w="
+  "resolved" "https://registry.nlark.com/is-symbol/download/is-symbol-1.0.4.tgz?cache=0&sync_timestamp=1620502244179&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-symbol%2Fdownload%2Fis-symbol-1.0.4.tgz"
+  "version" "1.0.4"
+  dependencies:
+    "has-symbols" "^1.0.2"
+
+"is-type-of@^1.0.0":
+  "integrity" "sha512-uK0kyX9LZYhSDS7H2sVJQJop1UnWPWmo5RvR3q2kFH6AUHYs7sOrVg0b4nyBHw29kRRNFofYN/JbHZDlHiItTA=="
+  "resolved" "https://registry.npmmirror.com/is-type-of/-/is-type-of-1.2.1.tgz"
+  "version" "1.2.1"
+  dependencies:
+    "core-util-is" "^1.0.2"
+    "is-class-hotfix" "~0.0.6"
+    "isstream" "~0.1.2"
+
+"is-typedarray@~1.0.0":
+  "integrity" "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+  "resolved" "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz"
+  "version" "1.0.0"
+
+"is-what@^3.12.0":
+  "integrity" "sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE="
+  "resolved" "https://registry.npm.taobao.org/is-what/download/is-what-3.14.1.tgz?cache=0&sync_timestamp=1615169735707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-what%2Fdownload%2Fis-what-3.14.1.tgz"
+  "version" "3.14.1"
+
+"is-windows@^1.0.2":
+  "integrity" "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0="
+  "resolved" "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz"
+  "version" "1.0.2"
+
+"is-wsl@^1.1.0":
+  "integrity" "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+  "resolved" "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz"
+  "version" "1.1.0"
+
+"is-wsl@^2.1.1":
+  "integrity" "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE="
+  "resolved" "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz"
+  "version" "2.2.0"
+  dependencies:
+    "is-docker" "^2.0.0"
+
+"isarray@^1.0.0", "isarray@~1.0.0", "isarray@1.0.0":
+  "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+  "resolved" "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz"
+  "version" "1.0.0"
+
+"isarray@0.0.1":
+  "integrity" "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
+  "resolved" "https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz"
+  "version" "0.0.1"
+
+"isexe@^2.0.0":
+  "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+  "resolved" "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz"
+  "version" "2.0.0"
+
+"isobject@^2.0.0":
+  "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk="
+  "resolved" "https://registry.nlark.com/isobject/download/isobject-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "isarray" "1.0.0"
+
+"isobject@^3.0.0", "isobject@^3.0.1":
+  "integrity" "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+  "resolved" "https://registry.nlark.com/isobject/download/isobject-3.0.1.tgz"
+  "version" "3.0.1"
+
+"isstream@~0.1.2":
+  "integrity" "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+  "resolved" "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz"
+  "version" "0.1.2"
+
+"javascript-stringify@^2.0.1":
+  "integrity" "sha1-J8dlOb4U2L0Sghmi1zGwkzeQTnk="
+  "resolved" "https://registry.nlark.com/javascript-stringify/download/javascript-stringify-2.1.0.tgz"
+  "version" "2.1.0"
+
+"js-base64@^2.5.2":
+  "integrity" "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
+  "resolved" "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz"
+  "version" "2.6.4"
+
+"js-message@1.0.7":
+  "integrity" "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA=="
+  "resolved" "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz"
+  "version" "1.0.7"
+
+"js-tokens@^4.0.0":
+  "integrity" "sha1-GSA/tZmR35jjoocFDUZHzerzJJk="
+  "resolved" "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz"
+  "version" "4.0.0"
+
+"js-yaml@^3.13.1", "js-yaml@3.13.1":
+  "integrity" "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc="
+  "resolved" "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz?cache=0&sync_timestamp=1618435151523&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.13.1.tgz"
+  "version" "3.13.1"
+  dependencies:
+    "argparse" "^1.0.7"
+    "esprima" "^4.0.0"
+
+"jsbn@~0.1.0":
+  "integrity" "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+  "resolved" "https://registry.nlark.com/jsbn/download/jsbn-0.1.1.tgz"
+  "version" "0.1.1"
+
+"jsdom-global@^3.0.2":
+  "integrity" "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk="
+  "resolved" "https://registry.npm.taobao.org/jsdom-global/download/jsdom-global-3.0.2.tgz"
+  "version" "3.0.2"
+
+"jsdom@^15.2.1", "jsdom@>=10.0.0":
+  "integrity" "sha1-0v6xrvcYP4a+UhuMaDP/UpbQfsU="
+  "resolved" "https://registry.nlark.com/jsdom/download/jsdom-15.2.1.tgz"
+  "version" "15.2.1"
+  dependencies:
+    "abab" "^2.0.0"
+    "acorn" "^7.1.0"
+    "acorn-globals" "^4.3.2"
+    "array-equal" "^1.0.0"
+    "cssom" "^0.4.1"
+    "cssstyle" "^2.0.0"
+    "data-urls" "^1.1.0"
+    "domexception" "^1.0.1"
+    "escodegen" "^1.11.1"
+    "html-encoding-sniffer" "^1.0.2"
+    "nwsapi" "^2.2.0"
+    "parse5" "5.1.0"
+    "pn" "^1.1.0"
+    "request" "^2.88.0"
+    "request-promise-native" "^1.0.7"
+    "saxes" "^3.1.9"
+    "symbol-tree" "^3.2.2"
+    "tough-cookie" "^3.0.1"
+    "w3c-hr-time" "^1.0.1"
+    "w3c-xmlserializer" "^1.1.2"
+    "webidl-conversions" "^4.0.2"
+    "whatwg-encoding" "^1.0.5"
+    "whatwg-mimetype" "^2.3.0"
+    "whatwg-url" "^7.0.0"
+    "ws" "^7.0.0"
+    "xml-name-validator" "^3.0.0"
+
+"jsesc@^2.5.1":
+  "integrity" "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q="
+  "resolved" "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz?cache=0&sync_timestamp=1603891242793&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-2.5.2.tgz"
+  "version" "2.5.2"
+
+"jsesc@~0.5.0":
+  "integrity" "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+  "resolved" "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz?cache=0&sync_timestamp=1603891242793&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-0.5.0.tgz"
+  "version" "0.5.0"
+
+"json-parse-better-errors@^1.0.1", "json-parse-better-errors@^1.0.2":
+  "integrity" "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk="
+  "resolved" "https://registry.nlark.com/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz"
+  "version" "1.0.2"
+
+"json-parse-even-better-errors@^2.3.0":
+  "integrity" "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0="
+  "resolved" "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz"
+  "version" "2.3.1"
+
+"json-schema-traverse@^0.4.1":
+  "integrity" "sha1-afaofZUTq4u4/mO9sJecRI5oRmA="
+  "resolved" "https://registry.nlark.com/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz"
+  "version" "0.4.1"
+
+"json-schema@0.2.3":
+  "integrity" "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+  "resolved" "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz"
+  "version" "0.2.3"
+
+"json-stable-stringify-without-jsonify@^1.0.1":
+  "integrity" "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
+  "resolved" "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
+  "version" "1.0.1"
+
+"json-stringify-safe@~5.0.1":
+  "integrity" "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+  "resolved" "https://registry.nlark.com/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz"
+  "version" "5.0.1"
+
+"json3@^3.3.3":
+  "integrity" "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E="
+  "resolved" "https://registry.nlark.com/json3/download/json3-3.3.3.tgz"
+  "version" "3.3.3"
+
+"json5@^0.5.0":
+  "integrity" "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+  "resolved" "https://registry.nlark.com/json5/download/json5-0.5.1.tgz"
+  "version" "0.5.1"
+
+"json5@^1.0.1":
+  "integrity" "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4="
+  "resolved" "https://registry.nlark.com/json5/download/json5-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "minimist" "^1.2.0"
+
+"json5@^2.1.2":
+  "integrity" "sha1-Lf7+cgxrpSXZ69kJlQ8FFTFsiaM="
+  "resolved" "https://registry.nlark.com/json5/download/json5-2.2.0.tgz"
+  "version" "2.2.0"
+  dependencies:
+    "minimist" "^1.2.5"
+
+"jsonfile@^4.0.0":
+  "integrity" "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss="
+  "resolved" "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz?cache=0&sync_timestamp=1604161937969&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-4.0.0.tgz"
+  "version" "4.0.0"
+  optionalDependencies:
+    "graceful-fs" "^4.1.6"
+
+"jsprim@^1.2.2":
+  "integrity" "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI="
+  "resolved" "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz"
+  "version" "1.4.1"
+  dependencies:
+    "assert-plus" "1.0.0"
+    "extsprintf" "1.3.0"
+    "json-schema" "0.2.3"
+    "verror" "1.10.0"
+
+"jstoxml@^2.0.0":
+  "integrity" "sha512-OYWlK0j+roh+eyaMROlNbS5cd5R25Y+IUpdl7cNdB8HNrkgwQzIS7L9MegxOiWNBj9dQhA/yAxiMwCC5mwNoBw=="
+  "resolved" "https://registry.npmmirror.com/jstoxml/-/jstoxml-2.2.9.tgz"
+  "version" "2.2.9"
+
+"killable@^1.0.1":
+  "integrity" "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI="
+  "resolved" "https://registry.nlark.com/killable/download/killable-1.0.1.tgz"
+  "version" "1.0.1"
+
+"kind-of@^3.0.2", "kind-of@^3.0.3":
+  "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ="
+  "resolved" "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz"
+  "version" "3.2.2"
+  dependencies:
+    "is-buffer" "^1.1.5"
+
+"kind-of@^3.2.0":
+  "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ="
+  "resolved" "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz"
+  "version" "3.2.2"
+  dependencies:
+    "is-buffer" "^1.1.5"
+
+"kind-of@^4.0.0":
+  "integrity" "sha1-IIE989cSkosgc3hpGkUGb65y3Vc="
+  "resolved" "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz"
+  "version" "4.0.0"
+  dependencies:
+    "is-buffer" "^1.1.5"
+
+"kind-of@^5.0.0":
+  "integrity" "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0="
+  "resolved" "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz"
+  "version" "5.1.0"
+
+"kind-of@^6.0.0", "kind-of@^6.0.2":
+  "integrity" "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0="
+  "resolved" "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz"
+  "version" "6.0.3"
+
+"klona@^2.0.4":
+  "integrity" "sha1-e7Hjr/sMuGJFR+9+j2cI6i4538A="
+  "resolved" "https://registry.npm.taobao.org/klona/download/klona-2.0.4.tgz"
+  "version" "2.0.4"
+
+"ko-sleep@^1.0.3":
+  "integrity" "sha512-s05WGpvvzyTuRlRE8fM7ru2Z3O+InbJuBcckTWKg2W+2c1k6SnFa3IfiSSt0/peFrlYAXgNoxuJWWVNmWh+K/A=="
+  "resolved" "https://registry.npmmirror.com/ko-sleep/-/ko-sleep-1.1.4.tgz"
+  "version" "1.1.4"
+  dependencies:
+    "ms" "*"
+
+"launch-editor-middleware@^2.2.1":
+  "integrity" "sha1-4UsH5scVSwpLhqD9NFeE5FgEwVc="
+  "resolved" "https://registry.nlark.com/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz"
+  "version" "2.2.1"
+  dependencies:
+    "launch-editor" "^2.2.1"
+
+"launch-editor@^2.2.1":
+  "integrity" "sha1-hxtaPuOdZoD8wm03kwtu7aidsMo="
+  "resolved" "https://registry.npm.taobao.org/launch-editor/download/launch-editor-2.2.1.tgz"
+  "version" "2.2.1"
+  dependencies:
+    "chalk" "^2.3.0"
+    "shell-quote" "^1.6.1"
+
+"less-loader@^7.3.0":
+  "integrity" "sha1-+dbTbRhznWQgZ6Bftb1wyMYTF+U="
+  "resolved" "https://registry.nlark.com/less-loader/download/less-loader-7.3.0.tgz"
+  "version" "7.3.0"
+  dependencies:
+    "klona" "^2.0.4"
+    "loader-utils" "^2.0.0"
+    "schema-utils" "^3.0.0"
+
+"less@^3.5.0 || ^4.0.0", "less@^4.1.1":
+  "integrity" "sha1-Fb8lOpk5eR3GkIiMP/Qk8+bH7bo="
+  "resolved" "https://registry.npm.taobao.org/less/download/less-4.1.1.tgz?cache=0&sync_timestamp=1612065808998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fless%2Fdownload%2Fless-4.1.1.tgz"
+  "version" "4.1.1"
+  dependencies:
+    "copy-anything" "^2.0.1"
+    "parse-node-version" "^1.0.1"
+    "tslib" "^1.10.0"
+  optionalDependencies:
+    "errno" "^0.1.1"
+    "graceful-fs" "^4.1.2"
+    "image-size" "~0.5.0"
+    "make-dir" "^2.1.0"
+    "mime" "^1.4.1"
+    "needle" "^2.5.2"
+    "source-map" "~0.6.0"
+
+"levn@^0.3.0", "levn@~0.3.0":
+  "integrity" "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4="
+  "resolved" "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz"
+  "version" "0.3.0"
+  dependencies:
+    "prelude-ls" "~1.1.2"
+    "type-check" "~0.3.2"
+
+"lines-and-columns@^1.1.6":
+  "integrity" "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
+  "resolved" "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz"
+  "version" "1.1.6"
+
+"loader-fs-cache@^1.0.0":
+  "integrity" "sha1-8IZXZG1gcHi+LwoDL4vWndbyd9k="
+  "resolved" "https://registry.nlark.com/loader-fs-cache/download/loader-fs-cache-1.0.3.tgz"
+  "version" "1.0.3"
+  dependencies:
+    "find-cache-dir" "^0.1.1"
+    "mkdirp" "^0.5.1"
+
+"loader-runner@^2.3.1", "loader-runner@^2.4.0":
+  "integrity" "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c="
+  "resolved" "https://registry.nlark.com/loader-runner/download/loader-runner-2.4.0.tgz"
+  "version" "2.4.0"
+
+"loader-utils@^0.2.16":
+  "integrity" "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g="
+  "resolved" "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz"
+  "version" "0.2.17"
+  dependencies:
+    "big.js" "^3.1.3"
+    "emojis-list" "^2.0.0"
+    "json5" "^0.5.0"
+    "object-assign" "^4.0.1"
+
+"loader-utils@^1.0.2", "loader-utils@^1.1.0", "loader-utils@^1.2.3", "loader-utils@^1.4.0":
+  "integrity" "sha1-xXm140yzSxp07cbB+za/o3HVphM="
+  "resolved" "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz"
+  "version" "1.4.0"
+  dependencies:
+    "big.js" "^5.2.2"
+    "emojis-list" "^3.0.0"
+    "json5" "^1.0.1"
+
+"loader-utils@^2.0.0":
+  "integrity" "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A=="
+  "resolved" "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.2.tgz"
+  "version" "2.0.2"
+  dependencies:
+    "big.js" "^5.2.2"
+    "emojis-list" "^3.0.0"
+    "json5" "^2.1.2"
+
+"locate-path@^3.0.0":
+  "integrity" "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4="
+  "resolved" "https://registry.nlark.com/locate-path/download/locate-path-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "p-locate" "^3.0.0"
+    "path-exists" "^3.0.0"
+
+"locate-path@^5.0.0":
+  "integrity" "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA="
+  "resolved" "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz"
+  "version" "5.0.0"
+  dependencies:
+    "p-locate" "^4.1.0"
+
+"lodash-es@*", "lodash-es@^4.17.21":
+  "integrity" "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+  "resolved" "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz"
+  "version" "4.17.21"
+
+"lodash-unified@^1.0.2":
+  "integrity" "sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g=="
+  "resolved" "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.2.tgz"
+  "version" "1.0.2"
+
+"lodash.clonedeep@^4.5.0":
+  "integrity" "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
+  "resolved" "https://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz"
+  "version" "4.5.0"
+
+"lodash.debounce@^4.0.8":
+  "integrity" "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
+  "resolved" "https://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz"
+  "version" "4.0.8"
+
+"lodash.defaultsdeep@^4.6.1":
+  "integrity" "sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY="
+  "resolved" "https://registry.npm.taobao.org/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.1.tgz"
+  "version" "4.6.1"
+
+"lodash.kebabcase@^4.1.1":
+  "integrity" "sha1-hImxyw0p/4gZXM7KRI/21swpXDY="
+  "resolved" "https://registry.npm.taobao.org/lodash.kebabcase/download/lodash.kebabcase-4.1.1.tgz"
+  "version" "4.1.1"
+
+"lodash.mapvalues@^4.6.0":
+  "integrity" "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw="
+  "resolved" "https://registry.npm.taobao.org/lodash.mapvalues/download/lodash.mapvalues-4.6.0.tgz"
+  "version" "4.6.0"
+
+"lodash.memoize@^4.1.2":
+  "integrity" "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4="
+  "resolved" "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz"
+  "version" "4.1.2"
+
+"lodash.sortby@^4.7.0":
+  "integrity" "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
+  "resolved" "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz"
+  "version" "4.7.0"
+
+"lodash.transform@^4.6.0":
+  "integrity" "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A="
+  "resolved" "https://registry.npm.taobao.org/lodash.transform/download/lodash.transform-4.6.0.tgz"
+  "version" "4.6.0"
+
+"lodash.uniq@^4.5.0":
+  "integrity" "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+  "resolved" "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz"
+  "version" "4.5.0"
+
+"lodash@*", "lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19", "lodash@^4.17.20", "lodash@^4.17.21", "lodash@^4.17.3":
+  "integrity" "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw="
+  "resolved" "https://registry.npm.taobao.org/lodash/download/lodash-4.17.21.tgz"
+  "version" "4.17.21"
+
+"log-symbols@^2.2.0", "log-symbols@2.2.0":
+  "integrity" "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo="
+  "resolved" "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz"
+  "version" "2.2.0"
+  dependencies:
+    "chalk" "^2.0.1"
+
+"loglevel@^1.6.8":
+  "integrity" "sha1-AF/eL15uRwaPk1/yhXPhJe9y8Zc="
+  "resolved" "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.1.tgz?cache=0&sync_timestamp=1606312222145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.7.1.tgz"
+  "version" "1.7.1"
+
+"lower-case@^1.1.1":
+  "integrity" "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
+  "resolved" "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz"
+  "version" "1.1.4"
+
+"lru-cache@^4.0.1":
+  "integrity" "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80="
+  "resolved" "https://registry.nlark.com/lru-cache/download/lru-cache-4.1.5.tgz"
+  "version" "4.1.5"
+  dependencies:
+    "pseudomap" "^1.0.2"
+    "yallist" "^2.1.2"
+
+"lru-cache@^4.1.2":
+  "integrity" "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80="
+  "resolved" "https://registry.nlark.com/lru-cache/download/lru-cache-4.1.5.tgz"
+  "version" "4.1.5"
+  dependencies:
+    "pseudomap" "^1.0.2"
+    "yallist" "^2.1.2"
+
+"lru-cache@^5.1.1":
+  "integrity" "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA="
+  "resolved" "https://registry.nlark.com/lru-cache/download/lru-cache-5.1.1.tgz"
+  "version" "5.1.1"
+  dependencies:
+    "yallist" "^3.0.2"
+
+"magic-string@^0.25.7":
+  "integrity" "sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE="
+  "resolved" "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz"
+  "version" "0.25.7"
+  dependencies:
+    "sourcemap-codec" "^1.4.4"
+
+"make-dir@^2.0.0":
+  "integrity" "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU="
+  "resolved" "https://registry.nlark.com/make-dir/download/make-dir-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "pify" "^4.0.1"
+    "semver" "^5.6.0"
+
+"make-dir@^2.1.0":
+  "integrity" "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU="
+  "resolved" "https://registry.nlark.com/make-dir/download/make-dir-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "pify" "^4.0.1"
+    "semver" "^5.6.0"
+
+"make-dir@^3.0.2", "make-dir@^3.1.0":
+  "integrity" "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8="
+  "resolved" "https://registry.nlark.com/make-dir/download/make-dir-3.1.0.tgz"
+  "version" "3.1.0"
+  dependencies:
+    "semver" "^6.0.0"
+
+"map-cache@^0.2.2":
+  "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+  "resolved" "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz"
+  "version" "0.2.2"
+
+"map-visit@^1.0.0":
+  "integrity" "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48="
+  "resolved" "https://registry.nlark.com/map-visit/download/map-visit-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "object-visit" "^1.0.0"
+
+"md5.js@^1.3.4":
+  "integrity" "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8="
+  "resolved" "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz"
+  "version" "1.3.5"
+  dependencies:
+    "hash-base" "^3.0.0"
+    "inherits" "^2.0.1"
+    "safe-buffer" "^5.1.2"
+
+"mdn-data@2.0.14":
+  "integrity" "sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA="
+  "resolved" "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.14.tgz"
+  "version" "2.0.14"
+
+"mdn-data@2.0.4":
+  "integrity" "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs="
+  "resolved" "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.4.tgz"
+  "version" "2.0.4"
+
+"media-typer@0.3.0":
+  "integrity" "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+  "resolved" "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz"
+  "version" "0.3.0"
+
+"memoize-one@^6.0.0":
+  "integrity" "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
+  "resolved" "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz"
+  "version" "6.0.0"
+
+"memory-fs@^0.4.1":
+  "integrity" "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI="
+  "resolved" "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz"
+  "version" "0.4.1"
+  dependencies:
+    "errno" "^0.1.3"
+    "readable-stream" "^2.0.1"
+
+"memory-fs@^0.5.0":
+  "integrity" "sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw="
+  "resolved" "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.5.0.tgz"
+  "version" "0.5.0"
+  dependencies:
+    "errno" "^0.1.3"
+    "readable-stream" "^2.0.1"
+
+"merge-descriptors@^1.0.1", "merge-descriptors@1.0.1":
+  "integrity" "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+  "resolved" "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz"
+  "version" "1.0.1"
+
+"merge-source-map@^1.1.0":
+  "integrity" "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY="
+  "resolved" "https://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz"
+  "version" "1.1.0"
+  dependencies:
+    "source-map" "^0.6.1"
+
+"merge-stream@^2.0.0":
+  "integrity" "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A="
+  "resolved" "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz"
+  "version" "2.0.0"
+
+"merge2@^1.2.3", "merge2@^1.3.0":
+  "integrity" "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4="
+  "resolved" "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz"
+  "version" "1.4.1"
+
+"methods@~1.1.2":
+  "integrity" "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+  "resolved" "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz"
+  "version" "1.1.2"
+
+"micromatch@^3.1.10", "micromatch@^3.1.4":
+  "integrity" "sha1-cIWbyVyYQJUvNZoGij/En57PrCM="
+  "resolved" "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz"
+  "version" "3.1.10"
+  dependencies:
+    "arr-diff" "^4.0.0"
+    "array-unique" "^0.3.2"
+    "braces" "^2.3.1"
+    "define-property" "^2.0.2"
+    "extend-shallow" "^3.0.2"
+    "extglob" "^2.0.4"
+    "fragment-cache" "^0.2.1"
+    "kind-of" "^6.0.2"
+    "nanomatch" "^1.2.9"
+    "object.pick" "^1.3.0"
+    "regex-not" "^1.0.0"
+    "snapdragon" "^0.8.1"
+    "to-regex" "^3.0.2"
+
+"micromatch@^4.0.2":
+  "integrity" "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k="
+  "resolved" "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz"
+  "version" "4.0.4"
+  dependencies:
+    "braces" "^3.0.1"
+    "picomatch" "^2.2.3"
+
+"micromatch@^4.0.4":
+  "integrity" "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k="
+  "resolved" "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz"
+  "version" "4.0.4"
+  dependencies:
+    "braces" "^3.0.1"
+    "picomatch" "^2.2.3"
+
+"miller-rabin@^4.0.0":
+  "integrity" "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0="
+  "resolved" "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "bn.js" "^4.0.0"
+    "brorand" "^1.0.1"
+
+"mime-db@>= 1.43.0 < 2", "mime-db@1.48.0":
+  "integrity" "sha1-41sxBF3X6to6qtU37YijOvvvLR0="
+  "resolved" "https://registry.nlark.com/mime-db/download/mime-db-1.48.0.tgz?cache=0&sync_timestamp=1622433567590&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-db%2Fdownload%2Fmime-db-1.48.0.tgz"
+  "version" "1.48.0"
+
+"mime-types@^2.1.12", "mime-types@~2.1.17", "mime-types@~2.1.19", "mime-types@~2.1.24":
+  "integrity" "sha1-oA12t0MXxh+cLbIhi46fjpxcnms="
+  "resolved" "https://registry.nlark.com/mime-types/download/mime-types-2.1.31.tgz?cache=0&sync_timestamp=1622569304088&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.31.tgz"
+  "version" "2.1.31"
+  dependencies:
+    "mime-db" "1.48.0"
+
+"mime@^1.4.1":
+  "integrity" "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE="
+  "resolved" "https://registry.nlark.com/mime/download/mime-1.6.0.tgz"
+  "version" "1.6.0"
+
+"mime@^2.4.4", "mime@^2.4.5", "mime@^2.5.2":
+  "integrity" "sha1-bj3GzCuVEGQ4MOXxnVy3U9pe6r4="
+  "resolved" "https://registry.nlark.com/mime/download/mime-2.5.2.tgz"
+  "version" "2.5.2"
+
+"mime@1.6.0":
+  "integrity" "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE="
+  "resolved" "https://registry.nlark.com/mime/download/mime-1.6.0.tgz"
+  "version" "1.6.0"
+
+"mimic-fn@^1.0.0":
+  "integrity" "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI="
+  "resolved" "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz?cache=0&sync_timestamp=1617823674050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-1.2.0.tgz"
+  "version" "1.2.0"
+
+"mimic-fn@^2.1.0":
+  "integrity" "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs="
+  "resolved" "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1617823674050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz"
+  "version" "2.1.0"
+
+"mini-css-extract-plugin@^0.9.0":
+  "integrity" "sha1-R/LPB6oWWrNXM7H8l9TEbAVkM54="
+  "resolved" "https://registry.nlark.com/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.9.0.tgz"
+  "version" "0.9.0"
+  dependencies:
+    "loader-utils" "^1.1.0"
+    "normalize-url" "1.9.1"
+    "schema-utils" "^1.0.0"
+    "webpack-sources" "^1.1.0"
+
+"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1":
+  "integrity" "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc="
+  "resolved" "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz"
+  "version" "1.0.1"
+
+"minimalistic-crypto-utils@^1.0.1":
+  "integrity" "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+  "resolved" "https://registry.nlark.com/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz"
+  "version" "1.0.1"
+
+"minimatch@^3.0.4", "minimatch@3.0.4":
+  "integrity" "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM="
+  "resolved" "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz"
+  "version" "3.0.4"
+  dependencies:
+    "brace-expansion" "^1.1.7"
+
+"minimist@^1.1.0", "minimist@^1.2.0", "minimist@^1.2.5":
+  "integrity" "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI="
+  "resolved" "https://registry.nlark.com/minimist/download/minimist-1.2.5.tgz"
+  "version" "1.2.5"
+
+"minipass@^3.1.1":
+  "integrity" "sha1-fUL/HzljVILhX5zbUxhN7r1YFf0="
+  "resolved" "https://registry.npm.taobao.org/minipass/download/minipass-3.1.3.tgz"
+  "version" "3.1.3"
+  dependencies:
+    "yallist" "^4.0.0"
+
+"mississippi@^3.0.0":
+  "integrity" "sha1-6goykfl+C16HdrNj1fChLZTGcCI="
+  "resolved" "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "concat-stream" "^1.5.0"
+    "duplexify" "^3.4.2"
+    "end-of-stream" "^1.1.0"
+    "flush-write-stream" "^1.0.0"
+    "from2" "^2.1.0"
+    "parallel-transform" "^1.1.0"
+    "pump" "^3.0.0"
+    "pumpify" "^1.3.3"
+    "stream-each" "^1.1.0"
+    "through2" "^2.0.0"
+
+"mixin-deep@^1.2.0":
+  "integrity" "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY="
+  "resolved" "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz"
+  "version" "1.3.2"
+  dependencies:
+    "for-in" "^1.0.2"
+    "is-extendable" "^1.0.1"
+
+"mkdirp@^0.5.1", "mkdirp@^0.5.3", "mkdirp@^0.5.5", "mkdirp@~0.5.1":
+  "integrity" "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8="
+  "resolved" "https://registry.nlark.com/mkdirp/download/mkdirp-0.5.5.tgz"
+  "version" "0.5.5"
+  dependencies:
+    "minimist" "^1.2.5"
+
+"mkdirp@~1.0.4":
+  "integrity" "sha1-PrXtYmInVteaXw4qIh3+utdcL34="
+  "resolved" "https://registry.nlark.com/mkdirp/download/mkdirp-1.0.4.tgz"
+  "version" "1.0.4"
+
+"mkdirp@0.5.4":
+  "integrity" "sha1-/QFQSmeX7Fyb6B/0PSBJYe1kpRI="
+  "resolved" "https://registry.nlark.com/mkdirp/download/mkdirp-0.5.4.tgz"
+  "version" "0.5.4"
+  dependencies:
+    "minimist" "^1.2.5"
+
+"mocha@^6.2.2", "mocha@>=4 <=7":
+  "integrity" "sha1-5khDIYHYuZOTQQISZkRQpMHjGRI="
+  "resolved" "https://registry.nlark.com/mocha/download/mocha-6.2.3.tgz"
+  "version" "6.2.3"
+  dependencies:
+    "ansi-colors" "3.2.3"
+    "browser-stdout" "1.3.1"
+    "debug" "3.2.6"
+    "diff" "3.5.0"
+    "escape-string-regexp" "1.0.5"
+    "find-up" "3.0.0"
+    "glob" "7.1.3"
+    "growl" "1.10.5"
+    "he" "1.2.0"
+    "js-yaml" "3.13.1"
+    "log-symbols" "2.2.0"
+    "minimatch" "3.0.4"
+    "mkdirp" "0.5.4"
+    "ms" "2.1.1"
+    "node-environment-flags" "1.0.5"
+    "object.assign" "4.1.0"
+    "strip-json-comments" "2.0.1"
+    "supports-color" "6.0.0"
+    "which" "1.3.1"
+    "wide-align" "1.1.3"
+    "yargs" "13.3.2"
+    "yargs-parser" "13.1.2"
+    "yargs-unparser" "1.6.0"
+
+"mochapack@^1.1.15":
+  "integrity" "sha1-Qmx5O4ce0AbHgRctorFfYS8R8tw="
+  "resolved" "https://registry.nlark.com/mochapack/download/mochapack-1.1.15.tgz"
+  "version" "1.1.15"
+  dependencies:
+    "@babel/runtime-corejs2" "^7.0.0"
+    "chalk" "^2.4.2"
+    "chokidar" "^2.0.0"
+    "glob-parent" "5.1.0"
+    "globby" "^10.0.1"
+    "interpret" "^1.2.0"
+    "is-glob" "^4.0.1"
+    "loader-utils" "^1.2.3"
+    "lodash" "^4.17.15"
+    "memory-fs" "^0.4.1"
+    "minimatch" "^3.0.4"
+    "nodent-runtime" "^3.2.1"
+    "normalize-path" "^3.0.0"
+    "progress" "^2.0.3"
+    "source-map-support" "^0.5.13"
+    "toposort" "^2.0.2"
+    "yargs" "14.0.0"
+
+"move-concurrently@^1.0.1":
+  "integrity" "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I="
+  "resolved" "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "aproba" "^1.1.1"
+    "copy-concurrently" "^1.0.0"
+    "fs-write-stream-atomic" "^1.0.8"
+    "mkdirp" "^0.5.1"
+    "rimraf" "^2.5.4"
+    "run-queue" "^1.0.3"
+
+"ms@*", "ms@^2.0.0", "ms@^2.1.1", "ms@2.1.2":
+  "integrity" "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
+  "resolved" "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz"
+  "version" "2.1.2"
+
+"ms@2.0.0":
+  "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+  "resolved" "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz"
+  "version" "2.0.0"
+
+"ms@2.1.1":
+  "integrity" "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo="
+  "resolved" "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz"
+  "version" "2.1.1"
+
+"multicast-dns-service-types@^1.1.0":
+  "integrity" "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE="
+  "resolved" "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz"
+  "version" "1.1.0"
+
+"multicast-dns@^6.0.1":
+  "integrity" "sha1-oOx72QVcQoL3kMPIL04o2zsxsik="
+  "resolved" "https://registry.nlark.com/multicast-dns/download/multicast-dns-6.2.3.tgz?cache=0&sync_timestamp=1621891072224&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmulticast-dns%2Fdownload%2Fmulticast-dns-6.2.3.tgz"
+  "version" "6.2.3"
+  dependencies:
+    "dns-packet" "^1.3.1"
+    "thunky" "^1.0.2"
+
+"mute-stream@0.0.8":
+  "integrity" "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0="
+  "resolved" "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz"
+  "version" "0.0.8"
+
+"mz-modules@^2.1.0":
+  "integrity" "sha512-sjk8lcRW3vrVYnZ+W+67L/2rL+jbO5K/N6PFGIcLWTiYytNr22Ah9FDXFs+AQntTM1boZcoHi5qS+CV1seuPog=="
+  "resolved" "https://registry.npmmirror.com/mz-modules/-/mz-modules-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "glob" "^7.1.2"
+    "ko-sleep" "^1.0.3"
+    "mkdirp" "^0.5.1"
+    "pump" "^3.0.0"
+    "rimraf" "^2.6.1"
+
+"mz@^2.4.0", "mz@^2.7.0":
+  "integrity" "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI="
+  "resolved" "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz"
+  "version" "2.7.0"
+  dependencies:
+    "any-promise" "^1.0.0"
+    "object-assign" "^4.0.1"
+    "thenify-all" "^1.0.0"
+
+"nanoid@^3.1.23":
+  "integrity" "sha1-90QIbOfCvEfuCoRyV01ceOQYOoE="
+  "resolved" "https://registry.nlark.com/nanoid/download/nanoid-3.1.23.tgz?cache=0&sync_timestamp=1620674856899&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnanoid%2Fdownload%2Fnanoid-3.1.23.tgz"
+  "version" "3.1.23"
+
+"nanomatch@^1.2.9":
+  "integrity" "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk="
+  "resolved" "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz"
+  "version" "1.2.13"
+  dependencies:
+    "arr-diff" "^4.0.0"
+    "array-unique" "^0.3.2"
+    "define-property" "^2.0.2"
+    "extend-shallow" "^3.0.2"
+    "fragment-cache" "^0.2.1"
+    "is-windows" "^1.0.2"
+    "kind-of" "^6.0.2"
+    "object.pick" "^1.3.0"
+    "regex-not" "^1.0.0"
+    "snapdragon" "^0.8.1"
+    "to-regex" "^3.0.1"
+
+"natural-compare@^1.4.0":
+  "integrity" "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
+  "resolved" "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz"
+  "version" "1.4.0"
+
+"needle@^2.5.2":
+  "integrity" "sha1-HI75waLCncweg9c4Cde8aByAoEg="
+  "resolved" "https://registry.nlark.com/needle/download/needle-2.8.0.tgz"
+  "version" "2.8.0"
+  dependencies:
+    "debug" "^3.2.6"
+    "iconv-lite" "^0.4.4"
+    "sax" "^1.2.4"
+
+"negotiator@0.6.2":
+  "integrity" "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs="
+  "resolved" "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz"
+  "version" "0.6.2"
+
+"neo-async@^2.5.0", "neo-async@^2.6.0", "neo-async@^2.6.1":
+  "integrity" "sha1-tKr7k+OustgXTKU88WOrfXMIMF8="
+  "resolved" "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz"
+  "version" "2.6.2"
+
+"netmask@^2.0.2":
+  "integrity" "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="
+  "resolved" "https://registry.npmmirror.com/netmask/-/netmask-2.0.2.tgz"
+  "version" "2.0.2"
+
+"nice-try@^1.0.4":
+  "integrity" "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y="
+  "resolved" "https://registry.nlark.com/nice-try/download/nice-try-1.0.5.tgz"
+  "version" "1.0.5"
+
+"no-case@^2.2.0":
+  "integrity" "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw="
+  "resolved" "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz"
+  "version" "2.3.2"
+  dependencies:
+    "lower-case" "^1.1.1"
+
+"node-environment-flags@1.0.5":
+  "integrity" "sha1-+pMCdfW/Xa4YjWGSsktMi7rD12o="
+  "resolved" "https://registry.npm.taobao.org/node-environment-flags/download/node-environment-flags-1.0.5.tgz"
+  "version" "1.0.5"
+  dependencies:
+    "object.getownpropertydescriptors" "^2.0.3"
+    "semver" "^5.7.0"
+
+"node-fetch@^2.6.7":
+  "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ=="
+  "resolved" "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz"
+  "version" "2.6.7"
+  dependencies:
+    "whatwg-url" "^5.0.0"
+
+"node-forge@^0.10.0":
+  "integrity" "sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M="
+  "resolved" "https://registry.npm.taobao.org/node-forge/download/node-forge-0.10.0.tgz"
+  "version" "0.10.0"
+
+"node-libs-browser@^2.2.1":
+  "integrity" "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU="
+  "resolved" "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz"
+  "version" "2.2.1"
+  dependencies:
+    "assert" "^1.1.1"
+    "browserify-zlib" "^0.2.0"
+    "buffer" "^4.3.0"
+    "console-browserify" "^1.1.0"
+    "constants-browserify" "^1.0.0"
+    "crypto-browserify" "^3.11.0"
+    "domain-browser" "^1.1.1"
+    "events" "^3.0.0"
+    "https-browserify" "^1.0.0"
+    "os-browserify" "^0.3.0"
+    "path-browserify" "0.0.1"
+    "process" "^0.11.10"
+    "punycode" "^1.2.4"
+    "querystring-es3" "^0.2.0"
+    "readable-stream" "^2.3.3"
+    "stream-browserify" "^2.0.1"
+    "stream-http" "^2.7.2"
+    "string_decoder" "^1.0.0"
+    "timers-browserify" "^2.0.4"
+    "tty-browserify" "0.0.0"
+    "url" "^0.11.0"
+    "util" "^0.11.0"
+    "vm-browserify" "^1.0.1"
+
+"node-releases@^1.1.71":
+  "integrity" "sha1-3U6B3dUnf/hGuAtSu0DEnt96eyA="
+  "resolved" "https://registry.nlark.com/node-releases/download/node-releases-1.1.73.tgz"
+  "version" "1.1.73"
+
+"nodent-runtime@^3.2.1":
+  "integrity" "sha1-nidV2F4592Qojw1HUuvP4+VB4A4="
+  "resolved" "https://registry.npm.taobao.org/nodent-runtime/download/nodent-runtime-3.2.1.tgz"
+  "version" "3.2.1"
+
+"normalize-package-data@^2.5.0":
+  "integrity" "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg="
+  "resolved" "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz?cache=0&sync_timestamp=1616086930281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-2.5.0.tgz"
+  "version" "2.5.0"
+  dependencies:
+    "hosted-git-info" "^2.1.4"
+    "resolve" "^1.10.0"
+    "semver" "2 || 3 || 4 || 5"
+    "validate-npm-package-license" "^3.0.1"
+
+"normalize-path@^1.0.0":
+  "integrity" "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k="
+  "resolved" "https://registry.nlark.com/normalize-path/download/normalize-path-1.0.0.tgz"
+  "version" "1.0.0"
+
+"normalize-path@^2.1.1":
+  "integrity" "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk="
+  "resolved" "https://registry.nlark.com/normalize-path/download/normalize-path-2.1.1.tgz"
+  "version" "2.1.1"
+  dependencies:
+    "remove-trailing-separator" "^1.0.1"
+
+"normalize-path@^3.0.0", "normalize-path@~3.0.0":
+  "integrity" "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU="
+  "resolved" "https://registry.nlark.com/normalize-path/download/normalize-path-3.0.0.tgz"
+  "version" "3.0.0"
+
+"normalize-range@^0.1.2":
+  "integrity" "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
+  "resolved" "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz"
+  "version" "0.1.2"
+
+"normalize-url@^3.0.0":
+  "integrity" "sha1-suHE3E98bVd0PfczpPWXjRhlBVk="
+  "resolved" "https://registry.nlark.com/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1625826704090&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz"
+  "version" "3.3.0"
+
+"normalize-url@1.9.1":
+  "integrity" "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw="
+  "resolved" "https://registry.nlark.com/normalize-url/download/normalize-url-1.9.1.tgz?cache=0&sync_timestamp=1625826704090&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz"
+  "version" "1.9.1"
+  dependencies:
+    "object-assign" "^4.0.1"
+    "prepend-http" "^1.0.0"
+    "query-string" "^4.1.0"
+    "sort-keys" "^1.0.0"
+
+"normalize-wheel-es@^1.2.0":
+  "integrity" "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
+  "resolved" "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz"
+  "version" "1.2.0"
+
+"npm-run-path@^2.0.0":
+  "integrity" "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8="
+  "resolved" "https://registry.nlark.com/npm-run-path/download/npm-run-path-2.0.2.tgz"
+  "version" "2.0.2"
+  dependencies:
+    "path-key" "^2.0.0"
+
+"npm-run-path@^4.0.0":
+  "integrity" "sha1-t+zR5e1T2o43pV4cImnguX7XSOo="
+  "resolved" "https://registry.nlark.com/npm-run-path/download/npm-run-path-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "path-key" "^3.0.0"
+
+"nth-check@^1.0.2":
+  "integrity" "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw="
+  "resolved" "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz"
+  "version" "1.0.2"
+  dependencies:
+    "boolbase" "~1.0.0"
+
+"nth-check@^2.0.0":
+  "integrity" "sha1-G7T22scAcvwxPoyc0UF7UHTAoSU="
+  "resolved" "https://registry.npm.taobao.org/nth-check/download/nth-check-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "boolbase" "^1.0.0"
+
+"num2fraction@^1.2.2":
+  "integrity" "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+  "resolved" "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz"
+  "version" "1.2.2"
+
+"nwsapi@^2.2.0":
+  "integrity" "sha1-IEh5qePQaP8qVROcLHcngGgaOLc="
+  "resolved" "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz"
+  "version" "2.2.0"
+
+"oauth-sign@~0.9.0":
+  "integrity" "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU="
+  "resolved" "https://registry.nlark.com/oauth-sign/download/oauth-sign-0.9.0.tgz"
+  "version" "0.9.0"
+
+"object-assign@^4.0.1", "object-assign@^4.1.0", "object-assign@^4.1.1":
+  "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+  "resolved" "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz"
+  "version" "4.1.1"
+
+"object-copy@^0.1.0":
+  "integrity" "sha1-fn2Fi3gb18mRpBupde04EnVOmYw="
+  "resolved" "https://registry.nlark.com/object-copy/download/object-copy-0.1.0.tgz"
+  "version" "0.1.0"
+  dependencies:
+    "copy-descriptor" "^0.1.0"
+    "define-property" "^0.2.5"
+    "kind-of" "^3.0.3"
+
+"object-hash@^1.1.4":
+  "integrity" "sha1-/eRSCYqVHLFF8Dm7fUVUSd3BJt8="
+  "resolved" "https://registry.nlark.com/object-hash/download/object-hash-1.3.1.tgz?cache=0&sync_timestamp=1622019485009&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-hash%2Fdownload%2Fobject-hash-1.3.1.tgz"
+  "version" "1.3.1"
+
+"object-inspect@^1.10.3":
+  "integrity" "sha1-nc6xRs7dQUig2eUauI00z1CZIrE="
+  "resolved" "https://registry.nlark.com/object-inspect/download/object-inspect-1.11.0.tgz"
+  "version" "1.11.0"
+
+"object-is@^1.0.1":
+  "integrity" "sha1-ud7qpfx/GEag+uzc7sE45XePU6w="
+  "resolved" "https://registry.npm.taobao.org/object-is/download/object-is-1.1.5.tgz?cache=0&sync_timestamp=1613857744782&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.5.tgz"
+  "version" "1.1.5"
+  dependencies:
+    "call-bind" "^1.0.2"
+    "define-properties" "^1.1.3"
+
+"object-keys@^1.0.11", "object-keys@^1.0.12", "object-keys@^1.1.1":
+  "integrity" "sha1-HEfyct8nfzsdrwYWd9nILiMixg4="
+  "resolved" "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz"
+  "version" "1.1.1"
+
+"object-visit@^1.0.0":
+  "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs="
+  "resolved" "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "isobject" "^3.0.0"
+
+"object.assign@^4.1.0", "object.assign@^4.1.2":
+  "integrity" "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA="
+  "resolved" "https://registry.nlark.com/object.assign/download/object.assign-4.1.2.tgz"
+  "version" "4.1.2"
+  dependencies:
+    "call-bind" "^1.0.0"
+    "define-properties" "^1.1.3"
+    "has-symbols" "^1.0.1"
+    "object-keys" "^1.1.1"
+
+"object.assign@4.1.0":
+  "integrity" "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo="
+  "resolved" "https://registry.nlark.com/object.assign/download/object.assign-4.1.0.tgz"
+  "version" "4.1.0"
+  dependencies:
+    "define-properties" "^1.1.2"
+    "function-bind" "^1.1.1"
+    "has-symbols" "^1.0.0"
+    "object-keys" "^1.0.11"
+
+"object.getownpropertydescriptors@^2.0.3":
+  "integrity" "sha1-G9Y66s8NXS0vMbXjk7A6fGAaI/c="
+  "resolved" "https://registry.nlark.com/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.2.tgz"
+  "version" "2.1.2"
+  dependencies:
+    "call-bind" "^1.0.2"
+    "define-properties" "^1.1.3"
+    "es-abstract" "^1.18.0-next.2"
+
+"object.pick@^1.3.0":
+  "integrity" "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c="
+  "resolved" "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz"
+  "version" "1.3.0"
+  dependencies:
+    "isobject" "^3.0.1"
+
+"object.values@^1.1.0":
+  "integrity" "sha1-DSc3YoM+gWtpOmN9MAc+cFFTWzA="
+  "resolved" "https://registry.nlark.com/object.values/download/object.values-1.1.4.tgz?cache=0&sync_timestamp=1622070650699&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject.values%2Fdownload%2Fobject.values-1.1.4.tgz"
+  "version" "1.1.4"
+  dependencies:
+    "call-bind" "^1.0.2"
+    "define-properties" "^1.1.3"
+    "es-abstract" "^1.18.2"
+
+"obuf@^1.0.0", "obuf@^1.1.2":
+  "integrity" "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4="
+  "resolved" "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz"
+  "version" "1.1.2"
+
+"on-finished@~2.3.0":
+  "integrity" "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc="
+  "resolved" "https://registry.nlark.com/on-finished/download/on-finished-2.3.0.tgz"
+  "version" "2.3.0"
+  dependencies:
+    "ee-first" "1.1.1"
+
+"on-headers@~1.0.2":
+  "integrity" "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8="
+  "resolved" "https://registry.nlark.com/on-headers/download/on-headers-1.0.2.tgz"
+  "version" "1.0.2"
+
+"once@^1.3.0", "once@^1.3.1", "once@^1.4.0":
+  "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E="
+  "resolved" "https://registry.nlark.com/once/download/once-1.4.0.tgz"
+  "version" "1.4.0"
+  dependencies:
+    "wrappy" "1"
+
+"onetime@^2.0.0":
+  "integrity" "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ="
+  "resolved" "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz"
+  "version" "2.0.1"
+  dependencies:
+    "mimic-fn" "^1.0.0"
+
+"onetime@^5.1.0":
+  "integrity" "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4="
+  "resolved" "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz"
+  "version" "5.1.2"
+  dependencies:
+    "mimic-fn" "^2.1.0"
+
+"open@^6.3.0":
+  "integrity" "sha1-XBPpbQ3IlGhhZPGJZez+iJ7PyKk="
+  "resolved" "https://registry.nlark.com/open/download/open-6.4.0.tgz"
+  "version" "6.4.0"
+  dependencies:
+    "is-wsl" "^1.1.0"
+
+"opener@^1.5.1":
+  "integrity" "sha1-XTfh81B3udysQwE3InGv3rKhNZg="
+  "resolved" "https://registry.nlark.com/opener/download/opener-1.5.2.tgz"
+  "version" "1.5.2"
+
+"opn@^5.5.0":
+  "integrity" "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w="
+  "resolved" "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz"
+  "version" "5.5.0"
+  dependencies:
+    "is-wsl" "^1.1.0"
+
+"optionator@^0.8.1", "optionator@^0.8.3":
+  "integrity" "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU="
+  "resolved" "https://registry.nlark.com/optionator/download/optionator-0.8.3.tgz"
+  "version" "0.8.3"
+  dependencies:
+    "deep-is" "~0.1.3"
+    "fast-levenshtein" "~2.0.6"
+    "levn" "~0.3.0"
+    "prelude-ls" "~1.1.2"
+    "type-check" "~0.3.2"
+    "word-wrap" "~1.2.3"
+
+"ora@^3.4.0":
+  "integrity" "sha1-vwdSSRBZo+8+1MhQl1Md6f280xg="
+  "resolved" "https://registry.nlark.com/ora/download/ora-3.4.0.tgz?cache=0&sync_timestamp=1623137978561&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fora%2Fdownload%2Fora-3.4.0.tgz"
+  "version" "3.4.0"
+  dependencies:
+    "chalk" "^2.4.2"
+    "cli-cursor" "^2.1.0"
+    "cli-spinners" "^2.0.0"
+    "log-symbols" "^2.2.0"
+    "strip-ansi" "^5.2.0"
+    "wcwidth" "^1.0.1"
+
+"original@^1.0.0":
+  "integrity" "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8="
+  "resolved" "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz"
+  "version" "1.0.2"
+  dependencies:
+    "url-parse" "^1.4.3"
+
+"os-browserify@^0.3.0":
+  "integrity" "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+  "resolved" "https://registry.nlark.com/os-browserify/download/os-browserify-0.3.0.tgz"
+  "version" "0.3.0"
+
+"os-name@~1.0.3":
+  "integrity" "sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew=="
+  "resolved" "https://registry.npmmirror.com/os-name/-/os-name-1.0.3.tgz"
+  "version" "1.0.3"
+  dependencies:
+    "osx-release" "^1.0.0"
+    "win-release" "^1.0.0"
+
+"os-tmpdir@~1.0.2":
+  "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+  "resolved" "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz"
+  "version" "1.0.2"
+
+"osx-release@^1.0.0":
+  "integrity" "sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A=="
+  "resolved" "https://registry.npmmirror.com/osx-release/-/osx-release-1.1.0.tgz"
+  "version" "1.1.0"
+  dependencies:
+    "minimist" "^1.1.0"
+
+"p-finally@^1.0.0":
+  "integrity" "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+  "resolved" "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz"
+  "version" "1.0.0"
+
+"p-finally@^2.0.0":
+  "integrity" "sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE="
+  "resolved" "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz"
+  "version" "2.0.1"
+
+"p-limit@^2.0.0", "p-limit@^2.2.0", "p-limit@^2.2.1":
+  "integrity" "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE="
+  "resolved" "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz"
+  "version" "2.3.0"
+  dependencies:
+    "p-try" "^2.0.0"
+
+"p-locate@^3.0.0":
+  "integrity" "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ="
+  "resolved" "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "p-limit" "^2.0.0"
+
+"p-locate@^4.1.0":
+  "integrity" "sha1-o0KLtwiLOmApL2aRkni3wpetTwc="
+  "resolved" "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz"
+  "version" "4.1.0"
+  dependencies:
+    "p-limit" "^2.2.0"
+
+"p-map@^2.0.0":
+  "integrity" "sha1-MQko/u+cnsxltosXaTAYpmXOoXU="
+  "resolved" "https://registry.nlark.com/p-map/download/p-map-2.1.0.tgz"
+  "version" "2.1.0"
+
+"p-retry@^3.0.1":
+  "integrity" "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg="
+  "resolved" "https://registry.nlark.com/p-retry/download/p-retry-3.0.1.tgz"
+  "version" "3.0.1"
+  dependencies:
+    "retry" "^0.12.0"
+
+"p-try@^2.0.0":
+  "integrity" "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY="
+  "resolved" "https://registry.nlark.com/p-try/download/p-try-2.2.0.tgz"
+  "version" "2.2.0"
+
+"pac-proxy-agent@^5.0.0":
+  "integrity" "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ=="
+  "resolved" "https://registry.npmmirror.com/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz"
+  "version" "5.0.0"
+  dependencies:
+    "@tootallnate/once" "1"
+    "agent-base" "6"
+    "debug" "4"
+    "get-uri" "3"
+    "http-proxy-agent" "^4.0.1"
+    "https-proxy-agent" "5"
+    "pac-resolver" "^5.0.0"
+    "raw-body" "^2.2.0"
+    "socks-proxy-agent" "5"
+
+"pac-resolver@^5.0.0":
+  "integrity" "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q=="
+  "resolved" "https://registry.npmmirror.com/pac-resolver/-/pac-resolver-5.0.1.tgz"
+  "version" "5.0.1"
+  dependencies:
+    "degenerator" "^3.0.2"
+    "ip" "^1.1.5"
+    "netmask" "^2.0.2"
+
+"pako@~1.0.5":
+  "integrity" "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8="
+  "resolved" "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1610208924901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz"
+  "version" "1.0.11"
+
+"parallel-transform@^1.1.0":
+  "integrity" "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw="
+  "resolved" "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz"
+  "version" "1.2.0"
+  dependencies:
+    "cyclist" "^1.0.1"
+    "inherits" "^2.0.3"
+    "readable-stream" "^2.1.5"
+
+"param-case@2.1.x":
+  "integrity" "sha1-35T9jPZTHs915r75oIWPvHK+Ikc="
+  "resolved" "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz?cache=0&sync_timestamp=1606867311360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparam-case%2Fdownload%2Fparam-case-2.1.1.tgz"
+  "version" "2.1.1"
+  dependencies:
+    "no-case" "^2.2.0"
+
+"parent-module@^1.0.0":
+  "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="
+  "resolved" "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "callsites" "^3.0.0"
+
+"parse-asn1@^5.0.0", "parse-asn1@^5.1.5":
+  "integrity" "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ="
+  "resolved" "https://registry.nlark.com/parse-asn1/download/parse-asn1-5.1.6.tgz"
+  "version" "5.1.6"
+  dependencies:
+    "asn1.js" "^5.2.0"
+    "browserify-aes" "^1.0.0"
+    "evp_bytestokey" "^1.0.0"
+    "pbkdf2" "^3.0.3"
+    "safe-buffer" "^5.1.1"
+
+"parse-json@^4.0.0":
+  "integrity" "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA="
+  "resolved" "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1610966676829&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz"
+  "version" "4.0.0"
+  dependencies:
+    "error-ex" "^1.3.1"
+    "json-parse-better-errors" "^1.0.1"
+
+"parse-json@^5.0.0":
+  "integrity" "sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80="
+  "resolved" "https://registry.npm.taobao.org/parse-json/download/parse-json-5.2.0.tgz?cache=0&sync_timestamp=1610966676829&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-5.2.0.tgz"
+  "version" "5.2.0"
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "error-ex" "^1.3.1"
+    "json-parse-even-better-errors" "^2.3.0"
+    "lines-and-columns" "^1.1.6"
+
+"parse-node-version@^1.0.1":
+  "integrity" "sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs="
+  "resolved" "https://registry.npm.taobao.org/parse-node-version/download/parse-node-version-1.0.1.tgz"
+  "version" "1.0.1"
+
+"parse5-htmlparser2-tree-adapter@^6.0.0":
+  "integrity" "sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY="
+  "resolved" "https://registry.npm.taobao.org/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-6.0.1.tgz"
+  "version" "6.0.1"
+  dependencies:
+    "parse5" "^6.0.1"
+
+"parse5@^5.1.1":
+  "integrity" "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg="
+  "resolved" "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz"
+  "version" "5.1.1"
+
+"parse5@^6.0.1":
+  "integrity" "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws="
+  "resolved" "https://registry.npm.taobao.org/parse5/download/parse5-6.0.1.tgz"
+  "version" "6.0.1"
+
+"parse5@5.1.0":
+  "integrity" "sha1-xZNByXI/QUxFKXVWTHwApo1YrNI="
+  "resolved" "https://registry.npm.taobao.org/parse5/download/parse5-5.1.0.tgz"
+  "version" "5.1.0"
+
+"parseurl@~1.3.2", "parseurl@~1.3.3":
+  "integrity" "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ="
+  "resolved" "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz"
+  "version" "1.3.3"
+
+"pascalcase@^0.1.1":
+  "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+  "resolved" "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz"
+  "version" "0.1.1"
+
+"path-browserify@0.0.1":
+  "integrity" "sha1-5sTd1+06onxoogzE5Q4aTug7vEo="
+  "resolved" "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz"
+  "version" "0.0.1"
+
+"path-dirname@^1.0.0":
+  "integrity" "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+  "resolved" "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz"
+  "version" "1.0.2"
+
+"path-exists@^2.0.0":
+  "integrity" "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s="
+  "resolved" "https://registry.nlark.com/path-exists/download/path-exists-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "pinkie-promise" "^2.0.0"
+
+"path-exists@^3.0.0":
+  "integrity" "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+  "resolved" "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz"
+  "version" "3.0.0"
+
+"path-exists@^4.0.0":
+  "integrity" "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM="
+  "resolved" "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz"
+  "version" "4.0.0"
+
+"path-is-absolute@^1.0.0":
+  "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+  "resolved" "https://registry.nlark.com/path-is-absolute/download/path-is-absolute-1.0.1.tgz"
+  "version" "1.0.1"
+
+"path-is-inside@^1.0.2":
+  "integrity" "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
+  "resolved" "https://registry.nlark.com/path-is-inside/download/path-is-inside-1.0.2.tgz"
+  "version" "1.0.2"
+
+"path-key@^2.0.0":
+  "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+  "resolved" "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz"
+  "version" "2.0.1"
+
+"path-key@^2.0.1":
+  "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+  "resolved" "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz"
+  "version" "2.0.1"
+
+"path-key@^3.0.0", "path-key@^3.1.0":
+  "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+  "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
+  "version" "3.1.1"
+
+"path-parse@^1.0.6":
+  "integrity" "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU="
+  "resolved" "https://registry.nlark.com/path-parse/download/path-parse-1.0.7.tgz"
+  "version" "1.0.7"
+
+"path-to-regexp@0.1.7":
+  "integrity" "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+  "resolved" "https://registry.nlark.com/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&sync_timestamp=1618847711772&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz"
+  "version" "0.1.7"
+
+"path-type@^3.0.0":
+  "integrity" "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428="
+  "resolved" "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "pify" "^3.0.0"
+
+"path-type@^4.0.0":
+  "integrity" "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs="
+  "resolved" "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz"
+  "version" "4.0.0"
+
+"pathval@^1.1.1":
+  "integrity" "sha1-hTTnenfOesWiUS6iHg/bj89sPY0="
+  "resolved" "https://registry.npm.taobao.org/pathval/download/pathval-1.1.1.tgz?cache=0&sync_timestamp=1611662006519&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpathval%2Fdownload%2Fpathval-1.1.1.tgz"
+  "version" "1.1.1"
+
+"pause-stream@~0.0.11":
+  "integrity" "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A=="
+  "resolved" "https://registry.npmmirror.com/pause-stream/-/pause-stream-0.0.11.tgz"
+  "version" "0.0.11"
+  dependencies:
+    "through" "~2.3"
+
+"pbkdf2@^3.0.3":
+  "integrity" "sha1-3YIqoIh1gOUvGgOdw+2hCO+uMHU="
+  "resolved" "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.2.tgz"
+  "version" "3.1.2"
+  dependencies:
+    "create-hash" "^1.1.2"
+    "create-hmac" "^1.1.4"
+    "ripemd160" "^2.0.1"
+    "safe-buffer" "^5.0.1"
+    "sha.js" "^2.4.8"
+
+"performance-now@^2.1.0":
+  "integrity" "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+  "resolved" "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz"
+  "version" "2.1.0"
+
+"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3":
+  "integrity" "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI="
+  "resolved" "https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpicomatch%2Fdownload%2Fpicomatch-2.3.0.tgz"
+  "version" "2.3.0"
+
+"pify@^2.0.0":
+  "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+  "resolved" "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz"
+  "version" "2.3.0"
+
+"pify@^3.0.0":
+  "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+  "resolved" "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz"
+  "version" "3.0.0"
+
+"pify@^4.0.1":
+  "integrity" "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE="
+  "resolved" "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz"
+  "version" "4.0.1"
+
+"pinkie-promise@^2.0.0":
+  "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o="
+  "resolved" "https://registry.nlark.com/pinkie-promise/download/pinkie-promise-2.0.1.tgz?cache=0&sync_timestamp=1618847023792&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpinkie-promise%2Fdownload%2Fpinkie-promise-2.0.1.tgz"
+  "version" "2.0.1"
+  dependencies:
+    "pinkie" "^2.0.0"
+
+"pinkie@^2.0.0":
+  "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+  "resolved" "https://registry.nlark.com/pinkie/download/pinkie-2.0.4.tgz"
+  "version" "2.0.4"
+
+"pkg-dir@^1.0.0":
+  "integrity" "sha1-ektQio1bstYp1EcFb/TpyTFM89Q="
+  "resolved" "https://registry.nlark.com/pkg-dir/download/pkg-dir-1.0.0.tgz?cache=0&sync_timestamp=1618847182947&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "find-up" "^1.0.0"
+
+"pkg-dir@^3.0.0":
+  "integrity" "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM="
+  "resolved" "https://registry.nlark.com/pkg-dir/download/pkg-dir-3.0.0.tgz?cache=0&sync_timestamp=1618847182947&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "find-up" "^3.0.0"
+
+"pkg-dir@^4.1.0":
+  "integrity" "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM="
+  "resolved" "https://registry.nlark.com/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1618847182947&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz"
+  "version" "4.2.0"
+  dependencies:
+    "find-up" "^4.0.0"
+
+"platform@^1.3.1":
+  "integrity" "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
+  "resolved" "https://registry.npmmirror.com/platform/-/platform-1.3.6.tgz"
+  "version" "1.3.6"
+
+"pn@^1.1.0":
+  "integrity" "sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs="
+  "resolved" "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz"
+  "version" "1.1.0"
+
+"pnp-webpack-plugin@^1.6.4":
+  "integrity" "sha1-yXEaxNxIpoXauvyG+Lbdn434QUk="
+  "resolved" "https://registry.npm.taobao.org/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz"
+  "version" "1.6.4"
+  dependencies:
+    "ts-pnp" "^1.1.6"
+
+"portfinder@^1.0.26":
+  "integrity" "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g="
+  "resolved" "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz"
+  "version" "1.0.28"
+  dependencies:
+    "async" "^2.6.2"
+    "debug" "^3.1.1"
+    "mkdirp" "^0.5.5"
+
+"posix-character-classes@^0.1.0":
+  "integrity" "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+  "resolved" "https://registry.nlark.com/posix-character-classes/download/posix-character-classes-0.1.1.tgz"
+  "version" "0.1.1"
+
+"postcss-calc@^7.0.1":
+  "integrity" "sha1-+KbpnxLmGcLrwjz2xIb9wVhgkz4="
+  "resolved" "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.5.tgz?cache=0&sync_timestamp=1609689191682&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-7.0.5.tgz"
+  "version" "7.0.5"
+  dependencies:
+    "postcss" "^7.0.27"
+    "postcss-selector-parser" "^6.0.2"
+    "postcss-value-parser" "^4.0.2"
+
+"postcss-colormin@^4.0.3":
+  "integrity" "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E="
+  "resolved" "https://registry.nlark.com/postcss-colormin/download/postcss-colormin-4.0.3.tgz"
+  "version" "4.0.3"
+  dependencies:
+    "browserslist" "^4.0.0"
+    "color" "^3.0.0"
+    "has" "^1.0.0"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-convert-values@^4.0.1":
+  "integrity" "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8="
+  "resolved" "https://registry.nlark.com/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-discard-comments@^4.0.2":
+  "integrity" "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM="
+  "resolved" "https://registry.nlark.com/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz?cache=0&sync_timestamp=1621449811540&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-discard-comments%2Fdownload%2Fpostcss-discard-comments-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "postcss" "^7.0.0"
+
+"postcss-discard-duplicates@^4.0.2":
+  "integrity" "sha1-P+EzzTyCKC5VD8myORdqkge3hOs="
+  "resolved" "https://registry.nlark.com/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz?cache=0&sync_timestamp=1621449811996&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-discard-duplicates%2Fdownload%2Fpostcss-discard-duplicates-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "postcss" "^7.0.0"
+
+"postcss-discard-empty@^4.0.1":
+  "integrity" "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U="
+  "resolved" "https://registry.nlark.com/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "postcss" "^7.0.0"
+
+"postcss-discard-overridden@^4.0.1":
+  "integrity" "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c="
+  "resolved" "https://registry.nlark.com/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "postcss" "^7.0.0"
+
+"postcss-load-config@^2.0.0":
+  "integrity" "sha1-xepQTyxK7zPHNZo03jVzdyrXUCo="
+  "resolved" "https://registry.nlark.com/postcss-load-config/download/postcss-load-config-2.1.2.tgz?cache=0&sync_timestamp=1623669505598&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-load-config%2Fdownload%2Fpostcss-load-config-2.1.2.tgz"
+  "version" "2.1.2"
+  dependencies:
+    "cosmiconfig" "^5.0.0"
+    "import-cwd" "^2.0.0"
+
+"postcss-loader@^3.0.0":
+  "integrity" "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0="
+  "resolved" "https://registry.nlark.com/postcss-loader/download/postcss-loader-3.0.0.tgz?cache=0&sync_timestamp=1625142952652&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-loader%2Fdownload%2Fpostcss-loader-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "loader-utils" "^1.1.0"
+    "postcss" "^7.0.0"
+    "postcss-load-config" "^2.0.0"
+    "schema-utils" "^1.0.0"
+
+"postcss-merge-longhand@^4.0.11":
+  "integrity" "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ="
+  "resolved" "https://registry.nlark.com/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz"
+  "version" "4.0.11"
+  dependencies:
+    "css-color-names" "0.0.4"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+    "stylehacks" "^4.0.0"
+
+"postcss-merge-rules@^4.0.3":
+  "integrity" "sha1-NivqT/Wh+Y5AdacTxsslrv75plA="
+  "resolved" "https://registry.nlark.com/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz"
+  "version" "4.0.3"
+  dependencies:
+    "browserslist" "^4.0.0"
+    "caniuse-api" "^3.0.0"
+    "cssnano-util-same-parent" "^4.0.0"
+    "postcss" "^7.0.0"
+    "postcss-selector-parser" "^3.0.0"
+    "vendors" "^1.0.0"
+
+"postcss-minify-font-values@^4.0.2":
+  "integrity" "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY="
+  "resolved" "https://registry.nlark.com/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-minify-gradients@^4.0.2":
+  "integrity" "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE="
+  "resolved" "https://registry.nlark.com/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz?cache=0&sync_timestamp=1621449817860&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-minify-gradients%2Fdownload%2Fpostcss-minify-gradients-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "cssnano-util-get-arguments" "^4.0.0"
+    "is-color-stop" "^1.0.0"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-minify-params@^4.0.2":
+  "integrity" "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ="
+  "resolved" "https://registry.nlark.com/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "alphanum-sort" "^1.0.0"
+    "browserslist" "^4.0.0"
+    "cssnano-util-get-arguments" "^4.0.0"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+    "uniqs" "^2.0.0"
+
+"postcss-minify-selectors@^4.0.2":
+  "integrity" "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g="
+  "resolved" "https://registry.nlark.com/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz?cache=0&sync_timestamp=1621449812496&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-minify-selectors%2Fdownload%2Fpostcss-minify-selectors-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "alphanum-sort" "^1.0.0"
+    "has" "^1.0.0"
+    "postcss" "^7.0.0"
+    "postcss-selector-parser" "^3.0.0"
+
+"postcss-modules-extract-imports@^2.0.0":
+  "integrity" "sha1-gYcZoa4doyX5gyRGsBE27rSTzX4="
+  "resolved" "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-2.0.0.tgz?cache=0&sync_timestamp=1602588260997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-extract-imports%2Fdownload%2Fpostcss-modules-extract-imports-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "postcss" "^7.0.5"
+
+"postcss-modules-local-by-default@^3.0.2":
+  "integrity" "sha1-uxTgzHgnnVBNvcv9fgyiiZP/u7A="
+  "resolved" "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-3.0.3.tgz"
+  "version" "3.0.3"
+  dependencies:
+    "icss-utils" "^4.1.1"
+    "postcss" "^7.0.32"
+    "postcss-selector-parser" "^6.0.2"
+    "postcss-value-parser" "^4.1.0"
+
+"postcss-modules-scope@^2.2.0":
+  "integrity" "sha1-OFyuATzHdD9afXYC0Qc6iequYu4="
+  "resolved" "https://registry.nlark.com/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz"
+  "version" "2.2.0"
+  dependencies:
+    "postcss" "^7.0.6"
+    "postcss-selector-parser" "^6.0.0"
+
+"postcss-modules-values@^3.0.0":
+  "integrity" "sha1-W1AA1uuuKbQlUwG0o6VFdEI+fxA="
+  "resolved" "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-3.0.0.tgz?cache=0&sync_timestamp=1602586215124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-values%2Fdownload%2Fpostcss-modules-values-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "icss-utils" "^4.0.0"
+    "postcss" "^7.0.6"
+
+"postcss-normalize-charset@^4.0.1":
+  "integrity" "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ="
+  "resolved" "https://registry.nlark.com/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz?cache=0&sync_timestamp=1621449813014&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-normalize-charset%2Fdownload%2Fpostcss-normalize-charset-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "postcss" "^7.0.0"
+
+"postcss-normalize-display-values@^4.0.2":
+  "integrity" "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o="
+  "resolved" "https://registry.nlark.com/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "cssnano-util-get-match" "^4.0.0"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-normalize-positions@^4.0.2":
+  "integrity" "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8="
+  "resolved" "https://registry.nlark.com/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "cssnano-util-get-arguments" "^4.0.0"
+    "has" "^1.0.0"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-normalize-repeat-style@^4.0.2":
+  "integrity" "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw="
+  "resolved" "https://registry.nlark.com/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "cssnano-util-get-arguments" "^4.0.0"
+    "cssnano-util-get-match" "^4.0.0"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-normalize-string@^4.0.2":
+  "integrity" "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw="
+  "resolved" "https://registry.nlark.com/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "has" "^1.0.0"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-normalize-timing-functions@^4.0.2":
+  "integrity" "sha1-jgCcoqOUnNr4rSPmtquZy159KNk="
+  "resolved" "https://registry.nlark.com/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "cssnano-util-get-match" "^4.0.0"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-normalize-unicode@^4.0.1":
+  "integrity" "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs="
+  "resolved" "https://registry.nlark.com/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "browserslist" "^4.0.0"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-normalize-url@^4.0.1":
+  "integrity" "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE="
+  "resolved" "https://registry.nlark.com/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "is-absolute-url" "^2.0.0"
+    "normalize-url" "^3.0.0"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-normalize-whitespace@^4.0.2":
+  "integrity" "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI="
+  "resolved" "https://registry.nlark.com/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-ordered-values@^4.1.2":
+  "integrity" "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4="
+  "resolved" "https://registry.nlark.com/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz"
+  "version" "4.1.2"
+  dependencies:
+    "cssnano-util-get-arguments" "^4.0.0"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-reduce-initial@^4.0.3":
+  "integrity" "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8="
+  "resolved" "https://registry.nlark.com/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz?cache=0&sync_timestamp=1621449818195&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-reduce-initial%2Fdownload%2Fpostcss-reduce-initial-4.0.3.tgz"
+  "version" "4.0.3"
+  dependencies:
+    "browserslist" "^4.0.0"
+    "caniuse-api" "^3.0.0"
+    "has" "^1.0.0"
+    "postcss" "^7.0.0"
+
+"postcss-reduce-transforms@^4.0.2":
+  "integrity" "sha1-F++kBerMbge+NBSlyi0QdGgdTik="
+  "resolved" "https://registry.nlark.com/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "cssnano-util-get-match" "^4.0.0"
+    "has" "^1.0.0"
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+
+"postcss-selector-parser@^3.0.0":
+  "integrity" "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA="
+  "resolved" "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&sync_timestamp=1620753051451&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz"
+  "version" "3.1.2"
+  dependencies:
+    "dot-prop" "^5.2.0"
+    "indexes-of" "^1.0.1"
+    "uniq" "^1.0.1"
+
+"postcss-selector-parser@^6.0.0", "postcss-selector-parser@^6.0.2":
+  "integrity" "sha1-LFu6gXSsL2mBq2MaQqsO5UrzMuo="
+  "resolved" "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.6.tgz?cache=0&sync_timestamp=1620753051451&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.6.tgz"
+  "version" "6.0.6"
+  dependencies:
+    "cssesc" "^3.0.0"
+    "util-deprecate" "^1.0.2"
+
+"postcss-svgo@^4.0.3":
+  "integrity" "sha1-NDos26yVBdQWJD1Jb3JPOIlMlB4="
+  "resolved" "https://registry.nlark.com/postcss-svgo/download/postcss-svgo-4.0.3.tgz"
+  "version" "4.0.3"
+  dependencies:
+    "postcss" "^7.0.0"
+    "postcss-value-parser" "^3.0.0"
+    "svgo" "^1.0.0"
+
+"postcss-unique-selectors@^4.0.1":
+  "integrity" "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w="
+  "resolved" "https://registry.nlark.com/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz?cache=0&sync_timestamp=1621449819576&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-unique-selectors%2Fdownload%2Fpostcss-unique-selectors-4.0.1.tgz"
+  "version" "4.0.1"
+  dependencies:
+    "alphanum-sort" "^1.0.0"
+    "postcss" "^7.0.0"
+    "uniqs" "^2.0.0"
+
+"postcss-value-parser@^3.0.0":
+  "integrity" "sha1-n/giVH4okyE88cMO+lGsX9G6goE="
+  "resolved" "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz"
+  "version" "3.3.1"
+
+"postcss-value-parser@^4.0.2", "postcss-value-parser@^4.1.0":
+  "integrity" "sha1-RD9qIM7WSBor2k+oUypuVdeJoss="
+  "resolved" "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz"
+  "version" "4.1.0"
+
+"postcss@^7.0.0", "postcss@^7.0.1", "postcss@^7.0.14", "postcss@^7.0.27", "postcss@^7.0.32", "postcss@^7.0.36", "postcss@^7.0.5", "postcss@^7.0.6":
+  "integrity" "sha1-BW+M/6k5ZiqPWQWVDAfVKFZE38s="
+  "resolved" "https://registry.nlark.com/postcss/download/postcss-7.0.36.tgz"
+  "version" "7.0.36"
+  dependencies:
+    "chalk" "^2.4.2"
+    "source-map" "^0.6.1"
+    "supports-color" "^6.1.0"
+
+"postcss@^8.1.10":
+  "integrity" "sha1-mCIWsRNBK8IKhiiekeuZSVKltwk="
+  "resolved" "https://registry.nlark.com/postcss/download/postcss-8.3.5.tgz"
+  "version" "8.3.5"
+  dependencies:
+    "colorette" "^1.2.2"
+    "nanoid" "^3.1.23"
+    "source-map-js" "^0.6.2"
+
+"prelude-ls@~1.1.2":
+  "integrity" "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+  "resolved" "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz"
+  "version" "1.1.2"
+
+"prepend-http@^1.0.0":
+  "integrity" "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
+  "resolved" "https://registry.nlark.com/prepend-http/download/prepend-http-1.0.4.tgz"
+  "version" "1.0.4"
+
+"prettier@^1.18.2":
+  "integrity" "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s="
+  "resolved" "https://registry.nlark.com/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1624696259185&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz"
+  "version" "1.19.1"
+
+"pretty-error@^2.0.2":
+  "integrity" "sha1-von4LYGxyG7I/fvDhQRYgnJ/k7Y="
+  "resolved" "https://registry.nlark.com/pretty-error/download/pretty-error-2.1.2.tgz?cache=0&sync_timestamp=1623342956536&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpretty-error%2Fdownload%2Fpretty-error-2.1.2.tgz"
+  "version" "2.1.2"
+  dependencies:
+    "lodash" "^4.17.20"
+    "renderkid" "^2.0.4"
+
+"process-nextick-args@~2.0.0":
+  "integrity" "sha1-eCDZsWEgzFXKmud5JoCufbptf+I="
+  "resolved" "https://registry.nlark.com/process-nextick-args/download/process-nextick-args-2.0.1.tgz"
+  "version" "2.0.1"
+
+"process@^0.11.10":
+  "integrity" "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+  "resolved" "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz"
+  "version" "0.11.10"
+
+"progress@^2.0.0", "progress@^2.0.3":
+  "integrity" "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg="
+  "resolved" "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz"
+  "version" "2.0.3"
+
+"promise-inflight@^1.0.1":
+  "integrity" "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+  "resolved" "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz"
+  "version" "1.0.1"
+
+"proxy-addr@~2.0.5":
+  "integrity" "sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU="
+  "resolved" "https://registry.nlark.com/proxy-addr/download/proxy-addr-2.0.7.tgz"
+  "version" "2.0.7"
+  dependencies:
+    "forwarded" "0.2.0"
+    "ipaddr.js" "1.9.1"
+
+"proxy-agent@^5.0.0":
+  "integrity" "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g=="
+  "resolved" "https://registry.npmmirror.com/proxy-agent/-/proxy-agent-5.0.0.tgz"
+  "version" "5.0.0"
+  dependencies:
+    "agent-base" "^6.0.0"
+    "debug" "4"
+    "http-proxy-agent" "^4.0.0"
+    "https-proxy-agent" "^5.0.0"
+    "lru-cache" "^5.1.1"
+    "pac-proxy-agent" "^5.0.0"
+    "proxy-from-env" "^1.0.0"
+    "socks-proxy-agent" "^5.0.0"
+
+"proxy-from-env@^1.0.0":
+  "integrity" "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+  "resolved" "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
+  "version" "1.1.0"
+
+"prr@~1.0.1":
+  "integrity" "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+  "resolved" "https://registry.nlark.com/prr/download/prr-1.0.1.tgz"
+  "version" "1.0.1"
+
+"pseudomap@^1.0.2":
+  "integrity" "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+  "resolved" "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz"
+  "version" "1.0.2"
+
+"psl@^1.1.28":
+  "integrity" "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ="
+  "resolved" "https://registry.nlark.com/psl/download/psl-1.8.0.tgz"
+  "version" "1.8.0"
+
+"public-encrypt@^4.0.0":
+  "integrity" "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA="
+  "resolved" "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz"
+  "version" "4.0.3"
+  dependencies:
+    "bn.js" "^4.1.0"
+    "browserify-rsa" "^4.0.0"
+    "create-hash" "^1.1.0"
+    "parse-asn1" "^5.0.0"
+    "randombytes" "^2.0.1"
+    "safe-buffer" "^5.1.2"
+
+"pump@^2.0.0":
+  "integrity" "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk="
+  "resolved" "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz"
+  "version" "2.0.1"
+  dependencies:
+    "end-of-stream" "^1.1.0"
+    "once" "^1.3.1"
+
+"pump@^3.0.0":
+  "integrity" "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ="
+  "resolved" "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "end-of-stream" "^1.1.0"
+    "once" "^1.3.1"
+
+"pumpify@^1.3.3":
+  "integrity" "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4="
+  "resolved" "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz"
+  "version" "1.5.1"
+  dependencies:
+    "duplexify" "^3.6.0"
+    "inherits" "^2.0.3"
+    "pump" "^2.0.0"
+
+"punycode@^1.2.4":
+  "integrity" "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+  "resolved" "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz"
+  "version" "1.4.1"
+
+"punycode@^2.1.0", "punycode@^2.1.1":
+  "integrity" "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
+  "resolved" "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz"
+  "version" "2.1.1"
+
+"punycode@1.3.2":
+  "integrity" "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+  "resolved" "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz"
+  "version" "1.3.2"
+
+"q@^1.1.2":
+  "integrity" "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
+  "resolved" "https://registry.nlark.com/q/download/q-1.5.1.tgz"
+  "version" "1.5.1"
+
+"qs@^6.4.0", "qs@~6.5.2":
+  "integrity" "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY="
+  "resolved" "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz"
+  "version" "6.5.2"
+
+"qs@6.7.0":
+  "integrity" "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw="
+  "resolved" "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz"
+  "version" "6.7.0"
+
+"query-string@^4.1.0":
+  "integrity" "sha1-u7aTucqRXCMlFbIosaArYJBD2+s="
+  "resolved" "https://registry.nlark.com/query-string/download/query-string-4.3.4.tgz?cache=0&sync_timestamp=1624297084219&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fquery-string%2Fdownload%2Fquery-string-4.3.4.tgz"
+  "version" "4.3.4"
+  dependencies:
+    "object-assign" "^4.1.0"
+    "strict-uri-encode" "^1.0.0"
+
+"querystring-es3@^0.2.0":
+  "integrity" "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+  "resolved" "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz"
+  "version" "0.2.1"
+
+"querystring@0.2.0":
+  "integrity" "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+  "resolved" "https://registry.nlark.com/querystring/download/querystring-0.2.0.tgz?cache=0&sync_timestamp=1626179435543&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fquerystring%2Fdownload%2Fquerystring-0.2.0.tgz"
+  "version" "0.2.0"
+
+"querystringify@^2.1.1":
+  "integrity" "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y="
+  "resolved" "https://registry.nlark.com/querystringify/download/querystringify-2.2.0.tgz"
+  "version" "2.2.0"
+
+"queue-microtask@^1.2.2":
+  "integrity" "sha1-SSkii7xyTfrEPg77BYyve2z7YkM="
+  "resolved" "https://registry.npm.taobao.org/queue-microtask/download/queue-microtask-1.2.3.tgz?cache=0&sync_timestamp=1616391548624&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqueue-microtask%2Fdownload%2Fqueue-microtask-1.2.3.tgz"
+  "version" "1.2.3"
+
+"randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5", "randombytes@^2.1.0":
+  "integrity" "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo="
+  "resolved" "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "safe-buffer" "^5.1.0"
+
+"randomfill@^1.0.3":
+  "integrity" "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg="
+  "resolved" "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz"
+  "version" "1.0.4"
+  dependencies:
+    "randombytes" "^2.0.5"
+    "safe-buffer" "^5.1.0"
+
+"range-parser@^1.2.1", "range-parser@~1.2.1":
+  "integrity" "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE="
+  "resolved" "https://registry.nlark.com/range-parser/download/range-parser-1.2.1.tgz"
+  "version" "1.2.1"
+
+"raw-body@^2.2.0", "raw-body@2.4.0":
+  "integrity" "sha1-oc5vucm8NWylLoklarWQWeE9AzI="
+  "resolved" "https://registry.nlark.com/raw-body/download/raw-body-2.4.0.tgz"
+  "version" "2.4.0"
+  dependencies:
+    "bytes" "3.1.0"
+    "http-errors" "1.7.2"
+    "iconv-lite" "0.4.24"
+    "unpipe" "1.0.0"
+
+"read-pkg@^5.1.1":
+  "integrity" "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w="
+  "resolved" "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz?cache=0&sync_timestamp=1616914967500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-5.2.0.tgz"
+  "version" "5.2.0"
+  dependencies:
+    "@types/normalize-package-data" "^2.4.0"
+    "normalize-package-data" "^2.5.0"
+    "parse-json" "^5.0.0"
+    "type-fest" "^0.6.0"
+
+"readable-stream@^2.0.0", "readable-stream@^2.0.1", "readable-stream@^2.0.2", "readable-stream@^2.1.5", "readable-stream@^2.2.2", "readable-stream@^2.3.3", "readable-stream@^2.3.6", "readable-stream@~2.3.6", "readable-stream@1 || 2":
+  "integrity" "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c="
+  "resolved" "https://registry.nlark.com/readable-stream/download/readable-stream-2.3.7.tgz"
+  "version" "2.3.7"
+  dependencies:
+    "core-util-is" "~1.0.0"
+    "inherits" "~2.0.3"
+    "isarray" "~1.0.0"
+    "process-nextick-args" "~2.0.0"
+    "safe-buffer" "~5.1.1"
+    "string_decoder" "~1.1.1"
+    "util-deprecate" "~1.0.1"
+
+"readable-stream@^3.0.6":
+  "integrity" "sha1-M3u9o63AcGvT4CRCaihtS0sskZg="
+  "resolved" "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz"
+  "version" "3.6.0"
+  dependencies:
+    "inherits" "^2.0.3"
+    "string_decoder" "^1.1.1"
+    "util-deprecate" "^1.0.1"
+
+"readable-stream@^3.6.0":
+  "integrity" "sha1-M3u9o63AcGvT4CRCaihtS0sskZg="
+  "resolved" "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz"
+  "version" "3.6.0"
+  dependencies:
+    "inherits" "^2.0.3"
+    "string_decoder" "^1.1.1"
+    "util-deprecate" "^1.0.1"
+
+"readable-stream@1.1.x":
+  "integrity" "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ=="
+  "resolved" "https://registry.npmmirror.com/readable-stream/-/readable-stream-1.1.14.tgz"
+  "version" "1.1.14"
+  dependencies:
+    "core-util-is" "~1.0.0"
+    "inherits" "~2.0.1"
+    "isarray" "0.0.1"
+    "string_decoder" "~0.10.x"
+
+"readdirp@^2.2.1":
+  "integrity" "sha1-DodiKjMlqjPokihcr4tOhGUppSU="
+  "resolved" "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz"
+  "version" "2.2.1"
+  dependencies:
+    "graceful-fs" "^4.1.11"
+    "micromatch" "^3.1.10"
+    "readable-stream" "^2.0.2"
+
+"readdirp@~3.6.0":
+  "integrity" "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc="
+  "resolved" "https://registry.npm.taobao.org/readdirp/download/readdirp-3.6.0.tgz"
+  "version" "3.6.0"
+  dependencies:
+    "picomatch" "^2.2.1"
+
+"regenerate-unicode-properties@^8.2.0":
+  "integrity" "sha1-5d5xEdZV57pgwFfb6f83yH5lzew="
+  "resolved" "https://registry.nlark.com/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz"
+  "version" "8.2.0"
+  dependencies:
+    "regenerate" "^1.4.0"
+
+"regenerate@^1.4.0":
+  "integrity" "sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo="
+  "resolved" "https://registry.nlark.com/regenerate/download/regenerate-1.4.2.tgz"
+  "version" "1.4.2"
+
+"regenerator-runtime@^0.13.4":
+  "integrity" "sha1-ysLazIoepnX+qrrriugziYrkb1U="
+  "resolved" "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz"
+  "version" "0.13.7"
+
+"regenerator-transform@^0.14.2":
+  "integrity" "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ="
+  "resolved" "https://registry.nlark.com/regenerator-transform/download/regenerator-transform-0.14.5.tgz"
+  "version" "0.14.5"
+  dependencies:
+    "@babel/runtime" "^7.8.4"
+
+"regex-not@^1.0.0", "regex-not@^1.0.2":
+  "integrity" "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw="
+  "resolved" "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz"
+  "version" "1.0.2"
+  dependencies:
+    "extend-shallow" "^3.0.2"
+    "safe-regex" "^1.1.0"
+
+"regexp.prototype.flags@^1.2.0":
+  "integrity" "sha1-fvNSro0VnnWMDq3Kb4/LTu8HviY="
+  "resolved" "https://registry.nlark.com/regexp.prototype.flags/download/regexp.prototype.flags-1.3.1.tgz"
+  "version" "1.3.1"
+  dependencies:
+    "call-bind" "^1.0.2"
+    "define-properties" "^1.1.3"
+
+"regexpp@^2.0.1":
+  "integrity" "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw=="
+  "resolved" "https://registry.npmmirror.com/regexpp/-/regexpp-2.0.1.tgz"
+  "version" "2.0.1"
+
+"regexpu-core@^4.7.1":
+  "integrity" "sha1-LepamgcjMpj78NuR+pq8TG4PitY="
+  "resolved" "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.1.tgz"
+  "version" "4.7.1"
+  dependencies:
+    "regenerate" "^1.4.0"
+    "regenerate-unicode-properties" "^8.2.0"
+    "regjsgen" "^0.5.1"
+    "regjsparser" "^0.6.4"
+    "unicode-match-property-ecmascript" "^1.0.4"
+    "unicode-match-property-value-ecmascript" "^1.2.0"
+
+"regjsgen@^0.5.1":
+  "integrity" "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM="
+  "resolved" "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz"
+  "version" "0.5.2"
+
+"regjsparser@^0.6.4":
+  "integrity" "sha1-tInu98mizkNydicBFCnPgzpxg+Y="
+  "resolved" "https://registry.nlark.com/regjsparser/download/regjsparser-0.6.9.tgz"
+  "version" "0.6.9"
+  dependencies:
+    "jsesc" "~0.5.0"
+
+"relateurl@0.2.x":
+  "integrity" "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
+  "resolved" "https://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz"
+  "version" "0.2.7"
+
+"remove-trailing-separator@^1.0.1":
+  "integrity" "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+  "resolved" "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz"
+  "version" "1.1.0"
+
+"renderkid@^2.0.4":
+  "integrity" "sha1-Rk8namvc7mBvShWZP5sp/HTKhgk="
+  "resolved" "https://registry.nlark.com/renderkid/download/renderkid-2.0.7.tgz?cache=0&sync_timestamp=1623343631807&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frenderkid%2Fdownload%2Frenderkid-2.0.7.tgz"
+  "version" "2.0.7"
+  dependencies:
+    "css-select" "^4.1.3"
+    "dom-converter" "^0.2.0"
+    "htmlparser2" "^6.1.0"
+    "lodash" "^4.17.21"
+    "strip-ansi" "^3.0.1"
+
+"repeat-element@^1.1.2":
+  "integrity" "sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek="
+  "resolved" "https://registry.nlark.com/repeat-element/download/repeat-element-1.1.4.tgz"
+  "version" "1.1.4"
+
+"repeat-string@^1.6.1":
+  "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+  "resolved" "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz"
+  "version" "1.6.1"
+
+"request-promise-core@1.1.4":
+  "integrity" "sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8="
+  "resolved" "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.4.tgz"
+  "version" "1.1.4"
+  dependencies:
+    "lodash" "^4.17.19"
+
+"request-promise-native@^1.0.7":
+  "integrity" "sha1-5AcSBSal79yaObKKVnm/R7nZ3Cg="
+  "resolved" "https://registry.nlark.com/request-promise-native/download/request-promise-native-1.0.9.tgz?cache=0&sync_timestamp=1618846813899&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frequest-promise-native%2Fdownload%2Frequest-promise-native-1.0.9.tgz"
+  "version" "1.0.9"
+  dependencies:
+    "request-promise-core" "1.1.4"
+    "stealthy-require" "^1.1.1"
+    "tough-cookie" "^2.3.3"
+
+"request@^2.34", "request@^2.88.0", "request@^2.88.2":
+  "integrity" "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM="
+  "resolved" "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz"
+  "version" "2.88.2"
+  dependencies:
+    "aws-sign2" "~0.7.0"
+    "aws4" "^1.8.0"
+    "caseless" "~0.12.0"
+    "combined-stream" "~1.0.6"
+    "extend" "~3.0.2"
+    "forever-agent" "~0.6.1"
+    "form-data" "~2.3.2"
+    "har-validator" "~5.1.3"
+    "http-signature" "~1.2.0"
+    "is-typedarray" "~1.0.0"
+    "isstream" "~0.1.2"
+    "json-stringify-safe" "~5.0.1"
+    "mime-types" "~2.1.19"
+    "oauth-sign" "~0.9.0"
+    "performance-now" "^2.1.0"
+    "qs" "~6.5.2"
+    "safe-buffer" "^5.1.2"
+    "tough-cookie" "~2.5.0"
+    "tunnel-agent" "^0.6.0"
+    "uuid" "^3.3.2"
+
+"require-directory@^2.1.1":
+  "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+  "resolved" "https://registry.nlark.com/require-directory/download/require-directory-2.1.1.tgz"
+  "version" "2.1.1"
+
+"require-main-filename@^2.0.0":
+  "integrity" "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs="
+  "resolved" "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz"
+  "version" "2.0.0"
+
+"requires-port@^1.0.0":
+  "integrity" "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
+  "resolved" "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz"
+  "version" "1.0.0"
+
+"resolve-cwd@^2.0.0":
+  "integrity" "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo="
+  "resolved" "https://registry.nlark.com/resolve-cwd/download/resolve-cwd-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "resolve-from" "^3.0.0"
+
+"resolve-from@^3.0.0":
+  "integrity" "sha1-six699nWiBvItuZTM17rywoYh0g="
+  "resolved" "https://registry.nlark.com/resolve-from/download/resolve-from-3.0.0.tgz"
+  "version" "3.0.0"
+
+"resolve-from@^4.0.0":
+  "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+  "resolved" "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz"
+  "version" "4.0.0"
+
+"resolve-url@^0.2.1":
+  "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+  "resolved" "https://registry.nlark.com/resolve-url/download/resolve-url-0.2.1.tgz"
+  "version" "0.2.1"
+
+"resolve@^1.10.0", "resolve@^1.12.0", "resolve@^1.14.2":
+  "integrity" "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU="
+  "resolved" "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz?cache=0&sync_timestamp=1613054862388&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.20.0.tgz"
+  "version" "1.20.0"
+  dependencies:
+    "is-core-module" "^2.2.0"
+    "path-parse" "^1.0.6"
+
+"restore-cursor@^2.0.0":
+  "integrity" "sha1-n37ih/gv0ybU/RYpI9YhKe7g368="
+  "resolved" "https://registry.nlark.com/restore-cursor/download/restore-cursor-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "onetime" "^2.0.0"
+    "signal-exit" "^3.0.2"
+
+"restore-cursor@^3.1.0":
+  "integrity" "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34="
+  "resolved" "https://registry.nlark.com/restore-cursor/download/restore-cursor-3.1.0.tgz"
+  "version" "3.1.0"
+  dependencies:
+    "onetime" "^5.1.0"
+    "signal-exit" "^3.0.2"
+
+"ret@~0.1.10":
+  "integrity" "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w="
+  "resolved" "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz?cache=0&sync_timestamp=1613002640681&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fret%2Fdownload%2Fret-0.1.15.tgz"
+  "version" "0.1.15"
+
+"retry@^0.12.0":
+  "integrity" "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs="
+  "resolved" "https://registry.nlark.com/retry/download/retry-0.12.0.tgz"
+  "version" "0.12.0"
+
+"reusify@^1.0.4":
+  "integrity" "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY="
+  "resolved" "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz"
+  "version" "1.0.4"
+
+"rgb-regex@^1.0.1":
+  "integrity" "sha1-wODWiC3w4jviVKR16O3UGRX+rrE="
+  "resolved" "https://registry.nlark.com/rgb-regex/download/rgb-regex-1.0.1.tgz"
+  "version" "1.0.1"
+
+"rgba-regex@^1.0.0":
+  "integrity" "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM="
+  "resolved" "https://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz"
+  "version" "1.0.0"
+
+"rimraf@^2.5.4", "rimraf@^2.6.1", "rimraf@^2.6.3":
+  "integrity" "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w="
+  "resolved" "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz"
+  "version" "2.7.1"
+  dependencies:
+    "glob" "^7.1.3"
+
+"rimraf@2.6.3":
+  "integrity" "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA=="
+  "resolved" "https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz"
+  "version" "2.6.3"
+  dependencies:
+    "glob" "^7.1.3"
+
+"ripemd160@^2.0.0", "ripemd160@^2.0.1":
+  "integrity" "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw="
+  "resolved" "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz"
+  "version" "2.0.2"
+  dependencies:
+    "hash-base" "^3.0.0"
+    "inherits" "^2.0.1"
+
+"run-async@^2.4.0":
+  "integrity" "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU="
+  "resolved" "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz"
+  "version" "2.4.1"
+
+"run-parallel@^1.1.9":
+  "integrity" "sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4="
+  "resolved" "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.2.0.tgz?cache=0&sync_timestamp=1612925912322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-parallel%2Fdownload%2Frun-parallel-1.2.0.tgz"
+  "version" "1.2.0"
+  dependencies:
+    "queue-microtask" "^1.2.2"
+
+"run-queue@^1.0.0", "run-queue@^1.0.3":
+  "integrity" "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec="
+  "resolved" "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz"
+  "version" "1.0.3"
+  dependencies:
+    "aproba" "^1.1.1"
+
+"rxjs@^6.6.0":
+  "integrity" "sha1-kKwBisq/SRv2UEQjXVhjxNq4BMk="
+  "resolved" "https://registry.nlark.com/rxjs/download/rxjs-6.6.7.tgz"
+  "version" "6.6.7"
+  dependencies:
+    "tslib" "^1.9.0"
+
+"safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.1.1", "safe-buffer@^5.1.2", "safe-buffer@>=5.1.0", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1", "safe-buffer@5.1.2":
+  "integrity" "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
+  "resolved" "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz"
+  "version" "5.1.2"
+
+"safe-buffer@^5.2.0":
+  "integrity" "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY="
+  "resolved" "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz"
+  "version" "5.2.1"
+
+"safe-regex@^1.1.0":
+  "integrity" "sha1-QKNmnzsHfR6UPURinhV91IAjvy4="
+  "resolved" "https://registry.nlark.com/safe-regex/download/safe-regex-1.1.0.tgz"
+  "version" "1.1.0"
+  dependencies:
+    "ret" "~0.1.10"
+
+"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@^2.1.2", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@~2.1.0":
+  "integrity" "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
+  "resolved" "https://registry.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz"
+  "version" "2.1.2"
+
+"sax@^1.2.4", "sax@>=0.6.0", "sax@~1.2.4":
+  "integrity" "sha1-KBYjTiN4vdxOU1T6tcqold9xANk="
+  "resolved" "https://registry.nlark.com/sax/download/sax-1.2.4.tgz"
+  "version" "1.2.4"
+
+"saxes@^3.1.9":
+  "integrity" "sha1-1Z0f0zLskq2YouCy7mRHAjhLHFs="
+  "resolved" "https://registry.npm.taobao.org/saxes/download/saxes-3.1.11.tgz"
+  "version" "3.1.11"
+  dependencies:
+    "xmlchars" "^2.1.1"
+
+"schema-utils@^1.0.0":
+  "integrity" "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A="
+  "resolved" "https://registry.nlark.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1625484933876&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "ajv" "^6.1.0"
+    "ajv-errors" "^1.0.0"
+    "ajv-keywords" "^3.1.0"
+
+"schema-utils@^2.0.0", "schema-utils@^2.5.0", "schema-utils@^2.6.5", "schema-utils@^2.7.0":
+  "integrity" "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc="
+  "resolved" "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz?cache=0&sync_timestamp=1625484933876&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz"
+  "version" "2.7.1"
+  dependencies:
+    "@types/json-schema" "^7.0.5"
+    "ajv" "^6.12.4"
+    "ajv-keywords" "^3.5.2"
+
+"schema-utils@^3.0.0":
+  "integrity" "sha1-lZhutgT2bare7Vbjeb/np/ljzbk="
+  "resolved" "https://registry.nlark.com/schema-utils/download/schema-utils-3.1.0.tgz?cache=0&sync_timestamp=1625484933876&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fschema-utils%2Fdownload%2Fschema-utils-3.1.0.tgz"
+  "version" "3.1.0"
+  dependencies:
+    "@types/json-schema" "^7.0.7"
+    "ajv" "^6.12.5"
+    "ajv-keywords" "^3.5.2"
+
+"sdk-base@^2.0.1":
+  "integrity" "sha512-eeG26wRwhtwYuKGCDM3LixCaxY27Pa/5lK4rLKhQa7HBjJ3U3Y+f81MMZQRsDw/8SC2Dao/83yJTXJ8aULuN8Q=="
+  "resolved" "https://registry.npmmirror.com/sdk-base/-/sdk-base-2.0.1.tgz"
+  "version" "2.0.1"
+  dependencies:
+    "get-ready" "~1.0.0"
+
+"select-hose@^2.0.0":
+  "integrity" "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo="
+  "resolved" "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz"
+  "version" "2.0.0"
+
+"selfsigned@^1.10.8":
+  "integrity" "sha1-JJKc2Qb+D0S20B+yOZmnOVN6y+k="
+  "resolved" "https://registry.nlark.com/selfsigned/download/selfsigned-1.10.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.11.tgz"
+  "version" "1.10.11"
+  dependencies:
+    "node-forge" "^0.10.0"
+
+"semver@^5.0.1":
+  "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+  "resolved" "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz"
+  "version" "5.7.1"
+
+"semver@^5.5.0":
+  "integrity" "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc="
+  "resolved" "https://registry.nlark.com/semver/download/semver-5.7.1.tgz"
+  "version" "5.7.1"
+
+"semver@^5.6.0":
+  "integrity" "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc="
+  "resolved" "https://registry.nlark.com/semver/download/semver-5.7.1.tgz"
+  "version" "5.7.1"
+
+"semver@^5.7.0":
+  "integrity" "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc="
+  "resolved" "https://registry.nlark.com/semver/download/semver-5.7.1.tgz"
+  "version" "5.7.1"
+
+"semver@^6.0.0", "semver@^6.1.0", "semver@^6.1.1", "semver@^6.1.2", "semver@^6.3.0":
+  "integrity" "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0="
+  "resolved" "https://registry.nlark.com/semver/download/semver-6.3.0.tgz"
+  "version" "6.3.0"
+
+"semver@2 || 3 || 4 || 5":
+  "integrity" "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc="
+  "resolved" "https://registry.nlark.com/semver/download/semver-5.7.1.tgz"
+  "version" "5.7.1"
+
+"semver@7.0.0":
+  "integrity" "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44="
+  "resolved" "https://registry.nlark.com/semver/download/semver-7.0.0.tgz"
+  "version" "7.0.0"
+
+"send@0.17.1":
+  "integrity" "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg="
+  "resolved" "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz"
+  "version" "0.17.1"
+  dependencies:
+    "debug" "2.6.9"
+    "depd" "~1.1.2"
+    "destroy" "~1.0.4"
+    "encodeurl" "~1.0.2"
+    "escape-html" "~1.0.3"
+    "etag" "~1.8.1"
+    "fresh" "0.5.2"
+    "http-errors" "~1.7.2"
+    "mime" "1.6.0"
+    "ms" "2.1.1"
+    "on-finished" "~2.3.0"
+    "range-parser" "~1.2.1"
+    "statuses" "~1.5.0"
+
+"serialize-javascript@^4.0.0":
+  "integrity" "sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao="
+  "resolved" "https://registry.nlark.com/serialize-javascript/download/serialize-javascript-4.0.0.tgz"
+  "version" "4.0.0"
+  dependencies:
+    "randombytes" "^2.1.0"
+
+"serve-index@^1.9.1":
+  "integrity" "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk="
+  "resolved" "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz"
+  "version" "1.9.1"
+  dependencies:
+    "accepts" "~1.3.4"
+    "batch" "0.6.1"
+    "debug" "2.6.9"
+    "escape-html" "~1.0.3"
+    "http-errors" "~1.6.2"
+    "mime-types" "~2.1.17"
+    "parseurl" "~1.3.2"
+
+"serve-static@1.14.1":
+  "integrity" "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk="
+  "resolved" "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz"
+  "version" "1.14.1"
+  dependencies:
+    "encodeurl" "~1.0.2"
+    "escape-html" "~1.0.3"
+    "parseurl" "~1.3.3"
+    "send" "0.17.1"
+
+"set-blocking@^2.0.0":
+  "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+  "resolved" "https://registry.nlark.com/set-blocking/download/set-blocking-2.0.0.tgz"
+  "version" "2.0.0"
+
+"set-value@^2.0.0", "set-value@^2.0.1":
+  "integrity" "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs="
+  "resolved" "https://registry.nlark.com/set-value/download/set-value-2.0.1.tgz"
+  "version" "2.0.1"
+  dependencies:
+    "extend-shallow" "^2.0.1"
+    "is-extendable" "^0.1.1"
+    "is-plain-object" "^2.0.3"
+    "split-string" "^3.0.1"
+
+"setimmediate@^1.0.4":
+  "integrity" "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+  "resolved" "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz"
+  "version" "1.0.5"
+
+"setprototypeof@1.1.0":
+  "integrity" "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY="
+  "resolved" "https://registry.nlark.com/setprototypeof/download/setprototypeof-1.1.0.tgz"
+  "version" "1.1.0"
+
+"setprototypeof@1.1.1":
+  "integrity" "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM="
+  "resolved" "https://registry.nlark.com/setprototypeof/download/setprototypeof-1.1.1.tgz"
+  "version" "1.1.1"
+
+"sha.js@^2.4.0", "sha.js@^2.4.8":
+  "integrity" "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc="
+  "resolved" "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz"
+  "version" "2.4.11"
+  dependencies:
+    "inherits" "^2.0.1"
+    "safe-buffer" "^5.0.1"
+
+"shebang-command@^1.2.0":
+  "integrity" "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo="
+  "resolved" "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz"
+  "version" "1.2.0"
+  dependencies:
+    "shebang-regex" "^1.0.0"
+
+"shebang-command@^2.0.0":
+  "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="
+  "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "shebang-regex" "^3.0.0"
+
+"shebang-regex@^1.0.0":
+  "integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+  "resolved" "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz"
+  "version" "1.0.0"
+
+"shebang-regex@^3.0.0":
+  "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+  "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
+  "version" "3.0.0"
+
+"shell-quote@^1.6.1":
+  "integrity" "sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I="
+  "resolved" "https://registry.npm.taobao.org/shell-quote/download/shell-quote-1.7.2.tgz"
+  "version" "1.7.2"
+
+"signal-exit@^3.0.0", "signal-exit@^3.0.2":
+  "integrity" "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw="
+  "resolved" "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz"
+  "version" "3.0.3"
+
+"simple-swizzle@^0.2.2":
+  "integrity" "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo="
+  "resolved" "https://registry.nlark.com/simple-swizzle/download/simple-swizzle-0.2.2.tgz"
+  "version" "0.2.2"
+  dependencies:
+    "is-arrayish" "^0.3.1"
+
+"slash@^1.0.0":
+  "integrity" "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+  "resolved" "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz"
+  "version" "1.0.0"
+
+"slash@^2.0.0":
+  "integrity" "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q="
+  "resolved" "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz"
+  "version" "2.0.0"
+
+"slash@^3.0.0":
+  "integrity" "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ="
+  "resolved" "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz"
+  "version" "3.0.0"
+
+"slice-ansi@^2.1.0":
+  "integrity" "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ=="
+  "resolved" "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-2.1.0.tgz"
+  "version" "2.1.0"
+  dependencies:
+    "ansi-styles" "^3.2.0"
+    "astral-regex" "^1.0.0"
+    "is-fullwidth-code-point" "^2.0.0"
+
+"smart-buffer@^4.2.0":
+  "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
+  "resolved" "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz"
+  "version" "4.2.0"
+
+"snapdragon-node@^2.0.1":
+  "integrity" "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs="
+  "resolved" "https://registry.nlark.com/snapdragon-node/download/snapdragon-node-2.1.1.tgz"
+  "version" "2.1.1"
+  dependencies:
+    "define-property" "^1.0.0"
+    "isobject" "^3.0.0"
+    "snapdragon-util" "^3.0.1"
+
+"snapdragon-util@^3.0.1":
+  "integrity" "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI="
+  "resolved" "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz"
+  "version" "3.0.1"
+  dependencies:
+    "kind-of" "^3.2.0"
+
+"snapdragon@^0.8.1":
+  "integrity" "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0="
+  "resolved" "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz"
+  "version" "0.8.2"
+  dependencies:
+    "base" "^0.11.1"
+    "debug" "^2.2.0"
+    "define-property" "^0.2.5"
+    "extend-shallow" "^2.0.1"
+    "map-cache" "^0.2.2"
+    "source-map" "^0.5.6"
+    "source-map-resolve" "^0.5.0"
+    "use" "^3.1.0"
+
+"sockjs-client@^1.5.0":
+  "integrity" "sha1-JWkI9tWt+5Tau9vQLGY2LMoPnqY="
+  "resolved" "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.5.1.tgz"
+  "version" "1.5.1"
+  dependencies:
+    "debug" "^3.2.6"
+    "eventsource" "^1.0.7"
+    "faye-websocket" "^0.11.3"
+    "inherits" "^2.0.4"
+    "json3" "^3.3.3"
+    "url-parse" "^1.5.1"
+
+"sockjs@^0.3.21":
+  "integrity" "sha1-s0/7mOeWkwtgoM+hGQTWozmn1Bc="
+  "resolved" "https://registry.nlark.com/sockjs/download/sockjs-0.3.21.tgz"
+  "version" "0.3.21"
+  dependencies:
+    "faye-websocket" "^0.11.3"
+    "uuid" "^3.4.0"
+    "websocket-driver" "^0.7.4"
+
+"socks-proxy-agent@^5.0.0", "socks-proxy-agent@5":
+  "integrity" "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ=="
+  "resolved" "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz"
+  "version" "5.0.1"
+  dependencies:
+    "agent-base" "^6.0.2"
+    "debug" "4"
+    "socks" "^2.3.3"
+
+"socks@^2.3.3":
+  "integrity" "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ=="
+  "resolved" "https://registry.npmmirror.com/socks/-/socks-2.7.1.tgz"
+  "version" "2.7.1"
+  dependencies:
+    "ip" "^2.0.0"
+    "smart-buffer" "^4.2.0"
+
+"sort-keys@^1.0.0":
+  "integrity" "sha1-RBttTTRnmPG05J6JIK37oOVD+a0="
+  "resolved" "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz"
+  "version" "1.1.2"
+  dependencies:
+    "is-plain-obj" "^1.0.0"
+
+"sortablejs@^1.13.0":
+  "integrity" "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w=="
+  "resolved" "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.0.tgz"
+  "version" "1.15.0"
+
+"source-list-map@^2.0.0":
+  "integrity" "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ="
+  "resolved" "https://registry.nlark.com/source-list-map/download/source-list-map-2.0.1.tgz"
+  "version" "2.0.1"
+
+"source-map-js@^0.6.2":
+  "integrity" "sha1-C7XeYxtBz72mz7qL0FqA79/SOF4="
+  "resolved" "https://registry.npm.taobao.org/source-map-js/download/source-map-js-0.6.2.tgz"
+  "version" "0.6.2"
+
+"source-map-resolve@^0.5.0", "source-map-resolve@^0.5.2":
+  "integrity" "sha1-GQhmvs51U+H48mei7oLGBrVQmho="
+  "resolved" "https://registry.nlark.com/source-map-resolve/download/source-map-resolve-0.5.3.tgz"
+  "version" "0.5.3"
+  dependencies:
+    "atob" "^2.1.2"
+    "decode-uri-component" "^0.2.0"
+    "resolve-url" "^0.2.1"
+    "source-map-url" "^0.4.0"
+    "urix" "^0.1.0"
+
+"source-map-support@^0.5.13", "source-map-support@~0.5.12":
+  "integrity" "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE="
+  "resolved" "https://registry.nlark.com/source-map-support/download/source-map-support-0.5.19.tgz"
+  "version" "0.5.19"
+  dependencies:
+    "buffer-from" "^1.0.0"
+    "source-map" "^0.6.0"
+
+"source-map-url@^0.4.0":
+  "integrity" "sha1-CvZmBadFpaL5HPG7+KevvCg97FY="
+  "resolved" "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.1.tgz?cache=0&sync_timestamp=1612210508484&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-url%2Fdownload%2Fsource-map-url-0.4.1.tgz"
+  "version" "0.4.1"
+
+"source-map@^0.5.0", "source-map@^0.5.6":
+  "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+  "resolved" "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz"
+  "version" "0.5.7"
+
+"source-map@^0.6.0":
+  "integrity" "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+  "resolved" "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz"
+  "version" "0.6.1"
+
+"source-map@^0.6.1":
+  "integrity" "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+  "resolved" "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz"
+  "version" "0.6.1"
+
+"source-map@^0.7.3":
+  "integrity" "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M="
+  "resolved" "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz"
+  "version" "0.7.3"
+
+"source-map@~0.6.0":
+  "integrity" "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+  "resolved" "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz"
+  "version" "0.6.1"
+
+"source-map@~0.6.1":
+  "integrity" "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+  "resolved" "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz"
+  "version" "0.6.1"
+
+"sourcemap-codec@^1.4.4":
+  "integrity" "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ="
+  "resolved" "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz"
+  "version" "1.4.8"
+
+"spdx-correct@^3.0.0":
+  "integrity" "sha1-3s6BrJweZxPl99G28X1Gj6U9iak="
+  "resolved" "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz"
+  "version" "3.1.1"
+  dependencies:
+    "spdx-expression-parse" "^3.0.0"
+    "spdx-license-ids" "^3.0.0"
+
+"spdx-exceptions@^2.1.0":
+  "integrity" "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0="
+  "resolved" "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz"
+  "version" "2.3.0"
+
+"spdx-expression-parse@^3.0.0":
+  "integrity" "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk="
+  "resolved" "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz"
+  "version" "3.0.1"
+  dependencies:
+    "spdx-exceptions" "^2.1.0"
+    "spdx-license-ids" "^3.0.0"
+
+"spdx-license-ids@^3.0.0":
+  "integrity" "sha1-illRNd75WSvaaXCUdPHL7qfCRn8="
+  "resolved" "https://registry.nlark.com/spdx-license-ids/download/spdx-license-ids-3.0.9.tgz"
+  "version" "3.0.9"
+
+"spdy-transport@^3.0.0":
+  "integrity" "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE="
+  "resolved" "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "debug" "^4.1.0"
+    "detect-node" "^2.0.4"
+    "hpack.js" "^2.1.6"
+    "obuf" "^1.1.2"
+    "readable-stream" "^3.0.6"
+    "wbuf" "^1.7.3"
+
+"spdy@^4.0.2":
+  "integrity" "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s="
+  "resolved" "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "debug" "^4.1.0"
+    "handle-thing" "^2.0.0"
+    "http-deceiver" "^1.2.7"
+    "select-hose" "^2.0.0"
+    "spdy-transport" "^3.0.0"
+
+"split-string@^3.0.1", "split-string@^3.0.2":
+  "integrity" "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I="
+  "resolved" "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz"
+  "version" "3.1.0"
+  dependencies:
+    "extend-shallow" "^3.0.0"
+
+"sprintf-js@~1.0.2":
+  "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+  "resolved" "https://registry.nlark.com/sprintf-js/download/sprintf-js-1.0.3.tgz"
+  "version" "1.0.3"
+
+"sshpk@^1.7.0":
+  "integrity" "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc="
+  "resolved" "https://registry.nlark.com/sshpk/download/sshpk-1.16.1.tgz"
+  "version" "1.16.1"
+  dependencies:
+    "asn1" "~0.2.3"
+    "assert-plus" "^1.0.0"
+    "bcrypt-pbkdf" "^1.0.0"
+    "dashdash" "^1.12.0"
+    "ecc-jsbn" "~0.1.1"
+    "getpass" "^0.1.1"
+    "jsbn" "~0.1.0"
+    "safer-buffer" "^2.0.2"
+    "tweetnacl" "~0.14.0"
+
+"ssri@^6.0.1":
+  "integrity" "sha1-FXk5E08gRk5zAd26PpD/qPdyisU="
+  "resolved" "https://registry.nlark.com/ssri/download/ssri-6.0.2.tgz?cache=0&sync_timestamp=1621364918494&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fssri%2Fdownload%2Fssri-6.0.2.tgz"
+  "version" "6.0.2"
+  dependencies:
+    "figgy-pudding" "^3.5.1"
+
+"ssri@^8.0.1":
+  "integrity" "sha1-Y45OQ54v+9LNKJd21cpFfE9Roq8="
+  "resolved" "https://registry.nlark.com/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1621364918494&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fssri%2Fdownload%2Fssri-8.0.1.tgz"
+  "version" "8.0.1"
+  dependencies:
+    "minipass" "^3.1.1"
+
+"stable@^0.1.8":
+  "integrity" "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88="
+  "resolved" "https://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz"
+  "version" "0.1.8"
+
+"stackframe@^1.1.1":
+  "integrity" "sha1-UkKUktY8YuuYmATBFVLj0i53kwM="
+  "resolved" "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz"
+  "version" "1.2.0"
+
+"static-extend@^0.1.1":
+  "integrity" "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY="
+  "resolved" "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz"
+  "version" "0.1.2"
+  dependencies:
+    "define-property" "^0.2.5"
+    "object-copy" "^0.1.0"
+
+"statuses@^1.3.1", "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", "statuses@~1.5.0":
+  "integrity" "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+  "resolved" "https://registry.nlark.com/statuses/download/statuses-1.5.0.tgz"
+  "version" "1.5.0"
+
+"stealthy-require@^1.1.1":
+  "integrity" "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
+  "resolved" "https://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz"
+  "version" "1.1.1"
+
+"stream-browserify@^2.0.1":
+  "integrity" "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs="
+  "resolved" "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz"
+  "version" "2.0.2"
+  dependencies:
+    "inherits" "~2.0.1"
+    "readable-stream" "^2.0.2"
+
+"stream-each@^1.1.0":
+  "integrity" "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64="
+  "resolved" "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz"
+  "version" "1.2.3"
+  dependencies:
+    "end-of-stream" "^1.1.0"
+    "stream-shift" "^1.0.0"
+
+"stream-http@^2.7.2", "stream-http@2.8.2":
+  "integrity" "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA=="
+  "resolved" "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.2.tgz"
+  "version" "2.8.2"
+  dependencies:
+    "builtin-status-codes" "^3.0.0"
+    "inherits" "^2.0.1"
+    "readable-stream" "^2.3.6"
+    "to-arraybuffer" "^1.0.0"
+    "xtend" "^4.0.0"
+
+"stream-shift@^1.0.0":
+  "integrity" "sha1-1wiCgVWasneEJCebCHfaPDktWj0="
+  "resolved" "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz"
+  "version" "1.0.1"
+
+"stream-wormhole@^1.0.4":
+  "integrity" "sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew=="
+  "resolved" "https://registry.npmmirror.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz"
+  "version" "1.1.0"
+
+"strict-uri-encode@^1.0.0":
+  "integrity" "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
+  "resolved" "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz"
+  "version" "1.1.0"
+
+"string_decoder@^1.0.0", "string_decoder@^1.1.1", "string_decoder@~1.1.1":
+  "integrity" "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g="
+  "resolved" "https://registry.nlark.com/string_decoder/download/string_decoder-1.1.1.tgz"
+  "version" "1.1.1"
+  dependencies:
+    "safe-buffer" "~5.1.0"
+
+"string_decoder@~0.10.x":
+  "integrity" "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
+  "resolved" "https://registry.npmmirror.com/string_decoder/-/string_decoder-0.10.31.tgz"
+  "version" "0.10.31"
+
+"string-width@^1.0.2 || 2", "string-width@^2.0.0":
+  "integrity" "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4="
+  "resolved" "https://registry.nlark.com/string-width/download/string-width-2.1.1.tgz"
+  "version" "2.1.1"
+  dependencies:
+    "is-fullwidth-code-point" "^2.0.0"
+    "strip-ansi" "^4.0.0"
+
+"string-width@^3.0.0", "string-width@^3.1.0":
+  "integrity" "sha1-InZ74htirxCBV0MG9prFG2IgOWE="
+  "resolved" "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz"
+  "version" "3.1.0"
+  dependencies:
+    "emoji-regex" "^7.0.1"
+    "is-fullwidth-code-point" "^2.0.0"
+    "strip-ansi" "^5.1.0"
+
+"string-width@^4.1.0", "string-width@^4.2.0":
+  "integrity" "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU="
+  "resolved" "https://registry.nlark.com/string-width/download/string-width-4.2.2.tgz"
+  "version" "4.2.2"
+  dependencies:
+    "emoji-regex" "^8.0.0"
+    "is-fullwidth-code-point" "^3.0.0"
+    "strip-ansi" "^6.0.0"
+
+"string.prototype.trimend@^1.0.4":
+  "integrity" "sha1-51rpDClCxjUEaGwYsoe0oLGkX4A="
+  "resolved" "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.4.tgz"
+  "version" "1.0.4"
+  dependencies:
+    "call-bind" "^1.0.2"
+    "define-properties" "^1.1.3"
+
+"string.prototype.trimstart@^1.0.4":
+  "integrity" "sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0="
+  "resolved" "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.4.tgz?cache=0&sync_timestamp=1614127357785&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.4.tgz"
+  "version" "1.0.4"
+  dependencies:
+    "call-bind" "^1.0.2"
+    "define-properties" "^1.1.3"
+
+"strip-ansi@^3.0.1":
+  "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8="
+  "resolved" "https://registry.nlark.com/strip-ansi/download/strip-ansi-3.0.1.tgz"
+  "version" "3.0.1"
+  dependencies:
+    "ansi-regex" "^2.0.0"
+
+"strip-ansi@^4.0.0":
+  "integrity" "sha1-qEeQIusaw2iocTibY1JixQXuNo8="
+  "resolved" "https://registry.nlark.com/strip-ansi/download/strip-ansi-4.0.0.tgz"
+  "version" "4.0.0"
+  dependencies:
+    "ansi-regex" "^3.0.0"
+
+"strip-ansi@^5", "strip-ansi@^5.0.0", "strip-ansi@^5.1.0", "strip-ansi@^5.2.0":
+  "integrity" "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4="
+  "resolved" "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz"
+  "version" "5.2.0"
+  dependencies:
+    "ansi-regex" "^4.1.0"
+
+"strip-ansi@^6.0.0":
+  "integrity" "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI="
+  "resolved" "https://registry.nlark.com/strip-ansi/download/strip-ansi-6.0.0.tgz"
+  "version" "6.0.0"
+  dependencies:
+    "ansi-regex" "^5.0.0"
+
+"strip-eof@^1.0.0":
+  "integrity" "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+  "resolved" "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz"
+  "version" "1.0.0"
+
+"strip-final-newline@^2.0.0":
+  "integrity" "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0="
+  "resolved" "https://registry.nlark.com/strip-final-newline/download/strip-final-newline-2.0.0.tgz"
+  "version" "2.0.0"
+
+"strip-indent@^2.0.0":
+  "integrity" "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g="
+  "resolved" "https://registry.nlark.com/strip-indent/download/strip-indent-2.0.0.tgz?cache=0&sync_timestamp=1620053263051&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-indent%2Fdownload%2Fstrip-indent-2.0.0.tgz"
+  "version" "2.0.0"
+
+"strip-json-comments@^3.0.1":
+  "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
+  "resolved" "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
+  "version" "3.1.1"
+
+"strip-json-comments@2.0.1":
+  "integrity" "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+  "resolved" "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz"
+  "version" "2.0.1"
+
+"stylehacks@^4.0.0":
+  "integrity" "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU="
+  "resolved" "https://registry.nlark.com/stylehacks/download/stylehacks-4.0.3.tgz"
+  "version" "4.0.3"
+  dependencies:
+    "browserslist" "^4.0.0"
+    "postcss" "^7.0.0"
+    "postcss-selector-parser" "^3.0.0"
+
+"stylus-loader@^3.0.2":
+  "integrity" "sha1-J6cGQgsFo44DjnyssVNXjUUFE8Y="
+  "resolved" "https://registry.nlark.com/stylus-loader/download/stylus-loader-3.0.2.tgz"
+  "version" "3.0.2"
+  dependencies:
+    "loader-utils" "^1.0.2"
+    "lodash.clonedeep" "^4.5.0"
+    "when" "~3.6.x"
+
+"stylus@^0.54.7", "stylus@>=0.52.4":
+  "integrity" "sha1-PaPmWWa8Vnp7BEv+DuzmU+CZ0Uc="
+  "resolved" "https://registry.npm.taobao.org/stylus/download/stylus-0.54.8.tgz?cache=0&sync_timestamp=1594901358297&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylus%2Fdownload%2Fstylus-0.54.8.tgz"
+  "version" "0.54.8"
+  dependencies:
+    "css-parse" "~2.0.0"
+    "debug" "~3.1.0"
+    "glob" "^7.1.6"
+    "mkdirp" "~1.0.4"
+    "safer-buffer" "^2.1.2"
+    "sax" "~1.2.4"
+    "semver" "^6.3.0"
+    "source-map" "^0.7.3"
+
+"supports-color@^5.3.0":
+  "integrity" "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8="
+  "resolved" "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz"
+  "version" "5.5.0"
+  dependencies:
+    "has-flag" "^3.0.0"
+
+"supports-color@^6.1.0":
+  "integrity" "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM="
+  "resolved" "https://registry.nlark.com/supports-color/download/supports-color-6.1.0.tgz"
+  "version" "6.1.0"
+  dependencies:
+    "has-flag" "^3.0.0"
+
+"supports-color@^7.1.0":
+  "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
+  "resolved" "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz"
+  "version" "7.2.0"
+  dependencies:
+    "has-flag" "^4.0.0"
+
+"supports-color@6.0.0":
+  "integrity" "sha1-ds/nQs8fQbubHCmtAwaMBbTA5Ao="
+  "resolved" "https://registry.nlark.com/supports-color/download/supports-color-6.0.0.tgz"
+  "version" "6.0.0"
+  dependencies:
+    "has-flag" "^3.0.0"
+
+"svg-tags@^1.0.0":
+  "integrity" "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q="
+  "resolved" "https://registry.nlark.com/svg-tags/download/svg-tags-1.0.0.tgz"
+  "version" "1.0.0"
+
+"svgo@^1.0.0":
+  "integrity" "sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc="
+  "resolved" "https://registry.nlark.com/svgo/download/svgo-1.3.2.tgz"
+  "version" "1.3.2"
+  dependencies:
+    "chalk" "^2.4.1"
+    "coa" "^2.0.2"
+    "css-select" "^2.0.0"
+    "css-select-base-adapter" "^0.1.1"
+    "css-tree" "1.0.0-alpha.37"
+    "csso" "^4.0.2"
+    "js-yaml" "^3.13.1"
+    "mkdirp" "~0.5.1"
+    "object.values" "^1.1.0"
+    "sax" "~1.2.4"
+    "stable" "^0.1.8"
+    "unquote" "~1.1.1"
+    "util.promisify" "~1.0.0"
+
+"symbol-tree@^3.2.2":
+  "integrity" "sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I="
+  "resolved" "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz"
+  "version" "3.2.4"
+
+"table@^5.2.3":
+  "integrity" "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug=="
+  "resolved" "https://registry.npmmirror.com/table/-/table-5.4.6.tgz"
+  "version" "5.4.6"
+  dependencies:
+    "ajv" "^6.10.2"
+    "lodash" "^4.17.14"
+    "slice-ansi" "^2.1.0"
+    "string-width" "^3.0.0"
+
+"tapable@^1.0.0", "tapable@^1.1.3":
+  "integrity" "sha1-ofzMBrWNth/XpF2i2kT186Pme6I="
+  "resolved" "https://registry.nlark.com/tapable/download/tapable-1.1.3.tgz"
+  "version" "1.1.3"
+
+"terser-webpack-plugin@^1.4.3", "terser-webpack-plugin@^1.4.4":
+  "integrity" "sha1-oheu+uozDnNP+sthIOwfoxLWBAs="
+  "resolved" "https://registry.nlark.com/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz?cache=0&sync_timestamp=1624624486956&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.5.tgz"
+  "version" "1.4.5"
+  dependencies:
+    "cacache" "^12.0.2"
+    "find-cache-dir" "^2.1.0"
+    "is-wsl" "^1.1.0"
+    "schema-utils" "^1.0.0"
+    "serialize-javascript" "^4.0.0"
+    "source-map" "^0.6.1"
+    "terser" "^4.1.2"
+    "webpack-sources" "^1.4.0"
+    "worker-farm" "^1.7.0"
+
+"terser@^4.1.2":
+  "integrity" "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc="
+  "resolved" "https://registry.nlark.com/terser/download/terser-4.8.0.tgz"
+  "version" "4.8.0"
+  dependencies:
+    "commander" "^2.20.0"
+    "source-map" "~0.6.1"
+    "source-map-support" "~0.5.12"
+
+"text-table@^0.2.0":
+  "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+  "resolved" "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz"
+  "version" "0.2.0"
+
+"thenify-all@^1.0.0":
+  "integrity" "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY="
+  "resolved" "https://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz"
+  "version" "1.6.0"
+  dependencies:
+    "thenify" ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+  "integrity" "sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8="
+  "resolved" "https://registry.npm.taobao.org/thenify/download/thenify-3.3.1.tgz"
+  "version" "3.3.1"
+  dependencies:
+    "any-promise" "^1.0.0"
+
+"thread-loader@^2.1.3":
+  "integrity" "sha1-y9LBOfwrLebp0o9iKGq3cMGsvdo="
+  "resolved" "https://registry.nlark.com/thread-loader/download/thread-loader-2.1.3.tgz?cache=0&sync_timestamp=1620664384427&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fthread-loader%2Fdownload%2Fthread-loader-2.1.3.tgz"
+  "version" "2.1.3"
+  dependencies:
+    "loader-runner" "^2.3.1"
+    "loader-utils" "^1.1.0"
+    "neo-async" "^2.6.0"
+
+"through@^2.3.6", "through@~2.3":
+  "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+  "resolved" "https://registry.nlark.com/through/download/through-2.3.8.tgz"
+  "version" "2.3.8"
+
+"through2@^2.0.0":
+  "integrity" "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0="
+  "resolved" "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz"
+  "version" "2.0.5"
+  dependencies:
+    "readable-stream" "~2.3.6"
+    "xtend" "~4.0.1"
+
+"thunky@^1.0.2":
+  "integrity" "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30="
+  "resolved" "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz"
+  "version" "1.1.0"
+
+"timers-browserify@^2.0.4":
+  "integrity" "sha1-RKRcEfv0B/NPl7zNFXfGUjYbAO4="
+  "resolved" "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.12.tgz"
+  "version" "2.0.12"
+  dependencies:
+    "setimmediate" "^1.0.4"
+
+"timsort@^0.3.0":
+  "integrity" "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
+  "resolved" "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz"
+  "version" "0.3.0"
+
+"tmp@^0.0.33":
+  "integrity" "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk="
+  "resolved" "https://registry.nlark.com/tmp/download/tmp-0.0.33.tgz"
+  "version" "0.0.33"
+  dependencies:
+    "os-tmpdir" "~1.0.2"
+
+"to-arraybuffer@^1.0.0":
+  "integrity" "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+  "resolved" "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz"
+  "version" "1.0.1"
+
+"to-fast-properties@^2.0.0":
+  "integrity" "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+  "resolved" "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz"
+  "version" "2.0.0"
+
+"to-object-path@^0.3.0":
+  "integrity" "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68="
+  "resolved" "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz"
+  "version" "0.3.0"
+  dependencies:
+    "kind-of" "^3.0.2"
+
+"to-regex-range@^2.1.0":
+  "integrity" "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg="
+  "resolved" "https://registry.nlark.com/to-regex-range/download/to-regex-range-2.1.1.tgz"
+  "version" "2.1.1"
+  dependencies:
+    "is-number" "^3.0.0"
+    "repeat-string" "^1.6.1"
+
+"to-regex-range@^5.0.1":
+  "integrity" "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ="
+  "resolved" "https://registry.nlark.com/to-regex-range/download/to-regex-range-5.0.1.tgz"
+  "version" "5.0.1"
+  dependencies:
+    "is-number" "^7.0.0"
+
+"to-regex@^3.0.1", "to-regex@^3.0.2":
+  "integrity" "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4="
+  "resolved" "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz"
+  "version" "3.0.2"
+  dependencies:
+    "define-property" "^2.0.2"
+    "extend-shallow" "^3.0.2"
+    "regex-not" "^1.0.2"
+    "safe-regex" "^1.1.0"
+
+"toidentifier@1.0.0":
+  "integrity" "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM="
+  "resolved" "https://registry.nlark.com/toidentifier/download/toidentifier-1.0.0.tgz"
+  "version" "1.0.0"
+
+"toposort@^1.0.0":
+  "integrity" "sha1-LmhELZ9k7HILjMieZEOsbKqVACk="
+  "resolved" "https://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz"
+  "version" "1.0.7"
+
+"toposort@^2.0.2":
+  "integrity" "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA="
+  "resolved" "https://registry.npm.taobao.org/toposort/download/toposort-2.0.2.tgz"
+  "version" "2.0.2"
+
+"tough-cookie@^2.3.3", "tough-cookie@^2.3.3 || ^3.0.1 || ^4.0.0", "tough-cookie@~2.5.0":
+  "integrity" "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI="
+  "resolved" "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz"
+  "version" "2.5.0"
+  dependencies:
+    "psl" "^1.1.28"
+    "punycode" "^2.1.1"
+
+"tough-cookie@^3.0.1":
+  "integrity" "sha1-nfT1fnOcJpMKAYGEiH9K233Kc7I="
+  "resolved" "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-3.0.1.tgz"
+  "version" "3.0.1"
+  dependencies:
+    "ip-regex" "^2.1.0"
+    "psl" "^1.1.28"
+    "punycode" "^2.1.1"
+
+"tr46@^1.0.1":
+  "integrity" "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk="
+  "resolved" "https://registry.nlark.com/tr46/download/tr46-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "punycode" "^2.1.0"
+
+"tr46@~0.0.3":
+  "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+  "resolved" "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz"
+  "version" "0.0.3"
+
+"tryer@^1.0.1":
+  "integrity" "sha1-8shUBoALmw90yfdGW4HqrSQSUvg="
+  "resolved" "https://registry.nlark.com/tryer/download/tryer-1.0.1.tgz"
+  "version" "1.0.1"
+
+"ts-pnp@^1.1.6":
+  "integrity" "sha1-pQCtCEsHmPHDBxrzkeZZEshrypI="
+  "resolved" "https://registry.npm.taobao.org/ts-pnp/download/ts-pnp-1.2.0.tgz"
+  "version" "1.2.0"
+
+"tslib@^1.10.0":
+  "integrity" "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA="
+  "resolved" "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz"
+  "version" "1.14.1"
+
+"tslib@^1.9.0":
+  "integrity" "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA="
+  "resolved" "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz"
+  "version" "1.14.1"
+
+"tslib@^2.0.1", "tslib@2.0.3":
+  "integrity" "sha1-jgdBrEX8DCJuWKF7/D5kubxsphw="
+  "resolved" "https://registry.nlark.com/tslib/download/tslib-2.0.3.tgz"
+  "version" "2.0.3"
+
+"tslib@^2.1.0":
+  "integrity" "sha1-gDuM2rPhK6WBpMpByIObuw2ssJ4="
+  "resolved" "https://registry.nlark.com/tslib/download/tslib-2.3.0.tgz"
+  "version" "2.3.0"
+
+"tty-browserify@0.0.0":
+  "integrity" "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+  "resolved" "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz"
+  "version" "0.0.0"
+
+"tunnel-agent@^0.6.0":
+  "integrity" "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0="
+  "resolved" "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz"
+  "version" "0.6.0"
+  dependencies:
+    "safe-buffer" "^5.0.1"
+
+"tweetnacl@^0.14.3", "tweetnacl@~0.14.0":
+  "integrity" "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+  "resolved" "https://registry.nlark.com/tweetnacl/download/tweetnacl-0.14.5.tgz"
+  "version" "0.14.5"
+
+"type-check@~0.3.2":
+  "integrity" "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I="
+  "resolved" "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz"
+  "version" "0.3.2"
+  dependencies:
+    "prelude-ls" "~1.1.2"
+
+"type-detect@^4.0.0", "type-detect@^4.0.5":
+  "integrity" "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw="
+  "resolved" "https://registry.npm.taobao.org/type-detect/download/type-detect-4.0.8.tgz"
+  "version" "4.0.8"
+
+"type-fest@^0.21.3":
+  "integrity" "sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc="
+  "resolved" "https://registry.nlark.com/type-fest/download/type-fest-0.21.3.tgz?cache=0&sync_timestamp=1625745286088&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.21.3.tgz"
+  "version" "0.21.3"
+
+"type-fest@^0.6.0":
+  "integrity" "sha1-jSojcNPfiG61yQraHFv2GIrPg4s="
+  "resolved" "https://registry.nlark.com/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1625745286088&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz"
+  "version" "0.6.0"
+
+"type-fest@^0.8.1":
+  "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
+  "resolved" "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz"
+  "version" "0.8.1"
+
+"type-is@~1.6.17", "type-is@~1.6.18":
+  "integrity" "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE="
+  "resolved" "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz"
+  "version" "1.6.18"
+  dependencies:
+    "media-typer" "0.3.0"
+    "mime-types" "~2.1.24"
+
+"typedarray@^0.0.6":
+  "integrity" "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+  "resolved" "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz"
+  "version" "0.0.6"
+
+"uglify-js@3.4.x":
+  "integrity" "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8="
+  "resolved" "https://registry.nlark.com/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1624812318797&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz"
+  "version" "3.4.10"
+  dependencies:
+    "commander" "~2.19.0"
+    "source-map" "~0.6.1"
+
+"unbox-primitive@^1.0.1":
+  "integrity" "sha1-CF4hViXsMWJXTciFmr7nilmxRHE="
+  "resolved" "https://registry.npm.taobao.org/unbox-primitive/download/unbox-primitive-1.0.1.tgz?cache=0&sync_timestamp=1616706427948&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funbox-primitive%2Fdownload%2Funbox-primitive-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "function-bind" "^1.1.1"
+    "has-bigints" "^1.0.1"
+    "has-symbols" "^1.0.2"
+    "which-boxed-primitive" "^1.0.2"
+
+"unescape@^1.0.1":
+  "integrity" "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ=="
+  "resolved" "https://registry.npmmirror.com/unescape/-/unescape-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "extend-shallow" "^2.0.1"
+
+"unicode-canonical-property-names-ecmascript@^1.0.4":
+  "integrity" "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg="
+  "resolved" "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz"
+  "version" "1.0.4"
+
+"unicode-match-property-ecmascript@^1.0.4":
+  "integrity" "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw="
+  "resolved" "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz"
+  "version" "1.0.4"
+  dependencies:
+    "unicode-canonical-property-names-ecmascript" "^1.0.4"
+    "unicode-property-aliases-ecmascript" "^1.0.4"
+
+"unicode-match-property-value-ecmascript@^1.2.0":
+  "integrity" "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE="
+  "resolved" "https://registry.nlark.com/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz"
+  "version" "1.2.0"
+
+"unicode-property-aliases-ecmascript@^1.0.4":
+  "integrity" "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ="
+  "resolved" "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz"
+  "version" "1.1.0"
+
+"union-value@^1.0.0":
+  "integrity" "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc="
+  "resolved" "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "arr-union" "^3.1.0"
+    "get-value" "^2.0.6"
+    "is-extendable" "^0.1.1"
+    "set-value" "^2.0.1"
+
+"uniq@^1.0.1":
+  "integrity" "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+  "resolved" "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz"
+  "version" "1.0.1"
+
+"uniqs@^2.0.0":
+  "integrity" "sha1-/+3ks2slKQaW5uFl1KWe25mOawI="
+  "resolved" "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz"
+  "version" "2.0.0"
+
+"unique-filename@^1.1.1":
+  "integrity" "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA="
+  "resolved" "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz"
+  "version" "1.1.1"
+  dependencies:
+    "unique-slug" "^2.0.0"
+
+"unique-slug@^2.0.0":
+  "integrity" "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw="
+  "resolved" "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz"
+  "version" "2.0.2"
+  dependencies:
+    "imurmurhash" "^0.1.4"
+
+"universalify@^0.1.0":
+  "integrity" "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY="
+  "resolved" "https://registry.nlark.com/universalify/download/universalify-0.1.2.tgz"
+  "version" "0.1.2"
+
+"unpipe@~1.0.0", "unpipe@1.0.0":
+  "integrity" "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+  "resolved" "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz"
+  "version" "1.0.0"
+
+"unquote@~1.1.1":
+  "integrity" "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ="
+  "resolved" "https://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz"
+  "version" "1.1.1"
+
+"unset-value@^1.0.0":
+  "integrity" "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk="
+  "resolved" "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz?cache=0&sync_timestamp=1616088640915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funset-value%2Fdownload%2Funset-value-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "has-value" "^0.3.1"
+    "isobject" "^3.0.0"
+
+"upath@^1.1.1":
+  "integrity" "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ="
+  "resolved" "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz"
+  "version" "1.2.0"
+
+"upper-case@^1.1.1":
+  "integrity" "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
+  "resolved" "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz?cache=0&sync_timestamp=1606859943902&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupper-case%2Fdownload%2Fupper-case-1.1.3.tgz"
+  "version" "1.1.3"
+
+"uri-js@^4.2.2":
+  "integrity" "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34="
+  "resolved" "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237530009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz"
+  "version" "4.4.1"
+  dependencies:
+    "punycode" "^2.1.0"
+
+"urix@^0.1.0":
+  "integrity" "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+  "resolved" "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz"
+  "version" "0.1.0"
+
+"url-loader@^2.2.0":
+  "integrity" "sha1-4OLvZY8APvuMpBsPP/v3a6uIZYs="
+  "resolved" "https://registry.npm.taobao.org/url-loader/download/url-loader-2.3.0.tgz"
+  "version" "2.3.0"
+  dependencies:
+    "loader-utils" "^1.2.3"
+    "mime" "^2.4.4"
+    "schema-utils" "^2.5.0"
+
+"url-parse@^1.4.3", "url-parse@^1.5.1":
+  "integrity" "sha1-1fqYkK+KXh8nSiyYN2UQ9kJfbjs="
+  "resolved" "https://registry.npm.taobao.org/url-parse/download/url-parse-1.5.1.tgz"
+  "version" "1.5.1"
+  dependencies:
+    "querystringify" "^2.1.1"
+    "requires-port" "^1.0.0"
+
+"url@^0.11.0":
+  "integrity" "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE="
+  "resolved" "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz"
+  "version" "0.11.0"
+  dependencies:
+    "punycode" "1.3.2"
+    "querystring" "0.2.0"
+
+"urllib@^2.33.1":
+  "integrity" "sha512-XDZjoijtzsbkXTXgM+A/sJM002nwoYsc46YOYr6MNH2jUUw1nCBf2ywT1WaPsVEWJX4Yr+9isGmYj4+yofFn9g=="
+  "resolved" "https://registry.npmmirror.com/urllib/-/urllib-2.40.0.tgz"
+  "version" "2.40.0"
+  dependencies:
+    "any-promise" "^1.3.0"
+    "content-type" "^1.0.2"
+    "debug" "^2.6.9"
+    "default-user-agent" "^1.0.0"
+    "digest-header" "^1.0.0"
+    "ee-first" "~1.1.1"
+    "formstream" "^1.1.0"
+    "humanize-ms" "^1.2.0"
+    "iconv-lite" "^0.4.15"
+    "ip" "^1.1.5"
+    "proxy-agent" "^5.0.0"
+    "pump" "^3.0.0"
+    "qs" "^6.4.0"
+    "statuses" "^1.3.1"
+    "utility" "^1.16.1"
+
+"use@^3.1.0":
+  "integrity" "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8="
+  "resolved" "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz"
+  "version" "3.1.1"
+
+"util-deprecate@^1.0.1", "util-deprecate@^1.0.2", "util-deprecate@~1.0.1":
+  "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+  "resolved" "https://registry.nlark.com/util-deprecate/download/util-deprecate-1.0.2.tgz"
+  "version" "1.0.2"
+
+"util.promisify@~1.0.0", "util.promisify@1.0.0":
+  "integrity" "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA="
+  "resolved" "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz?cache=0&sync_timestamp=1610159885628&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "define-properties" "^1.1.2"
+    "object.getownpropertydescriptors" "^2.0.3"
+
+"util@^0.11.0":
+  "integrity" "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE="
+  "resolved" "https://registry.nlark.com/util/download/util-0.11.1.tgz?cache=0&sync_timestamp=1622212943994&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil%2Fdownload%2Futil-0.11.1.tgz"
+  "version" "0.11.1"
+  dependencies:
+    "inherits" "2.0.3"
+
+"util@0.10.3":
+  "integrity" "sha1-evsa/lCAUkZInj23/g7TeTNqwPk="
+  "resolved" "https://registry.nlark.com/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1622212943994&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil%2Fdownload%2Futil-0.10.3.tgz"
+  "version" "0.10.3"
+  dependencies:
+    "inherits" "2.0.1"
+
+"utila@~0.4":
+  "integrity" "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw="
+  "resolved" "https://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz"
+  "version" "0.4.0"
+
+"utility@^1.16.1", "utility@^1.17.0", "utility@^1.8.0":
+  "integrity" "sha512-KdVkF9An/0239BJ4+dqOa7NPrPIOeQE9AGfx0XS16O9DBiHNHRJMoeU5nL6pRGAkgJOqdOu8R4gBRcXnAocJKw=="
+  "resolved" "https://registry.npmmirror.com/utility/-/utility-1.17.0.tgz"
+  "version" "1.17.0"
+  dependencies:
+    "copy-to" "^2.0.1"
+    "escape-html" "^1.0.3"
+    "mkdirp" "^0.5.1"
+    "mz" "^2.7.0"
+    "unescape" "^1.0.1"
+
+"utils-merge@1.0.1":
+  "integrity" "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+  "resolved" "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz"
+  "version" "1.0.1"
+
+"uuid@^3.3.2", "uuid@^3.4.0":
+  "integrity" "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4="
+  "resolved" "https://registry.nlark.com/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1622213086354&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz"
+  "version" "3.4.0"
+
+"v8-compile-cache@^2.0.3":
+  "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA=="
+  "resolved" "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz"
+  "version" "2.3.0"
+
+"validate-npm-package-license@^3.0.1":
+  "integrity" "sha1-/JH2uce6FchX9MssXe/uw51PQQo="
+  "resolved" "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz"
+  "version" "3.0.4"
+  dependencies:
+    "spdx-correct" "^3.0.0"
+    "spdx-expression-parse" "^3.0.0"
+
+"vary@~1.1.2":
+  "integrity" "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+  "resolved" "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz"
+  "version" "1.1.2"
+
+"vendors@^1.0.0":
+  "integrity" "sha1-4rgApT56Kbk1BsPPQRANFsTErY4="
+  "resolved" "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz?cache=0&sync_timestamp=1615203486079&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvendors%2Fdownload%2Fvendors-1.0.4.tgz"
+  "version" "1.0.4"
+
+"verror@1.10.0":
+  "integrity" "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA="
+  "resolved" "https://registry.nlark.com/verror/download/verror-1.10.0.tgz"
+  "version" "1.10.0"
+  dependencies:
+    "assert-plus" "^1.0.0"
+    "core-util-is" "1.0.2"
+    "extsprintf" "^1.2.0"
+
+"vm-browserify@^1.0.1":
+  "integrity" "sha1-eGQcSIuObKkadfUR56OzKobl3aA="
+  "resolved" "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz"
+  "version" "1.1.2"
+
+"vm2@^3.9.8":
+  "integrity" "sha512-HgvPHYHeQy8+QhzlFryvSteA4uQLBCOub02mgqdR+0bN/akRZ48TGB1v0aCv7ksyc0HXx16AZtMHKS38alc6TA=="
+  "resolved" "https://registry.npmmirror.com/vm2/-/vm2-3.9.14.tgz"
+  "version" "3.9.14"
+  dependencies:
+    "acorn" "^8.7.0"
+    "acorn-walk" "^8.2.0"
+
+"vue-demi@*":
+  "integrity" "sha512-Vy1zbZhCOdsmvGR6tJhAvO5vhP7eiS8xkbYQSoVa7o6KlIy3W8Rc53ED4qI4qpeRDjv3mLfXSEpYU6Yq4pgXRg=="
+  "resolved" "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.8.tgz"
+  "version" "0.13.8"
+
+"vue-draggable-next@^2.0.1":
+  "integrity" "sha1-u2TvswLHuOdZ/T8hQnhxeJtiTGc="
+  "resolved" "https://registry.nlark.com/vue-draggable-next/download/vue-draggable-next-2.0.1.tgz"
+  "version" "2.0.1"
+
+"vue-hot-reload-api@^2.3.0":
+  "integrity" "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI="
+  "resolved" "https://registry.nlark.com/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz"
+  "version" "2.3.4"
+
+"vue-loader-v16@npm:vue-loader@^16.1.0":
+  "integrity" "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA=="
+  "resolved" "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz"
+  "version" "16.8.3"
+  dependencies:
+    "chalk" "^4.1.0"
+    "hash-sum" "^2.0.0"
+    "loader-utils" "^2.0.0"
+
+"vue-loader@^15.9.2":
+  "integrity" "sha1-FbBXdcPgw4QHZ5OTws5t9nOwEEQ="
+  "resolved" "https://registry.nlark.com/vue-loader/download/vue-loader-15.9.7.tgz?cache=0&sync_timestamp=1624996813170&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.7.tgz"
+  "version" "15.9.7"
+  dependencies:
+    "@vue/component-compiler-utils" "^3.1.0"
+    "hash-sum" "^1.0.2"
+    "loader-utils" "^1.1.0"
+    "vue-hot-reload-api" "^2.3.0"
+    "vue-style-loader" "^4.1.0"
+
+"vue-router@^4.0.0-0":
+  "integrity" "sha1-7I/aAylJsqMdMnMXD483bobrUqw="
+  "resolved" "https://registry.nlark.com/vue-router/download/vue-router-4.0.10.tgz?cache=0&sync_timestamp=1624286995690&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-router%2Fdownload%2Fvue-router-4.0.10.tgz"
+  "version" "4.0.10"
+  dependencies:
+    "@vue/devtools-api" "^6.0.0-beta.14"
+
+"vue-style-loader@^4.1.0", "vue-style-loader@^4.1.2":
+  "integrity" "sha1-bVWGOlH6dXqyTonZNxRlByqnvDU="
+  "resolved" "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.3.tgz"
+  "version" "4.1.3"
+  dependencies:
+    "hash-sum" "^1.0.2"
+    "loader-utils" "^1.0.2"
+
+"vue-template-es2015-compiler@^1.9.0":
+  "integrity" "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU="
+  "resolved" "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz"
+  "version" "1.9.1"
+
+"vue@^2 || ^3.0.0-0", "vue@^3.0.0", "vue@^3.0.0-0 || ^2.6.0", "vue@^3.0.1", "vue@^3.0.2", "vue@^3.0.5", "vue@^3.2.0", "vue@^3.2.37", "vue@3.2.37":
+  "integrity" "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ=="
+  "resolved" "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz"
+  "version" "3.2.37"
+  dependencies:
+    "@vue/compiler-dom" "3.2.37"
+    "@vue/compiler-sfc" "3.2.37"
+    "@vue/runtime-dom" "3.2.37"
+    "@vue/server-renderer" "3.2.37"
+    "@vue/shared" "3.2.37"
+
+"vuex@^4.0.0-0":
+  "integrity" "sha1-+Jbb1b8qDpY/AMZ+m2EN50nMrMk="
+  "resolved" "https://registry.nlark.com/vuex/download/vuex-4.0.2.tgz"
+  "version" "4.0.2"
+  dependencies:
+    "@vue/devtools-api" "^6.0.0-beta.11"
+
+"w3c-hr-time@^1.0.1":
+  "integrity" "sha1-ConN9cwVgi35w2BUNnaWPgzDCM0="
+  "resolved" "https://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz"
+  "version" "1.0.2"
+  dependencies:
+    "browser-process-hrtime" "^1.0.0"
+
+"w3c-xmlserializer@^1.1.2":
+  "integrity" "sha1-MEhcp9cKb9BSQgo9Ev2Q5jOc55Q="
+  "resolved" "https://registry.npm.taobao.org/w3c-xmlserializer/download/w3c-xmlserializer-1.1.2.tgz"
+  "version" "1.1.2"
+  dependencies:
+    "domexception" "^1.0.1"
+    "webidl-conversions" "^4.0.2"
+    "xml-name-validator" "^3.0.0"
+
+"wangeditor@^4.7.6":
+  "integrity" "sha1-0ubd7PJHTsJsQnc74vrEM9Hguq8="
+  "resolved" "https://registry.nlark.com/wangeditor/download/wangeditor-4.7.6.tgz?cache=0&sync_timestamp=1627614400149&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwangeditor%2Fdownload%2Fwangeditor-4.7.6.tgz"
+  "version" "4.7.6"
+  dependencies:
+    "@babel/runtime" "^7.11.2"
+    "@babel/runtime-corejs3" "^7.11.2"
+    "tslib" "^2.1.0"
+
+"watchpack-chokidar2@^2.0.1":
+  "integrity" "sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc="
+  "resolved" "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.1.tgz?cache=0&sync_timestamp=1604989085906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack-chokidar2%2Fdownload%2Fwatchpack-chokidar2-2.0.1.tgz"
+  "version" "2.0.1"
+  dependencies:
+    "chokidar" "^2.1.8"
+
+"watchpack@^1.7.4":
+  "integrity" "sha1-EmfmxV4Lm1vkTCAjrtVDeiwmxFM="
+  "resolved" "https://registry.nlark.com/watchpack/download/watchpack-1.7.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.5.tgz"
+  "version" "1.7.5"
+  dependencies:
+    "graceful-fs" "^4.1.2"
+    "neo-async" "^2.5.0"
+  optionalDependencies:
+    "chokidar" "^3.4.1"
+    "watchpack-chokidar2" "^2.0.1"
+
+"wbuf@^1.1.0", "wbuf@^1.7.3":
+  "integrity" "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98="
+  "resolved" "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz"
+  "version" "1.7.3"
+  dependencies:
+    "minimalistic-assert" "^1.0.0"
+
+"wcwidth@^1.0.1":
+  "integrity" "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g="
+  "resolved" "https://registry.nlark.com/wcwidth/download/wcwidth-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "defaults" "^1.0.3"
+
+"webidl-conversions@^3.0.0":
+  "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+  "resolved" "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz"
+  "version" "3.0.1"
+
+"webidl-conversions@^4.0.2":
+  "integrity" "sha1-qFWYCx8LazWbodXZ+zmulB+qY60="
+  "resolved" "https://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz"
+  "version" "4.0.2"
+
+"webpack-bundle-analyzer@^3.8.0":
+  "integrity" "sha1-9vlNsQj7V05BWtMT3kGicH0z7zw="
+  "resolved" "https://registry.nlark.com/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.9.0.tgz?cache=0&sync_timestamp=1621259036556&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack-bundle-analyzer%2Fdownload%2Fwebpack-bundle-analyzer-3.9.0.tgz"
+  "version" "3.9.0"
+  dependencies:
+    "acorn" "^7.1.1"
+    "acorn-walk" "^7.1.1"
+    "bfj" "^6.1.1"
+    "chalk" "^2.4.1"
+    "commander" "^2.18.0"
+    "ejs" "^2.6.1"
+    "express" "^4.16.3"
+    "filesize" "^3.6.1"
+    "gzip-size" "^5.0.0"
+    "lodash" "^4.17.19"
+    "mkdirp" "^0.5.1"
+    "opener" "^1.5.1"
+    "ws" "^6.0.0"
+
+"webpack-chain@^6.4.0":
+  "integrity" "sha1-TycoTLu2N+PI+970Pu9YjU2GEgY="
+  "resolved" "https://registry.npm.taobao.org/webpack-chain/download/webpack-chain-6.5.1.tgz"
+  "version" "6.5.1"
+  dependencies:
+    "deepmerge" "^1.5.2"
+    "javascript-stringify" "^2.0.1"
+
+"webpack-dev-middleware@^3.7.2":
+  "integrity" "sha1-Bjk3KxQyYuK4SrldO5GnWXBhwsU="
+  "resolved" "https://registry.nlark.com/webpack-dev-middleware/download/webpack-dev-middleware-3.7.3.tgz"
+  "version" "3.7.3"
+  dependencies:
+    "memory-fs" "^0.4.1"
+    "mime" "^2.4.4"
+    "mkdirp" "^0.5.1"
+    "range-parser" "^1.2.1"
+    "webpack-log" "^2.0.0"
+
+"webpack-dev-server@^3.11.0":
+  "integrity" "sha1-aV687Xakkp8NXef9c/r+GF/jNwg="
+  "resolved" "https://registry.nlark.com/webpack-dev-server/download/webpack-dev-server-3.11.2.tgz"
+  "version" "3.11.2"
+  dependencies:
+    "ansi-html" "0.0.7"
+    "bonjour" "^3.5.0"
+    "chokidar" "^2.1.8"
+    "compression" "^1.7.4"
+    "connect-history-api-fallback" "^1.6.0"
+    "debug" "^4.1.1"
+    "del" "^4.1.1"
+    "express" "^4.17.1"
+    "html-entities" "^1.3.1"
+    "http-proxy-middleware" "0.19.1"
+    "import-local" "^2.0.0"
+    "internal-ip" "^4.3.0"
+    "ip" "^1.1.5"
+    "is-absolute-url" "^3.0.3"
+    "killable" "^1.0.1"
+    "loglevel" "^1.6.8"
+    "opn" "^5.5.0"
+    "p-retry" "^3.0.1"
+    "portfinder" "^1.0.26"
+    "schema-utils" "^1.0.0"
+    "selfsigned" "^1.10.8"
+    "semver" "^6.3.0"
+    "serve-index" "^1.9.1"
+    "sockjs" "^0.3.21"
+    "sockjs-client" "^1.5.0"
+    "spdy" "^4.0.2"
+    "strip-ansi" "^3.0.1"
+    "supports-color" "^6.1.0"
+    "url" "^0.11.0"
+    "webpack-dev-middleware" "^3.7.2"
+    "webpack-log" "^2.0.0"
+    "ws" "^6.2.1"
+    "yargs" "^13.3.2"
+
+"webpack-log@^2.0.0":
+  "integrity" "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8="
+  "resolved" "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz?cache=0&sync_timestamp=1615477493300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "ansi-colors" "^3.0.0"
+    "uuid" "^3.3.2"
+
+"webpack-merge@^4.2.2":
+  "integrity" "sha1-onxS6ng9E5iv0gh/VH17nS9DY00="
+  "resolved" "https://registry.nlark.com/webpack-merge/download/webpack-merge-4.2.2.tgz"
+  "version" "4.2.2"
+  dependencies:
+    "lodash" "^4.17.15"
+
+"webpack-sources@^1.1.0", "webpack-sources@^1.4.0", "webpack-sources@^1.4.1":
+  "integrity" "sha1-7t2OwLko+/HL/plOItLYkPMwqTM="
+  "resolved" "https://registry.nlark.com/webpack-sources/download/webpack-sources-1.4.3.tgz"
+  "version" "1.4.3"
+  dependencies:
+    "source-list-map" "^2.0.0"
+    "source-map" "~0.6.1"
+
+"webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.1.0 || ^5.0.0-0", "webpack@^4.0.0", "webpack@^4.0.0 || ^5.0.0", "webpack@^4.1.0 || ^5.0.0-0", "webpack@^4.4.0", "webpack@>=2", "webpack@>=2.0.0 <5.0.0", "webpack@>=4.0.0":
+  "integrity" "sha1-v5tEBOogoHNgXgoBHRiNd8tq1UI="
+  "resolved" "https://registry.nlark.com/webpack/download/webpack-4.46.0.tgz"
+  "version" "4.46.0"
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-module-context" "1.9.0"
+    "@webassemblyjs/wasm-edit" "1.9.0"
+    "@webassemblyjs/wasm-parser" "1.9.0"
+    "acorn" "^6.4.1"
+    "ajv" "^6.10.2"
+    "ajv-keywords" "^3.4.1"
+    "chrome-trace-event" "^1.0.2"
+    "enhanced-resolve" "^4.5.0"
+    "eslint-scope" "^4.0.3"
+    "json-parse-better-errors" "^1.0.2"
+    "loader-runner" "^2.4.0"
+    "loader-utils" "^1.2.3"
+    "memory-fs" "^0.4.1"
+    "micromatch" "^3.1.10"
+    "mkdirp" "^0.5.3"
+    "neo-async" "^2.6.1"
+    "node-libs-browser" "^2.2.1"
+    "schema-utils" "^1.0.0"
+    "tapable" "^1.1.3"
+    "terser-webpack-plugin" "^1.4.3"
+    "watchpack" "^1.7.4"
+    "webpack-sources" "^1.4.1"
+
+"websocket-driver@^0.7.4", "websocket-driver@>=0.5.1":
+  "integrity" "sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A="
+  "resolved" "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.4.tgz?cache=0&sync_timestamp=1591289007652&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.7.4.tgz"
+  "version" "0.7.4"
+  dependencies:
+    "http-parser-js" ">=0.5.1"
+    "safe-buffer" ">=5.1.0"
+    "websocket-extensions" ">=0.1.1"
+
+"websocket-extensions@>=0.1.1":
+  "integrity" "sha1-f4RzvIOd/YdgituV1+sHUhFXikI="
+  "resolved" "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz"
+  "version" "0.1.4"
+
+"whatwg-encoding@^1.0.1", "whatwg-encoding@^1.0.5":
+  "integrity" "sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA="
+  "resolved" "https://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz"
+  "version" "1.0.5"
+  dependencies:
+    "iconv-lite" "0.4.24"
+
+"whatwg-mimetype@^2.2.0", "whatwg-mimetype@^2.3.0":
+  "integrity" "sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78="
+  "resolved" "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz"
+  "version" "2.3.0"
+
+"whatwg-url@^5.0.0":
+  "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="
+  "resolved" "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz"
+  "version" "5.0.0"
+  dependencies:
+    "tr46" "~0.0.3"
+    "webidl-conversions" "^3.0.0"
+
+"whatwg-url@^7.0.0":
+  "integrity" "sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY="
+  "resolved" "https://registry.nlark.com/whatwg-url/download/whatwg-url-7.1.0.tgz?cache=0&sync_timestamp=1624742873749&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-7.1.0.tgz"
+  "version" "7.1.0"
+  dependencies:
+    "lodash.sortby" "^4.7.0"
+    "tr46" "^1.0.1"
+    "webidl-conversions" "^4.0.2"
+
+"when@~3.6.x":
+  "integrity" "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404="
+  "resolved" "https://registry.npm.taobao.org/when/download/when-3.6.4.tgz"
+  "version" "3.6.4"
+
+"which-boxed-primitive@^1.0.2":
+  "integrity" "sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY="
+  "resolved" "https://registry.npm.taobao.org/which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz"
+  "version" "1.0.2"
+  dependencies:
+    "is-bigint" "^1.0.1"
+    "is-boolean-object" "^1.1.0"
+    "is-number-object" "^1.0.4"
+    "is-string" "^1.0.5"
+    "is-symbol" "^1.0.3"
+
+"which-module@^2.0.0":
+  "integrity" "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+  "resolved" "https://registry.nlark.com/which-module/download/which-module-2.0.0.tgz"
+  "version" "2.0.0"
+
+"which@^1.2.9":
+  "integrity" "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo="
+  "resolved" "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz"
+  "version" "1.3.1"
+  dependencies:
+    "isexe" "^2.0.0"
+
+"which@^2.0.1":
+  "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="
+  "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
+  "version" "2.0.2"
+  dependencies:
+    "isexe" "^2.0.0"
+
+"which@1.3.1":
+  "integrity" "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo="
+  "resolved" "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz"
+  "version" "1.3.1"
+  dependencies:
+    "isexe" "^2.0.0"
+
+"wide-align@1.1.3":
+  "integrity" "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc="
+  "resolved" "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz"
+  "version" "1.1.3"
+  dependencies:
+    "string-width" "^1.0.2 || 2"
+
+"win-release@^1.0.0":
+  "integrity" "sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw=="
+  "resolved" "https://registry.npmmirror.com/win-release/-/win-release-1.1.1.tgz"
+  "version" "1.1.1"
+  dependencies:
+    "semver" "^5.0.1"
+
+"word-wrap@~1.2.3":
+  "integrity" "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w="
+  "resolved" "https://registry.nlark.com/word-wrap/download/word-wrap-1.2.3.tgz"
+  "version" "1.2.3"
+
+"worker-farm@^1.7.0":
+  "integrity" "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag="
+  "resolved" "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz"
+  "version" "1.7.0"
+  dependencies:
+    "errno" "~0.1.7"
+
+"wrap-ansi@^5.1.0":
+  "integrity" "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk="
+  "resolved" "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz"
+  "version" "5.1.0"
+  dependencies:
+    "ansi-styles" "^3.2.0"
+    "string-width" "^3.0.0"
+    "strip-ansi" "^5.0.0"
+
+"wrap-ansi@^6.2.0":
+  "integrity" "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM="
+  "resolved" "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz"
+  "version" "6.2.0"
+  dependencies:
+    "ansi-styles" "^4.0.0"
+    "string-width" "^4.1.0"
+    "strip-ansi" "^6.0.0"
+
+"wrap-ansi@^7.0.0":
+  "integrity" "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM="
+  "resolved" "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz"
+  "version" "7.0.0"
+  dependencies:
+    "ansi-styles" "^4.0.0"
+    "string-width" "^4.1.0"
+    "strip-ansi" "^6.0.0"
+
+"wrappy@1":
+  "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+  "resolved" "https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz"
+  "version" "1.0.2"
+
+"write@1.0.3":
+  "integrity" "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig=="
+  "resolved" "https://registry.npmmirror.com/write/-/write-1.0.3.tgz"
+  "version" "1.0.3"
+  dependencies:
+    "mkdirp" "^0.5.1"
+
+"ws@^6.0.0":
+  "integrity" "sha1-3Vzb1XqZeZFgl2UtePHMX66gwy4="
+  "resolved" "https://registry.nlark.com/ws/download/ws-6.2.2.tgz?cache=0&sync_timestamp=1625897053615&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fws%2Fdownload%2Fws-6.2.2.tgz"
+  "version" "6.2.2"
+  dependencies:
+    "async-limiter" "~1.0.0"
+
+"ws@^6.2.1":
+  "integrity" "sha1-3Vzb1XqZeZFgl2UtePHMX66gwy4="
+  "resolved" "https://registry.nlark.com/ws/download/ws-6.2.2.tgz?cache=0&sync_timestamp=1625897053615&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fws%2Fdownload%2Fws-6.2.2.tgz"
+  "version" "6.2.2"
+  dependencies:
+    "async-limiter" "~1.0.0"
+
+"ws@^7.0.0", "ws@^7.4.5":
+  "integrity" "sha1-Fgg1tjx9l7+rQY/BuKn87SrAGnQ="
+  "resolved" "https://registry.nlark.com/ws/download/ws-7.5.3.tgz?cache=0&sync_timestamp=1625897053615&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fws%2Fdownload%2Fws-7.5.3.tgz"
+  "version" "7.5.3"
+
+"xml-name-validator@^3.0.0":
+  "integrity" "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo="
+  "resolved" "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz"
+  "version" "3.0.0"
+
+"xml2js@^0.4.16":
+  "integrity" "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug=="
+  "resolved" "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz"
+  "version" "0.4.23"
+  dependencies:
+    "sax" ">=0.6.0"
+    "xmlbuilder" "~11.0.0"
+
+"xmlbuilder@~11.0.0":
+  "integrity" "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
+  "resolved" "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz"
+  "version" "11.0.1"
+
+"xmlchars@^2.1.1":
+  "integrity" "sha1-Bg/hvLf5x2/ioX24apvDq4lCEMs="
+  "resolved" "https://registry.npm.taobao.org/xmlchars/download/xmlchars-2.2.0.tgz"
+  "version" "2.2.0"
+
+"xregexp@2.0.0":
+  "integrity" "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA=="
+  "resolved" "https://registry.npmmirror.com/xregexp/-/xregexp-2.0.0.tgz"
+  "version" "2.0.0"
+
+"xtend@^4.0.0", "xtend@~4.0.1":
+  "integrity" "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q="
+  "resolved" "https://registry.nlark.com/xtend/download/xtend-4.0.2.tgz"
+  "version" "4.0.2"
+
+"y18n@^4.0.0":
+  "integrity" "sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8="
+  "resolved" "https://registry.nlark.com/y18n/download/y18n-4.0.3.tgz"
+  "version" "4.0.3"
+
+"y18n@^5.0.5":
+  "integrity" "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU="
+  "resolved" "https://registry.nlark.com/y18n/download/y18n-5.0.8.tgz"
+  "version" "5.0.8"
+
+"yallist@^2.1.2":
+  "integrity" "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+  "resolved" "https://registry.nlark.com/yallist/download/yallist-2.1.2.tgz"
+  "version" "2.1.2"
+
+"yallist@^3.0.2":
+  "integrity" "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0="
+  "resolved" "https://registry.nlark.com/yallist/download/yallist-3.1.1.tgz"
+  "version" "3.1.1"
+
+"yallist@^4.0.0":
+  "integrity" "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI="
+  "resolved" "https://registry.nlark.com/yallist/download/yallist-4.0.0.tgz"
+  "version" "4.0.0"
+
+"yargs-parser@^13.1.1", "yargs-parser@^13.1.2", "yargs-parser@13.1.2":
+  "integrity" "sha1-Ew8JcC667vJlDVTObj5XBvek+zg="
+  "resolved" "https://registry.nlark.com/yargs-parser/download/yargs-parser-13.1.2.tgz"
+  "version" "13.1.2"
+  dependencies:
+    "camelcase" "^5.0.0"
+    "decamelize" "^1.2.0"
+
+"yargs-parser@^20.2.2":
+  "integrity" "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4="
+  "resolved" "https://registry.nlark.com/yargs-parser/download/yargs-parser-20.2.9.tgz"
+  "version" "20.2.9"
+
+"yargs-unparser@1.6.0":
+  "integrity" "sha1-7yXCx2n/a9CeSw+dfGBfsnhG6p8="
+  "resolved" "https://registry.npm.taobao.org/yargs-unparser/download/yargs-unparser-1.6.0.tgz"
+  "version" "1.6.0"
+  dependencies:
+    "flat" "^4.1.0"
+    "lodash" "^4.17.15"
+    "yargs" "^13.3.0"
+
+"yargs@^13.3.0":
+  "integrity" "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0="
+  "resolved" "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz"
+  "version" "13.3.2"
+  dependencies:
+    "cliui" "^5.0.0"
+    "find-up" "^3.0.0"
+    "get-caller-file" "^2.0.1"
+    "require-directory" "^2.1.1"
+    "require-main-filename" "^2.0.0"
+    "set-blocking" "^2.0.0"
+    "string-width" "^3.0.0"
+    "which-module" "^2.0.0"
+    "y18n" "^4.0.0"
+    "yargs-parser" "^13.1.2"
+
+"yargs@^13.3.2":
+  "integrity" "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0="
+  "resolved" "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz"
+  "version" "13.3.2"
+  dependencies:
+    "cliui" "^5.0.0"
+    "find-up" "^3.0.0"
+    "get-caller-file" "^2.0.1"
+    "require-directory" "^2.1.1"
+    "require-main-filename" "^2.0.0"
+    "set-blocking" "^2.0.0"
+    "string-width" "^3.0.0"
+    "which-module" "^2.0.0"
+    "y18n" "^4.0.0"
+    "yargs-parser" "^13.1.2"
+
+"yargs@^16.0.0":
+  "integrity" "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y="
+  "resolved" "https://registry.nlark.com/yargs/download/yargs-16.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-16.2.0.tgz"
+  "version" "16.2.0"
+  dependencies:
+    "cliui" "^7.0.2"
+    "escalade" "^3.1.1"
+    "get-caller-file" "^2.0.5"
+    "require-directory" "^2.1.1"
+    "string-width" "^4.2.0"
+    "y18n" "^5.0.5"
+    "yargs-parser" "^20.2.2"
+
+"yargs@13.3.2":
+  "integrity" "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0="
+  "resolved" "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz"
+  "version" "13.3.2"
+  dependencies:
+    "cliui" "^5.0.0"
+    "find-up" "^3.0.0"
+    "get-caller-file" "^2.0.1"
+    "require-directory" "^2.1.1"
+    "require-main-filename" "^2.0.0"
+    "set-blocking" "^2.0.0"
+    "string-width" "^3.0.0"
+    "which-module" "^2.0.0"
+    "y18n" "^4.0.0"
+    "yargs-parser" "^13.1.2"
+
+"yargs@14.0.0":
+  "integrity" "sha1-ukysyAKzwLPjap55FyN2PVeoUGY="
+  "resolved" "https://registry.nlark.com/yargs/download/yargs-14.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-14.0.0.tgz"
+  "version" "14.0.0"
+  dependencies:
+    "cliui" "^5.0.0"
+    "decamelize" "^1.2.0"
+    "find-up" "^3.0.0"
+    "get-caller-file" "^2.0.1"
+    "require-directory" "^2.1.1"
+    "require-main-filename" "^2.0.0"
+    "set-blocking" "^2.0.0"
+    "string-width" "^3.0.0"
+    "which-module" "^2.0.0"
+    "y18n" "^4.0.0"
+    "yargs-parser" "^13.1.1"
+
+"yorkie@^2.0.0":
+  "integrity" "sha1-kkEZEtQ1IU4SxRwq4Qk+VLa7g9k="
+  "resolved" "https://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "execa" "^0.8.0"
+    "is-ci" "^1.0.10"
+    "normalize-path" "^1.0.0"
+    "strip-indent" "^2.0.0"
+
+"zrender@5.0.4":
+  "integrity" "sha1-icNVr5CLn2SjAbOPdRt5UfLIqVo="
+  "resolved" "https://registry.nlark.com/zrender/download/zrender-5.0.4.tgz"
+  "version" "5.0.4"
+  dependencies:
+    "tslib" "2.0.3"
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.editorconfig" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.editorconfig"
new file mode 100644
index 0000000..45e8d88
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.editorconfig"
@@ -0,0 +1,4 @@
+锘縖*.cs]
+
+# CS8618: 鍦ㄩ��鍑烘瀯閫犲嚱鏁版椂锛屼笉鍙负 null 鐨勫瓧娈靛繀椤诲寘鍚潪 null 鍊笺�傝鑰冭檻澹版槑涓哄彲浠ヤ负 null銆�
+dotnet_diagnostic.CS8618.severity = silent
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1091.29919/CodeChunks.db" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1091.29919/CodeChunks.db"
new file mode 100644
index 0000000..1faddc8
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1091.29919/CodeChunks.db"
Binary files differ
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1091.29919/SemanticSymbols.db" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1091.29919/SemanticSymbols.db"
new file mode 100644
index 0000000..5ac2250
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1091.29919/SemanticSymbols.db"
Binary files differ
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/443d58c7-94ca-4648-b692-1832b06c01bc.vsidx" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/443d58c7-94ca-4648-b692-1832b06c01bc.vsidx"
new file mode 100644
index 0000000..68ef284
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/443d58c7-94ca-4648-b692-1832b06c01bc.vsidx"
Binary files differ
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4e1a3361-060f-4df2-8128-844a7bbeba4f.vsidx" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4e1a3361-060f-4df2-8128-844a7bbeba4f.vsidx"
new file mode 100644
index 0000000..06e2a7e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4e1a3361-060f-4df2-8128-844a7bbeba4f.vsidx"
Binary files differ
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/803b3a74-4766-45c3-8690-d090fa2f656d.vsidx" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/803b3a74-4766-45c3-8690-d090fa2f656d.vsidx"
new file mode 100644
index 0000000..70aef67
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/803b3a74-4766-45c3-8690-d090fa2f656d.vsidx"
Binary files differ
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8954ea78-c411-4744-b044-fa31a1aeb066.vsidx" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8954ea78-c411-4744-b044-fa31a1aeb066.vsidx"
new file mode 100644
index 0000000..70aef67
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8954ea78-c411-4744-b044-fa31a1aeb066.vsidx"
Binary files differ
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e11e475c-9a04-4eaf-9f0f-4065c716b0e2.vsidx" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e11e475c-9a04-4eaf-9f0f-4065c716b0e2.vsidx"
new file mode 100644
index 0000000..70aef67
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e11e475c-9a04-4eaf-9f0f-4065c716b0e2.vsidx"
Binary files differ
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/config/applicationhost.config" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/config/applicationhost.config"
new file mode 100644
index 0000000..269dc55
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/config/applicationhost.config"
@@ -0,0 +1,1021 @@
+锘�<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    IIS configuration sections.
+
+    For schema documentation, see
+    %IIS_BIN%\config\schema\IIS_schema.xml.
+    
+    Please make a backup of this file before making any changes to it.
+
+    NOTE: The following environment variables are available to be used
+          within this file and are understood by the IIS Express.
+
+          %IIS_USER_HOME% - The IIS Express home directory for the user
+          %IIS_SITES_HOME% - The default home directory for sites
+          %IIS_BIN% - The location of the IIS Express binaries
+          %SYSTEMDRIVE% - The drive letter of %IIS_BIN%
+
+-->
+
+<configuration>
+
+    <!--
+
+        The <configSections> section controls the registration of sections.
+        Section is the basic unit of deployment, locking, searching and
+        containment for configuration settings.
+        
+        Every section belongs to one section group.
+        A section group is a container of logically-related sections.
+        
+        Sections cannot be nested.
+        Section groups may be nested.
+        
+        <section
+            name=""  [Required, Collection Key] [XML name of the section]
+            allowDefinition="Everywhere" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]
+            overrideModeDefault="Allow"  [Allow|Deny] [Default delegation mode]
+            allowLocation="true"  [true|false] [Allowed in location tags]
+        />
+        
+        The recommended way to unlock sections is by using a location tag:
+        <location path="Default Web Site" overrideMode="Allow">
+            <system.webServer>
+                <asp />
+            </system.webServer>
+        </location>
+
+    -->
+    <configSections>
+        <sectionGroup name="system.applicationHost">
+            <section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+        </sectionGroup>
+
+        <sectionGroup name="system.webServer">
+            <section name="asp" overrideModeDefault="Deny" />
+            <section name="caching" overrideModeDefault="Allow" />
+            <section name="cgi" overrideModeDefault="Deny" />
+            <section name="defaultDocument" overrideModeDefault="Allow" />
+            <section name="directoryBrowse" overrideModeDefault="Allow" />
+            <section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="globalModules" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+            <section name="handlers" overrideModeDefault="Deny" />
+            <section name="httpCompression" overrideModeDefault="Allow" allowDefinition="Everywhere" />
+            <section name="httpErrors" overrideModeDefault="Allow" />
+            <section name="httpLogging" overrideModeDefault="Deny" />
+            <section name="httpProtocol" overrideModeDefault="Allow" />
+            <section name="httpRedirect" overrideModeDefault="Allow" />
+            <section name="httpTracing" overrideModeDefault="Deny" />
+            <section name="isapiFilters" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
+            <section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
+            <section name="applicationInitialization" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
+            <section name="odbcLogging" overrideModeDefault="Deny" />
+            <sectionGroup name="security">
+                <section name="access" overrideModeDefault="Deny" />
+                <section name="applicationDependencies" overrideModeDefault="Deny" />
+                <sectionGroup name="authentication">
+                    <section name="anonymousAuthentication" overrideModeDefault="Deny" />
+                    <section name="basicAuthentication" overrideModeDefault="Deny" />
+                    <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
+                    <section name="digestAuthentication" overrideModeDefault="Deny" />
+                    <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
+                    <section name="windowsAuthentication" overrideModeDefault="Deny" />
+                </sectionGroup>
+                <section name="authorization" overrideModeDefault="Allow" />
+                <section name="ipSecurity" overrideModeDefault="Deny" />
+                <section name="dynamicIpSecurity" overrideModeDefault="Deny" />
+                <section name="isapiCgiRestriction" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
+                <section name="requestFiltering" overrideModeDefault="Allow" />
+            </sectionGroup>
+            <section name="serverRuntime" overrideModeDefault="Deny" />
+            <section name="serverSideInclude" overrideModeDefault="Deny" />
+            <section name="staticContent" overrideModeDefault="Allow" />
+            <sectionGroup name="tracing">
+                <section name="traceFailedRequests" overrideModeDefault="Allow" />
+                <section name="traceProviderDefinitions" overrideModeDefault="Deny" />
+            </sectionGroup>
+            <section name="urlCompression" overrideModeDefault="Allow" />
+            <section name="validation" overrideModeDefault="Allow" />
+            <sectionGroup name="webdav">
+                <section name="globalSettings" overrideModeDefault="Deny" />
+                <section name="authoring" overrideModeDefault="Deny" />
+                <section name="authoringRules" overrideModeDefault="Deny" />
+            </sectionGroup>
+            <sectionGroup name="rewrite">
+                <section name="allowedServerVariables" overrideModeDefault="Deny" />
+                <section name="rules" overrideModeDefault="Allow" />
+                <section name="outboundRules" overrideModeDefault="Allow" />
+                <section name="globalRules" overrideModeDefault="Deny" allowDefinition="AppHostOnly" />
+                <section name="providers" overrideModeDefault="Allow" />
+                <section name="rewriteMaps" overrideModeDefault="Allow" />
+            </sectionGroup>
+            <section name="webSocket" overrideModeDefault="Deny" />
+        </sectionGroup>
+    </configSections>
+
+    <configProtectedData>
+        <providers>
+            <add name="IISWASOnlyRsaProvider" type="" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
+            <add name="AesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisConfigurationKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAA/HKxkz6alrlAPez0IUgujj/6k3WxCDriHp6jvpv3yEZmo7h6SMzGLxo4mTrIQVHSkB7tmElHKfUFTzE2BWF7nFWHY6Z6qmGBauFzwJMwESjril7Gjz69RBFH259HQ6aRDq9Xfx7U7H4HtdmnKNqGjgl/hwPQBGeIlWiDh+sYv3vKB0QU971tjX6H2B+9armlnC8UOuA6JYMDMI/VLLL16sng0fWAy5JYe0YVABVjiAWDW264RZW9Tr1Oax4qHZKg+SdjULxeOc2YmpX+d0yeITo1HkPF1hN1gHpIPIUDo05ilHUNfR3OkjVCIQK4cFKCq1s8NH+y+13MxUC4Fn1AlQ==" />
+            <add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAALmU8lTC+v2qtfQiiiquvvLpUQqKLEXs+jSKoWCM/uPhyB++k4dwug19mGidNK5FYiWK2KYE1yhjVJcbp12E98Q0R2nT7eBiCMY2JairxQ591rqABK7keGaIjwH7PwGzSpILl3RJ4YFvJ/7ZXEJxeDZIjW8ZxWVXx+/VyHs9U3WguLEkgMUX3jrxJi8LouxaIVPJAv/YQ1ZCWs8zImitxX/C/7o7yaIxznfsN5nGQzQfpUDPeby99aw2zPVTtZI2LaWIBON8guABvZ6JtJVDWmfdK6sodbnwdZkr6/Z2rfvamT1dC1SpQrGG7ulR/f9/GXvCaW10ZVKxekBF/CYlNMg==" />
+        </providers>
+    </configProtectedData>
+
+    <system.applicationHost>
+
+        <applicationPools>
+            <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
+            <add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
+            <add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
+            <add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
+            <add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" />
+            <applicationPoolDefaults managedRuntimeVersion="v4.0">
+                <processModel loadUserProfile="true" setProfileEnvironment="false" />
+            </applicationPoolDefaults>
+        </applicationPools>
+
+        <!--
+
+          The <listenerAdapters> section defines the protocols with which the
+          Windows Process Activation Service (WAS) binds.
+
+        -->
+        <listenerAdapters>
+            <add name="http" />
+        </listenerAdapters>
+
+        <sites>
+            <site name="WebSite1" id="1" serverAutoStart="true">
+                <application path="/">
+                    <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
+                </application>
+                <bindings>
+                    <binding protocol="http" bindingInformation=":8080:localhost" />
+                </bindings>
+            </site>
+            <siteDefaults>
+                <!-- To enable logging, please change the below attribute "enabled" to "true" -->
+                <logFile logFormat="W3C" directory="%AppData%\Microsoft\IISExpressLogs" enabled="false"/>
+                <traceFailedRequestsLogging directory="%AppData%\Microsoft" enabled="false" maxLogFileSizeKB="1024" />
+            </siteDefaults>
+            <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
+            <virtualDirectoryDefaults allowSubDirConfig="true" />
+        </sites>
+
+        <webLimits />
+
+    </system.applicationHost>
+
+    <system.webServer>
+
+        <serverRuntime />
+
+        <asp scriptErrorSentToBrowser="true">
+            <cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
+            <limits />
+        </asp>
+
+        <caching enabled="true" enableKernelCache="true">
+        </caching>
+
+        <cgi />
+
+        <defaultDocument enabled="true">
+            <files>
+                <add value="Default.htm" />
+                <add value="Default.asp" />
+                <add value="index.htm" />
+                <add value="index.html" />
+                <add value="iisstart.htm" />
+                <add value="default.aspx" />
+            </files>
+        </defaultDocument>
+
+        <directoryBrowse enabled="false" />
+
+        <fastCgi />
+
+        <!--
+
+          The <globalModules> section defines all native-code modules.
+          To enable a module, specify it in the <modules> section.
+
+        -->
+        <globalModules>
+            <add name="HttpLoggingModule" image="%IIS_BIN%\loghttp.dll" />
+            <add name="UriCacheModule" image="%IIS_BIN%\cachuri.dll" />
+            <add name="TokenCacheModule" image="%IIS_BIN%\cachtokn.dll" />
+            <add name="DynamicCompressionModule" image="%IIS_BIN%\compdyn.dll" />
+            <add name="StaticCompressionModule" image="%IIS_BIN%\compstat.dll" />
+            <add name="DefaultDocumentModule" image="%IIS_BIN%\defdoc.dll" />
+            <add name="DirectoryListingModule" image="%IIS_BIN%\dirlist.dll" />
+            <add name="ProtocolSupportModule" image="%IIS_BIN%\protsup.dll" />
+            <add name="HttpRedirectionModule" image="%IIS_BIN%\redirect.dll" />
+            <add name="ServerSideIncludeModule" image="%IIS_BIN%\iis_ssi.dll" />
+            <add name="StaticFileModule" image="%IIS_BIN%\static.dll" />
+            <add name="AnonymousAuthenticationModule" image="%IIS_BIN%\authanon.dll" />
+            <add name="CertificateMappingAuthenticationModule" image="%IIS_BIN%\authcert.dll" />
+            <add name="UrlAuthorizationModule" image="%IIS_BIN%\urlauthz.dll" />
+            <add name="BasicAuthenticationModule" image="%IIS_BIN%\authbas.dll" />
+            <add name="WindowsAuthenticationModule" image="%IIS_BIN%\authsspi.dll" />
+            <add name="IISCertificateMappingAuthenticationModule" image="%IIS_BIN%\authmap.dll" />
+            <add name="IpRestrictionModule" image="%IIS_BIN%\iprestr.dll" />
+            <add name="DynamicIpRestrictionModule" image="%IIS_BIN%\diprestr.dll" />
+            <add name="RequestFilteringModule" image="%IIS_BIN%\modrqflt.dll" />
+            <add name="CustomLoggingModule" image="%IIS_BIN%\logcust.dll" />
+            <add name="CustomErrorModule" image="%IIS_BIN%\custerr.dll" />
+            <add name="FailedRequestsTracingModule" image="%IIS_BIN%\iisfreb.dll" />
+            <add name="RequestMonitorModule" image="%IIS_BIN%\iisreqs.dll" />
+            <add name="IsapiModule" image="%IIS_BIN%\isapi.dll" />
+            <add name="IsapiFilterModule" image="%IIS_BIN%\filter.dll" />
+            <add name="CgiModule" image="%IIS_BIN%\cgi.dll" />
+            <add name="FastCgiModule" image="%IIS_BIN%\iisfcgi.dll" />
+<!--            <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> -->
+            <add name="RewriteModule" image="%IIS_BIN%\rewrite.dll" />
+            <add name="ConfigurationValidationModule" image="%IIS_BIN%\validcfg.dll" />
+            <add name="WebSocketModule" image="%IIS_BIN%\iiswsock.dll" />
+            <add name="WebMatrixSupportModule" image="%IIS_BIN%\webmatrixsup.dll" />
+            <add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" />
+            <add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" />
+            <add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" />
+            <add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
+            <add name="ApplicationInitializationModule" image="%IIS_BIN%\warmup.dll" />
+        </globalModules>
+
+        <httpCompression directory="%TEMP%">
+            <scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
+            <dynamicTypes>
+                <add mimeType="text/*" enabled="true" />
+                <add mimeType="message/*" enabled="true" />
+                <add mimeType="application/x-javascript" enabled="true" />
+                <add mimeType="application/javascript" enabled="true" />
+                <add mimeType="*/*" enabled="false" />
+            </dynamicTypes>
+            <staticTypes>
+                <add mimeType="text/*" enabled="true" />
+                <add mimeType="message/*" enabled="true" />
+                <add mimeType="application/javascript" enabled="true" />
+                <add mimeType="application/atom+xml" enabled="true" />
+                <add mimeType="application/xaml+xml" enabled="true" />
+                <add mimeType="image/svg+xml" enabled="true" />
+                <add mimeType="*/*" enabled="false" />
+            </staticTypes>
+        </httpCompression>
+
+        <httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
+            <error statusCode="401" prefixLanguageFilePath="%IIS_BIN%\custerr" path="401.htm" />
+            <error statusCode="403" prefixLanguageFilePath="%IIS_BIN%\custerr" path="403.htm" />
+            <error statusCode="404" prefixLanguageFilePath="%IIS_BIN%\custerr" path="404.htm" />
+            <error statusCode="405" prefixLanguageFilePath="%IIS_BIN%\custerr" path="405.htm" />
+            <error statusCode="406" prefixLanguageFilePath="%IIS_BIN%\custerr" path="406.htm" />
+            <error statusCode="412" prefixLanguageFilePath="%IIS_BIN%\custerr" path="412.htm" />
+            <error statusCode="500" prefixLanguageFilePath="%IIS_BIN%\custerr" path="500.htm" />
+            <error statusCode="501" prefixLanguageFilePath="%IIS_BIN%\custerr" path="501.htm" />
+            <error statusCode="502" prefixLanguageFilePath="%IIS_BIN%\custerr" path="502.htm" />
+        </httpErrors>
+
+        <httpLogging dontLog="false" />
+
+        <httpProtocol>
+            <customHeaders>
+                <clear />
+                <add name="X-Powered-By" value="ASP.NET" />
+            </customHeaders>
+            <redirectHeaders>
+                <clear />
+            </redirectHeaders>
+        </httpProtocol>
+
+        <httpRedirect enabled="false" />
+
+        <httpTracing />
+
+        <isapiFilters>
+            <filter name="ASP.Net_2.0.50727-64" path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv2.0" />
+            <filter name="ASP.Net_2.0.50727.0" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv2.0" />
+            <filter name="ASP.Net_2.0_for_v1.1" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv1.1" />
+            <filter name="ASP.Net_4.0_32bit" path="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv4.0" />
+            <filter name="ASP.Net_4.0_64bit" path="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv4.0" />
+        </isapiFilters>
+
+        <odbcLogging />
+
+        <security>
+
+            <access sslFlags="None" />
+
+            <applicationDependencies>
+                <application name="Active Server Pages" groupId="ASP" />
+            </applicationDependencies>
+
+            <authentication>
+
+                <anonymousAuthentication enabled="true" userName="" />
+
+                <basicAuthentication enabled="false" />
+
+                <clientCertificateMappingAuthentication enabled="false" />
+
+                <digestAuthentication enabled="false" />
+
+                <iisClientCertificateMappingAuthentication enabled="false">
+                </iisClientCertificateMappingAuthentication>
+
+                <windowsAuthentication enabled="false">
+                    <providers>
+                        <add value="Negotiate" />
+                        <add value="NTLM" />
+                    </providers>
+                </windowsAuthentication>
+
+            </authentication>
+
+            <authorization>
+                <add accessType="Allow" users="*" />
+            </authorization>
+
+            <ipSecurity allowUnlisted="true" />
+
+            <isapiCgiRestriction notListedIsapisAllowed="true" notListedCgisAllowed="true">
+                <add path="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
+                <add path="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
+                <add path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
+                <add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
+            </isapiCgiRestriction>
+
+            <requestFiltering>
+                <fileExtensions allowUnlisted="true" applyToWebDAV="true">
+                    <add fileExtension=".asa" allowed="false" />
+                    <add fileExtension=".asax" allowed="false" />
+                    <add fileExtension=".ascx" allowed="false" />
+                    <add fileExtension=".master" allowed="false" />
+                    <add fileExtension=".skin" allowed="false" />
+                    <add fileExtension=".browser" allowed="false" />
+                    <add fileExtension=".sitemap" allowed="false" />
+                    <add fileExtension=".config" allowed="false" />
+                    <add fileExtension=".cs" allowed="false" />
+                    <add fileExtension=".csproj" allowed="false" />
+                    <add fileExtension=".vb" allowed="false" />
+                    <add fileExtension=".vbproj" allowed="false" />
+                    <add fileExtension=".webinfo" allowed="false" />
+                    <add fileExtension=".licx" allowed="false" />
+                    <add fileExtension=".resx" allowed="false" />
+                    <add fileExtension=".resources" allowed="false" />
+                    <add fileExtension=".mdb" allowed="false" />
+                    <add fileExtension=".vjsproj" allowed="false" />
+                    <add fileExtension=".java" allowed="false" />
+                    <add fileExtension=".jsl" allowed="false" />
+                    <add fileExtension=".ldb" allowed="false" />
+                    <add fileExtension=".dsdgm" allowed="false" />
+                    <add fileExtension=".ssdgm" allowed="false" />
+                    <add fileExtension=".lsad" allowed="false" />
+                    <add fileExtension=".ssmap" allowed="false" />
+                    <add fileExtension=".cd" allowed="false" />
+                    <add fileExtension=".dsprototype" allowed="false" />
+                    <add fileExtension=".lsaprototype" allowed="false" />
+                    <add fileExtension=".sdm" allowed="false" />
+                    <add fileExtension=".sdmDocument" allowed="false" />
+                    <add fileExtension=".mdf" allowed="false" />
+                    <add fileExtension=".ldf" allowed="false" />
+                    <add fileExtension=".ad" allowed="false" />
+                    <add fileExtension=".dd" allowed="false" />
+                    <add fileExtension=".ldd" allowed="false" />
+                    <add fileExtension=".sd" allowed="false" />
+                    <add fileExtension=".adprototype" allowed="false" />
+                    <add fileExtension=".lddprototype" allowed="false" />
+                    <add fileExtension=".exclude" allowed="false" />
+                    <add fileExtension=".refresh" allowed="false" />
+                    <add fileExtension=".compiled" allowed="false" />
+                    <add fileExtension=".msgx" allowed="false" />
+                    <add fileExtension=".vsdisco" allowed="false" />
+                    <add fileExtension=".rules" allowed="false" />
+                </fileExtensions>
+                <verbs allowUnlisted="true" applyToWebDAV="true" />
+                <hiddenSegments applyToWebDAV="true">
+                    <add segment="web.config" />
+                    <add segment="bin" />
+                    <add segment="App_code" />
+                    <add segment="App_GlobalResources" />
+                    <add segment="App_LocalResources" />
+                    <add segment="App_WebReferences" />
+                    <add segment="App_Data" />
+                    <add segment="App_Browsers" />
+                </hiddenSegments>
+            </requestFiltering>
+
+        </security>
+
+        <serverSideInclude ssiExecDisable="false" />
+
+        <staticContent lockAttributes="isDocFooterFileName">
+            <mimeMap fileExtension=".323" mimeType="text/h323" />
+            <mimeMap fileExtension=".3g2" mimeType="video/3gpp2" />
+            <mimeMap fileExtension=".3gp2" mimeType="video/3gpp2" />
+            <mimeMap fileExtension=".3gp" mimeType="video/3gpp" />
+            <mimeMap fileExtension=".3gpp" mimeType="video/3gpp" />
+            <mimeMap fileExtension=".aac" mimeType="audio/aac" />
+            <mimeMap fileExtension=".aaf" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".aca" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".accdb" mimeType="application/msaccess" />
+            <mimeMap fileExtension=".accde" mimeType="application/msaccess" />
+            <mimeMap fileExtension=".accdt" mimeType="application/msaccess" />
+            <mimeMap fileExtension=".acx" mimeType="application/internet-property-stream" />
+            <mimeMap fileExtension=".adt" mimeType="audio/vnd.dlna.adts" />
+            <mimeMap fileExtension=".adts" mimeType="audio/vnd.dlna.adts" />
+            <mimeMap fileExtension=".afm" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".ai" mimeType="application/postscript" />
+            <mimeMap fileExtension=".aif" mimeType="audio/x-aiff" />
+            <mimeMap fileExtension=".aifc" mimeType="audio/aiff" />
+            <mimeMap fileExtension=".aiff" mimeType="audio/aiff" />
+            <mimeMap fileExtension=".appcache" mimeType="text/cache-manifest" />
+            <mimeMap fileExtension=".application" mimeType="application/x-ms-application" />
+            <mimeMap fileExtension=".art" mimeType="image/x-jg" />
+            <mimeMap fileExtension=".asd" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".asf" mimeType="video/x-ms-asf" />
+            <mimeMap fileExtension=".asi" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".asm" mimeType="text/plain" />
+            <mimeMap fileExtension=".asr" mimeType="video/x-ms-asf" />
+            <mimeMap fileExtension=".asx" mimeType="video/x-ms-asf" />
+            <mimeMap fileExtension=".atom" mimeType="application/atom+xml" />
+            <mimeMap fileExtension=".au" mimeType="audio/basic" />
+            <mimeMap fileExtension=".avi" mimeType="video/avi" />
+            <mimeMap fileExtension=".axs" mimeType="application/olescript" />
+            <mimeMap fileExtension=".bas" mimeType="text/plain" />
+            <mimeMap fileExtension=".bcpio" mimeType="application/x-bcpio" />
+            <mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".bmp" mimeType="image/bmp" />
+            <mimeMap fileExtension=".c" mimeType="text/plain" />
+            <mimeMap fileExtension=".cab" mimeType="application/vnd.ms-cab-compressed" />
+            <mimeMap fileExtension=".calx" mimeType="application/vnd.ms-office.calx" />
+            <mimeMap fileExtension=".cat" mimeType="application/vnd.ms-pki.seccat" />
+            <mimeMap fileExtension=".cdf" mimeType="application/x-cdf" />
+            <mimeMap fileExtension=".chm" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".class" mimeType="application/x-java-applet" />
+            <mimeMap fileExtension=".clp" mimeType="application/x-msclip" />
+            <mimeMap fileExtension=".cmx" mimeType="image/x-cmx" />
+            <mimeMap fileExtension=".cnf" mimeType="text/plain" />
+            <mimeMap fileExtension=".cod" mimeType="image/cis-cod" />
+            <mimeMap fileExtension=".cpio" mimeType="application/x-cpio" />
+            <mimeMap fileExtension=".cpp" mimeType="text/plain" />
+            <mimeMap fileExtension=".crd" mimeType="application/x-mscardfile" />
+            <mimeMap fileExtension=".crl" mimeType="application/pkix-crl" />
+            <mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" />
+            <mimeMap fileExtension=".csh" mimeType="application/x-csh" />
+            <mimeMap fileExtension=".css" mimeType="text/css" />
+            <mimeMap fileExtension=".csv" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".cur" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".dcr" mimeType="application/x-director" />
+            <mimeMap fileExtension=".deploy" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".der" mimeType="application/x-x509-ca-cert" />
+            <mimeMap fileExtension=".dib" mimeType="image/bmp" />
+            <mimeMap fileExtension=".dir" mimeType="application/x-director" />
+            <mimeMap fileExtension=".disco" mimeType="text/xml" />
+            <mimeMap fileExtension=".dll" mimeType="application/x-msdownload" />
+            <mimeMap fileExtension=".dll.config" mimeType="text/xml" />
+            <mimeMap fileExtension=".dlm" mimeType="text/dlm" />
+            <mimeMap fileExtension=".doc" mimeType="application/msword" />
+            <mimeMap fileExtension=".docm" mimeType="application/vnd.ms-word.document.macroEnabled.12" />
+            <mimeMap fileExtension=".docx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
+            <mimeMap fileExtension=".dot" mimeType="application/msword" />
+            <mimeMap fileExtension=".dotm" mimeType="application/vnd.ms-word.template.macroEnabled.12" />
+            <mimeMap fileExtension=".dotx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.template" />
+            <mimeMap fileExtension=".dsp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".dtd" mimeType="text/xml" />
+            <mimeMap fileExtension=".dvi" mimeType="application/x-dvi" />
+            <mimeMap fileExtension=".dvr-ms" mimeType="video/x-ms-dvr" />
+            <mimeMap fileExtension=".dwf" mimeType="drawing/x-dwf" />
+            <mimeMap fileExtension=".dwp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".dxr" mimeType="application/x-director" />
+            <mimeMap fileExtension=".eml" mimeType="message/rfc822" />
+            <mimeMap fileExtension=".emz" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
+            <mimeMap fileExtension=".eps" mimeType="application/postscript" />
+            <mimeMap fileExtension=".esd" mimeType="application/vnd.ms-cab-compressed" />
+            <mimeMap fileExtension=".etx" mimeType="text/x-setext" />
+            <mimeMap fileExtension=".evy" mimeType="application/envoy" />
+            <mimeMap fileExtension=".exe" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".exe.config" mimeType="text/xml" />
+            <mimeMap fileExtension=".fdf" mimeType="application/vnd.fdf" />
+            <mimeMap fileExtension=".fif" mimeType="application/fractals" />
+            <mimeMap fileExtension=".fla" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".flr" mimeType="x-world/x-vrml" />
+            <mimeMap fileExtension=".flv" mimeType="video/x-flv" />
+            <mimeMap fileExtension=".gif" mimeType="image/gif" />
+            <mimeMap fileExtension=".glb" mimeType="model/gltf-binary" />
+            <mimeMap fileExtension=".gtar" mimeType="application/x-gtar" />
+            <mimeMap fileExtension=".gz" mimeType="application/x-gzip" />
+            <mimeMap fileExtension=".h" mimeType="text/plain" />
+            <mimeMap fileExtension=".hdf" mimeType="application/x-hdf" />
+            <mimeMap fileExtension=".hdml" mimeType="text/x-hdml" />
+            <mimeMap fileExtension=".hhc" mimeType="application/x-oleobject" />
+            <mimeMap fileExtension=".hhk" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".hhp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".hlp" mimeType="application/winhlp" />
+            <mimeMap fileExtension=".hqx" mimeType="application/mac-binhex40" />
+            <mimeMap fileExtension=".hta" mimeType="application/hta" />
+            <mimeMap fileExtension=".htc" mimeType="text/x-component" />
+            <mimeMap fileExtension=".htm" mimeType="text/html" />
+            <mimeMap fileExtension=".html" mimeType="text/html" />
+            <mimeMap fileExtension=".htt" mimeType="text/webviewhtml" />
+            <mimeMap fileExtension=".hxt" mimeType="text/html" />
+            <mimeMap fileExtension=".ico" mimeType="image/x-icon" />
+            <mimeMap fileExtension=".ics" mimeType="text/calendar" />
+            <mimeMap fileExtension=".ief" mimeType="image/ief" />
+            <mimeMap fileExtension=".iii" mimeType="application/x-iphone" />
+            <mimeMap fileExtension=".inf" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".ins" mimeType="application/x-internet-signup" />
+            <mimeMap fileExtension=".isp" mimeType="application/x-internet-signup" />
+            <mimeMap fileExtension=".IVF" mimeType="video/x-ivf" />
+            <mimeMap fileExtension=".jar" mimeType="application/java-archive" />
+            <mimeMap fileExtension=".java" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".jck" mimeType="application/liquidmotion" />
+            <mimeMap fileExtension=".jcz" mimeType="application/liquidmotion" />
+            <mimeMap fileExtension=".jfif" mimeType="image/pjpeg" />
+            <mimeMap fileExtension=".jpb" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".jpe" mimeType="image/jpeg" />
+            <mimeMap fileExtension=".jpeg" mimeType="image/jpeg" />
+            <mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
+            <mimeMap fileExtension=".js" mimeType="application/javascript" />
+            <mimeMap fileExtension=".json" mimeType="application/json" />
+            <mimeMap fileExtension=".jsonld" mimeType="application/ld+json" />
+            <mimeMap fileExtension=".jsx" mimeType="text/jscript" />
+            <mimeMap fileExtension=".latex" mimeType="application/x-latex" />
+            <mimeMap fileExtension=".less" mimeType="text/css" />
+            <mimeMap fileExtension=".lit" mimeType="application/x-ms-reader" />
+            <mimeMap fileExtension=".lpk" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".lsf" mimeType="video/x-la-asf" />
+            <mimeMap fileExtension=".lsx" mimeType="video/x-la-asf" />
+            <mimeMap fileExtension=".lzh" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".m13" mimeType="application/x-msmediaview" />
+            <mimeMap fileExtension=".m14" mimeType="application/x-msmediaview" />
+            <mimeMap fileExtension=".m1v" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".m2ts" mimeType="video/vnd.dlna.mpeg-tts" />
+            <mimeMap fileExtension=".m3u" mimeType="audio/x-mpegurl" />
+            <mimeMap fileExtension=".m4a" mimeType="audio/mp4" />
+            <mimeMap fileExtension=".m4v" mimeType="video/mp4" />
+            <mimeMap fileExtension=".man" mimeType="application/x-troff-man" />
+            <mimeMap fileExtension=".manifest" mimeType="application/x-ms-manifest" />
+            <mimeMap fileExtension=".map" mimeType="text/plain" />
+            <mimeMap fileExtension=".mdb" mimeType="application/x-msaccess" />
+            <mimeMap fileExtension=".mdp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".me" mimeType="application/x-troff-me" />
+            <mimeMap fileExtension=".mht" mimeType="message/rfc822" />
+            <mimeMap fileExtension=".mhtml" mimeType="message/rfc822" />
+            <mimeMap fileExtension=".mid" mimeType="audio/mid" />
+            <mimeMap fileExtension=".midi" mimeType="audio/mid" />
+            <mimeMap fileExtension=".mix" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".mmf" mimeType="application/x-smaf" />
+            <mimeMap fileExtension=".mno" mimeType="text/xml" />
+            <mimeMap fileExtension=".mny" mimeType="application/x-msmoney" />
+            <mimeMap fileExtension=".mov" mimeType="video/quicktime" />
+            <mimeMap fileExtension=".movie" mimeType="video/x-sgi-movie" />
+            <mimeMap fileExtension=".mp2" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".mp3" mimeType="audio/mpeg" />
+            <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
+            <mimeMap fileExtension=".mp4v" mimeType="video/mp4" />
+            <mimeMap fileExtension=".mpa" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".mpe" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".mpeg" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".mpg" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".mpp" mimeType="application/vnd.ms-project" />
+            <mimeMap fileExtension=".mpv2" mimeType="video/mpeg" />
+            <mimeMap fileExtension=".ms" mimeType="application/x-troff-ms" />
+            <mimeMap fileExtension=".msi" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".mso" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".mvb" mimeType="application/x-msmediaview" />
+            <mimeMap fileExtension=".mvc" mimeType="application/x-miva-compiled" />
+            <mimeMap fileExtension=".nc" mimeType="application/x-netcdf" />
+            <mimeMap fileExtension=".nsc" mimeType="video/x-ms-asf" />
+            <mimeMap fileExtension=".nws" mimeType="message/rfc822" />
+            <mimeMap fileExtension=".ocx" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".oda" mimeType="application/oda" />
+            <mimeMap fileExtension=".odc" mimeType="text/x-ms-odc" />
+            <mimeMap fileExtension=".ods" mimeType="application/oleobject" />
+            <mimeMap fileExtension=".oga" mimeType="audio/ogg" />
+            <mimeMap fileExtension=".ogg" mimeType="video/ogg" />
+            <mimeMap fileExtension=".ogv" mimeType="video/ogg" />
+            <mimeMap fileExtension=".one" mimeType="application/onenote" />
+            <mimeMap fileExtension=".onea" mimeType="application/onenote" />
+            <mimeMap fileExtension=".onetoc" mimeType="application/onenote" />
+            <mimeMap fileExtension=".onetoc2" mimeType="application/onenote" />
+            <mimeMap fileExtension=".onetmp" mimeType="application/onenote" />
+            <mimeMap fileExtension=".onepkg" mimeType="application/onenote" />
+            <mimeMap fileExtension=".osdx" mimeType="application/opensearchdescription+xml" />
+            <mimeMap fileExtension=".otf" mimeType="font/otf" />
+            <mimeMap fileExtension=".p10" mimeType="application/pkcs10" />
+            <mimeMap fileExtension=".p12" mimeType="application/x-pkcs12" />
+            <mimeMap fileExtension=".p7b" mimeType="application/x-pkcs7-certificates" />
+            <mimeMap fileExtension=".p7c" mimeType="application/pkcs7-mime" />
+            <mimeMap fileExtension=".p7m" mimeType="application/pkcs7-mime" />
+            <mimeMap fileExtension=".p7r" mimeType="application/x-pkcs7-certreqresp" />
+            <mimeMap fileExtension=".p7s" mimeType="application/pkcs7-signature" />
+            <mimeMap fileExtension=".pbm" mimeType="image/x-portable-bitmap" />
+            <mimeMap fileExtension=".pcx" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".pcz" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".pdf" mimeType="application/pdf" />
+            <mimeMap fileExtension=".pfb" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".pfm" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".pfx" mimeType="application/x-pkcs12" />
+            <mimeMap fileExtension=".pgm" mimeType="image/x-portable-graymap" />
+            <mimeMap fileExtension=".pko" mimeType="application/vnd.ms-pki.pko" />
+            <mimeMap fileExtension=".pma" mimeType="application/x-perfmon" />
+            <mimeMap fileExtension=".pmc" mimeType="application/x-perfmon" />
+            <mimeMap fileExtension=".pml" mimeType="application/x-perfmon" />
+            <mimeMap fileExtension=".pmr" mimeType="application/x-perfmon" />
+            <mimeMap fileExtension=".pmw" mimeType="application/x-perfmon" />
+            <mimeMap fileExtension=".png" mimeType="image/png" />
+            <mimeMap fileExtension=".pnm" mimeType="image/x-portable-anymap" />
+            <mimeMap fileExtension=".pnz" mimeType="image/png" />
+            <mimeMap fileExtension=".pot" mimeType="application/vnd.ms-powerpoint" />
+            <mimeMap fileExtension=".potm" mimeType="application/vnd.ms-powerpoint.template.macroEnabled.12" />
+            <mimeMap fileExtension=".potx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.template" />
+            <mimeMap fileExtension=".ppam" mimeType="application/vnd.ms-powerpoint.addin.macroEnabled.12" />
+            <mimeMap fileExtension=".ppm" mimeType="image/x-portable-pixmap" />
+            <mimeMap fileExtension=".pps" mimeType="application/vnd.ms-powerpoint" />
+            <mimeMap fileExtension=".ppsm" mimeType="application/vnd.ms-powerpoint.slideshow.macroEnabled.12" />
+            <mimeMap fileExtension=".ppsx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slideshow" />
+            <mimeMap fileExtension=".ppt" mimeType="application/vnd.ms-powerpoint" />
+            <mimeMap fileExtension=".pptm" mimeType="application/vnd.ms-powerpoint.presentation.macroEnabled.12" />
+            <mimeMap fileExtension=".pptx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" />
+            <mimeMap fileExtension=".prf" mimeType="application/pics-rules" />
+            <mimeMap fileExtension=".prm" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".prx" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".ps" mimeType="application/postscript" />
+            <mimeMap fileExtension=".psd" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".psm" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".psp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".pub" mimeType="application/x-mspublisher" />
+            <mimeMap fileExtension=".qt" mimeType="video/quicktime" />
+            <mimeMap fileExtension=".qtl" mimeType="application/x-quicktimeplayer" />
+            <mimeMap fileExtension=".qxd" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".ra" mimeType="audio/x-pn-realaudio" />
+            <mimeMap fileExtension=".ram" mimeType="audio/x-pn-realaudio" />
+            <mimeMap fileExtension=".rar" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".ras" mimeType="image/x-cmu-raster" />
+            <mimeMap fileExtension=".rf" mimeType="image/vnd.rn-realflash" />
+            <mimeMap fileExtension=".rgb" mimeType="image/x-rgb" />
+            <mimeMap fileExtension=".rm" mimeType="application/vnd.rn-realmedia" />
+            <mimeMap fileExtension=".rmi" mimeType="audio/mid" />
+            <mimeMap fileExtension=".roff" mimeType="application/x-troff" />
+            <mimeMap fileExtension=".rpm" mimeType="audio/x-pn-realaudio-plugin" />
+            <mimeMap fileExtension=".rtf" mimeType="application/rtf" />
+            <mimeMap fileExtension=".rtx" mimeType="text/richtext" />
+            <mimeMap fileExtension=".scd" mimeType="application/x-msschedule" />
+            <mimeMap fileExtension=".sct" mimeType="text/scriptlet" />
+            <mimeMap fileExtension=".sea" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".setpay" mimeType="application/set-payment-initiation" />
+            <mimeMap fileExtension=".setreg" mimeType="application/set-registration-initiation" />
+            <mimeMap fileExtension=".sgml" mimeType="text/sgml" />
+            <mimeMap fileExtension=".sh" mimeType="application/x-sh" />
+            <mimeMap fileExtension=".shar" mimeType="application/x-shar" />
+            <mimeMap fileExtension=".sit" mimeType="application/x-stuffit" />
+            <mimeMap fileExtension=".sldm" mimeType="application/vnd.ms-powerpoint.slide.macroEnabled.12" />
+            <mimeMap fileExtension=".sldx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slide" />
+            <mimeMap fileExtension=".smd" mimeType="audio/x-smd" />
+            <mimeMap fileExtension=".smi" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".smx" mimeType="audio/x-smd" />
+            <mimeMap fileExtension=".smz" mimeType="audio/x-smd" />
+            <mimeMap fileExtension=".snd" mimeType="audio/basic" />
+            <mimeMap fileExtension=".snp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".spc" mimeType="application/x-pkcs7-certificates" />
+            <mimeMap fileExtension=".spl" mimeType="application/futuresplash" />
+            <mimeMap fileExtension=".spx" mimeType="audio/ogg" />
+            <mimeMap fileExtension=".src" mimeType="application/x-wais-source" />
+            <mimeMap fileExtension=".ssm" mimeType="application/streamingmedia" />
+            <mimeMap fileExtension=".sst" mimeType="application/vnd.ms-pki.certstore" />
+            <mimeMap fileExtension=".stl" mimeType="application/vnd.ms-pki.stl" />
+            <mimeMap fileExtension=".sv4cpio" mimeType="application/x-sv4cpio" />
+            <mimeMap fileExtension=".sv4crc" mimeType="application/x-sv4crc" />
+            <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
+            <mimeMap fileExtension=".svgz" mimeType="image/svg+xml" />
+            <mimeMap fileExtension=".swf" mimeType="application/x-shockwave-flash" />
+            <mimeMap fileExtension=".t" mimeType="application/x-troff" />
+            <mimeMap fileExtension=".tar" mimeType="application/x-tar" />
+            <mimeMap fileExtension=".tcl" mimeType="application/x-tcl" />
+            <mimeMap fileExtension=".tex" mimeType="application/x-tex" />
+            <mimeMap fileExtension=".texi" mimeType="application/x-texinfo" />
+            <mimeMap fileExtension=".texinfo" mimeType="application/x-texinfo" />
+            <mimeMap fileExtension=".tgz" mimeType="application/x-compressed" />
+            <mimeMap fileExtension=".thmx" mimeType="application/vnd.ms-officetheme" />
+            <mimeMap fileExtension=".thn" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".tif" mimeType="image/tiff" />
+            <mimeMap fileExtension=".tiff" mimeType="image/tiff" />
+            <mimeMap fileExtension=".toc" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".tr" mimeType="application/x-troff" />
+            <mimeMap fileExtension=".trm" mimeType="application/x-msterminal" />
+            <mimeMap fileExtension=".ts" mimeType="video/vnd.dlna.mpeg-tts" />
+            <mimeMap fileExtension=".tsv" mimeType="text/tab-separated-values" />
+            <mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".tts" mimeType="video/vnd.dlna.mpeg-tts" />
+            <mimeMap fileExtension=".txt" mimeType="text/plain" />
+            <mimeMap fileExtension=".u32" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".uls" mimeType="text/iuls" />
+            <mimeMap fileExtension=".ustar" mimeType="application/x-ustar" />
+            <mimeMap fileExtension=".vbs" mimeType="text/vbscript" />
+            <mimeMap fileExtension=".vcf" mimeType="text/x-vcard" />
+            <mimeMap fileExtension=".vcs" mimeType="text/plain" />
+            <mimeMap fileExtension=".vdx" mimeType="application/vnd.ms-visio.viewer" />
+            <mimeMap fileExtension=".vml" mimeType="text/xml" />
+            <mimeMap fileExtension=".vsd" mimeType="application/vnd.visio" />
+            <mimeMap fileExtension=".vss" mimeType="application/vnd.visio" />
+            <mimeMap fileExtension=".vst" mimeType="application/vnd.visio" />
+            <mimeMap fileExtension=".vsto" mimeType="application/x-ms-vsto" />
+            <mimeMap fileExtension=".vsw" mimeType="application/vnd.visio" />
+            <mimeMap fileExtension=".vsx" mimeType="application/vnd.visio" />
+            <mimeMap fileExtension=".vtx" mimeType="application/vnd.visio" />
+            <mimeMap fileExtension=".wasm" mimeType="application/wasm" />
+            <mimeMap fileExtension=".wav" mimeType="audio/wav" />
+            <mimeMap fileExtension=".wax" mimeType="audio/x-ms-wax" />
+            <mimeMap fileExtension=".wbmp" mimeType="image/vnd.wap.wbmp" />
+            <mimeMap fileExtension=".wcm" mimeType="application/vnd.ms-works" />
+            <mimeMap fileExtension=".wdb" mimeType="application/vnd.ms-works" />
+            <mimeMap fileExtension=".webm" mimeType="video/webm" />
+            <mimeMap fileExtension=".wks" mimeType="application/vnd.ms-works" />
+            <mimeMap fileExtension=".wm" mimeType="video/x-ms-wm" />
+            <mimeMap fileExtension=".wma" mimeType="audio/x-ms-wma" />
+            <mimeMap fileExtension=".wmd" mimeType="application/x-ms-wmd" />
+            <mimeMap fileExtension=".wmf" mimeType="application/x-msmetafile" />
+            <mimeMap fileExtension=".wml" mimeType="text/vnd.wap.wml" />
+            <mimeMap fileExtension=".wmlc" mimeType="application/vnd.wap.wmlc" />
+            <mimeMap fileExtension=".wmls" mimeType="text/vnd.wap.wmlscript" />
+            <mimeMap fileExtension=".wmlsc" mimeType="application/vnd.wap.wmlscriptc" />
+            <mimeMap fileExtension=".wmp" mimeType="video/x-ms-wmp" />
+            <mimeMap fileExtension=".wmv" mimeType="video/x-ms-wmv" />
+            <mimeMap fileExtension=".wmx" mimeType="video/x-ms-wmx" />
+            <mimeMap fileExtension=".wmz" mimeType="application/x-ms-wmz" />
+            <mimeMap fileExtension=".woff" mimeType="font/x-woff" />
+            <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
+            <mimeMap fileExtension=".wps" mimeType="application/vnd.ms-works" />
+            <mimeMap fileExtension=".wri" mimeType="application/x-mswrite" />
+            <mimeMap fileExtension=".wrl" mimeType="x-world/x-vrml" />
+            <mimeMap fileExtension=".wrz" mimeType="x-world/x-vrml" />
+            <mimeMap fileExtension=".wsdl" mimeType="text/xml" />
+            <mimeMap fileExtension=".wtv" mimeType="video/x-ms-wtv" />
+            <mimeMap fileExtension=".wvx" mimeType="video/x-ms-wvx" />
+            <mimeMap fileExtension=".x" mimeType="application/directx" />
+            <mimeMap fileExtension=".xaf" mimeType="x-world/x-vrml" />
+            <mimeMap fileExtension=".xaml" mimeType="application/xaml+xml" />
+            <mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app" />
+            <mimeMap fileExtension=".xbap" mimeType="application/x-ms-xbap" />
+            <mimeMap fileExtension=".xbm" mimeType="image/x-xbitmap" />
+            <mimeMap fileExtension=".xdr" mimeType="text/plain" />
+            <mimeMap fileExtension=".xht" mimeType="application/xhtml+xml" />
+            <mimeMap fileExtension=".xhtml" mimeType="application/xhtml+xml" />
+            <mimeMap fileExtension=".xla" mimeType="application/vnd.ms-excel" />
+            <mimeMap fileExtension=".xlam" mimeType="application/vnd.ms-excel.addin.macroEnabled.12" />
+            <mimeMap fileExtension=".xlc" mimeType="application/vnd.ms-excel" />
+            <mimeMap fileExtension=".xlm" mimeType="application/vnd.ms-excel" />
+            <mimeMap fileExtension=".xls" mimeType="application/vnd.ms-excel" />
+            <mimeMap fileExtension=".xlsb" mimeType="application/vnd.ms-excel.sheet.binary.macroEnabled.12" />
+            <mimeMap fileExtension=".xlsm" mimeType="application/vnd.ms-excel.sheet.macroEnabled.12" />
+            <mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
+            <mimeMap fileExtension=".xlt" mimeType="application/vnd.ms-excel" />
+            <mimeMap fileExtension=".xltm" mimeType="application/vnd.ms-excel.template.macroEnabled.12" />
+            <mimeMap fileExtension=".xltx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.template" />
+            <mimeMap fileExtension=".xlw" mimeType="application/vnd.ms-excel" />
+            <mimeMap fileExtension=".xml" mimeType="text/xml" />
+            <mimeMap fileExtension=".xof" mimeType="x-world/x-vrml" />
+            <mimeMap fileExtension=".xpm" mimeType="image/x-xpixmap" />
+            <mimeMap fileExtension=".xps" mimeType="application/vnd.ms-xpsdocument" />
+            <mimeMap fileExtension=".xsd" mimeType="text/xml" />
+            <mimeMap fileExtension=".xsf" mimeType="text/xml" />
+            <mimeMap fileExtension=".xsl" mimeType="text/xml" />
+            <mimeMap fileExtension=".xslt" mimeType="text/xml" />
+            <mimeMap fileExtension=".xsn" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".xtp" mimeType="application/octet-stream" />
+            <mimeMap fileExtension=".xwd" mimeType="image/x-xwindowdump" />
+            <mimeMap fileExtension=".z" mimeType="application/x-compress" />
+            <mimeMap fileExtension=".zip" mimeType="application/x-zip-compressed" />
+        </staticContent>
+
+        <tracing>
+
+            <traceFailedRequests>
+                <add path="*">
+                    <traceAreas>
+                        <add provider="ASP" verbosity="Verbose" />
+                        <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
+                        <add provider="ISAPI Extension" verbosity="Verbose" />
+                        <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket" verbosity="Verbose" />
+                    </traceAreas>
+                    <failureDefinitions statusCodes="200-999" />
+                </add>
+            </traceFailedRequests>
+
+            <traceProviderDefinitions>
+                <add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}">
+                    <areas>
+                        <clear />
+                        <add name="Authentication" value="2" />
+                        <add name="Security" value="4" />
+                        <add name="Filter" value="8" />
+                        <add name="StaticFile" value="16" />
+                        <add name="CGI" value="32" />
+                        <add name="Compression" value="64" />
+                        <add name="Cache" value="128" />
+                        <add name="RequestNotifications" value="256" />
+                        <add name="Module" value="512" />
+                        <add name="Rewrite" value="1024" />
+                        <add name="FastCGI" value="4096" />
+                        <add name="WebSocket" value="16384" />
+                    </areas>
+                </add>
+                <add name="ASP" guid="{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}">
+                    <areas>
+                        <clear />
+                    </areas>
+                </add>
+                <add name="ISAPI Extension" guid="{a1c2040e-8840-4c31-ba11-9871031a19ea}">
+                    <areas>
+                        <clear />
+                    </areas>
+                </add>
+                <add name="ASPNET" guid="{AFF081FE-0247-4275-9C4E-021F3DC1DA35}">
+                    <areas>
+                        <add name="Infrastructure" value="1" />
+                        <add name="Module" value="2" />
+                        <add name="Page" value="4" />
+                        <add name="AppServices" value="8" />
+                    </areas>
+                </add>
+            </traceProviderDefinitions>
+
+        </tracing>
+
+        <urlCompression />
+
+        <validation />
+        <webdav>
+            <globalSettings>
+                <propertyStores>
+                    <add name="webdav_simple_prop" image="%IIS_BIN%\webdav_simple_prop.dll" image32="%IIS_BIN%\webdav_simple_prop.dll" />
+                </propertyStores>
+                <lockStores>
+                    <add name="webdav_simple_lock" image="%IIS_BIN%\webdav_simple_lock.dll" image32="%IIS_BIN%\webdav_simple_lock.dll" />
+                </lockStores>
+
+            </globalSettings>
+            <authoring>
+                <locks enabled="true" lockStore="webdav_simple_lock" />
+            </authoring>
+            <authoringRules />
+        </webdav>
+        <webSocket />
+        <applicationInitialization />
+
+    </system.webServer>
+    <location path="" overrideMode="Allow">
+        <system.webServer>
+            <modules>
+                <add name="IsapiFilterModule" lockItem="true" />
+                <add name="BasicAuthenticationModule" lockItem="true" />
+                <add name="IsapiModule" lockItem="true" />
+                <add name="HttpLoggingModule" lockItem="true" />
+                <add name="DynamicCompressionModule" lockItem="true" />
+                <add name="StaticCompressionModule" lockItem="true" />
+                <add name="DefaultDocumentModule" lockItem="true" />
+                <add name="DirectoryListingModule" lockItem="true" />
+                <add name="ProtocolSupportModule" lockItem="true" />
+                <add name="HttpRedirectionModule" lockItem="true" />
+                <add name="ServerSideIncludeModule" lockItem="true" />
+                <add name="StaticFileModule" lockItem="true" />
+                <add name="AnonymousAuthenticationModule" lockItem="true" />
+                <add name="CertificateMappingAuthenticationModule" lockItem="true" />
+                <add name="UrlAuthorizationModule" lockItem="true" />
+                <add name="WindowsAuthenticationModule" lockItem="true" />
+                <add name="IISCertificateMappingAuthenticationModule" lockItem="true" />
+                <add name="WebMatrixSupportModule" lockItem="true" />
+                <add name="IpRestrictionModule" lockItem="true" />
+                <add name="DynamicIpRestrictionModule" lockItem="true" />
+                <add name="RequestFilteringModule" lockItem="true" />
+                <add name="CustomLoggingModule" lockItem="true" />
+                <add name="CustomErrorModule" lockItem="true" />
+                <add name="FailedRequestsTracingModule" lockItem="true" />
+                <add name="CgiModule" lockItem="true" />
+                <add name="FastCgiModule" lockItem="true" />
+<!--                <add name="WebDAVModule" /> -->
+                <add name="RewriteModule" />
+                <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" />
+                <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />
+                <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" />
+                <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />
+                <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" />
+                <add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" />
+                <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
+                <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" />
+                <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" />
+                <add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" />
+                <add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" />
+                <add name="ApplicationInitializationModule" lockItem="true" />
+                <add name="WebSocketModule" lockItem="true" />
+                <add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
+                <add name="ConfigurationValidationModule" lockItem="true" />
+                <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
+                <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
+                <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler,runtimeVersionv2.0" />
+            </modules>
+            <handlers accessPolicy="Read, Script">
+<!--                <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> -->
+                <add name="AXD-ISAPI-4.0_64bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="SimpleHandlerFactory-ISAPI-4.0_64bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
+                <add name="rules-ISAPI-4.0_64bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
+                <add name="xoml-ISAPI-4.0_64bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
+                <add name="xamlx-ISAPI-4.0_64bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
+                <add name="aspq-ISAPI-4.0_64bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="cshtm-ISAPI-4.0_64bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="svc-ISAPI-2.0" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
+                <add name="xoml-Integrated" path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="xoml-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
+                <add name="rules-Integrated" path="*.rules" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="rules-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
+                <add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
+                <add name="rules-ISAPI-4.0_32bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
+                <add name="xoml-ISAPI-4.0_32bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
+                <add name="xamlx-ISAPI-4.0_32bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
+                <add name="aspq-ISAPI-4.0_32bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="cshtm-ISAPI-4.0_32bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="cshtml-ISAPI-4.0_32bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="vbhtm-ISAPI-4.0_32bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="vbhtml-ISAPI-4.0_32bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="AssemblyResourceLoader-Integrated-4.0" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="HttpRemotingHandlerFactory-rem-Integrated-4.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="HttpRemotingHandlerFactory-soap-Integrated-4.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="rules-Integrated-4.0" path="*.rules" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="xoml-Integrated-4.0" path="*.xoml" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="xamlx-Integrated-4.0" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="aspq-Integrated-4.0" path="*.aspq" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="cshtm-Integrated-4.0" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="cshtml-Integrated-4.0" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="vbhtm-Integrated-4.0" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="vbhtml-Integrated-4.0" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="ScriptHandlerFactoryAppServices-Integrated-4.0" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="ScriptResourceIntegrated-4.0" path="*ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
+                <add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
+                <add name="SecurityCertificate" path="*.cer" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
+                <add name="ISAPI-dll" path="*.dll" verb="*" modules="IsapiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
+                <add name="TraceHandler-Integrated" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="WebAdminHandler-Integrated" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
+                <add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
+                <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
+                <add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
+                <add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
+                <add name="svc-ISAPI-2.0-64" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
+                <add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
+                <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
+                <add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
+                <add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
+                <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
+                <add name="rules-64-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
+                <add name="xoml-64-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
+                <add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
+                <add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
+                <add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
+                <add name="SSINC-shtml" path="*.shtml" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
+                <add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
+                <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" />
+                <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
+                <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
+                <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
+                <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
+            </handlers>
+        </system.webServer>
+    </location>
+</configuration>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs"
new file mode 100644
index 0000000..ac56868
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs"
@@ -0,0 +1,26 @@
+锘縰sing WIDESEA_IBasicService;
+
+namespace WIDESEA_BasicService
+{
+    public class BasicService : IBasicService
+    {
+        public IPalletCodeInfoService PalletCodeInfoService { get; }
+
+        public ILocationInfoService LocationInfoService { get; }
+
+        public IMaterielInfoService MaterielInfoService { get; }
+
+        public IWarehouseService WarehouseService { get; }
+
+        public IMaterielCodeInfoService MaterielCodeInfoService { get; }
+
+        public BasicService(ILocationInfoService locationInfoService, IMaterielInfoService materielInfoService, IWarehouseService warehouseService, IPalletCodeInfoService palletCodeInfoService, IMaterielCodeInfoService materielCodeInfoService)
+        {
+            LocationInfoService = locationInfoService;
+            MaterielInfoService = materielInfoService;
+            WarehouseService = warehouseService;
+            PalletCodeInfoService = palletCodeInfoService;
+            MaterielCodeInfoService = materielCodeInfoService;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs"
new file mode 100644
index 0000000..16c743a
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs"
@@ -0,0 +1,157 @@
+锘縰sing HslCommunication.WebSocket;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.StockEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Seed;
+using WIDESEA_Core.Utilities;
+using WIDESEA_DTO.Basic;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_BasicService
+{
+    public partial class LocationInfoService : ServiceBase<Dt_LocationInfo, IRepository<Dt_LocationInfo>>, ILocationInfoService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly IRepository<Dt_StockInfo> _stockInfoRepository;
+        public IRepository<Dt_LocationInfo> Repository => BaseDal;
+
+        public LocationInfoService(IRepository<Dt_LocationInfo> BaseDal, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfo> stockInfoRepository) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+            _stockInfoRepository = stockInfoRepository;
+        }
+
+        /// <summary>
+        /// 鎵归噺鍚敤璐т綅
+        /// </summary>
+        /// <param name="keys">璐т綅涓婚敭鏁扮粍</param>
+        /// <returns></returns>
+        public WebResponseContent LocationEnableStatus(int[] keys)
+        {
+            List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => keys.Contains(x.Id));
+            locationInfos.ForEach(x =>
+            {
+                x.EnableStatus = EnableStatusEnum.Normal.ObjToInt();
+            });
+            Repository.UpdateData(locationInfos);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        /// <summary>
+        /// 鎵归噺绂佺敤璐т綅
+        /// </summary>
+        /// <param name="keys">璐т綅涓婚敭鏁扮粍</param>
+        /// <returns></returns>
+        public WebResponseContent LocationDisableStatus(int[] keys)
+        {
+            List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => keys.Contains(x.Id));
+            locationInfos.ForEach(x =>
+            {
+                x.EnableStatus = EnableStatusEnum.Disable.ObjToInt();
+            });
+            Repository.UpdateData(locationInfos);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        /// <summary>
+        /// 鍗曚釜鍚敤璐т綅
+        /// </summary>
+        /// <param name="key">璐т綅涓婚敭</param>
+        /// <returns></returns>
+        public WebResponseContent LocationEnableStatus(int key)
+        {
+            return LocationEnableStatus(new int[] { key });
+        }
+
+        /// <summary>
+        /// 鍗曚釜绂佺敤璐т綅
+        /// </summary>
+        /// <param name="key">璐т綅涓婚敭</param>
+        /// <returns></returns>
+        public WebResponseContent LocationDisableStatus(int key)
+        {
+            return LocationDisableStatus(new int[] { key });
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栬揣浣�
+        /// </summary>
+        /// <param name="initializationLocationDTO"></param>
+        /// <returns></returns>
+        public WebResponseContent InitializationLocation(InitializationLocationDTO initializationLocationDTO)
+        {
+            try
+            {
+                (bool, string, object?) result = ModelValidate.ValidateModelData(initializationLocationDTO);
+                if (!result.Item1) return WebResponseContent.Instance.Error(result.Item2);
+
+                int depth = initializationLocationDTO.Depth;
+                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+                for (int i = 0; i < initializationLocationDTO.MaxRow; i++)
+                {
+                    if ((i + 1) % initializationLocationDTO.MaxRow == 1)
+                    {
+                        depth = initializationLocationDTO.Depth;
+                    }
+                    else if ((i + 1) % initializationLocationDTO.MaxRow == initializationLocationDTO.Depth + 1)
+                    {
+                        depth = 1;
+                    }
+                    else if ((i + 1) % initializationLocationDTO.MaxRow > 1 && (i + 1) % initializationLocationDTO.MaxRow <= initializationLocationDTO.Depth)
+                    {
+                        depth -= 1;
+                    }
+                    else
+                    {
+                        depth += 1;
+                    }
+                    for (int j = 0; j < initializationLocationDTO.MaxColumn; j++)
+                    {
+                        for (int k = 0; k < initializationLocationDTO.MaxLayer; k++)
+                        {
+                            Dt_LocationInfo locationInfo = new Dt_LocationInfo()
+                            {
+                                WarehouseId = 0,
+                                Column = j + 1,
+                                EnableStatus = EnableStatusEnum.Normal.ObjToInt(),
+                                Layer = k + 1,
+                                LocationStatus = LocationStatusEnum.Free.ObjToInt(),
+                                LocationType = LocationTypeEnum.Undefined.ObjToInt(),
+                                RoadwayNo = $"{initializationLocationDTO.Roadway.ToString()}",
+                                Row = i + 1,
+                                Depth = depth,
+                            };
+                            locationInfo.LocationCode = $"{locationInfo.RoadwayNo}-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}-{locationInfo.Depth.ToString().PadLeft(2, '0')}";
+                            locationInfo.LocationName = $"{locationInfo.RoadwayNo}宸烽亾{locationInfo.Row.ToString().PadLeft(3, '0')}琛寋locationInfo.Column.ToString().PadLeft(3, '0')}鍒梴locationInfo.Layer.ToString().PadLeft(3, '0')}灞倇locationInfo.Depth.ToString().PadLeft(2, '0')}娣�";
+                            locationInfos.Add(locationInfo);
+                        }
+                    }
+                }
+                BaseDal.AddData(locationInfos);
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielCodeInfoService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielCodeInfoService.cs"
new file mode 100644
index 0000000..e9e64b3
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielCodeInfoService.cs"
@@ -0,0 +1,26 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.WareHouseEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Helper;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_BasicService
+{
+    public class MaterielCodeInfoService : ServiceBase<Dt_MaterielCodeInfo, IRepository<Dt_MaterielCodeInfo>>, IMaterielCodeInfoService
+    {
+
+        public MaterielCodeInfoService(IRepository<Dt_MaterielCodeInfo> BaseDal) : base(BaseDal)
+        {
+        }
+
+        public IRepository<Dt_MaterielCodeInfo> Repository => BaseDal;
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs"
new file mode 100644
index 0000000..6e0fd69
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs"
@@ -0,0 +1,24 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_BasicService
+{
+    public partial class MaterielInfoService : ServiceBase<Dt_MaterielInfo, IRepository<Dt_MaterielInfo>>, IMaterielInfoService
+    {
+
+        public MaterielInfoService(IRepository<Dt_MaterielInfo> BaseDal) : base(BaseDal)
+        {
+        }
+
+        public IRepository<Dt_MaterielInfo> Repository => BaseDal;
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/PalletCodeInfoService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/PalletCodeInfoService.cs"
new file mode 100644
index 0000000..3786220
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/PalletCodeInfoService.cs"
@@ -0,0 +1,28 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.WareHouseEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Helper;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_BasicService
+{
+    public class PalletCodeInfoService : ServiceBase<Dt_PalletCodeInfo, IRepository<Dt_PalletCodeInfo>>, IPalletCodeInfoService
+    {
+
+        public PalletCodeInfoService(IRepository<Dt_PalletCodeInfo> BaseDal) : base(BaseDal)
+        {
+
+        }
+
+        public IRepository<Dt_PalletCodeInfo> Repository => BaseDal;
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/WIDESEA_BasicService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/WIDESEA_BasicService.csproj"
new file mode 100644
index 0000000..555f689
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/WIDESEA_BasicService.csproj"
@@ -0,0 +1,14 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_IBasicService\WIDESEA_IBasicService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/WarehouseService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/WarehouseService.cs"
new file mode 100644
index 0000000..d2ad594
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/WarehouseService.cs"
@@ -0,0 +1,85 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+using WIDESEA_Core.Helper;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Core.Caches;
+using WIDESEA_Core.BaseRepository;
+
+namespace WIDESEA_BasicService
+{
+    public partial class WarehouseService : ServiceBase<Dt_Warehouse, IRepository<Dt_Warehouse>>, IWarehouseService
+    {
+        private readonly ICacheService _cacheService;
+
+        public WarehouseService(IRepository<Dt_Warehouse> BaseDal,ICacheService cacheService) : base(BaseDal)
+        {
+            _cacheService = cacheService;
+        }
+
+        public IRepository<Dt_Warehouse> Repository => BaseDal;
+
+        /// <summary>
+        /// 鎵归噺鍚敤浠撳簱
+        /// </summary>
+        /// <param name="keys">浠撳簱涓婚敭鏁扮粍</param>
+        /// <returns></returns>
+        public WebResponseContent WarehouseEnableStatus(int[] keys)
+        {
+            List<Dt_Warehouse> warehouses = Repository.QueryData(x => keys.Contains(x.WarehouseId));
+            warehouses.ForEach(x =>
+            {
+                x.WarehouseStatus = EnableEnum.Enable.ObjToInt();
+            });
+            Repository.UpdateData(warehouses);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        /// <summary>
+        /// 鎵归噺绂佺敤浠撳簱
+        /// </summary>
+        /// <param name="keys">浠撳簱涓婚敭鏁扮粍</param>
+        /// <returns></returns>
+        public WebResponseContent WarehouseDisableStatus(int[] keys)
+        {
+            List<Dt_Warehouse> warehouses = Repository.QueryData(x => keys.Contains(x.WarehouseId));
+            warehouses.ForEach(x =>
+            {
+                x.WarehouseStatus = EnableEnum.Disable.ObjToInt();
+            });
+            Repository.UpdateData(warehouses);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        /// <summary>
+        /// 鍗曚釜鍚敤浠撳簱
+        /// </summary>
+        /// <param name="key">浠撳簱涓婚敭</param>
+        /// <returns></returns>
+        public WebResponseContent WarehouseEnableStatus(int key)
+        {
+            return WarehouseEnableStatus(new int[] { key });
+        }
+
+        /// <summary>
+        /// 鍗曚釜绂佺敤浠撳簱
+        /// </summary>
+        /// <param name="key">浠撳簱涓婚敭</param>
+        /// <returns></returns>
+        public WebResponseContent WarehouseDisableStatus(int key)
+        {
+            return WarehouseDisableStatus(new int[] { key });
+        }
+
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs"
new file mode 100644
index 0000000..c33e285
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs"
@@ -0,0 +1,25 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.OrderEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Helper;
+using WIDESEA_ICheckService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_CheckService
+{
+    public class CheckOrderResultService : ServiceBase<Dt_CheckOrderResult, IRepository<Dt_CheckOrderResult>>, ICheckOrderResultService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        public CheckOrderResultService(IRepository<Dt_CheckOrderResult> BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderService.cs"
new file mode 100644
index 0000000..6e0006b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderService.cs"
@@ -0,0 +1,24 @@
+锘縰sing HslCommunication.WebSocket;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.OrderEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Helper;
+using WIDESEA_ICheckService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_CheckService
+{
+    public class CheckOrderService : ServiceBase<Dt_CheckOrder, IRepository<Dt_CheckOrder>>, ICheckOrderService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly WebSocketServer _webSocketServer;
+
+        public CheckOrderService(IRepository<Dt_CheckOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage, WebSocketServer webSocketServer) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+            _webSocketServer = webSocketServer;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/WIDESEA_CheckService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/WIDESEA_CheckService.csproj"
new file mode 100644
index 0000000..2adeca1
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/WIDESEA_CheckService.csproj"
@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_ICheckService\WIDESEA_ICheckService.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs"
new file mode 100644
index 0000000..63dc0e1
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs"
@@ -0,0 +1,41 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.APIEnum
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public enum APIEnum
+    {
+        /// <summary>
+        /// AGV鍙戦�佷换鍔℃帴鍙�
+        /// </summary>
+        [Description("AGV鍙戦�佷换鍔℃帴鍙�")]
+        AgvSendTask,
+        /// <summary>
+        /// AGV瀹夊叏淇″彿鍥炲
+        /// </summary>
+        [Description("AGV瀹夊叏淇″彿鍥炲")]
+        AgvSecureReply,
+        /// <summary>
+        /// ERP鎺ュ彛璋冪敤
+        /// </summary>
+        [Description("ERP鎺ュ彛璋冪敤")]
+        InvokeErpApi,
+        /// <summary>
+        /// MES鍚屾娴嬭瘯鏋跺彴璐︿俊鎭�
+        /// </summary>
+        [Description("MES鍚屾娴嬭瘯鏋跺彴璐︿俊鎭�")]
+        WMS_MES_TestToolSync,
+        /// <summary>
+        /// MES鍚屾鏉挎枡鍑哄簱
+        /// </summary>
+        [Description("MES鍚屾鏉挎枡鍑哄簱")]
+        WMS_MES_MaterialLotaAcept
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/AuditStatusEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/AuditStatusEnum.cs"
new file mode 100644
index 0000000..ff76e24
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/AuditStatusEnum.cs"
@@ -0,0 +1,36 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.CommonEnum
+{
+    public enum AuditStatusEnum
+    {
+        /// <summary>
+        /// 寰呮彁浜�
+        /// </summary>
+        [Description("寰呮彁浜�")]
+        NotCommited = 0,
+
+        /// <summary>
+        /// 瀹℃壒涓�
+        /// </summary>
+        [Description("瀹℃壒涓�")]
+        Auditing = 1,
+
+        /// <summary>
+        /// 鍚屾剰
+        /// </summary>
+        [Description("鍚屾剰")]
+        Agree = 100,
+
+        /// <summary>
+        /// 椹冲洖
+        /// </summary>
+        [Description("椹冲洖")]
+        Reject = 101
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/EnableEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/EnableEnum.cs"
new file mode 100644
index 0000000..e4d3718
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/EnableEnum.cs"
@@ -0,0 +1,27 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.CommonEnum
+{
+    /// <summary>
+    /// 鍚鐘舵��
+    /// </summary>
+    public enum EnableEnum
+    {
+        /// <summary>
+        /// 绂佺敤
+        /// </summary>
+        [Description("绂佺敤")]
+        Disable = 0,
+
+        /// <summary>
+        /// 鍚敤
+        /// </summary>
+        [Description("鍚敤")]
+        Enable = 1,
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PalletTypeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PalletTypeEnum.cs"
new file mode 100644
index 0000000..f9a2413
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PalletTypeEnum.cs"
@@ -0,0 +1,38 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.CommonEnum
+{
+    public enum PalletTypeEnum
+    {
+        /// <summary>
+        /// 绌虹
+        /// </summary>
+        Empty = -1,
+
+        None = 0,
+
+        /// <summary>
+        /// 灏忔墭鐩�
+        /// </summary>
+        SmallPallet = 1,
+
+        /// <summary>
+        /// 涓墭鐩�
+        /// </summary>
+        MediumPallet = 2,
+
+        /// <summary>
+        /// 澶ф墭鐩�
+        /// </summary>
+        LargePallet = 3,
+
+        /// <summary>
+        /// 鏈�澶ф墭鐩�
+        /// </summary>
+        LargestPallet = 4
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PrintStatusEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PrintStatusEnum.cs"
new file mode 100644
index 0000000..87ab8c8
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PrintStatusEnum.cs"
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.CommonEnum
+{
+    public enum PrintStatusEnum
+    {
+        /// <summary>
+        /// 鏈墦鍗�
+        /// </summary>
+        [Description("鏈墦鍗�")]
+        UnPrinted = 0,
+        /// <summary>
+        /// 宸叉墦鍗�
+        /// </summary>
+        [Description("宸叉墦鍗�")]
+        Printed = 1
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/RecyclingEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/RecyclingEnum.cs"
new file mode 100644
index 0000000..a2344cd
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/RecyclingEnum.cs"
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.CommonEnum
+{
+    /// <summary>
+    /// 鍥炴敹绫诲瀷
+    /// </summary>
+    public enum RecyclingEnum
+    {
+        /// <summary>
+        /// 瀹緵
+        /// </summary>
+        Return,
+        /// <summary>
+        /// 鍥炴敹
+        /// </summary>
+        RepairStock,
+        /// <summary>
+        /// 鍥為��
+        /// </summary>
+        CMStock,
+        /// <summary>
+        /// 缁翠慨鐗╂枡鍥炴敹
+        /// </summary>
+        RMStock
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/UploadStatusEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/UploadStatusEnum.cs"
new file mode 100644
index 0000000..931f6f9
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/UploadStatusEnum.cs"
@@ -0,0 +1,12 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.CommonEnum
+{
+    internal class UploadStatusEnum
+    {
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/WhetherEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/WhetherEnum.cs"
new file mode 100644
index 0000000..8439809
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/WhetherEnum.cs"
@@ -0,0 +1,24 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.CommonEnum
+{
+    /// <summary>
+    /// 鏄惁鍊�
+    /// </summary>
+    public enum WhetherEnum
+    {
+        /// <summary>
+        /// 鏄�
+        /// </summary>
+        True = 1,
+
+        /// <summary>
+        /// 鍚�
+        /// </summary>
+        False = 0
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/EnableStatusEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/EnableStatusEnum.cs"
new file mode 100644
index 0000000..c6ea2a7
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/EnableStatusEnum.cs"
@@ -0,0 +1,39 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.LocationEnum
+{
+    /// <summary>
+    /// 璐т綅绂佺敤鐘舵��
+    /// </summary>
+    public enum EnableStatusEnum
+    {
+        /// <summary>
+        /// 姝e父
+        /// </summary>
+        [Description("姝e父")]
+        Normal = 0,
+
+        /// <summary>
+        /// 鍙叆
+        /// </summary>
+        [Description("鍙叆")]
+        OnlyIn = 1,
+
+        /// <summary>
+        /// 鍙嚭
+        /// </summary>
+        [Description("鍙嚭")]
+        OnlyOut = 2,
+
+        /// <summary>
+        /// 绂佺敤
+        /// </summary>
+        [Description("绂佺敤")]
+        Disable = 3
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationChangeType.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationChangeType.cs"
new file mode 100644
index 0000000..1ecb000
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationChangeType.cs"
@@ -0,0 +1,57 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.LocationEnum
+{
+    /// <summary>
+    /// 璐т綅鐘舵�佸彉鏇寸被鍨�
+    /// </summary>
+    public enum LocationChangeType
+    {
+        /// <summary>
+        /// 鍏ュ簱鍒嗛厤
+        /// </summary>
+        [Description("鍏ュ簱鍒嗛厤")]
+        InboundAssignLocation,
+
+        /// <summary>
+        /// 鍑哄簱鍒嗛厤
+        /// </summary>
+        [Description("鍑哄簱鍒嗛厤")]
+        OutboundAssignLocation,
+
+        /// <summary>
+        /// 绉诲簱鍒嗛厤
+        /// </summary>
+        [Description("绉诲簱鍒嗛厤")]
+        RelocationAssignLocation,
+
+        /// <summary>
+        /// 鍏ュ簱浠诲姟瀹屾垚
+        /// </summary>
+        [Description("鍏ュ簱浠诲姟瀹屾垚")]
+        InboundCompleted,
+
+        /// <summary>
+        /// 鍑哄簱浠诲姟瀹屾垚
+        /// </summary>
+        [Description("鍑哄簱浠诲姟瀹屾垚")]
+        OutboundCompleted,
+
+        /// <summary>
+        /// 绉诲簱浠诲姟瀹屾垚
+        /// </summary>
+        [Description("绉诲簱浠诲姟瀹屾垚")]
+        RelocationCompleted,
+
+        /// <summary>
+        /// 鎵嬪姩淇敼
+        /// </summary>
+        [Description("鎵嬪姩淇敼")]
+        HandUpdate
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs"
new file mode 100644
index 0000000..dd54520
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs"
@@ -0,0 +1,50 @@
+锘縰sing System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.LocationEnum
+{
+    /// <summary>
+    /// 璐т綅鐘舵��
+    /// </summary>
+    public enum LocationStatusEnum
+    {
+        /// <summary>
+        /// 绌洪棽
+        /// </summary>
+        [Description("绌洪棽")]
+        Free = 0,
+
+        /// <summary>
+        /// 閿佸畾
+        /// </summary>
+        [Description("閿佸畾")]
+        Lock = 1,
+
+        /// <summary>
+        /// 鏈夎揣閿佸畾
+        /// </summary>
+        [Description("鏈夎揣閿佸畾")]
+        InStockLock = 10,
+
+        /// <summary>
+        /// 
+        /// </summary>
+        [Description("绌洪棽閿佸畾")]
+        FreeLock = 20,
+
+        /// <summary>
+        /// 鏈夎揣
+        /// </summary>
+        [Description("鏈夎揣")]
+        InStock = 100,
+
+        /// <summary>
+        /// 澶ф墭鐩橀攣瀹�
+        /// </summary>
+        [Description("澶ф墭鐩橀攣瀹�")]
+        PalletLock = 99
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationTypeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationTypeEnum.cs"
new file mode 100644
index 0000000..67446d8
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationTypeEnum.cs"
@@ -0,0 +1,45 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.LocationEnum
+{
+    /// <summary>
+    /// 璐т綅绫诲瀷
+    /// </summary>
+    public enum LocationTypeEnum
+    {
+        /// <summary>
+        /// 鏈畾涔�
+        /// </summary>
+        [Description("鏈畾涔�")]
+        Undefined = 0,
+
+        /// <summary>
+        /// 灏忔墭鐩�
+        /// </summary>
+        [Description("灏忔墭鐩�")]
+        SmallPallet = 1,
+
+        /// <summary>
+        /// 涓墭鐩�
+        /// </summary>
+        [Description("涓墭鐩�")]
+        MediumPallet = 2,
+
+        /// <summary>
+        /// 澶ф墭鐩�
+        /// </summary>
+        [Description("澶ф墭鐩�")]
+        LargePallet = 3,
+
+        /// <summary>
+        /// 鐗瑰ぇ鎵樼洏
+        /// </summary>
+        [Description("鐗瑰ぇ鎵樼洏")]
+        ExtraPallet = 4,
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielSourceTypeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielSourceTypeEnum.cs"
new file mode 100644
index 0000000..7cfbe87
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielSourceTypeEnum.cs"
@@ -0,0 +1,26 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.MaterielEnum
+{
+    public enum MaterielSourceTypeEnum
+    {
+        /// <summary>
+        /// 閲囪喘浠�
+        /// </summary>
+        PurchasePart = 1,
+
+        /// <summary>
+        /// 鑷埗浠�
+        /// </summary>
+        SelfMadePart = 2,
+
+        /// <summary>
+        /// 閲囪喘&鑷埗浠�
+        /// </summary>
+        PurchaseAndSelf = 3
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielStateEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielStateEnum.cs"
new file mode 100644
index 0000000..cf6b370
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielStateEnum.cs"
@@ -0,0 +1,13 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.MaterielEnum
+{
+    public enum MaterielStateEnum
+    {
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielTypeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielTypeEnum.cs"
new file mode 100644
index 0000000..6878539
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielTypeEnum.cs"
@@ -0,0 +1,34 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.MaterielEnum
+{
+    /// <summary>
+    /// 鐗╂枡鍩烘湰鍒嗙被
+    /// </summary>
+    public enum MaterielTypeEnum
+    {
+        /// <summary>
+        /// 鎴愬搧
+        /// </summary>
+        FinishProduct = 1,
+
+        /// <summary>
+        /// 鍗婃垚鍝�
+        /// </summary>
+        HalfProduct = 2,
+
+        /// <summary>
+        /// 鍘熸潗鏂�
+        /// </summary>
+        RawMateriel = 3,
+
+        /// <summary>
+        /// 澶囦欢
+        /// </summary>
+        SpareParts = 4
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/CheckOrderEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/CheckOrderEnum.cs"
new file mode 100644
index 0000000..ee801e7
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/CheckOrderEnum.cs"
@@ -0,0 +1,61 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.OrderEnum
+{
+    public enum CheckOrderStatusEnum
+    {
+        /// <summary>
+        /// 寰呮
+        /// </summary>
+        [Description("寰呮")]
+        NotCheck = 0,
+
+        /// <summary>
+        /// 宸叉
+        /// </summary>
+        [Description("宸叉")]
+        Checked = 1
+    }
+
+    public enum CheckResultEnum
+    {
+        /// <summary>
+        /// 閫�璐�
+        /// </summary>
+        [Description("閫�璐�")]
+        Return,
+
+        /// <summary>
+        /// 鐗归噰
+        /// </summary>
+        [Description("鐗归噰")]
+        Defect,
+
+        /// <summary>
+        /// 鎶ュ簾
+        /// </summary>
+        [Description("鎶ュ簾")]
+        Scrapped
+    }
+    /// <summary>
+    /// 妫�楠屼笂浼犵姸鎬�
+    /// </summary>
+    public enum CheckUploadEnum
+    {
+        /// <summary>
+        /// 鏈笂浼�
+        /// </summary>
+        [Description("鏈笂浼�")]
+        UploadNo,
+        /// <summary>
+        /// 宸蹭笂浼�
+        /// </summary>
+        [Description("宸蹭笂浼�")]
+        UploadOk
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs"
new file mode 100644
index 0000000..904222d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs"
@@ -0,0 +1,93 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.OrderEnum
+{
+    /// <summary>
+    /// 鍏ュ簱鍗曟嵁鐘舵�� 0锛屾湭寮�濮�  1锛屽叆搴撲腑  2锛屽叆搴撳畬鎴�
+    /// </summary>
+    public enum InOrderStatusEnum
+    {
+        /// <summary>
+        /// 鏈紑濮�
+        /// </summary>
+        [Description("鏈紑濮�")]
+        鏈紑濮� = 0,
+
+        /// <summary>
+        /// 鍏ュ簱涓�
+        /// </summary>
+        [Description("鍏ュ簱涓�")]
+        鍏ュ簱涓� = 1,
+
+        /// <summary>
+        /// 鍏ュ簱瀹屾垚
+        /// </summary>
+        [Description("鍏ュ簱瀹屾垚")]
+        鍏ュ簱瀹屾垚 = 2,
+
+        /// <summary>
+        /// 鍏抽棴
+        /// </summary>
+        [Description("鍏抽棴")]
+        鍏抽棴 = 99,
+
+        /// <summary>
+        /// 鍙栨秷
+        /// </summary>
+        [Description("鍙栨秷")]
+        鍙栨秷 = 98
+    }
+
+    /// <summary>
+    /// 鍏ュ簱鍗曠被鍨� 100 鐢熶骇鍏ュ簱鍗�;200 鐢熶骇閫�鏂欏崟;300 閲囪喘鍏ュ簱鍗�;400 璋冩嫧鍏ュ簱鍗�;500 閿�鍞��璐у崟;600 绌虹洏鍏ュ簱鍗�;700 鍏朵粬鍏ュ簱鍗�
+    /// </summary>
+    public enum InOrderTypeEnum
+    {
+        /// <summary>
+        /// 鐢熶骇鍏ュ簱鍗�
+        /// </summary>
+        [Description("鐢熶骇鍏ュ簱鍗�")]
+        Product = 100,
+
+        /// <summary>
+        /// 鐢熶骇閫�鏂欏崟
+        /// </summary>
+        [Description("鐢熶骇閫�鏂欏崟")]
+        Return = 105,
+
+        /// <summary>
+        /// 閲囪喘鍏ュ簱鍗�
+        /// </summary>
+        [Description("閲囪喘鍏ュ簱鍗�")]
+        Purchase = 110,
+
+        /// <summary>
+        /// 璋冩嫧鍏ュ簱鍗�
+        /// </summary>
+        [Description("璋冩嫧鍏ュ簱鍗�")]
+        Allocat = 115,
+
+        /// <summary>
+        /// 閿�鍞��璐у崟
+        /// </summary>
+        [Description("閿�鍞��璐у崟")]
+        SaleReturn = 120,
+
+        /// <summary>
+        /// 绌虹洏鍏ュ簱鍗�
+        /// </summary>
+        [Description("绌虹洏鍏ュ簱鍗�")]
+        EmptyDisk = 125,
+
+        /// <summary>
+        /// 鍏朵粬鍏ュ簱鍗�
+        /// </summary>
+        [Description("鍏朵粬鍏ュ簱鍗�")]
+        Other = 130
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/MesOutboundOrderType.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/MesOutboundOrderType.cs"
new file mode 100644
index 0000000..31f61eb
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/MesOutboundOrderType.cs"
@@ -0,0 +1,39 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.OrderEnum
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public enum MesOutboundOrderTypeEnum
+    {
+        /// <summary>
+        /// 鍩烘澘鍑哄簱
+        /// </summary>
+        [Description("鍩烘澘鍑哄簱")]
+        SubstrateOut = 100,
+
+        /// <summary>
+        /// 鍩烘澘浣欐枡閫�搴�
+        /// </summary>
+        [Description("鍩烘澘浣欐枡閫�搴�")]
+        SubstrateBack = 200,
+
+        /// <summary>
+        /// 鎵嬪姩鍩烘澘鍑哄簱
+        /// </summary>
+        [Description("鎵嬪姩鍩烘澘鍑哄簱")]
+        HandSubstrateOut = 300,
+
+        /// <summary>
+        /// 鎵嬪姩鍩烘澘鍑哄簱鎷i��
+        /// </summary>
+        [Description("鎵嬪姩鍩烘澘鍑哄簱鎷i��")]
+        HandSubstrateOutPick = 400,
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OrderCreateTypeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OrderCreateTypeEnum.cs"
new file mode 100644
index 0000000..79c5516
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OrderCreateTypeEnum.cs"
@@ -0,0 +1,24 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.OrderEnum
+{
+    public enum OrderCreateTypeEnum
+    {
+        /// <summary>
+        /// 绯荤粺鍐呭垱寤�
+        /// </summary>
+        [Description("绯荤粺鍐呭垱寤�")]
+        CreateInSystem,
+
+        /// <summary>
+        /// 涓婃父绯荤粺鎺ㄩ��
+        /// </summary>
+        [Description("涓婃父绯荤粺鎺ㄩ��")]
+        UpperSystemPush
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OrderDetailStatusEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OrderDetailStatusEnum.cs"
new file mode 100644
index 0000000..8e849dc
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OrderDetailStatusEnum.cs"
@@ -0,0 +1,52 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.OrderEnum
+{
+    public enum OrderDetailStatusEnum
+    {
+        /// <summary>
+        /// 鏂板缓
+        /// </summary>
+        [Description("鏂板缓")]
+        New = 0,
+
+        /// <summary>
+        /// 缁勭洏鍏ュ簱
+        /// </summary>
+        [Description("缁勭洏鍏ュ簱")]
+        GroupAndInbound = 10,
+        /// <summary>
+        /// 鍏ュ簱涓�
+        /// </summary>
+        [Description("鍏ュ簱涓�")]
+        Inbounding = 20,
+        /// <summary>
+        /// 鍑哄簱閮ㄥ垎鍒嗛厤瀹屾垚
+        /// </summary>
+        [Description("鍑哄簱閮ㄥ垎鍒嗛厤瀹屾垚")]
+        AssignOverPartial = 60,
+
+        /// <summary>
+        /// 鍑哄簱鍒嗛厤瀹屾垚
+        /// </summary>
+        [Description("鍑哄簱鍒嗛厤瀹屾垚")]
+        AssignOver = 70,
+
+        /// <summary>
+        /// 鍑哄簱涓�
+        /// </summary>
+        [Description("鍑哄簱涓�")]
+        Outbound = 80,
+
+        /// <summary>
+        /// 瀹屾垚
+        /// </summary>
+        [Description("瀹屾垚")]
+        Over = 100
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutboundOrderEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutboundOrderEnum.cs"
new file mode 100644
index 0000000..3b43f33
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutboundOrderEnum.cs"
@@ -0,0 +1,96 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.OrderEnum
+{
+    public enum OutOrderStatusEnum
+    {
+        /// <summary>
+        /// 鏈紑濮�
+        /// </summary>
+        [Description("鏈紑濮�")]
+        鏈紑濮� = 0,
+
+        /// <summary>
+        /// 鍑哄簱涓�
+        /// </summary>
+        [Description("鍑哄簱涓�")]
+        鍑哄簱涓� = 1,
+
+        /// <summary>
+        /// 鍑哄簱瀹屾垚
+        /// </summary>
+        [Description("鍑哄簱瀹屾垚")]
+        鍑哄簱瀹屾垚 = 2,
+
+        /// <summary>
+        /// 鍏抽棴
+        /// </summary>
+        [Description("鍏抽棴")]
+        鍏抽棴 = 99,
+
+        /// <summary>
+        /// 鍙栨秷
+        /// </summary>
+        [Description("鍙栨秷")]
+        鍙栨秷 = 98
+    }
+
+    /// <summary>
+    /// 鍑哄簱鍗曠被鍨�
+    /// </summary>
+    public enum OutOrderTypeEnum
+    {
+        /// <summary>
+        /// 鐢熶骇杩斿伐鍗�
+        /// </summary>
+        [Description("鐢熶骇杩斿伐鍗�")]
+        Rework = 200,
+
+        /// <summary>
+        /// 鐢熶骇鍙戞枡鍗�
+        /// </summary>
+        [Description("鐢熶骇鍙戞枡鍗�")]
+        Issue = 205,
+
+        /// <summary>
+        /// 閲囪喘閫�璐у崟
+        /// </summary>
+        [Description("閲囪喘閫�璐у崟")]
+        ProcureReturn = 210,
+
+        /// <summary>
+        /// 璋冩嫧鍑哄簱鍗�
+        /// </summary>
+        [Description("璋冩嫧鍑哄簱鍗�")]
+        Allocate = 215,
+
+        /// <summary>
+        /// 閿�鍞嚭搴撳崟
+        /// </summary>
+        [Description("閿�鍞嚭搴撳崟")]
+        SaleOut = 220,
+
+        /// <summary>
+        /// 绌虹洏鍑哄簱鍗�
+        /// </summary>
+        [Description("绌虹洏鍑哄簱鍗�")]
+        EmptyDisk = 225,
+
+        /// <summary>
+        /// 璐ㄦ鍑哄簱鍗�
+        /// </summary>
+        [Description("璐ㄦ鍑哄簱鍗�")]
+        Quality = 230,
+
+        /// <summary>
+        /// 鍏朵粬鍑哄簱鍗�
+        /// </summary>
+        [Description("鍏朵粬鍑哄簱鍗�")]
+        Other = 235
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/PurchaseOrderEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/PurchaseOrderEnum.cs"
new file mode 100644
index 0000000..22e5586
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/PurchaseOrderEnum.cs"
@@ -0,0 +1,64 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.OrderEnum
+{
+    public enum PurchaseOrderStatusEnum
+    {
+        /// <summary>
+        /// 鏈敹璐�
+        /// </summary>
+        [Description("鏈敹璐�")]
+        NotReceived = 0,
+
+        /// <summary>
+        /// 鏀惰揣涓�
+        /// </summary>
+        [Description("鏀惰揣涓�")]
+        Receiving = 1,
+
+        /// <summary>
+        /// 鏀惰揣瀹屾垚
+        /// </summary>
+        [Description("鏀惰揣瀹屾垚")]
+        Received = 2
+    }
+
+    public enum PurchaseOrderDetailStatusEnum
+    {
+        /// <summary>
+        /// 鏈敹璐�
+        /// </summary>
+        [Description("鏀惰揣")]
+        NotReceived = 0,
+        /// <summary>
+        /// 鏀惰揣涓�
+        /// </summary>
+        [Description("鏀惰揣涓�")]
+        Receiving = 1,
+        /// <summary>
+        /// 鏀惰揣瀹屾垚
+        /// </summary>
+        [Description("鏀惰揣瀹屾垚")]
+        Received = 2
+    }
+
+    public enum PurchaseOrderTypeEnum
+    {
+        /// <summary>
+        /// 鏍囧噯鍏ュ簱
+        /// </summary>
+        [Description("鏍囧噯鍏ュ簱")]
+        S = 1,
+
+        /// <summary>
+        /// 瀵勫敭琛ョ粰鍏ュ簱
+        /// </summary>
+        [Description("瀵勫敭琛ョ粰鍏ュ簱")]
+        V = 2
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReceiveOrderEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReceiveOrderEnum.cs"
new file mode 100644
index 0000000..3ac452b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReceiveOrderEnum.cs"
@@ -0,0 +1,51 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.OrderEnum
+{
+    public enum ReceiveOrderTypeEnum
+    {
+        /// <summary>
+        /// 閲囪喘鎺ユ敹
+        /// </summary>
+        [Description("閲囪喘鎺ユ敹")]
+        PO = 1,
+
+        /// <summary>
+        /// 鏃犻噰璐帴鏀�
+        /// </summary>
+        [Description("鏃犻噰璐帴鏀�")]
+        NPO = 2,
+
+        /// <summary>
+        /// 瀹緵鏂欐帴鏀�
+        /// </summary>
+        [Description("瀹緵鏂欐帴鏀�")]
+        CustomerSupply = 3
+    }
+
+    public enum ReceiveOrderStatusEnum
+    {
+        /// <summary>
+        /// 鏈紑濮�
+        /// </summary>
+        [Description("鏈紑濮�")]
+        NotStarted,
+
+        /// <summary>
+        /// 鏀惰揣涓�
+        /// </summary>
+        [Description("鏀惰揣涓�")]
+        Receiving,
+
+        /// <summary>
+        /// 鏀惰揣瀹屾垚
+        /// </summary>
+        [Description("鏀惰揣瀹屾垚")]
+        Completed
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OtherEnum/SequenceEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OtherEnum/SequenceEnum.cs"
new file mode 100644
index 0000000..27f4a53
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/OtherEnum/SequenceEnum.cs"
@@ -0,0 +1,13 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.OtherEnum
+{
+    public enum SequenceEnum
+    {
+        SeqTaskNum
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs"
new file mode 100644
index 0000000..01dbf7c
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs"
@@ -0,0 +1,27 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.StockEnum
+{
+    public enum OutLockStockStatusEnum
+    {
+        [Description("宸插垎閰�")]
+        宸插垎閰� = 0,
+
+        [Description("鍑哄簱涓�")]
+        鍑哄簱涓� = 1,
+
+        [Description("鍑哄簱瀹屾垚")]
+        鍑哄簱瀹屾垚 = 2,
+
+        [Description("鎷i�夊畬鎴�")]
+        鎷i�夊畬鎴� = 3,
+
+        [Description("鎾ら攢")]
+        鎾ら攢 = 99
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockChangeTypeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockChangeTypeEnum.cs"
new file mode 100644
index 0000000..63631fe
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockChangeTypeEnum.cs"
@@ -0,0 +1,41 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.StockEnum
+{
+    public enum StockChangeTypeEnum
+    {
+        /// <summary>
+        /// 缁勭洏
+        /// </summary>
+        [Description("缁勭洏")]
+        MaterielGroup,
+
+        /// <summary>
+        /// 鍏ュ簱
+        /// </summary>
+        [Description("鍏ュ簱")]
+        Inbound,
+
+        /// <summary>
+        /// 鍑哄簱
+        /// </summary>
+        [Description("鍑哄簱")]
+        Outbound,
+        /// <summary>
+        /// 绉诲簱
+        /// </summary>
+        [Description("绉诲簱")]
+        Relocation,
+
+        /// <summary>
+        /// 鍑哄簱閿佸畾
+        /// </summary>
+        [Description("鍑哄簱閿佸畾")]
+        StockLock
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs"
new file mode 100644
index 0000000..65ea267
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs"
@@ -0,0 +1,65 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.StockEnum
+{
+    /// <summary>
+    /// 搴撳瓨鐘舵�侊細 <br/>
+    /// 1锛岀粍鐩樻殏瀛�<br/>
+    /// 2锛岀粍鐩樻挙閿�<br/>  
+    /// 3锛屽叆搴撶‘璁�<br/> 
+    /// 4锛屽叆搴撴挙閿�<br/>
+    /// 6锛屽叆搴撳畬鎴�<br/>
+    /// 7锛屽嚭搴撻攣瀹�<br/>
+    /// 8锛屽嚭搴撳畬鎴�<br/>
+    /// 9锛岀Щ搴撻攣瀹�<br/>
+    /// </summary>
+    public enum StockStatusEmun
+    {
+        [Description("缁勭洏鏆傚瓨")]
+        缁勭洏鏆傚瓨 = 1,
+
+        [Description("鍏ュ簱纭")]
+        鍏ュ簱纭 = 3,
+
+        [Description("鍏ュ簱瀹屾垚")]
+        鍏ュ簱瀹屾垚 = 6,
+
+        [Description("鍑哄簱閿佸畾")]
+        鍑哄簱閿佸畾 = 7,
+
+        [Description("鍑哄簱瀹屾垚")]
+        鍑哄簱瀹屾垚 = 8,
+
+        [Description("绉诲簱閿佸畾")]
+        绉诲簱閿佸畾 = 9,
+
+        [Description("鍏ュ簱瀹屾垚鏈缓鍑哄簱鍗�")]
+        鍏ュ簱瀹屾垚鏈缓鍑哄簱鍗� = 10,
+
+        [Description("閫�搴�")]
+        閫�搴� = 11,
+
+        [Description("鎵嬪姩缁勭洏鏆傚瓨")]
+        鎵嬪姩缁勭洏鏆傚瓨 = 12,
+
+        [Description("鎵嬪姩缁勭洏鍏ュ簱纭")]
+        鎵嬪姩缁勭洏鍏ュ簱纭 = 13,
+
+        [Description("鎷i�夊畬鎴�")]
+        鎷i�夊畬鎴� =14,
+
+        [Description("閫�搴�")]
+        MES閫�搴� = 21,
+
+        [Description("缁勭洏鎾ら攢")]
+        缁勭洏鎾ら攢 = 99,
+
+        [Description("鍏ュ簱鎾ら攢")]
+        鍏ュ簱鎾ら攢 = 199,
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskEnumHelper.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskEnumHelper.cs"
new file mode 100644
index 0000000..711654b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskEnumHelper.cs"
@@ -0,0 +1,38 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.TaskEnum
+{
+    public static class TaskEnumHelper
+    {
+        public static List<int> GetEnumIndexList(this Type type)
+        {
+            if (type is null) throw new ArgumentNullException("type");
+            if (!type.IsEnum) return new List<int>();
+            return Enum.GetValues(type).Cast<int>().ToList();
+        }
+
+        public static TaskTypeGroup GetTaskTypeGroup(this int taskType)
+        {
+            if (taskType >= 500 && taskType < 900)
+            {
+                return TaskTypeGroup.InboundGroup;
+            }
+            else if (taskType >= 100 && taskType < 500)
+            {
+                return TaskTypeGroup.OutbondGroup;
+            }
+            else if (taskType >= 900 && taskType < 1000)
+            {
+                return TaskTypeGroup.RelocationGroup;
+            }
+            else
+            {
+                return TaskTypeGroup.OtherGroup;
+            }
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs"
new file mode 100644
index 0000000..fdea881
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs"
@@ -0,0 +1,115 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.TaskEnum
+{
+    /// <summary>
+    /// 浠诲姟鐘舵��
+    /// </summary>
+    public enum TaskStatusEnum
+    {
+        /// <summary>
+        /// 鏂板缓浠诲姟
+        /// </summary>
+        [Description("鏂板缓")]
+        New = 100,
+
+        /// <summary>
+        /// 鍫嗗灈鏈哄緟鎵ц
+        /// </summary>
+        [Description("鍫嗗灈鏈哄緟鎵ц")]
+        SC_Execute = 200,
+
+        /// <summary>
+        /// 鍫嗗灈鏈烘墽琛屼腑
+        /// </summary>
+        [Description("鍫嗗灈鏈烘墽琛屼腑")]
+        SC_Executing = 210,
+
+        /// <summary>
+        /// 鍫嗗灈鏈哄畬鎴�
+        /// </summary>
+        [Description("鍫嗗灈鏈哄畬鎴�")]
+        SC_Finish = 220,
+
+        /// <summary>
+        /// 杈撻�佺嚎寰呮墽琛�
+        /// </summary>
+        [Description("杈撻�佺嚎寰呮墽琛�")]
+        Line_Execute = 400,
+
+        /// <summary>
+        /// 杈撻�佺嚎鎵ц涓�
+        /// </summary>
+        [Description("杈撻�佺嚎鎵ц涓�")]
+        Line_Executing = 410,
+
+        /// <summary>
+        /// 杈撻�佺嚎瀹屾垚
+        /// </summary>
+        [Description("杈撻�佺嚎瀹屾垚")]
+        Line_Finish = 420,
+
+        /// <summary>
+        /// AGV寰呮墽琛�
+        /// </summary>
+        [Description("AGV寰呮墽琛�")]
+        AGV_Execute = 300,
+
+        /// <summary>
+        /// AGV鎵ц涓�
+        /// </summary>
+        [Description("AGV鎵ц涓�")]
+        AGV_Executing = 310,
+
+        /// <summary>
+        /// AGV寰呯户缁墽琛�
+        /// </summary>
+        [Description("AGV寰呯户缁墽琛�")]
+        AGV_WaitToExecute = 320,
+        /// <summary>
+        /// AGV鏀捐揣涓�
+        /// </summary>
+        [Description("AGV鏀捐揣涓�")]
+        AGV_Puting = 325,
+
+        /// <summary>
+        /// AGV瀹屾垚
+        /// </summary>
+        [Description("AGV瀹屾垚")]
+        AGV_Finish = 330,
+
+        /// <summary>
+        /// 浠诲姟瀹屾垚
+        /// </summary>
+        [Description("浠诲姟瀹屾垚")]
+        Finish = 900,
+
+        /// <summary>
+        /// 浠诲姟鎸傝捣
+        /// </summary>
+        [Description("浠诲姟鎸傝捣")]
+        Pending = 970,
+
+        /// <summary>
+        /// 浠诲姟鍙栨秷
+        /// </summary>
+        [Description("浠诲姟鍙栨秷")]
+        Cancel = 980,
+
+        /// <summary>
+        /// 浠诲姟寮傚父
+        /// </summary>
+        [Description("浠诲姟寮傚父")]
+        Exception = 990,
+        /// <summary>
+        /// 鎻愬崌鏈烘墽琛屼腑
+        /// </summary>
+        [Description("鎻愬崌鏈烘墽琛屼腑")]
+        HT_Executing = 110,
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs"
new file mode 100644
index 0000000..1013730
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs"
@@ -0,0 +1,126 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.TaskEnum
+{
+    public enum TaskTypeEnum
+    {
+        /// <summary>
+        /// 棰嗘枡鍑哄簱
+        /// </summary>
+        [Description("棰嗘枡鍑哄簱")]
+        Outbound = 100,
+        /// <summary>
+        /// 鐩樼偣鍑哄簱
+        /// </summary>
+        [Description("鐩樼偣鍑哄簱")]
+        OutInventory = 110,
+        /// <summary>
+        /// 鍒嗘嫞鍑哄簱
+        /// </summary>
+        [Description("鍒嗘嫞鍑哄簱")]
+        OutPick = 120,
+        /// <summary>
+        /// 璐ㄦ鍑哄簱
+        /// </summary>
+        [Description("璐ㄦ鍑哄簱")]
+        OutQuality = 130,
+
+        /// <summary>
+        /// 绌虹鍑哄簱
+        /// </summary>
+        [Description("绌虹鍑哄簱")]
+        OutEmpty = 140,
+
+        /// <summary>
+        /// MES鍑哄簱
+        /// </summary>
+        [Description("MES鍑哄簱")]
+        MesOutbound = 200,
+
+        /// <summary>
+        /// MES鎵嬪姩鍑哄簱
+        /// </summary>
+        [Description("MES鎵嬪姩鍑哄簱")]
+        MesHandOutbound = 210,
+
+        /// <summary>
+        /// MES鎵嬪姩鎷i�夊嚭搴�
+        /// </summary>
+        [Description("MES鎵嬪姩鎷i�夊嚭搴�")]
+        MesHandPickOutbound = 220,
+
+        /// <summary>
+        /// 閲囪喘鍏ュ簱
+        /// </summary>
+        [Description("閲囪喘鍏ュ簱")]
+        Inbound = 510,
+        /// <summary>
+        /// 鐩樼偣鍏ュ簱
+        /// </summary>
+        [Description("鐩樼偣鍏ュ簱")]
+        InInventory = 520,
+        /// <summary>
+        /// 鍒嗘嫞鍏ュ簱
+        /// </summary>
+        [Description("鍒嗘嫞鍏ュ簱")]
+        InPick = 530,
+        /// <summary>
+        /// 璐ㄦ鍏ュ簱
+        /// </summary>
+        [Description("璐ㄦ鍏ュ簱")]
+        InQuality = 540,
+
+        /// <summary>
+        /// 鐢熶骇閫�鏂�
+        /// </summary>
+        [Description("鐢熶骇閫�鏂�")]
+        ProductionReturn = 550,
+
+        /// <summary>
+        /// MES閫�鏂�
+        /// </summary>
+        [Description("MES閫�鏂�")]
+        MesMatReturn = 560,
+
+        /// <summary>
+        /// 绌虹鍏ュ簱
+        /// </summary>
+        [Description("绌虹鍏ュ簱")]
+        InEmpty = 600,
+
+        /// <summary>
+        /// 宸烽亾鍐呯Щ搴�
+        /// </summary>
+        [Description("宸烽亾鍐呯Щ搴�")]
+        Relocation = 900
+        
+    }
+
+    public enum TaskTypeGroup
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        InboundGroup,
+
+        /// <summary>
+        /// 
+        /// </summary>
+        OutbondGroup,
+
+        /// <summary>
+        /// 
+        /// </summary>
+        RelocationGroup,
+
+        /// <summary>
+        /// 
+        /// </summary>
+        OtherGroup
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/WIDESEA_Common.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/WIDESEA_Common.csproj"
new file mode 100644
index 0000000..f14a168
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/WIDESEA_Common.csproj"
@@ -0,0 +1,15 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Compile Remove="Location\**" />
+    <EmbeddedResource Remove="Location\**" />
+    <None Remove="Location\**" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs"
new file mode 100644
index 0000000..7685dce
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs"
@@ -0,0 +1,76 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common.WareHouseEnum
+{
+    /// <summary>
+    /// 浠撳簱
+    /// HA57 = 娣畨浜屽巶 - 鏉挎枡浠�<br/>
+    /// HA58 = 娣畨浜屽巶 - PP浠�<br/>
+    /// HA60 = 娣畨浜屽巶 - 杈呮枡浠�<br/>
+    /// HA64 = 娣畨浜屽巶 - 娴嬭瘯鏋朵粨<br/>
+    /// HA71 = 娣畨浜屽巶 - 鎴愬搧浠�<br/>
+    /// HA72 = 娣畨浜屽巶 - 灏炬暟浠�<br/>
+    /// HA73 = 娣畨浜屽巶 - 鐮斿彂浠�<br/>
+    /// HA101 = 娣畨浜屽巶 - 鎴愬搧浠撳钩搴�<br/>
+    /// HA152 = 娣畨浜屽巶 - 骞茶啘浠�<br/>
+    /// HA153 = 娣畨浜屽巶 - 娌瑰ⅷ浠�<br/>
+    /// </summary>
+    public enum WarehouseEnum
+    {
+        /// <summary>
+        /// 鏉挎枡浠�
+        /// </summary>
+        [Description("鏉挎枡浠�")]
+        HA57,
+        /// <summary>
+        /// PP浠�
+        /// </summary>
+        [Description("PP浠�")]
+        HA58,
+        /// <summary>
+        /// 杈呮枡浠�
+        /// </summary>
+        [Description("杈呮枡浠�")]
+        HA60,
+        /// <summary>
+        /// 娴嬭瘯鏋朵粨
+        /// </summary>
+        [Description("娴嬭瘯鏋朵粨")]
+        HA64,
+        /// <summary>
+        /// 鎴愬搧浠�
+        /// </summary>
+        [Description("鎴愬搧浠�")]
+        HA71,
+        /// <summary>
+        /// 灏炬暟浠�
+        /// </summary>
+        [Description("灏炬暟浠�")]
+        HA72,
+        /// <summary>
+        /// 鐮斿彂浠�
+        /// </summary>
+        [Description("鐮斿彂浠�")]
+        HA73,
+        /// <summary>
+        /// 鎴愬搧浠撳钩搴�
+        /// </summary>
+        [Description("鎴愬搧浠撳钩搴�")]
+        HA101,
+        /// <summary>
+        /// 骞茶啘浠�
+        /// </summary>
+        [Description("骞茶啘浠�")]
+        HA152,
+        /// <summary>
+        /// 娌瑰ⅷ浠�
+        /// </summary>
+        [Description("娌瑰ⅷ浠�")]
+        HA153
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/AOP/LogAOP.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/AOP/LogAOP.cs"
new file mode 100644
index 0000000..f86165d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/AOP/LogAOP.cs"
@@ -0,0 +1,337 @@
+锘縰sing Castle.DynamicProxy;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.SignalR;
+using Newtonsoft.Json;
+using StackExchange.Profiling;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.LogHelper;
+
+namespace WIDESEA_Core.AOP
+{
+    /// <summary>
+	/// 鎷︽埅鍣↙ogAOP 缁ф壙IInterceptor鎺ュ彛
+	/// </summary>
+	public class LogAOP : IInterceptor
+    {
+        private readonly IHttpContextAccessor _accessor;
+
+        public LogAOP(IHttpContextAccessor accessor)
+        {
+            _accessor = accessor;
+        }
+
+        /// <summary>
+        /// 瀹炰緥鍖朓Interceptor鍞竴鏂规硶
+        /// </summary>
+        /// <param name="invocation">鍖呭惈琚嫤鎴柟娉曠殑淇℃伅</param>
+        public void Intercept(IInvocation invocation)
+        {
+            string UserName = _accessor.HttpContext?.User?.Identity?.Name;
+            string json;
+            try
+            {
+                if (invocation.Arguments.Any())
+                {
+                    json = JsonConvert.SerializeObject(invocation.Arguments);
+                }
+                else
+                {
+                    json = "鏃犲弬鏁�";
+                }
+            }
+            catch (Exception ex)
+            {
+                json = "鏃犳硶搴忓垪鍖栵紝鍙兘鏄叞濮嗚揪琛ㄨ揪寮忕瓑鍘熷洜閫犳垚锛屾寜鐓ф鏋朵紭鍖栦唬鐮�" + ex.ToString();
+            }
+
+            DateTime startTime = DateTime.Now;
+            AOPLogInfo apiLogAopInfo = new AOPLogInfo
+            {
+                RequestTime = startTime.ToString("yyyy-MM-dd hh:mm:ss fff"),
+                OpUserName = "銆愬綋鍓嶆搷浣滅敤鎴枫�戯細" + UserName,
+                RequestMethodName = "銆愬綋鍓嶆墽琛屾柟娉曘�戯細" + invocation.Method.Name,
+                RequestParamsName = "銆愭惡甯︾殑鍙傛暟鏈夈�戯細" + string.Join(", ", invocation.Arguments.Select(a => (a ?? "").ToString()).ToArray()),
+                RequestParamsData = json
+            };
+
+            var dataIntercept = $"";
+
+            try
+            {
+                MiniProfiler.Current.Step($"鎵ц{invocation.InvocationTarget}.{invocation.Method.Name}()鏂规硶 -> ");
+
+                //MethodParamsValidateAttribute? paramsValidateAttribute = invocation.Method.GetCustomAttribute<MethodParamsValidateAttribute>();
+                //if (paramsValidateAttribute != null) 
+                //{
+                //    foreach (var item in invocation.Arguments)
+                //    {
+
+                //    }
+                //}
+                //鍦ㄨ鎷︽埅鐨勬柟娉曟墽琛屽畬姣曞悗 缁х画鎵ц褰撳墠鏂规硶锛屾敞鎰忔槸琚嫤鎴殑鏄紓姝ョ殑
+                invocation.Proceed();
+                // 寮傛鑾峰彇寮傚父锛屽厛鎵ц
+                if (IsAsyncMethod(invocation.Method))
+                {
+                    #region 鏂规涓�
+
+                    //Wait task execution and modify return value
+                    if (invocation.Method.ReturnType == typeof(Task))
+                    {
+                        invocation.ReturnValue = InternalAsyncHelper.AwaitTaskWithPostActionAndFinally(
+                            (Task)invocation.ReturnValue,
+                            async () => await SuccessAction(invocation, apiLogAopInfo, startTime), /*鎴愬姛鏃舵墽琛�*/
+                            ex =>
+                            {
+                                LogEx(ex, apiLogAopInfo);
+                            });
+                    }
+                    //Task<TResult>
+                    else
+                    {
+                        invocation.ReturnValue = InternalAsyncHelper.CallAwaitTaskWithPostActionAndFinallyAndGetResult(
+                            invocation.Method.ReturnType.GenericTypeArguments[0],
+                            invocation.ReturnValue,
+                            //async () => await SuccessAction(invocation, dataIntercept),/*鎴愬姛鏃舵墽琛�*/
+                            async (o) => await SuccessAction(invocation, apiLogAopInfo, startTime, o), /*鎴愬姛鏃舵墽琛�*/
+                            ex =>
+                            {
+                                LogEx(ex, apiLogAopInfo);
+                            });
+                    }
+
+                    #endregion 鏂规涓�
+
+                    // 濡傛灉鏂规涓�涓嶈锛岃瘯璇曡繖涓柟妗�
+                    //#region 鏂规浜�
+
+                    //var type = invocation.Method.ReturnType;
+                    //var resultProperty = type.GetProperty("Result");
+                    //DateTime endTime = DateTime.Now;
+                    //string ResponseTime = (endTime - startTime).Milliseconds.ToString();
+                    //apiLogAopInfo.ResponseTime = endTime.ToString("yyyy-MM-dd hh:mm:ss fff");
+                    //apiLogAopInfo.ResponseIntervalTime = ResponseTime + "ms";
+                    //apiLogAopInfo.ResponseJsonData = JsonConvert.SerializeObject(resultProperty.GetValue(invocation.ReturnValue));
+
+                    ////dataIntercept += ($"銆愬搷搴旀椂闂淬�戯細{ResponseTime}ms\r\n");
+                    ////dataIntercept += ($"銆愭墽琛屽畬鎴愭椂闂淬�戯細{endTime.ToString("yyyy-MM-dd hh:mm:ss fff")}\r\n");
+                    ////dataIntercept += ($"銆愭墽琛屽畬鎴愮粨鏋溿�戯細{JsonConvert.SerializeObject(resultProperty.GetValue(invocation.ReturnValue))}\r\n");
+
+                    //Parallel.For(0, 1, e =>
+                    //{
+                    //    //LogLock.OutLogAOP("AOPLog", new string[] { dataIntercept });
+                    //    LogLock.OutLogAOP("AOPLog", new string[] { apiLogAopInfo.GetType().ToString() + " - ResponseJsonDataType:" + type, JsonConvert.SerializeObject(apiLogAopInfo) });
+                    //});
+
+                    //#endregion
+                }
+                else
+                {
+                    // 鍚屾1
+                    string jsonResult;
+                    try
+                    {
+                        jsonResult = JsonConvert.SerializeObject(invocation.ReturnValue);
+                    }
+                    catch (Exception ex)
+                    {
+                        jsonResult = "鏃犳硶搴忓垪鍖栵紝鍙兘鏄叞濮嗚揪琛ㄨ揪寮忕瓑鍘熷洜閫犳垚锛屾寜鐓ф鏋朵紭鍖栦唬鐮�" + ex.ToString();
+                    }
+
+                    var type = invocation.Method.ReturnType;
+                    var resultProperty = type.GetProperty("Result");
+                    DateTime endTime = DateTime.Now;
+                    string ResponseTime = (endTime - startTime).Milliseconds.ToString();
+                    apiLogAopInfo.ResponseTime = endTime.ToString("yyyy-MM-dd hh:mm:ss fff");
+                    apiLogAopInfo.ResponseIntervalTime = ResponseTime + "ms";
+                    apiLogAopInfo.ResponseJsonData = jsonResult;
+                    Parallel.For(0, 1, e =>
+                    {
+                        LogLock.OutLogAOP("鍏ㄥ眬鏃ュ織AOP", new string[] { apiLogAopInfo.GetType().ToString(), JsonConvert.SerializeObject(apiLogAopInfo) });
+                    });
+                }
+            }
+            catch (Exception ex) // 鍚屾2
+            {
+                LogEx(ex, apiLogAopInfo);
+                throw;
+            }
+        }
+
+        private async Task SuccessAction(IInvocation invocation, AOPLogInfo apiLogAopInfo, DateTime startTime, object o = null)
+        {
+            DateTime endTime = DateTime.Now;
+            string ResponseTime = (endTime - startTime).Milliseconds.ToString();
+            apiLogAopInfo.ResponseTime = endTime.ToString("yyyy-MM-dd hh:mm:ss fff");
+            apiLogAopInfo.ResponseIntervalTime = ResponseTime + "ms";
+            apiLogAopInfo.ResponseJsonData = JsonConvert.SerializeObject(o);
+
+            await Task.Run(() =>
+            {
+                Parallel.For(0, 1, e =>
+                {
+                    //LogLock.OutSql2Log("AOPLog", new string[] { JsonConvert.SerializeObject(apiLogAopInfo) });
+                    LogLock.OutLogAOP("鍏ㄥ眬鏃ュ織AOP", new string[] { apiLogAopInfo.GetType().ToString(), JsonConvert.SerializeObject(apiLogAopInfo) });
+                });
+            });
+        }
+
+        private void LogEx(Exception ex, AOPLogInfo dataIntercept)
+        {
+            if (ex != null)
+            {
+                //鎵ц鐨� service 涓紝鏀跺綍寮傚父
+                MiniProfiler.Current.CustomTiming("Errors锛�", ex.Message);
+                //鎵ц鐨� service 涓紝鎹曡幏寮傚父
+                AOPLogExInfo apiLogAopExInfo = new AOPLogExInfo
+                {
+                    ExMessage = ex.Message,
+                    InnerException = "InnerException-鍐呴儴寮傚父:\r\n" + (ex.InnerException == null ? "" : ex.InnerException.InnerException?.ToString()) +
+                                     "\r\nStackTrace-鍫嗘爤璺熻釜:\r\n" + (ex.StackTrace == null ? "" : ex.StackTrace.ToString()),
+                    ApiLogAopInfo = dataIntercept
+                };
+                // 寮傚父鏃ュ織閲屾湁璇︾粏鐨勫爢鏍堜俊鎭�
+                Parallel.For(0, 1, e =>
+                {
+                    LogLock.OutLogAOP("鍏ㄥ眬寮傚父閿欒鏃ュ織AOP", new string[] { apiLogAopExInfo.GetType().ToString(), JsonConvert.SerializeObject(apiLogAopExInfo) });
+                });
+            }
+        }
+
+        public static bool IsAsyncMethod(MethodInfo method)
+        {
+            return
+                method.ReturnType == typeof(Task) ||
+                method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>)
+            ;
+        }
+    }
+
+    internal static class InternalAsyncHelper
+    {
+        public static async Task AwaitTaskWithPostActionAndFinally(Task actualReturnValue, Func<Task> postAction, Action<Exception> finalAction)
+        {
+            Exception exception = null;
+
+            try
+            {
+                await actualReturnValue;
+                await postAction();
+            }
+            catch (Exception ex)
+            {
+                exception = ex;
+            }
+            finally
+            {
+                finalAction(exception);
+            }
+        }
+
+        public static async Task<T> AwaitTaskWithPostActionAndFinallyAndGetResult<T>(Task<T> actualReturnValue, Func<object, Task> postAction,
+            Action<Exception> finalAction)
+        {
+            Exception exception = null;
+            try
+            {
+                var result = await actualReturnValue;
+                await postAction(result);
+                return result;
+            }
+            catch (Exception ex)
+            {
+                exception = ex;
+                throw;
+            }
+            finally
+            {
+                finalAction(exception);
+            }
+        }
+
+        public static object CallAwaitTaskWithPostActionAndFinallyAndGetResult(Type taskReturnType, object actualReturnValue,
+            Func<object, Task> action, Action<Exception> finalAction)
+        {
+            return typeof(InternalAsyncHelper)
+                .GetMethod("AwaitTaskWithPostActionAndFinallyAndGetResult", BindingFlags.Public | BindingFlags.Static)
+                .MakeGenericMethod(taskReturnType)
+                .Invoke(null, new object[] { actualReturnValue, action, finalAction });
+        }
+    }
+
+    public class AOPLogInfo
+    {
+        /// <summary>
+        /// 璇锋眰鏃堕棿
+        /// </summary>
+        [Description("璇锋眰鏃堕棿")]
+        public string RequestTime { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 鎿嶄綔浜哄憳
+        /// </summary>
+        [Description("鎿嶄綔浜哄憳")]
+        public string OpUserName { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 璇锋眰鏂规硶鍚�
+        /// </summary>
+        [Description("璇锋眰鏂规硶鍚�")]
+        public string RequestMethodName { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 璇锋眰鍙傛暟鍚�
+        /// </summary>
+        [Description("璇锋眰鍙傛暟鍚�")]
+        public string RequestParamsName { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 璇锋眰鍙傛暟鏁版嵁JSON
+        /// </summary>
+        [Description("璇锋眰鍙傛暟鏁版嵁JSON")]
+        public string RequestParamsData { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 璇锋眰鍝嶅簲闂撮殧鏃堕棿
+        /// </summary>
+        [Description("璇锋眰鍝嶅簲闂撮殧鏃堕棿")]
+        public string ResponseIntervalTime { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 鍝嶅簲鏃堕棿
+        /// </summary>
+        [Description("鍝嶅簲鏃堕棿")]
+        public string ResponseTime { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 鍝嶅簲缁撴灉
+        /// </summary>
+        [Description("鍝嶅簲缁撴灉")]
+        public string ResponseJsonData { get; set; } = string.Empty;
+    }
+
+    public class AOPLogExInfo
+    {
+        public AOPLogInfo ApiLogAopInfo { get; set; }
+
+        /// <summary>
+        /// 寮傚父
+        /// </summary>
+        [Description("寮傚父")]
+        public string InnerException { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 寮傚父淇℃伅
+        /// </summary>
+        [Description("寮傚父淇℃伅")]
+        public string ExMessage { get; set; } = string.Empty;
+    }
+}
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/AOP/SqlSugarAop.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/AOP/SqlSugarAop.cs"
new file mode 100644
index 0000000..14b05f2
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/AOP/SqlSugarAop.cs"
@@ -0,0 +1,158 @@
+锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
+using SqlSugar;
+using StackExchange.Profiling;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Seed;
+using WIDESEA_Core.Tenants;
+using static Org.BouncyCastle.Math.EC.ECCurve;
+
+namespace WIDESEA_Core.AOP
+{
+    public static class SqlSugarAop
+    {
+        public static void DataExecuting(object oldValue, DataFilterModel entityInfo)
+        {
+            if (entityInfo.OperationType == DataFilterType.InsertByObject)
+            {
+                PropertyInfo propertyInfo = entityInfo.EntityColumnInfo.PropertyInfo;
+                CodeRuleAttribute? codeRuleAttribute = propertyInfo.GetCustomAttribute<CodeRuleAttribute>();
+                if (codeRuleAttribute != null)
+                {
+                    if (propertyInfo.GetValue(entityInfo.EntityValue) == null)
+                    {
+                        SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig
+                        {
+                            ConfigId = MainDb.CurrentDbConnId,
+                            ConnectionString = DBContext.GetMainConnectionDb().Connection,
+                            IsAutoCloseConnection = true,
+                            DbType = MainDb.DbType,
+                        });
+                        dynamic ruleConfig = sugarClient.Queryable(MainDb.CodeRuleConfig, "x").Where(nameof(CodeRuleAttribute.RuleCode), "=", codeRuleAttribute.RuleCode.ToString()).First();
+                        if (ruleConfig != null)
+                        {
+                            string code = CreateCodeByRule(ruleConfig, sugarClient);
+                            propertyInfo.SetValue(entityInfo.EntityValue, code, null);
+                        }
+                    }
+                }
+
+                SequenceAttribute? sequenceAttirbute = propertyInfo.GetCustomAttribute<SequenceAttribute>();
+                if (sequenceAttirbute != null)
+                {
+                    if (propertyInfo.GetValue(entityInfo.EntityValue)?.ObjToInt() <= 0)
+                    {
+                        SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig
+                        {
+                            ConfigId = MainDb.CurrentDbConnId,
+                            ConnectionString = DBContext.GetMainConnectionDb().Connection,
+                            IsAutoCloseConnection = true,
+                            DbType = MainDb.DbType,
+                        });
+                        int count = sugarClient.Ado.GetScalar($"SELECT COUNT(*) FROM sys.sequences WHERE name = '{sequenceAttirbute.SequenceName}'").ObjToInt();
+                        if (count == 0)
+                        {
+                            string sql = $"CREATE SEQUENCE {sequenceAttirbute.SequenceName} AS [int] START WITH {sequenceAttirbute.StartWith} INCREMENT BY {sequenceAttirbute.Increment} MINVALUE {sequenceAttirbute.SeqMinValue} MAXVALUE {sequenceAttirbute.SeqMaxValue} {(sequenceAttirbute.IsCycle ? "CYCLE" : "")} CACHE";
+                            sugarClient.Ado.ExecuteCommand(sql);
+                        }
+                        int seq = sugarClient.Ado.GetScalar($"SELECT NEXT VALUE FOR {sequenceAttirbute.SequenceName}").ObjToInt();
+                        propertyInfo.SetValue(entityInfo.EntityValue, seq, null);
+                    }
+                }
+            }
+
+            if (entityInfo.EntityValue is BaseEntity baseEntity)
+            {
+                // 鏂板鎿嶄綔
+                if (entityInfo.OperationType == DataFilterType.InsertByObject && entityInfo.PropertyName == nameof(BaseEntity.CreateDate))
+                {
+                    baseEntity.CreateDate = DateTime.Now;
+                }
+
+                if (entityInfo.OperationType == DataFilterType.UpdateByObject && entityInfo.PropertyName == nameof(BaseEntity.ModifyDate))
+                {
+                    baseEntity.ModifyDate = DateTime.Now;
+                }
+
+                //if (App.User?.UserId > 0)
+                {
+                    switch (entityInfo.OperationType)
+                    {
+                        case DataFilterType.UpdateByObject:
+                            baseEntity.Modifier = App.User.UserName;
+                            break;
+                        case DataFilterType.InsertByObject:
+                            baseEntity.Creater = App.User.UserName;
+                            break;
+                    }
+                }
+            }
+
+            if (entityInfo.EntityValue is IBaseHistoryEntity baseHistoryEntity)
+            {
+                if (entityInfo.OperationType == DataFilterType.InsertByObject && entityInfo.PropertyName == nameof(IBaseHistoryEntity.InsertTime))
+                {
+                    baseHistoryEntity.InsertTime = DateTime.Now;
+                }
+            }
+        }
+
+        private static string CreateCodeByRule(dynamic ruleConfig, SqlSugarClient sugarClient)
+        {
+            string code = string.Empty;
+            DateTime dataTime = DateTime.Now;
+            DateTime now = DateTime.Now;
+            try
+            {
+                if (ruleConfig.ModifyDate != null)
+                {
+                    dataTime = Convert.ToDateTime(ruleConfig.ModifyDate);
+                }
+                else
+                {
+                    dataTime = Convert.ToDateTime(ruleConfig.CreateDate);
+                }
+
+                if (now.Year == dataTime.Year && now.Month == dataTime.Month && now.Day == dataTime.Day)
+                {
+                    now = dataTime;
+                    ruleConfig.CurrentVal = Convert.ToInt32(ruleConfig.CurrentVal) + 1;
+                }
+                else
+                {
+                    ruleConfig.CurrentVal = 1;
+                }
+
+                ruleConfig.ModifyDate = DateTime.Now;
+
+                code = ruleConfig.Format;
+                code = code.Replace($"[{CodeFormatTypeEnum.YYYY}]", now.Year.ToString().PadLeft(4, '0'));
+                code = code.Replace($"[{CodeFormatTypeEnum.MM}]", now.Month.ToString().PadLeft(2, '0'));
+                code = code.Replace($"[{CodeFormatTypeEnum.DD}]", now.Day.ToString().PadLeft(2, '0'));
+                code = code.Replace($"[{CodeFormatTypeEnum.ST}]", ruleConfig.StartStr.ToString());
+                code = code.Replace($"[{CodeFormatTypeEnum.NUM}]", ruleConfig.CurrentVal.ToString().PadLeft(ruleConfig.Length ?? 0, '0'));
+            }
+            catch (Exception ex)
+            {
+
+            }
+            finally
+            {
+                Dictionary<string, object> keyValuePairs = new Dictionary<string, object>() { { nameof(ruleConfig.CurrentVal), ruleConfig.CurrentVal }, { nameof(ruleConfig.Id), ruleConfig.Id }, { nameof(ruleConfig.ModifyDate), DateTime.Now } };
+                sugarClient.Updateable(keyValuePairs).AS(MainDb.CodeRuleConfig).WhereColumns(nameof(ruleConfig.Id)).ExecuteCommand();
+            }
+            return code;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/App.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/App.cs"
new file mode 100644
index 0000000..f15e9c1
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/App.cs"
@@ -0,0 +1,211 @@
+锘縰sing HslCommunication.WebSocket;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Core;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.HttpContextUser;
+
+namespace WIDESEA_Core
+{
+    public class App
+    {
+        static App()
+        {
+            EffectiveTypes = Assemblies.SelectMany(GetTypes);
+            //SocketServer = new WebSocketServer();
+            //SocketServer.ServerStart(9295);
+        }
+
+        private static bool _isRun;
+
+        /// <summary>鏄惁姝e湪杩愯</summary>
+        public static bool IsBuild { get; set; }
+
+        public static bool IsRun
+        {
+            get => _isRun;
+            set => _isRun = IsBuild = value;
+        }
+
+        /// <summary>
+        /// 鏈夋晥鏈�
+        /// </summary>
+        public static DateTime? ExpDateTime = null;
+
+        /// <summary>搴旂敤鏈夋晥绋嬪簭闆�</summary>
+        public static readonly IEnumerable<Assembly> Assemblies = RuntimeExtension.GetAllAssemblies();
+
+        /// <summary>鏈夋晥绋嬪簭闆嗙被鍨�</summary>
+        public static readonly IEnumerable<Type> EffectiveTypes;
+
+        /// <summary>浼樺厛浣跨敤App.GetService()鎵嬪姩鑾峰彇鏈嶅姟</summary>
+        public static IServiceProvider RootServices => IsRun || IsBuild ? InternalApp.RootServices : null;
+
+        /// <summary>鑾峰彇Web涓绘満鐜锛屽锛屾槸鍚︽槸寮�鍙戠幆澧冿紝鐢熶骇鐜绛�</summary>
+        public static IWebHostEnvironment WebHostEnvironment => InternalApp.WebHostEnvironment;
+
+        /// <summary>鑾峰彇娉涘瀷涓绘満鐜锛屽锛屾槸鍚︽槸寮�鍙戠幆澧冿紝鐢熶骇鐜绛�</summary>
+        public static IHostEnvironment HostEnvironment => InternalApp.HostEnvironment;
+
+        /// <summary>鍏ㄥ眬閰嶇疆閫夐」</summary>
+        public static IConfiguration Configuration => InternalApp.Configuration;
+
+        /// <summary>
+        /// 鑾峰彇璇锋眰涓婁笅鏂�
+        /// </summary>
+        public static HttpContext HttpContext => RootServices?.GetService<IHttpContextAccessor>()?.HttpContext;
+
+        public static IUser User => GetService<IUser>();
+
+        #region Service
+
+        /// <summary>瑙f瀽鏈嶅姟鎻愪緵鍣�</summary>
+        /// <param name="serviceType"></param>
+        /// <param name="mustBuild"></param>
+        /// <param name="throwException"></param>
+        /// <returns></returns>
+        public static IServiceProvider GetServiceProvider(Type serviceType, bool mustBuild = false, bool throwException = true)
+        {
+            if (App.HostEnvironment == null || App.RootServices != null &&
+                InternalApp.InternalServices
+                    .Where((u =>
+                        u.ServiceType ==
+                        (serviceType.IsGenericType ? serviceType.GetGenericTypeDefinition() : serviceType)))
+                    .Any((u => u.Lifetime == ServiceLifetime.Singleton)))
+                return App.RootServices;
+
+            //鑾峰彇璇锋眰鐢熷瓨鍛ㄦ湡鐨勬湇鍔�
+            if (HttpContext?.RequestServices != null)
+                return HttpContext.RequestServices;
+
+            if (App.RootServices != null)
+            {
+                IServiceScope scope = RootServices.CreateScope();
+                return scope.ServiceProvider;
+            }
+
+            if (mustBuild)
+            {
+                if (throwException)
+                {
+                    throw new ApplicationException("褰撳墠涓嶅彲鐢紝蹇呴』瑕佺瓑鍒� WebApplication Build鍚�");
+                }
+
+                return default;
+            }
+
+            ServiceProvider serviceProvider = InternalApp.InternalServices.BuildServiceProvider();
+            return serviceProvider;
+        }
+
+        public static TService GetService<TService>(bool mustBuild = true) where TService : class
+        {
+            TService test = App.GetService(typeof(TService), null, mustBuild) as TService;
+            return test;
+        }
+
+        /// <summary>鑾峰彇璇锋眰鐢熷瓨鍛ㄦ湡鐨勬湇鍔�</summary>
+        /// <typeparam name="TService"></typeparam>
+        /// <param name="serviceProvider"></param>
+        /// <param name="mustBuild"></param>
+        /// <returns></returns>
+        public static TService GetService<TService>(IServiceProvider serviceProvider, bool mustBuild = true)
+            where TService : class => (serviceProvider ?? App.GetServiceProvider(typeof(TService), mustBuild, false))?.GetService<TService>();
+
+        /// <summary>鑾峰彇璇锋眰鐢熷瓨鍛ㄦ湡鐨勬湇鍔�</summary>
+        /// <param name="type"></param>
+        /// <param name="serviceProvider"></param>
+        /// <param name="mustBuild"></param>
+        /// <returns></returns>
+        public static object GetService(Type type, IServiceProvider serviceProvider = null, bool mustBuild = true)
+        {
+            IServiceProvider? obj2 = (serviceProvider ?? App.GetServiceProvider(type, mustBuild, false));
+            object obj = obj2?.GetService(type);
+            return obj;
+        }
+
+
+        #endregion
+
+        #region private
+
+        /// <summary>鍔犺浇绋嬪簭闆嗕腑鐨勬墍鏈夌被鍨�</summary>
+        /// <param name="ass"></param>
+        /// <returns></returns>
+        private static IEnumerable<Type> GetTypes(Assembly ass)
+        {
+            Type[] source = Array.Empty<Type>();
+            try
+            {
+                source = ass.GetTypes();
+            }
+            catch
+            {
+                //$@"Error load `{ass.FullName}` assembly.".WriteErrorLine();
+            }
+
+            return source.Where(u => u.IsPublic);
+        }
+
+        #endregion
+
+        #region Options
+
+        /// <summary>鑾峰彇閰嶇疆</summary>
+        /// <typeparam name="TOptions">寮虹被鍨嬮�夐」绫�</typeparam>
+        /// <returns>TOptions</returns>
+        public static TOptions GetConfig<TOptions>()
+            where TOptions : class, IConfigurableOptions
+        {
+            TOptions instance = App.Configuration
+                .GetSection(ConfigurableOptions.GetConfigurationPath(typeof(TOptions)))
+                .Get<TOptions>();
+            return instance;
+        }
+
+        /// <summary>鑾峰彇閫夐」</summary>
+        /// <typeparam name="TOptions">寮虹被鍨嬮�夐」绫�</typeparam>
+        /// <param name="serviceProvider"></param>
+        /// <returns>TOptions</returns>
+        public static TOptions GetOptions<TOptions>(IServiceProvider serviceProvider = null) where TOptions : class, new()
+        {
+            IOptions<TOptions> service = App.GetService<IOptions<TOptions>>(serviceProvider ?? App.RootServices, false);
+            return service?.Value;
+        }
+
+        /// <summary>鑾峰彇閫夐」</summary>
+        /// <typeparam name="TOptions">寮虹被鍨嬮�夐」绫�</typeparam>
+        /// <param name="serviceProvider"></param>
+        /// <returns>TOptions</returns>
+        public static TOptions GetOptionsMonitor<TOptions>(IServiceProvider serviceProvider = null)
+            where TOptions : class, new()
+        {
+            IOptionsMonitor<TOptions> service =
+                App.GetService<IOptionsMonitor<TOptions>>(serviceProvider ?? App.RootServices, false);
+            return service?.CurrentValue;
+        }
+
+        /// <summary>鑾峰彇閫夐」</summary>
+        /// <typeparam name="TOptions">寮虹被鍨嬮�夐」绫�</typeparam>
+        /// <param name="serviceProvider"></param>
+        /// <returns>TOptions</returns>
+        public static TOptions GetOptionsSnapshot<TOptions>(IServiceProvider serviceProvider = null)
+            where TOptions : class, new()
+        {
+            IOptionsSnapshot<TOptions> service = App.GetService<IOptionsSnapshot<TOptions>>(serviceProvider, false);
+            return service?.Value;
+        }
+
+        #endregion
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/AnalysisRuleAttribute.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/AnalysisRuleAttribute.cs"
new file mode 100644
index 0000000..94cdf32
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/AnalysisRuleAttribute.cs"
@@ -0,0 +1,34 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.Enums;
+
+namespace WIDESEA_Core.Attributes
+{
+    [AttributeUsage(AttributeTargets.Property)]
+    public class AnalysisItemRuleAttribute : Attribute
+    {
+        public AnalysisFormatTypeEnum AnalysisFormaType { get; set; }
+
+        public int Length { get; set; }
+
+        public AnalysisItemRuleAttribute(AnalysisFormatTypeEnum analysisFormaType)
+        {
+            AnalysisFormaType = analysisFormaType;
+        }
+    }
+
+    [AttributeUsage(AttributeTargets.Class)]
+    public class AnalysisRuleAttribute : Attribute
+    {
+        public AnalysisRuleEnum AnalysisRule { get; set; } = AnalysisRuleEnum.Split;
+
+        public AnalysisRuleAttribute()
+        {
+
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/CodeRuleAttribute.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/CodeRuleAttribute.cs"
new file mode 100644
index 0000000..a64eb98
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/CodeRuleAttribute.cs"
@@ -0,0 +1,20 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.Enums;
+
+namespace WIDESEA_Core.Attributes
+{
+    [AttributeUsage(AttributeTargets.Property)]
+    public class CodeRuleAttribute : Attribute
+    {
+        public RuleCodeEnum RuleCode { get; set; }
+        public CodeRuleAttribute(RuleCodeEnum ruleCode)
+        {
+            RuleCode = ruleCode;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/CustomValidationAttribute.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/CustomValidationAttribute.cs"
new file mode 100644
index 0000000..bbb7f62
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/CustomValidationAttribute.cs"
@@ -0,0 +1,25 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Attributes
+{
+    public class CustomValidationAttribute : ValidationAttribute
+    {
+        protected override ValidationResult? IsValid(object? value, ValidationContext validationContext)
+        {
+            if(value is string valueString)
+            {
+                if (string.IsNullOrEmpty(valueString)) 
+                {
+                    return new ValidationResult("閿欒");
+                }
+            }
+
+            return ValidationResult.Success;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/MethodParamsValidateAttribute.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/MethodParamsValidateAttribute.cs"
new file mode 100644
index 0000000..e36ddf8
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/MethodParamsValidateAttribute.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Attributes
+{
+    [AttributeUsage(AttributeTargets.Method)]
+    public class MethodParamsValidateAttribute : Attribute
+    {
+        
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/ModelValidateAttribute.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/ModelValidateAttribute.cs"
new file mode 100644
index 0000000..0f8b12b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/ModelValidateAttribute.cs"
@@ -0,0 +1,109 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Attributes
+{
+    [AttributeUsage(AttributeTargets.Property)]
+    public class PropertyValidateAttribute : Attribute
+    {
+        /// <summary>
+        /// 鏈�澶у��
+        /// </summary>
+        public int MaxValue { get; set; } = int.MaxValue;
+
+        /// <summary>
+        /// 鏈�灏忓��
+        /// </summary>
+        public int MinValue { get; set; } = int.MinValue;
+
+        /// <summary>
+        /// 闈炵┖
+        /// </summary>
+        public bool NotNullAndEmpty { get; set; } = true;
+
+        /// <summary>
+        /// 鏄惁鍖呭惈鏈�澶у��
+        /// </summary>
+        public bool IsContainMaxValue { get; set; } = false;
+
+        /// <summary>
+        /// 鏄惁鍖呭惈鏈�灏忓��
+        /// </summary>
+        public bool IsContainMinValue { get; set; } = false;
+
+        /// <summary>
+        /// 鏍规嵁鍏朵粬灞炴�ч潪绌哄垽鏂綋鍓嶆槸鍚︿负闈炵┖
+        /// </summary>
+        public string NotNullAndEmptyWithProperty { get; set; }
+
+        /// <summary>
+        /// 鏍规嵁鍏朵粬灞炴�у�煎垽鏂綋鍓嶆槸鍚︿负闈炵┖(鏍煎紡銆恘ew string[]{ "灞炴�у悕绉�", "灞炴�у��" }銆�)
+        /// </summary>
+        public string[] NotNullAndEmptyWithPropertyAndValue { get; set; }
+
+        /// <summary>
+        /// 璇存槑
+        /// </summary>
+        public string Description { get; set; }
+
+        /// <summary>
+        /// 妫�鏌ョ害鏉燂紝灞炴�у�煎彧鍏佽鏄暟缁勪腑鐨勫��
+        /// </summary>
+        public object[] Check { get; set; }
+
+        /// <summary>
+        /// 浠�...寮�澶�
+        /// </summary>
+        public string StartWith { get; set; }
+
+        /// <summary>
+        /// 浠�...缁撳熬
+        /// </summary>
+        public string EndWith { get; set; }
+
+        /// <summary>
+        /// 鏈�灏忛暱搴�
+        /// </summary>
+        public int MinLength { get; set; } = 0;
+
+        /// <summary>
+        /// 鏈�澶ч暱搴�
+        /// </summary>
+        public int MaxLength { get; set; } = int.MaxValue;
+
+        public PropertyValidateAttribute(string description)
+        {
+            if (!string.IsNullOrEmpty(description))
+                Description = description;
+        }
+    }
+
+    [AttributeUsage(AttributeTargets.Class)]
+    public class ModelValidateAttribute : Attribute
+    {
+        public ModelValidateType ModelValidateType { get; } = ModelValidateType.SimpleValidate;
+
+        public Func<object, (bool, string, object?)> CustomValidateMethod { get; set; }
+
+        public object ErrorResponse { get; set; }
+
+        public ModelValidateAttribute()
+        {
+        }
+
+        public ModelValidateAttribute(Func<object, (bool, string, object?)> customValidateMethod)
+        {
+            CustomValidateMethod = customValidateMethod;
+        }
+    }
+
+    public enum ModelValidateType
+    {
+        SimpleValidate,
+        CustomValidate,
+        SimpleAndCustom
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/SequenceAttirbute.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/SequenceAttirbute.cs"
new file mode 100644
index 0000000..bee2047
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/SequenceAttirbute.cs"
@@ -0,0 +1,30 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Attributes
+{
+    [AttributeUsage(AttributeTargets.Property)]
+    public class SequenceAttribute : Attribute
+    {
+        public string SequenceName { get; set; }
+
+        public int SeqMaxValue { get; set; } = int.MaxValue;
+
+        public int SeqMinValue { get; set; } = 1;
+
+        public int StartWith { get; set; } = 1;
+
+        public int Increment { get; set; } = 1;
+
+        public bool IsCycle { get; set; } = true;
+
+        public SequenceAttribute(string sequenceName, int seqMaxValue)
+        {
+            SequenceName = sequenceName;
+            SeqMaxValue = seqMaxValue;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/ValueChangeAttribute.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/ValueChangeAttribute.cs"
new file mode 100644
index 0000000..0e73a58
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Attributes/ValueChangeAttribute.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Attributes
+{
+    [AttributeUsage(AttributeTargets.Property)]
+    public class ValueChangeAttribute : Attribute
+    {
+        public bool IsMinitor { get; set; } = true;
+        public ValueChangeAttribute() 
+        {
+
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Authorization/AuthorizationResponse.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Authorization/AuthorizationResponse.cs"
new file mode 100644
index 0000000..3db0e6a
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Authorization/AuthorizationResponse.cs"
@@ -0,0 +1,46 @@
+锘縰sing Microsoft.AspNetCore.Mvc.Filters;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.IdentityModel.Tokens.Jwt;
+using System.Linq;
+using System.Net;
+using System.Security.Claims;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Const;
+
+namespace WIDESEA_Core.Authorization
+{
+    public static class AuthorizationResponse
+    {
+        public static AuthorizationFilterContext FilterResult(
+          this AuthorizationFilterContext context,
+            HttpStatusCode statusCode,
+            string message = null)
+        {
+            context.Result = new ContentResult()
+            {
+                Content = new { message, status = false, code = (int)statusCode }.Serialize(),
+                ContentType = "application/json",
+                StatusCode = (int)statusCode
+            };
+            //Logger.Info(LoggerType.ApiAuthorize, message);
+            return context;
+        }
+        public static AuthorizationFilterContext Unauthorized(this AuthorizationFilterContext context, string message = null)
+        {
+            return context.FilterResult(HttpStatusCode.Unauthorized, message);
+        }
+        //涓嶉�氳繃JWT楠岃瘉鐨勶紝鐩存帴灏嗙敤鎴蜂俊鎭紦瀛樿捣鏉�
+        public static void AddIdentity(this AuthorizationFilterContext context, int? userId = null)
+        {
+            int _userId = userId ?? JwtHelper.GetUserId(context.HttpContext.Request.Headers[AppSecret.TokenHeaderName]);
+            if (_userId <= 0) return;
+            //灏嗙敤鎴稩d缂撳瓨鍒颁笂涓嬫枃(鎴栬�呰嚜瀹氫竴涓璞★紝閫氳繃DI浠ddScoped鏂瑰紡娉ㄥ叆涓婁笅鏂囨潵绠$悊鐢ㄦ埛淇℃伅)
+            var claims = new Claim[] { new Claim(JwtRegisteredClaimNames.Jti, _userId.ToString()) };
+            context.HttpContext.User.AddIdentity(new ClaimsIdentity(claims));
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Authorization/AuthorizationSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Authorization/AuthorizationSetup.cs"
new file mode 100644
index 0000000..31cff24
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Authorization/AuthorizationSetup.cs"
@@ -0,0 +1,67 @@
+锘縰sing Microsoft.AspNetCore.Authentication.JwtBearer;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.IdentityModel.Tokens;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Claims;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Authorization
+{
+    /// <summary>
+    /// 绯荤粺 鎺堟潈鏈嶅姟 閰嶇疆
+    /// </summary>
+    public static class AuthorizationSetup
+    {
+        /// <summary>
+        /// 绯荤粺 鎺堟潈鏈嶅姟 閰嶇疆
+        /// </summary>
+        /// <param name="services"></param>
+        /// <exception cref="ArgumentNullException"></exception>
+        public static void AddAuthorizationSetup(this IServiceCollection services)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+            
+            services.AddAuthentication(options =>
+            {
+                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
+                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
+                options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
+            })
+             .AddJwtBearer(options =>
+             {
+                 options.TokenValidationParameters = new TokenValidationParameters
+                 {
+                     SaveSigninToken = true,//淇濆瓨token,鍚庡彴楠岃瘉token鏄惁鐢熸晥(閲嶈)
+                     ValidateIssuer = true,//鏄惁楠岃瘉Issuer
+                     ValidateAudience = true,//鏄惁楠岃瘉Audience
+                     ValidateLifetime = true,//鏄惁楠岃瘉澶辨晥鏃堕棿
+                     ValidateIssuerSigningKey = true,//鏄惁楠岃瘉SecurityKey
+                     ValidAudience = AppSecret.Audience,//Audience
+                     ValidIssuer = AppSecret.Issuer,//Issuer锛岃繖涓ら」鍜屽墠闈㈢鍙慾wt鐨勮缃竴鑷�
+                     IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(AppSecret.JWT))
+                 };
+                 options.Events = new JwtBearerEvents()
+                 {
+                     OnChallenge = context =>
+                     {
+                         context.HandleResponse();
+                         context.Response.Clear();
+                         context.Response.ContentType = "application/json";
+                         context.Response.StatusCode = 401;
+                         context.Response.WriteAsync(new { message = "鎺堟潈鏈�氳繃", status = false, code = 401 }.Serialize());
+                         return Task.CompletedTask;
+                     }
+                 };
+             });
+
+            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Authorization/JwtHelper.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Authorization/JwtHelper.cs"
new file mode 100644
index 0000000..80b1ddc
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Authorization/JwtHelper.cs"
@@ -0,0 +1,121 @@
+锘縰sing Microsoft.IdentityModel.Tokens;
+using System;
+using System.Collections.Generic;
+using System.IdentityModel.Tokens.Jwt;
+using System.Linq;
+using System.Security.Claims;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.HttpContextUser;
+
+namespace WIDESEA_Core.Authorization
+{
+    public class JwtHelper
+    {
+
+        /// <summary>
+        /// 鐢熸垚JWT
+        /// </summary>
+        /// <param name="serInfo"></param>
+        /// <returns></returns>
+        public static string IssueJwt(TokenModelJwt tokenModel)
+        {
+            string exp = $"{new DateTimeOffset(DateTime.Now.AddMinutes(/*tokenModel.UserId == 1 ? 43200 : */AppSettings.Get("ExpMinutes").ObjToInt())).ToUnixTimeSeconds()}";
+            List<Claim> claims = new List<Claim>
+                {
+                    new Claim(JwtRegisteredClaimNames.Jti, tokenModel.UserId.ToString()),
+                    new Claim(JwtRegisteredClaimNames.Iat,  $"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}"),
+                    new Claim(JwtRegisteredClaimNames.Nbf, $"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}") ,
+                    //JWT杩囨湡鏃堕棿
+                    //榛樿璁剧疆jwt杩囨湡鏃堕棿120鍒嗛挓
+                    new Claim (JwtRegisteredClaimNames.Exp, exp),
+                    new Claim(JwtRegisteredClaimNames.Iss, AppSecret.Issuer),
+                    new Claim(JwtRegisteredClaimNames.Aud, AppSecret.Audience),
+                    new Claim(ClaimTypes.Role, tokenModel.RoleId.ToString()),
+                    new Claim(ClaimTypes.Name, tokenModel.UserName),
+                    new Claim(nameof(TokenModelJwt.TenantId), tokenModel.TenantId.ToString())
+               };
+
+            // 鍙互灏嗕竴涓敤鎴风殑澶氫釜瑙掕壊鍏ㄩ儴璧嬩簣锛�
+            // 浣滆�咃細DX 鎻愪緵鎶�鏈敮鎸侊紱
+            //绉橀挜16浣�
+            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(AppSecret.JWT));
+            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
+            JwtSecurityToken securityToken = new JwtSecurityToken(issuer: AppSecret.Issuer, claims: claims, signingCredentials: creds);
+            string jwt = new JwtSecurityTokenHandler().WriteToken(securityToken);
+            return jwt;
+        }
+
+        /// <summary>
+        /// 瑙f瀽
+        /// </summary>
+        /// <param name="jwtStr"></param>
+        /// <returns></returns>
+        public static UserInfo SerializeJwt(string jwtStr)
+        {
+            var jwtHandler = new JwtSecurityTokenHandler();
+            JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(jwtStr);
+            UserInfo userInfo = new UserInfo
+            {
+                UserId = Convert.ToInt32(jwtToken.Id),
+                RoleId = (jwtToken.Payload[ClaimTypes.Role] ?? 0).ObjToInt(),
+            };
+            return userInfo;
+        }
+        /// <summary>
+        /// 鑾峰彇杩囨湡鏃堕棿
+        /// </summary>
+        /// <param name="jwtStr"></param>
+        /// <returns></returns>
+        public static DateTime GetExp(string jwtStr)
+        {
+            var jwtHandler = new JwtSecurityTokenHandler();
+            JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(jwtStr);
+
+            DateTime expDate = (jwtToken.Payload[JwtRegisteredClaimNames.Exp] ?? 0).ObjToInt().GetTimeSpmpToDate();
+            return expDate;
+        }
+        public static bool IsExp(string jwtStr)
+        {
+            return GetExp(jwtStr) < DateTime.Now;
+        }
+
+        public static int GetUserId(string jwtStr)
+        {
+            try
+            {
+                if (jwtStr.IsNullOrEmpty()) return 0;
+                jwtStr = jwtStr.Replace("Bearer ", "");
+                return new JwtSecurityTokenHandler().ReadJwtToken(jwtStr).Id.ObjToInt();
+            }
+            catch
+            {
+                return 0;
+            }
+        }
+    }
+
+    /// <summary>
+    /// 浠ょ墝
+    /// </summary>
+    public class TokenModelJwt
+    {
+        /// <summary>
+        /// UserId
+        /// </summary>
+        public long UserId { get; set; }
+        /// <summary>
+        /// 瑙掕壊
+        /// </summary>
+        public int RoleId { get; set; }
+        /// <summary>
+        /// 鑱岃兘
+        /// </summary>
+        public string UserName { get; set; }
+
+        public long TenantId { get; set; }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseController/ApiBaseController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseController/ApiBaseController.cs"
new file mode 100644
index 0000000..426a86e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseController/ApiBaseController.cs"
@@ -0,0 +1,171 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.BaseServices;
+
+namespace WIDESEA_Core.BaseController
+{
+    [Authorize, ApiController]
+    public class ApiBaseController<IService, TEntity> : Controller
+    {
+        protected IService Service;
+
+        public ApiBaseController(IService service)
+        {
+            Service = service;
+        }
+
+        /// <summary>
+        /// 鍒嗛〉鑾峰彇鏁版嵁
+        /// </summary>
+        /// <param name="options"></param>
+        /// <returns></returns>
+        [HttpPost, Route("GetPageData")]
+        public virtual ActionResult GetPageData([FromBody] PageDataOptions options)
+        {
+            return Json(InvokeService("GetPageData", new object[] { options }));
+        }
+
+        /// <summary>
+        /// 鍒嗛〉鑾峰彇鏄庣粏鏁版嵁
+        /// </summary>
+        /// <param name="pageData"></param>
+        /// <returns></returns>
+        [HttpPost, Route("GetDetailPage")]
+        public virtual ActionResult GetDetailPage([FromBody] PageDataOptions pageData)
+        {
+            return Json(InvokeService("GetDetailPage", new object[] { pageData }));
+        }
+
+        /// <summary>
+        /// 娣诲姞鏁版嵁
+        /// </summary>
+        /// <param name="options"></param>
+        /// <returns></returns>
+        [HttpPost, Route("AddData")]
+        public virtual ActionResult AddData([FromBody] TEntity options)
+        {
+            return Json(InvokeService("AddData", new object[] { options }));
+        }
+
+        /// <summary>
+        /// 娣诲姞鏁版嵁
+        /// </summary>
+        /// <param name="options"></param>
+        /// <returns></returns>
+        [HttpPost, Route("Add"), MethodParamsValidate]
+        public virtual ActionResult Add([FromBody] SaveModel options)
+        {
+            return Json(InvokeService("AddData", new object[] { options }));
+        }
+
+        /// <summary>
+        /// 淇敼鏁版嵁
+        /// </summary>
+        /// <param name="options"></param>
+        /// <returns></returns>
+        [HttpPost, Route("Update"), MethodParamsValidate]
+        public virtual ActionResult Update([FromBody] SaveModel options)
+        {
+            return Json(InvokeService("UpdateData", new object[] { options }));
+        }
+
+        /// <summary>
+        /// 淇敼鏁版嵁
+        /// </summary>
+        /// <param name="options"></param>
+        /// <returns></returns>
+        [HttpPost, Route("UpdateData")]
+        public virtual ActionResult UpdateData([FromBody] TEntity options)
+        {
+            return Json(InvokeService("UpdateData", new object[] { options }));
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        [HttpPost, Route("Del")]
+        public virtual ActionResult Del([FromBody] object[] key)
+        {
+            return Json(InvokeService("DeleteData", new object[] { key }));
+        }
+
+        /// <summary>
+        /// 瀵煎嚭鏁版嵁
+        /// </summary>
+        /// <param name="loadData"></param>
+        /// <returns></returns>
+        [HttpPost, Route("Export")]
+        public virtual ActionResult Export([FromBody] PageDataOptions loadData)
+        {
+            WebResponseContent result = InvokeService("Export", new object[] { loadData }) as WebResponseContent;
+            if (result.Status)
+                return File(
+                       System.IO.File.ReadAllBytes(result.Data.ToString()),
+                       System.Net.Mime.MediaTypeNames.Application.Octet,
+                       Path.GetFileName(result.Data.ToString())
+                   );
+            return Json(result);
+        }
+
+        /// <summary>
+        /// 涓嬭浇瀵煎叆妯℃澘
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("DownLoadTemplate")]
+        public virtual ActionResult DownLoadTemplate()
+        {
+            WebResponseContent result = InvokeService("DownLoadTemplate", new object[] { }) as WebResponseContent;
+            if (result.Status)
+                return File(
+                       System.IO.File.ReadAllBytes(result.Data.ToString()),
+                       System.Net.Mime.MediaTypeNames.Application.Octet,
+                       Path.GetFileName(result.Data.ToString())
+                   );
+            return Json(result);
+        }
+
+        /// <summary>
+        /// 瀵煎叆鏁版嵁
+        /// </summary>
+        /// <param name="fileInput"></param>
+        /// <returns></returns>
+        [HttpPost, Route("Import")]
+        public virtual ActionResult Import(List<IFormFile> fileInput)
+        {
+            return Json(InvokeService("Import", new object[] { fileInput }));
+        }
+
+        /// <summary>
+        /// 瀵煎嚭绉嶅瓙鏁版嵁
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost, Route("ExportSeedData"), AllowAnonymous]
+        public ActionResult ExportSeedData()
+        {
+            return Json(InvokeService("ExportSeedData", new object[] { }));
+        }
+
+        private object InvokeService(string methodName, object[] parameters)
+        {
+            Type t = Service.GetType();
+            List<Type> types = new List<Type>();
+            foreach (var param in parameters)
+            {
+                types.Add(param.GetType());
+            }
+            MethodInfo method = t.GetMethod(methodName, types.ToArray());
+            return method.Invoke(Service, parameters);
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageDataOptions.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageDataOptions.cs"
new file mode 100644
index 0000000..1fff57b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageDataOptions.cs"
@@ -0,0 +1,153 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Utilities;
+
+namespace WIDESEA_Core
+{
+    public class PageDataOptions
+    {
+        public int Page { get; set; }
+        public int Rows { get; set; }
+        public int Total { get; set; }
+        public string TableName { get; set; }
+        public string Sort { get; set; }
+        /// <summary>
+        /// 鎺掑簭鏂瑰紡
+        /// </summary>
+        public string Order { get; set; }
+        public string Wheres { get; set; }
+        public bool Export { get; set; }
+        public object Value { get; set; }
+        /// <summary>
+        /// 鏌ヨ鏉′欢
+        /// </summary>
+        public List<SearchParameters> Filter { get; set; }
+
+
+
+        public string ValidatePageOptions(PropertyInfo[] entityProperties)
+        {
+            string where = string.Empty;
+            List<SearchParameters> searchParametersList = new List<SearchParameters>();
+            if (this.Filter != null && this.Filter.Count > 0)
+            {
+                searchParametersList.AddRange(Filter);
+            }
+            else if (!string.IsNullOrEmpty(Wheres))
+            {
+                try
+                {
+                    searchParametersList = Wheres.DeserializeObject<List<SearchParameters>>();
+                    Filter = searchParametersList;
+                }
+                catch { }
+            }
+            for (int i = 0; i < searchParametersList.Count; i++)
+            {
+                if (string.IsNullOrEmpty(searchParametersList[i].Value))
+                {
+                    continue;
+                }
+
+                PropertyInfo? property = entityProperties.Where(c => c.Name.ToUpper() == searchParametersList[i].Name.ToUpper()).FirstOrDefault();
+
+                if (property == null) continue;
+
+                List<(bool, string, object)> results = property.ValidationValueForDbType(searchParametersList[i].Value.Split(',')).ToList();
+                if (results == null || results.Count() == 0)
+                {
+                    continue;
+                }
+                for (int j = 0; j < results.Count(); j++)
+                {
+                    if (j == 0)
+                    {
+                        where += "(";
+                    }
+                    LinqExpressionType expressionType = searchParametersList[i].DisplayType.GetLinqCondition();
+                    if (expressionType == LinqExpressionType.Equal)
+                    {
+                        where += $"{searchParametersList[i].Name} {HtmlElementType.Equal} '{results[j].Item3}'";
+                    }
+                    else if (expressionType == LinqExpressionType.ThanOrEqual)
+                    {
+                        where += $"{searchParametersList[i].Name} {HtmlElementType.ThanOrEqual} '{searchParametersList[i].Value}'";
+                    }
+                    else if (expressionType == LinqExpressionType.LessThanOrEqual)
+                    {
+                        where += $"{searchParametersList[i].Name} {HtmlElementType.LessOrequal} '{searchParametersList[i].Value}'";
+                    }
+                    else if (expressionType == LinqExpressionType.GreaterThan)
+                    {
+                        where += $"{searchParametersList[i].Name} {HtmlElementType.GT} '{searchParametersList[i].Value}'";
+                    }
+                    else if (expressionType == LinqExpressionType.LessThan)
+                    {
+                        where += $"{searchParametersList[i].Name} {HtmlElementType.LT} '{searchParametersList[i].Value}'";
+                    }
+                    else if (expressionType == LinqExpressionType.Contains)
+                    {
+                        where += $"{searchParametersList[i].Name} {HtmlElementType.like} '%{searchParametersList[i].Value}%'";
+                    }
+                    else
+                    {
+                        where += $"{searchParametersList[i].Name} {searchParametersList[i].DisplayType} '{results[j].Item3}'";
+                    }
+
+                    if (j == results.Count() - 1)
+                    {
+                        where += ")";
+                    }
+                    else
+                    {
+                        where += " or ";
+                    }
+                }
+                if (i < searchParametersList.Count - 1)
+                    where += " and ";
+            }
+            return where;
+        }
+
+
+        public Dictionary<string, OrderByType> GetPageDataSort(PropertyInfo[] propertyInfo)
+        {
+            if (!string.IsNullOrEmpty(Sort))
+            {
+                if (Sort.Contains(","))
+                {
+                    List<string> sortArr = Sort.Split(",").Where(x => propertyInfo.Any(p => p.Name == x)).ToList();
+                    Dictionary<string, OrderByType> sortDic = new Dictionary<string, OrderByType>();
+                    foreach (var item in sortArr)
+                    {
+                        sortDic[item] = Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc;
+                    }
+                    return sortDic;
+                }
+                else if (propertyInfo.Any(x => x.Name == Sort.FirstLetterToLower() || x.Name == Sort.FirstLetterToUpper()))
+                {
+                    return new Dictionary<string, OrderByType> {
+                        {
+                            Sort,Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc
+                        } };
+                }
+            }
+            return new Dictionary<string, OrderByType> { { "CreateDate", Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc } };
+        }
+    }
+    public class SearchParameters
+    {
+        public string Name { get; set; }
+        public string Value { get; set; }
+        //鏌ヨ绫诲瀷锛歀inqExpressionType
+        public string DisplayType { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageGridData.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageGridData.cs"
new file mode 100644
index 0000000..7ad6817
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageGridData.cs"
@@ -0,0 +1,26 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core
+{
+    public class PageGridData<T>
+    {
+        public int Total { get; set; }
+        public List<T> Rows { get; set; }
+        public object Summary { get; set; }
+
+        public PageGridData()
+        {
+
+        }
+
+        public PageGridData(int total, List<T> rows)
+        {
+            Total = total;
+            Rows = rows;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/Permissions.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/Permissions.cs"
new file mode 100644
index 0000000..e8c006b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/Permissions.cs"
@@ -0,0 +1,27 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core
+{
+    public class Permissions
+    {
+        public int MenuId { get; set; }
+        public int ParentId { get; set; }
+        public string TableName { get; set; }
+        public string MenuAuth { get; set; }
+        public string UserAuth { get; set; }
+        /// <summary>
+        /// 褰撳墠鐢ㄦ埛鏉冮檺,瀛樺偍鐨勬槸鏉冮檺鐨勫�硷紝濡�:Add,Search绛�
+        /// </summary>
+        public string[] UserAuthArr { get; set; }
+
+        /// <summary>
+        /// 2022.03.26
+        /// 鑿滃崟绫诲瀷1:绉诲姩绔紝0:PC绔�
+        /// </summary>
+        public int MenuType { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/SaveModel.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/SaveModel.cs"
new file mode 100644
index 0000000..f103ccf
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/SaveModel.cs"
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core
+{
+    public class SaveModel
+    {
+        public Dictionary<string, object> MainData { get; set; }
+        public List<Dictionary<string, object>> DetailData { get; set; }
+        public List<object> DelKeys { get; set; }
+
+        /// <summary>
+        /// 浠庡墠鍙颁紶鍏ョ殑鍏朵粬鍙傛暟(鑷畾涔夋墿灞曞彲浠ヤ娇鐢�)
+        /// </summary>
+        public object Extra { get; set; }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/WebResponseContent.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/WebResponseContent.cs"
new file mode 100644
index 0000000..66feb1b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/WebResponseContent.cs"
@@ -0,0 +1,53 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core
+{
+    public class WebResponseContent
+    {
+        public WebResponseContent()
+        {
+        }
+        public WebResponseContent(bool status)
+        {
+            Status = status;
+        }
+        public bool Status { get; set; }
+
+        public int Code { get; set; }
+
+        public string Message { get; set; }
+
+        public object Data { get; set; }
+
+        public string DevMessage { get; set; }
+
+        public WebResponseContent OK()
+        {
+            Status = true;
+            return this;
+        }
+
+        public static WebResponseContent Instance
+        {
+            get { return new WebResponseContent(); }
+        }
+        public WebResponseContent OK(string message = null, object data = null)
+        {
+            Status = true;
+            Message = message;
+            Data = data;
+            return this;
+        }
+
+        public WebResponseContent Error(string message = null)
+        {
+            Status = false;
+            Message = message;
+            return this;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs"
new file mode 100644
index 0000000..c22ec14
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs"
@@ -0,0 +1,432 @@
+锘縰sing Microsoft.Data.SqlClient;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Enums;
+
+namespace WIDESEA_Core.BaseRepository
+{
+    public interface IRepository<TEntity> : IDependency where TEntity : class, new()
+    {
+        /// <summary>
+        /// SqlsugarClient瀹炰綋
+        /// </summary>
+        ISqlSugarClient Db { get; }
+        /// <summary>
+        /// 閫氳繃涓婚敭鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="id">涓婚敭</param>
+        /// <returns>鏌ヨ缁撴灉</returns>
+        TEntity QureyDataById(object id);
+
+        Task<TEntity> QureyDataByIdAsync(object id);
+
+        /// <summary>
+        /// 閫氳繃涓婚敭鏁扮粍鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="lstIds">涓婚敭鏁扮粍</param>
+        /// <returns>鏌ヨ缁撴灉闆嗗悎</returns>
+        List<TEntity> QureyDataByIds(object[] lstIds);
+
+        Task<List<TEntity>> QureyDataByIdsAsync(object[] lstIds);
+
+        /// <summary>
+        /// 閫氳繃涓婚敭闆嗗悎鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="lstIds">涓婚敭闆嗗悎</param>
+        /// <returns>鏌ヨ缁撴灉闆嗗悎</returns>
+        List<TEntity> QureyDataByIds(List<object> lstIds);
+
+        Task<List<TEntity>> QureyDataByIdsAsync(List<object> lstIds);
+
+        /// <summary>
+        /// 娣诲姞鍗曟潯鏁版嵁
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns>褰卞搷琛屾暟</returns>
+        int AddData(TEntity entity);
+
+        bool AddData<TChild>(TEntity entity, Expression<Func<TEntity, List<TChild>>> expression) where TChild : class, new();
+
+        Task<int> AddDataAsync(TEntity entity);
+
+        /// <summary>
+        /// 娣诲姞澶氭潯鏁版嵁
+        /// </summary>
+        /// <param name="listEntity"></param>
+        /// <returns>褰卞搷琛屾暟</returns>
+        int AddData(List<TEntity> listEntity);
+
+        Task<int> AddDataAsync(List<TEntity> listEntity);
+
+        /// <summary>
+        /// 閫氳繃涓婚敭鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="id">涓婚敭</param>
+        /// <returns>鍒犻櫎缁撴灉</returns>
+        bool DeleteDataById(object id);
+
+        Task<bool> DeleteDataByIdAsync(object id);
+
+        bool DeleteAndMoveIntoHty(TEntity entity, OperateTypeEnum operateType);
+
+        bool DeleteAndMoveIntoHty(List<TEntity> entities, OperateTypeEnum operateType);
+
+        /// <summary>
+        /// 閫氳繃涓婚敭鏁版嵁鍒犻櫎澶氭潯鏁版嵁
+        /// </summary>
+        /// <param name="ids">涓婚敭鏁扮粍</param>
+        /// <returns>鍒犻櫎缁撴灉</returns>
+        bool DeleteDataByIds(object[] ids);
+
+        Task<bool> DeleteDataByIdsAsync(object[] ids);
+
+        /// <summary>
+        /// 閫氳繃瀹炰綋鏁版嵁鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="ids">涓婚敭鏁扮粍</param>
+        /// <returns>鍒犻櫎缁撴灉</returns>
+        bool DeleteData(TEntity entity);
+
+        Task<bool> DeleteDataAsync(TEntity entity);
+
+        /// <summary>
+        /// 閫氳繃瀹炰綋闆嗗悎鏁版嵁鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="ids">涓婚敭鏁扮粍</param>
+        /// <returns>鍒犻櫎缁撴灉</returns>
+        bool DeleteData(List<TEntity> listEntity);
+
+        Task<bool> DeleteDataAsync(List<TEntity> listEntity);
+
+        /// <summary>
+        /// 鏇存柊鍗曟潯鏁版嵁
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        bool UpdateData(TEntity entity);
+
+        Task<bool> UpdateDataAsync(TEntity entity);
+
+        /// <summary>
+        /// 鏇存柊澶氭潯鏁版嵁
+        /// </summary>
+        /// <param name="listEntity"></param>
+        /// <returns></returns>
+        bool UpdateData(List<TEntity> listEntity);
+
+        Task<bool> UpdateDataAsync(List<TEntity> listEntity);
+
+        /// <summary>
+        /// 鎸囧畾鍒楁洿鏂版暟鎹�
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <param name="lstColumns"></param>
+        /// <param name="lstIgnoreColumns"></param>
+        /// <returns></returns>
+        bool UpdateData(TEntity entity, List<string> lstColumns, List<string>? lstIgnoreColumns = null);
+
+        Task<bool> UpdateDataAsync(TEntity entity, List<string> lstColumns, List<string>? lstIgnoreColumns = null);
+
+        /// <summary>
+        /// 鏌ヨ鎵�鏈夋暟鎹�
+        /// </summary>
+        /// <returns></returns>
+        List<TEntity> QueryData();
+
+        Task<List<TEntity>> QueryDataAsync();
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="where"></param>
+        /// <returns></returns>
+        List<TEntity> QueryData(string where);
+
+        Task<List<TEntity>> QueryDataAsync(string where);
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <returns></returns>
+        List<TEntity> QueryData(Expression<Func<TEntity, bool>> whereExpression);
+
+        Task<List<TEntity>> QueryDataAsync(Expression<Func<TEntity, bool>> whereExpression);
+
+        TEntity QueryFirst(Expression<Func<TEntity, bool>> whereExpression);
+
+        Task<TEntity> QueryFirstAsync(Expression<Func<TEntity, bool>> whereExpression);
+
+        TResult QueryFirst<TResult>(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, TResult>> expression);
+
+        Task<TResult> QueryFirstAsync<TResult>(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, TResult>> expression);
+
+        TResult QueryFirst<TResult>(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, TResult>> expression, Dictionary<string, OrderByType> orderBy);
+
+        Task<TResult> QueryFirstAsync<TResult>(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, TResult>> expression, Dictionary<string, OrderByType> orderBy);
+
+        TEntity QueryFirst(Expression<Func<TEntity, bool>> whereExpression, Dictionary<string, OrderByType> orderBy);
+
+        Task<TEntity> QueryFirstAsync(Expression<Func<TEntity, bool>> whereExpression, Dictionary<string, OrderByType> orderBy);
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁骞舵帓搴�
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        List<TEntity> QueryData(Expression<Func<TEntity, bool>> whereExpression, Dictionary<string, OrderByType> orderBy);
+
+        Task<List<TEntity>> QueryDataAsync(Expression<Func<TEntity, bool>> whereExpression, string orderByFields);
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁骞舵帓搴�
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="where"></param>
+        /// <returns></returns>
+        List<TEntity> QueryData(string where, Dictionary<string, OrderByType> orderBy);
+
+        Task<List<TEntity>> QueryDataAsync(string where, Dictionary<string, OrderByType> orderBy);
+
+        /// <summary>
+        /// 鏌ヨ鎸囧畾鏁版嵁瀵硅薄
+        /// </summary>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="expression"></param>
+        /// <returns></returns>
+        List<TResult> QueryData<TResult>(Expression<Func<TEntity, TResult>> expression);
+
+        Task<List<TResult>> QueryDataAsync<TResult>(Expression<Func<TEntity, TResult>> expression);
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鎸囧畾鏁版嵁瀵硅薄
+        /// </summary>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="expression"></param>
+        /// <param name="whereExpression"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        List<TResult> QueryData<TResult>(Expression<Func<TEntity, TResult>> expression, Expression<Func<TEntity, bool>> whereExpression, string orderByFields = "");
+
+        Task<List<TResult>> QueryDataAsync<TResult>(Expression<Func<TEntity, TResult>> expression, Expression<Func<TEntity, bool>> whereExpression, string orderByFields);
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁骞舵帓搴�
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="orderByExpression"></param>
+        /// <param name="isAsc"></param>
+        /// <returns></returns>
+        List<TEntity> QueryData(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderByExpression, bool isAsc = true);
+
+        Task<List<TEntity>> QueryDataAsync(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderByExpression, bool isAsc = true);
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁骞舵帓搴�
+        /// </summary>
+        /// <param name="where"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        List<TEntity> QueryData(string where, string orderByFields);
+
+        Task<List<TEntity>> QueryDataAsync(string where, string orderByFields);
+
+        /// <summary>
+        /// 鍘熺敓Sql璇彞鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        List<TEntity> QueryDataBySql(string sql, SugarParameter[]? parameters = null);
+
+        Task<List<TEntity>> QueryDataBySqlAsync(string sql, SugarParameter[]? parameters = null);
+
+        /// <summary>
+        /// 鍘熺敓Sql璇彞鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        List<dynamic> QueryDynamicDataBySql(string sql, SugarParameter[]? parameters = null);
+
+        Task<List<dynamic>> QueryDynamicDataBySqlAsync(string sql, SugarParameter[]? parameters = null);
+
+        List<object> QueryObjectDataBySql(string sql, SugarParameter[]? parameters = null);
+
+        Task<List<object>> QueryObjectDataBySqlAsync(string sql, SugarParameter[]? parameters = null);
+
+        /// <summary>
+        /// 鍘熺敓Sql璇彞鎵ц鎿嶄綔
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="sqlParameters"></param>
+        /// <returns></returns>
+        int ExecuteSqlCommand(string sql, params SqlParameter[] sqlParameters);
+
+        Task<int> ExecuteSqlCommandAsync(string sql, params SqlParameter[] sqlParameters);
+
+        /// <summary>
+        /// 鍘熺敓Sql璇彞鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        DataTable QueryTable(string sql, SugarParameter[]? parameters = null);
+
+        Task<DataTable> QueryTableAsync(string sql, SugarParameter[]? parameters = null);
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁鎸囧畾鏁伴噺鐨勮
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="top"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        List<TEntity> QueryData(Expression<Func<TEntity, bool>> whereExpression, int top, string orderByFields);
+
+        Task<List<TEntity>> QueryDataAsync(Expression<Func<TEntity, bool>> whereExpression, int top, string orderByFields);
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鎸囧畾鏁伴噺鐨勮
+        /// </summary>
+        /// <param name="where"></param>
+        /// <param name="top"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        List<TEntity> QueryData(string where, int top, string orderByFields);
+
+        Task<List<TEntity>> QueryDataAsync(string where, int top, string orderByFields);
+
+        /// <summary>
+        /// 鍒嗛〉鏌ヨ
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        List<TEntity> QueryData(Expression<Func<TEntity, bool>> whereExpression, int pageIndex, int pageSize, string orderByFields);
+
+        Task<List<TEntity>> QueryDataAsync(Expression<Func<TEntity, bool>> whereExpression, int pageIndex, int pageSize, string orderByFields);
+
+        /// <summary>
+        /// 鍒嗛〉鏌ヨ
+        /// </summary>
+        /// <param name="where"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        List<TEntity> QueryData(string where, int pageIndex, int pageSize, string orderByFields);
+
+        Task<List<TEntity>> QueryDataAsync(string where, int pageIndex, int pageSize, string orderByFields);
+
+        /// <summary>
+        /// 鍒嗛〉鏌ヨ
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        PageGridData<TEntity> QueryPage(Expression<Func<TEntity, bool>> whereExpression, int pageIndex, int pageSize, string? orderByFields = null);
+
+        /// <summary>
+        /// 鍒嗛〉鏌ヨ
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pagesize"></param>
+        /// <param name="orderBy"></param>
+        /// <returns></returns>
+        PageGridData<TEntity> QueryPage(Expression<Func<TEntity, bool>> whereExpression, int pageIndex, int pagesize, Dictionary<string, OrderByType> orderBy);
+
+        PageGridData<TEntity> QueryPage(string where, int pageIndex, int pageSize, Dictionary<string, OrderByType> orderBy);
+
+        /// <summary>
+        /// 涓よ〃鑱旀煡
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="T2"></typeparam>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="joinExpression"></param>
+        /// <param name="selectExpression"></param>
+        /// <param name="whereExpression"></param>
+        /// <returns></returns>
+        List<TResult> QueryTabs<T, T2, TResult>(
+            Expression<Func<T, T2, object[]>> joinExpression,
+            Expression<Func<T, T2, TResult>> selectExpression,
+           Expression<Func<T, T2, bool>> whereExpressionT1,
+            Expression<Func<TResult, bool>> whereExpression);
+
+        List<TResult> QueryTabs<T, T2, TResult>(
+         Expression<Func<T, T2, bool>> joinExpression,
+         Expression<Func<T, T2, TResult>> selectExpression,
+         Expression<Func<T, bool>> whereExpressionT1,
+         Expression<Func<T2, bool>> whereExpressionT2,
+         Expression<Func<TResult, bool>> whereExpression);
+
+
+        Task<List<TResult>> QueryTabsAsync<T, T2, TResult>(
+            Expression<Func<T, T2, object[]>> joinExpression,
+            Expression<Func<T, T2, TResult>> selectExpression,
+            Expression<Func<TResult, bool>> whereExpression);
+
+        /// <summary>
+        /// 涓よ〃鑱旀煡-鍒嗛〉
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="T2"></typeparam>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="joinExpression"></param>
+        /// <param name="selectExpression"></param>
+        /// <param name="whereExpression"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        PageGridData<TResult> QueryTabsPage<T, T2, TResult>(
+            Expression<Func<T, T2, object[]>> joinExpression,
+            Expression<Func<T, T2, TResult>> selectExpression,
+            Expression<Func<TResult, bool>> whereExpression,
+            int pageIndex = 1,
+            int pageSize = 20,
+            string? orderByFields = null);
+
+        /// <summary>
+        /// 涓よ〃鑱斿悎鏌ヨ-鍒嗛〉-鍒嗙粍
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="T2"></typeparam>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="joinExpression"></param>
+        /// <param name="selectExpression"></param>
+        /// <param name="whereExpression"></param>
+        /// <param name="groupExpression"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        PageGridData<TResult> QueryTabsPage<T, T2, TResult>(
+            Expression<Func<T, T2, object[]>> joinExpression,
+            Expression<Func<T, T2, TResult>> selectExpression,
+            Expression<Func<TResult, bool>> whereExpression,
+            Expression<Func<T, object>> groupExpression,
+            int pageIndex = 1,
+            int pageSize = 20,
+            string? orderByFields = null);
+
+        //List<TResult> QueryMuch<T, T2, T3, TResult>(
+        //    Expression<Func<T, T2, T3, object[]>> joinExpression,
+        //    Expression<Func<T, T2, T3, TResult>> selectExpression,
+        //    Expression<Func<T, T2, T3, bool>> whereLambda = null) where T : class, new();
+        //Task<PageModel<TEntity>> QueryPage(PaginationModel pagination);
+    }
+}
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
new file mode 100644
index 0000000..41c5bd7
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
@@ -0,0 +1,977 @@
+锘縰sing SqlSugar;
+using System.Data;
+using System.Linq.Expressions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Reflection;
+using WIDESEA_Core.Helper;
+using Microsoft.Data.SqlClient;
+using System.Drawing.Printing;
+using WIDESEA_Core.Tenants;
+using WIDESEA_Core.Seed;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.AOP;
+using OfficeOpenXml.FormulaParsing.ExpressionGraph;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Utilities;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using NetTaste;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Core.BaseRepository
+{
+    public class RepositoryBase<TEntity> : IRepository<TEntity> where TEntity : class, new()
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly SqlSugarClient _dbBase;
+
+        private ISqlSugarClient _db
+        {
+            get
+            {
+                ISqlSugarClient db = _dbBase;
+
+                //澶氱鎴�
+                //var mta = typeof(TEntity).GetCustomAttribute<MultiTenantAttribute>();
+                //if (mta is { TenantType: TenantTypeEnum.Db })
+                //{
+                //    //鑾峰彇绉熸埛淇℃伅 绉熸埛淇℃伅鍙互鎻愬墠缂撳瓨涓嬫潵 
+                //    if (App.User is { TenantId: > 0 })
+                //    {
+                //        dynamic tenant = db.Queryable(MainDb.TenantTableName, "x").Where(MainDb.TenantId, "=", App.User.TenantId).First();
+                //        if (tenant != null)
+                //        {
+                //            var iTenant = db.AsTenant();
+                //            if (!iTenant.IsAnyConnection(tenant.TenantId))
+                //            {
+                //                string conStr = tenant.ConnectionString;
+                //                ConnectionConfig connectionConfig = new ConnectionConfig()
+                //                {
+                //                    ConfigId = tenant.TenantId,
+                //                    ConnectionString = conStr.DecryptDES(AppSecret.DB),
+                //                    DbType = (SqlSugar.DbType)tenant.DbType,
+                //                    IsAutoCloseConnection = true,
+                //                    AopEvents = new AopEvents()
+                //                    {
+                //                        DataExecuting = SqlSugarAop.DataExecuting,
+
+                //                    }
+                //                };
+                //                iTenant.AddConnection(connectionConfig);
+                //            }
+
+                //            return iTenant.GetConnection(tenant.TenantId);
+                //        }
+                //    }
+                //}
+
+                return db;
+            }
+        }
+        /// <summary>
+        /// 鍒涘缓鏁版嵁搴撹繛鎺ュ璞�
+        /// </summary>
+        public ISqlSugarClient Db => _db;
+
+        public RepositoryBase(IUnitOfWorkManage unitOfWorkManage)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+            _dbBase = unitOfWorkManage.GetDbClient();
+        }
+
+        /// <summary>
+        /// 閫氳繃涓婚敭鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="id">涓婚敭</param>
+        /// <returns>鏌ヨ缁撴灉</returns>
+        public virtual TEntity QureyDataById(object id)
+        {
+            return _db.Queryable<TEntity>().In(id).Single();
+        }
+
+        /// <summary>
+        /// 閫氳繃涓婚敭鏁扮粍鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="lstIds">涓婚敭鏁扮粍</param>
+        /// <returns>鏌ヨ缁撴灉闆嗗悎</returns>
+        public virtual List<TEntity> QureyDataByIds(object[] lstIds)
+        {
+            return _db.Queryable<TEntity>().In(lstIds).ToList();
+        }
+
+        /// <summary>
+        /// 閫氳繃涓婚敭闆嗗悎鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="lstIds">涓婚敭闆嗗悎</param>
+        /// <returns>鏌ヨ缁撴灉闆嗗悎</returns>
+        public virtual List<TEntity> QureyDataByIds(List<object> lstIds)
+        {
+            return _db.Queryable<TEntity>().In(lstIds).ToList();
+        }
+
+        /// <summary>
+        /// 娣诲姞鍗曟潯鏁版嵁
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns>褰卞搷琛屾暟</returns>
+        public virtual int AddData(TEntity entity)
+        {
+            IInsertable<TEntity> insert = _db.Insertable(entity);
+            return insert.ExecuteReturnIdentity();
+        }
+
+        public virtual bool AddData<TChild>(TEntity entity, Expression<Func<TEntity, List<TChild>>> expression) where TChild : class, new()
+        {
+            return _db.InsertNav(entity).Include(expression).ExecuteCommand();
+        }
+
+        /// <summary>
+        /// 娣诲姞澶氭潯鏁版嵁
+        /// </summary>
+        /// <param name="listEntity"></param>
+        /// <returns>褰卞搷琛屾暟</returns>
+        public virtual int AddData(List<TEntity> listEntity)
+        {
+            IInsertable<TEntity> insert = _db.Insertable(listEntity);
+            return insert.ExecuteCommand();
+        }
+
+        /// <summary>
+        /// 閫氳繃涓婚敭鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="id">涓婚敭</param>
+        /// <returns>鍒犻櫎缁撴灉</returns>
+        public virtual bool DeleteDataById(object id)
+        {
+            return _db.Deleteable<TEntity>().In(id).ExecuteCommandHasChange();
+        }
+
+        /// <summary>
+        /// 閫氳繃涓婚敭鏁版嵁鍒犻櫎澶氭潯鏁版嵁
+        /// </summary>
+        /// <param name="ids">涓婚敭鏁扮粍</param>
+        /// <returns>鍒犻櫎缁撴灉</returns>
+        public virtual bool DeleteDataByIds(object[] ids)
+        {
+            return _db.Deleteable<TEntity>().In(ids).ExecuteCommandHasChange();
+        }
+
+        /// <summary>
+        /// 閫氳繃瀹炰綋鏁版嵁鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="ids">涓婚敭鏁扮粍</param>
+        /// <returns>鍒犻櫎缁撴灉</returns>
+        public virtual bool DeleteData(TEntity entity)
+        {
+            return _db.Deleteable(entity).ExecuteCommandHasChange();
+        }
+
+        /// <summary>
+        /// 閫氳繃瀹炰綋闆嗗悎鏁版嵁鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="ids">涓婚敭鏁扮粍</param>
+        /// <returns>鍒犻櫎缁撴灉</returns>
+        public virtual bool DeleteData(List<TEntity> listEntity)
+        {
+            return _db.Deleteable(listEntity).ExecuteCommandHasChange();
+        }
+
+        /// <summary>
+        /// 鏇存柊鍗曟潯鏁版嵁
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        public virtual bool UpdateData(TEntity entity)
+        {
+            return _db.Updateable(entity).ExecuteCommandHasChange();
+        }
+
+        /// <summary>
+        /// 鏇存柊澶氭潯鏁版嵁
+        /// </summary>
+        /// <param name="listEntity"></param>
+        /// <returns></returns>
+        public virtual bool UpdateData(List<TEntity> listEntity)
+        {
+            return _db.Updateable(listEntity).ExecuteCommandHasChange();
+        }
+
+        /// <summary>
+        /// 鎸囧畾鍒楁洿鏂版暟鎹�
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <param name="lstColumns"></param>
+        /// <param name="lstIgnoreColumns"></param>
+        /// <returns></returns>
+        public virtual bool UpdateData(TEntity entity, List<string> lstColumns, List<string>? lstIgnoreColumns = null)
+        {
+            IUpdateable<TEntity> update = _db.Updateable(entity);
+
+            if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0)
+            {
+                update = update.IgnoreColumns(lstIgnoreColumns.ToArray());
+            }
+
+            if (lstColumns != null && lstColumns.Count > 0)
+            {
+                update = update.UpdateColumns(lstColumns.ToArray());
+            }
+
+            return update.ExecuteCommandHasChange();
+        }
+
+        /// <summary>
+        /// 鏌ヨ鎵�鏈夋暟鎹�
+        /// </summary>
+        /// <returns></returns>
+        public virtual List<TEntity> QueryData()
+        {
+            return _db.Queryable<TEntity>().ToList();
+        }
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="where"></param>
+        /// <returns></returns>
+        public virtual List<TEntity> QueryData(string where)
+        {
+            return _db.Queryable<TEntity>().WhereIF(!string.IsNullOrEmpty(where), where).ToList();
+        }
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <returns></returns>
+        public virtual List<TEntity> QueryData(Expression<Func<TEntity, bool>> whereExpression)
+        {
+            return _db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).ToList();
+        }
+
+        public virtual TEntity QueryFirst(Expression<Func<TEntity, bool>> whereExpression)
+        {
+            return _db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).First();
+        }
+
+        public virtual TResult QueryFirst<TResult>(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, TResult>> expression)
+        {
+            return _db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).Select(expression).First();
+        }
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁骞舵帓搴�
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        public virtual List<TEntity> QueryData(Expression<Func<TEntity, bool>> whereExpression, Dictionary<string, OrderByType> orderBy)
+        {
+            List<OrderByModel> orderByModels = new List<OrderByModel>();
+            foreach (var item in orderBy)
+            {
+                OrderByModel orderByModel = new OrderByModel()
+                {
+                    FieldName = item.Key,
+                    OrderByType = item.Value
+                };
+                orderByModels.Add(orderByModel);
+            }
+            return _db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).OrderBy(orderByModels).ToList();
+        }
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁骞舵帓搴�
+        /// </summary>
+        /// <param name="where"></param>
+        /// <param name="orderBy"></param>
+        /// <returns></returns>
+        public virtual List<TEntity> QueryData(string where, Dictionary<string, OrderByType> orderBy)
+        {
+            List<OrderByModel> orderByModels = new List<OrderByModel>();
+            foreach (var item in orderBy)
+            {
+                OrderByModel orderByModel = new OrderByModel()
+                {
+                    FieldName = item.Key,
+                    OrderByType = item.Value
+                };
+                orderByModels.Add(orderByModel);
+            }
+            return _db.Queryable<TEntity>().WhereIF(!string.IsNullOrEmpty(where), where).OrderBy(orderByModels).ToList();
+        }
+
+        /// <summary>
+        /// 鏌ヨ鎸囧畾鏁版嵁瀵硅薄
+        /// </summary>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="expression"></param>
+        /// <returns></returns>
+        public virtual List<TResult> QueryData<TResult>(Expression<Func<TEntity, TResult>> expression)
+        {
+            return _db.Queryable<TEntity>().Select(expression).ToList();
+        }
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鎸囧畾鏁版嵁瀵硅薄
+        /// </summary>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="expression"></param>
+        /// <param name="whereExpression"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        public virtual List<TResult> QueryData<TResult>(Expression<Func<TEntity, TResult>> expression, Expression<Func<TEntity, bool>> whereExpression, string orderByFields = "")
+        {
+            return _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(whereExpression != null, whereExpression).Select(expression).ToList();
+        }
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁骞舵帓搴�
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="orderByExpression"></param>
+        /// <param name="isAsc"></param>
+        /// <returns></returns>
+        public virtual List<TEntity> QueryData(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderByExpression, bool isAsc = true)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(orderByExpression != null, orderByExpression, isAsc ? OrderByType.Asc : OrderByType.Desc).WhereIF(whereExpression != null, whereExpression).ToList();
+        }
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁骞舵帓搴�
+        /// </summary>
+        /// <param name="where"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        public virtual List<TEntity> QueryData(string where, string orderByFields)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(!string.IsNullOrEmpty(where), where).ToList();
+        }
+
+        /// <summary>
+        /// 鍘熺敓Sql璇彞鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        public virtual List<TEntity> QueryDataBySql(string sql, SugarParameter[]? parameters = null)
+        {
+            return _db.Ado.SqlQuery<TEntity>(sql, parameters);
+        }
+
+        /// <summary>
+        /// 鍘熺敓Sql璇彞鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        public virtual List<dynamic> QueryDynamicDataBySql(string sql, SugarParameter[]? parameters = null)
+        {
+            return _db.Ado.SqlQuery<dynamic>(sql, parameters);
+        }
+
+        /// <summary>
+        /// 鍘熺敓Sql璇彞鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        public virtual List<object> QueryObjectDataBySql(string sql, SugarParameter[]? parameters = null)
+        {
+            return _db.Ado.SqlQuery<object>(sql, parameters);
+        }
+
+        /// <summary>
+        /// 鍘熺敓Sql璇彞鎵ц鎿嶄綔
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="sqlParameters"></param>
+        /// <returns></returns>
+        public virtual int ExecuteSqlCommand(string sql, params SqlParameter[] sqlParameters)
+        {
+            return _db.Ado.ExecuteCommand(sql, sqlParameters);
+        }
+
+        /// <summary>
+        /// 鍘熺敓Sql璇彞鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        public virtual DataTable QueryTable(string sql, SugarParameter[]? parameters = null)
+        {
+            return _db.Ado.GetDataTable(sql, parameters);
+        }
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鏁版嵁鎸囧畾鏁伴噺鐨勮
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="top"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        public virtual List<TEntity> QueryData(Expression<Func<TEntity, bool>> whereExpression, int top, string orderByFields)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(whereExpression != null, whereExpression).Take(top).ToList();
+        }
+
+        /// <summary>
+        /// 鏉′欢鏌ヨ鎸囧畾鏁伴噺鐨勮
+        /// </summary>
+        /// <param name="where"></param>
+        /// <param name="top"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        public virtual List<TEntity> QueryData(string where, int top, string orderByFields)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(!string.IsNullOrEmpty(where), where).Take(top).ToList();
+        }
+
+        /// <summary>
+        /// 鍒嗛〉鏌ヨ
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        public virtual List<TEntity> QueryData(Expression<Func<TEntity, bool>> whereExpression, int pageIndex, int pageSize, string orderByFields)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields)
+               .WhereIF(whereExpression != null, whereExpression).ToPageList(pageIndex, pageSize);
+        }
+
+        /// <summary>
+        /// 鍒嗛〉鏌ヨ
+        /// </summary>
+        /// <param name="where"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        public virtual List<TEntity> QueryData(string where, int pageIndex, int pageSize, string orderByFields)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields)
+                .WhereIF(!string.IsNullOrEmpty(where), where).ToPageList(pageIndex, pageSize);
+        }
+
+        /// <summary>
+        /// 鍒嗛〉鏌ヨ
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        public virtual PageGridData<TEntity> QueryPage(Expression<Func<TEntity, bool>> whereExpression, int pageIndex, int pageSize, string? orderByFields = null)
+        {
+            int totalCount = 0;
+            var list = _db.Queryable<TEntity>()
+                .OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields)
+                .WhereIF(whereExpression != null, whereExpression)
+                .ToPageList(pageIndex, pageSize, ref totalCount);
+
+            return new PageGridData<TEntity> { Rows = list, Total = totalCount };
+        }
+
+        /// <summary>
+        /// 鍒嗛〉鏌ヨ
+        /// </summary>
+        /// <param name="whereExpression"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="orderBy"></param>
+        /// <returns></returns>
+        public virtual PageGridData<TEntity> QueryPage(Expression<Func<TEntity, bool>> whereExpression, int pageIndex, int pageSize, Dictionary<string, OrderByType> orderBy)
+        {
+            List<OrderByModel> orderByModels = new List<OrderByModel>();
+            foreach (var item in orderBy)
+            {
+                OrderByModel orderByModel = new OrderByModel()
+                {
+                    FieldName = item.Key,
+                    OrderByType = item.Value
+                };
+                orderByModels.Add(orderByModel);
+            }
+            int totalCount = 0;
+            List<TEntity> list = _db.Queryable<TEntity>()
+                .OrderBy(orderByModels)
+                .WhereIF(whereExpression != null, whereExpression)
+                .ToPageList(pageIndex, pageSize, ref totalCount);
+
+            return new PageGridData<TEntity>(totalCount, list);
+        }
+
+        /// <summary>
+        /// 鍒嗛〉鏌ヨ
+        /// </summary>
+        /// <param name="where"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        public virtual PageGridData<TEntity> QueryPage(string where, int pageIndex, int pageSize, Dictionary<string, OrderByType> orderBy)
+        {
+            List<OrderByModel> orderByModels = new List<OrderByModel>();
+            foreach (var item in orderBy)
+            {
+                OrderByModel orderByModel = new OrderByModel()
+                {
+                    FieldName = item.Key,
+                    OrderByType = item.Value
+                };
+                orderByModels.Add(orderByModel);
+            }
+            int totalCount = 0;
+            List<TEntity> list = _db.Queryable<TEntity>()
+                .WhereIF(!string.IsNullOrEmpty(where), where).OrderBy(orderByModels).ToPageList(pageIndex, pageSize, ref totalCount);
+
+            return new PageGridData<TEntity>(totalCount, list);
+        }
+
+        /// <summary>
+        /// 涓よ〃鑱旀煡
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="T2"></typeparam>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="joinExpression"></param>
+        /// <param name="selectExpression"></param>
+        /// <param name="whereExpression"></param>
+        /// <returns></returns>
+        public virtual List<TResult> QueryTabs<T, T2, TResult>(
+           Expression<Func<T, T2, object[]>> joinExpression,
+           Expression<Func<T, T2, TResult>> selectExpression,
+           Expression<Func<T, T2, bool>> whereExpressionT1,
+           Expression<Func<TResult, bool>> whereExpression)
+        {
+            List<TResult> list = _db.Queryable(joinExpression).WhereIF(whereExpressionT1 != null, whereExpressionT1)
+               .Select(selectExpression)
+               .WhereIF(whereExpression != null, whereExpression).ToList();
+            return list;
+        }
+
+        public virtual List<TResult> QueryTabs<T, T2, TResult>(
+          Expression<Func<T, T2, bool>> joinExpression,
+          Expression<Func<T, T2, TResult>> selectExpression,
+          Expression<Func<T, bool>> whereExpressionT1,
+          Expression<Func<T2, bool>> whereExpressionT2,
+          Expression<Func<TResult, bool>> whereExpression)
+        {
+            List<TResult> list = _db.Queryable<T>().WhereIF(whereExpressionT1 != null, whereExpressionT1).InnerJoin(_db.Queryable<T2>().WhereIF(whereExpressionT2 != null, whereExpressionT2), joinExpression).Select(selectExpression)
+               .WhereIF(whereExpression != null, whereExpression).ToList();
+            return list;
+        }
+
+        /// <summary>
+        /// 涓よ〃鑱旀煡-鍒嗛〉
+        /// </summary>
+        /// <typeparam name="T1"></typeparam>
+        /// <typeparam name="T2"></typeparam>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="joinExpression"></param>
+        /// <param name="selectExpression"></param>
+        /// <param name="whereExpression"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="orderByFields"></param>
+        public virtual PageGridData<TResult> QueryTabsPage<T1, T2, TResult>(Expression<Func<T1, T2, object[]>> joinExpression, Expression<Func<T1, T2, TResult>> selectExpression, Expression<Func<TResult, bool>> whereExpression, int pageIndex, int pageSize, string? orderByFields = null)
+        {
+            int totalCount = 0;
+            List<TResult> list = _db.Queryable(joinExpression)
+                .Select(selectExpression)
+                .OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields)
+                .WhereIF(whereExpression != null, whereExpression)
+                .ToPageList(pageIndex, pageSize, ref totalCount);
+            return new PageGridData<TResult>(totalCount, list);
+        }
+
+        /// <summary>
+        /// 涓よ〃鑱斿悎鏌ヨ-鍒嗛〉-鍒嗙粍
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="T2"></typeparam>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="joinExpression"></param>
+        /// <param name="selectExpression"></param>
+        /// <param name="whereExpression"></param>
+        /// <param name="groupExpression"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="orderByFields"></param>
+        /// <returns></returns>
+        public virtual PageGridData<TResult> QueryTabsPage<T1, T2, TResult>(Expression<Func<T1, T2, object[]>> joinExpression, Expression<Func<T1, T2, TResult>> selectExpression, Expression<Func<TResult, bool>> whereExpression, Expression<Func<T1, object>> groupExpression, int pageIndex, int pageSize, string? orderByFields = null)
+        {
+            int totalCount = 0;
+            List<TResult> list = _db.Queryable(joinExpression).GroupBy(groupExpression)
+                .Select(selectExpression)
+                .OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields)
+                .WhereIF(whereExpression != null, whereExpression)
+                .ToPageList(pageIndex, pageSize, ref totalCount);
+            return new PageGridData<TResult>(totalCount, list);
+        }
+
+        public Task<TEntity> QureyDataByIdAsync(object id)
+        {
+            return _db.Queryable<TEntity>().In(id).SingleAsync();
+        }
+
+        public Task<List<TEntity>> QureyDataByIdsAsync(object[] lstIds)
+        {
+            return _db.Queryable<TEntity>().In(lstIds).ToListAsync();
+        }
+
+        public Task<List<TEntity>> QureyDataByIdsAsync(List<object> lstIds)
+        {
+            return _db.Queryable<TEntity>().In(lstIds).ToListAsync();
+        }
+
+        public Task<int> AddDataAsync(TEntity entity)
+        {
+            IInsertable<TEntity> insert = _db.Insertable(entity);
+            return insert.ExecuteReturnIdentityAsync();
+        }
+
+        public Task<int> AddDataAsync(List<TEntity> listEntity)
+        {
+            IInsertable<TEntity> insert = _db.Insertable(listEntity);
+            return insert.ExecuteReturnIdentityAsync();
+        }
+
+        public Task<bool> DeleteDataByIdAsync(object id)
+        {
+            return _db.Deleteable<TEntity>().In(id).ExecuteCommandHasChangeAsync();
+        }
+
+        public Task<bool> DeleteDataByIdsAsync(object[] ids)
+        {
+            return _db.Deleteable<TEntity>().In(ids).ExecuteCommandHasChangeAsync();
+        }
+
+        public Task<bool> DeleteDataAsync(TEntity entity)
+        {
+            return _db.Deleteable(entity).ExecuteCommandHasChangeAsync();
+        }
+
+        public Task<bool> DeleteDataAsync(List<TEntity> listEntity)
+        {
+            return _db.Deleteable(listEntity).ExecuteCommandHasChangeAsync();
+        }
+
+        public Task<bool> UpdateDataAsync(TEntity entity)
+        {
+            return _db.Updateable(entity).ExecuteCommandHasChangeAsync();
+        }
+
+        public Task<bool> UpdateDataAsync(List<TEntity> listEntity)
+        {
+            return _db.Updateable(listEntity).ExecuteCommandHasChangeAsync();
+        }
+
+        public Task<bool> UpdateDataAsync(TEntity entity, List<string> lstColumns, List<string>? lstIgnoreColumns = null)
+        {
+            IUpdateable<TEntity> update = _db.Updateable(entity);
+
+            if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0)
+            {
+                update = update.IgnoreColumns(lstIgnoreColumns.ToArray());
+            }
+
+            if (lstColumns != null && lstColumns.Count > 0)
+            {
+                update = update.UpdateColumns(lstColumns.ToArray());
+            }
+
+            return update.ExecuteCommandHasChangeAsync();
+        }
+
+        public Task<List<TEntity>> QueryDataAsync()
+        {
+            return _db.Queryable<TEntity>().ToListAsync();
+        }
+
+        public Task<List<TEntity>> QueryDataAsync(string where)
+        {
+            return _db.Queryable<TEntity>().WhereIF(!string.IsNullOrEmpty(where), where).ToListAsync();
+        }
+
+        public Task<List<TEntity>> QueryDataAsync(Expression<Func<TEntity, bool>> whereExpression)
+        {
+            return _db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).ToListAsync();
+        }
+
+        public Task<TEntity> QueryFirstAsync(Expression<Func<TEntity, bool>> whereExpression)
+        {
+            return _db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).FirstAsync();
+        }
+
+        public Task<TResult> QueryFirstAsync<TResult>(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, TResult>> expression)
+        {
+            return _db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).Select(expression).FirstAsync();
+        }
+
+        public TResult QueryFirst<TResult>(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, TResult>> expression, Dictionary<string, OrderByType> orderBy)
+        {
+            List<OrderByModel> orderByModels = new List<OrderByModel>();
+            foreach (var item in orderBy)
+            {
+                OrderByModel orderByModel = new OrderByModel()
+                {
+                    FieldName = item.Key,
+                    OrderByType = item.Value
+                };
+                orderByModels.Add(orderByModel);
+            }
+            return _db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).OrderBy(orderByModels).Select(expression).First();
+        }
+
+        public Task<TResult> QueryFirstAsync<TResult>(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, TResult>> expression, Dictionary<string, OrderByType> orderBy)
+        {
+            List<OrderByModel> orderByModels = new List<OrderByModel>();
+            foreach (var item in orderBy)
+            {
+                OrderByModel orderByModel = new OrderByModel()
+                {
+                    FieldName = item.Key,
+                    OrderByType = item.Value
+                };
+                orderByModels.Add(orderByModel);
+            }
+            return _db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).OrderBy(orderByModels).Select(expression).FirstAsync();
+        }
+
+        public TEntity QueryFirst(Expression<Func<TEntity, bool>> whereExpression, Dictionary<string, OrderByType> orderBy)
+        {
+            List<OrderByModel> orderByModels = new List<OrderByModel>();
+            foreach (var item in orderBy)
+            {
+                OrderByModel orderByModel = new OrderByModel()
+                {
+                    FieldName = item.Key,
+                    OrderByType = item.Value
+                };
+                orderByModels.Add(orderByModel);
+            }
+            return _db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).OrderBy(orderByModels).First();
+        }
+
+        public Task<TEntity> QueryFirstAsync(Expression<Func<TEntity, bool>> whereExpression, Dictionary<string, OrderByType> orderBy)
+        {
+            List<OrderByModel> orderByModels = new List<OrderByModel>();
+            foreach (var item in orderBy)
+            {
+                OrderByModel orderByModel = new OrderByModel()
+                {
+                    FieldName = item.Key,
+                    OrderByType = item.Value
+                };
+                orderByModels.Add(orderByModel);
+            }
+            return _db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).OrderBy(orderByModels).FirstAsync();
+        }
+
+        public Task<List<TEntity>> QueryDataAsync(Expression<Func<TEntity, bool>> whereExpression, string orderByFields)
+        {
+            return _db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).ToListAsync();
+        }
+
+        public Task<List<TEntity>> QueryDataAsync(string where, Dictionary<string, OrderByType> orderBy)
+        {
+            List<OrderByModel> orderByModels = new List<OrderByModel>();
+            foreach (var item in orderBy)
+            {
+                OrderByModel orderByModel = new OrderByModel()
+                {
+                    FieldName = item.Key,
+                    OrderByType = item.Value
+                };
+                orderByModels.Add(orderByModel);
+            }
+            return _db.Queryable<TEntity>().WhereIF(!string.IsNullOrEmpty(where), where).OrderBy(orderByModels).ToListAsync();
+        }
+
+        public Task<List<TResult>> QueryDataAsync<TResult>(Expression<Func<TEntity, TResult>> expression)
+        {
+            return _db.Queryable<TEntity>().Select(expression).ToListAsync();
+        }
+
+        public Task<List<TResult>> QueryDataAsync<TResult>(Expression<Func<TEntity, TResult>> expression, Expression<Func<TEntity, bool>> whereExpression, string orderByFields)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(whereExpression != null, whereExpression).Select(expression).ToListAsync();
+        }
+
+        public Task<List<TEntity>> QueryDataAsync(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderByExpression, bool isAsc = true)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(orderByExpression != null, orderByExpression, isAsc ? OrderByType.Asc : OrderByType.Desc).WhereIF(whereExpression != null, whereExpression).ToListAsync();
+        }
+
+        public Task<List<TEntity>> QueryDataAsync(string where, string orderByFields)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(!string.IsNullOrEmpty(where), where).ToListAsync();
+        }
+
+        public Task<List<TEntity>> QueryDataBySqlAsync(string sql, SugarParameter[]? parameters = null)
+        {
+            return _db.Ado.SqlQueryAsync<TEntity>(sql, parameters);
+        }
+
+        public Task<List<dynamic>> QueryDynamicDataBySqlAsync(string sql, SugarParameter[]? parameters = null)
+        {
+            return _db.Ado.SqlQueryAsync<dynamic>(sql, parameters);
+        }
+
+        public Task<List<object>> QueryObjectDataBySqlAsync(string sql, SugarParameter[]? parameters = null)
+        {
+            return _db.Ado.SqlQueryAsync<object>(sql, parameters);
+        }
+
+        public Task<int> ExecuteSqlCommandAsync(string sql, params SqlParameter[] sqlParameters)
+        {
+            return _db.Ado.ExecuteCommandAsync(sql, sqlParameters);
+        }
+
+        public Task<DataTable> QueryTableAsync(string sql, SugarParameter[]? parameters = null)
+        {
+            return _db.Ado.GetDataTableAsync(sql, parameters);
+        }
+
+        public Task<List<TEntity>> QueryDataAsync(Expression<Func<TEntity, bool>> whereExpression, int top, string orderByFields)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(whereExpression != null, whereExpression).Take(top).ToListAsync();
+        }
+
+        public Task<List<TEntity>> QueryDataAsync(string where, int top, string orderByFields)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(!string.IsNullOrEmpty(where), where).Take(top).ToListAsync();
+        }
+
+        public Task<List<TEntity>> QueryDataAsync(Expression<Func<TEntity, bool>> whereExpression, int pageIndex, int pageSize, string orderByFields)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields)
+              .WhereIF(whereExpression != null, whereExpression).ToPageListAsync(pageIndex, pageSize);
+        }
+
+        public Task<List<TEntity>> QueryDataAsync(string where, int pageIndex, int pageSize, string orderByFields)
+        {
+            return _db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields)
+                .WhereIF(!string.IsNullOrEmpty(where), where).ToPageListAsync(pageIndex, pageSize);
+        }
+
+        public Task<List<TResult>> QueryTabsAsync<T, T2, TResult>(Expression<Func<T, T2, object[]>> joinExpression, Expression<Func<T, T2, TResult>> selectExpression, Expression<Func<TResult, bool>> whereExpression)
+        {
+            return _db.Queryable(joinExpression)
+             .Select(selectExpression)
+             .WhereIF(whereExpression != null, whereExpression).ToListAsync();
+        }
+
+        public bool DeleteAndMoveIntoHty(TEntity entity, OperateTypeEnum operateType)
+        {
+            Type type = entity.GetType();
+            Assembly assembly = type.Assembly;
+            Type? htyType = assembly.GetType(type.FullName + "_Hty");
+            if (htyType != null)
+            {
+                object? obj = Activator.CreateInstance(htyType);
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                PropertyInfo? operateTypePro = htyType.GetProperty(nameof(IBaseHistoryEntity.OperateType));
+                PropertyInfo? sourceIdPro = htyType.GetProperty(nameof(IBaseHistoryEntity.SourceId));
+                if (obj != null && keyPro != null && operateTypePro != null && sourceIdPro != null)
+                {
+                    operateTypePro.SetValue(obj, operateType.ToString());
+                    sourceIdPro.SetValue(obj, keyPro.GetValue(entity));
+
+                    List<PropertyInfo> propertyInfos = htyType.GetProperties().Where(x => x.Name != operateTypePro.Name && x.Name != sourceIdPro.Name && x.Name != keyPro.Name).ToList();
+
+                    for (int i = 0; i < propertyInfos.Count; i++)
+                    {
+                        PropertyInfo propertyInfo = propertyInfos[i];
+                        PropertyInfo? property = type.GetProperty(propertyInfo.Name);
+
+                        if (property != null)
+                        {
+                            if (propertyInfo.Name == nameof(BaseEntity.Modifier))
+                            {
+                                propertyInfo.SetValue(obj, App.User.UserId > 0 ? App.User.UserName : "System");
+                            }
+                            else if (propertyInfo.Name == nameof(BaseEntity.ModifyDate))
+                            {
+                                propertyInfo.SetValue(obj, DateTime.Now);
+                            }
+                            else
+                            {
+                                propertyInfo.SetValue(obj, property.GetValue(entity));
+                            }
+                        }
+                    }
+                    if (obj != null)
+                        _db.InsertableByObject(obj).AS(type.Name + "_Hty").ExecuteCommand();
+                }
+            }
+            return DeleteData(entity);
+        }
+
+        public bool DeleteAndMoveIntoHty(List<TEntity> entities, OperateTypeEnum operateType)
+        {
+            Type type = typeof(TEntity);
+            Assembly assembly = type.Assembly;
+            Type? htyType = assembly.GetType(type.FullName + "_Hty");
+            if (htyType != null)
+            {
+                object? obj2 = Activator.CreateInstance(htyType);
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                PropertyInfo? operateTypePro = htyType.GetProperty(nameof(IBaseHistoryEntity.OperateType));
+                PropertyInfo? sourceIdPro = htyType.GetProperty(nameof(IBaseHistoryEntity.SourceId));
+                if (obj2 != null && keyPro != null && operateTypePro != null && sourceIdPro != null)
+                {
+                    List<PropertyInfo> propertyInfos = htyType.GetProperties().Where(x => x.Name != operateTypePro.Name && x.Name != sourceIdPro.Name && x.Name != keyPro.Name).ToList();
+                    List<object> list = new List<object>();
+                    foreach (var item in entities)
+                    {
+                        object? obj = Activator.CreateInstance(htyType);
+                        if (obj != null)
+                        {
+                            operateTypePro.SetValue(obj, operateType.ToString());
+                            sourceIdPro.SetValue(obj, keyPro.GetValue(item));
+                            for (int i = 0; i < propertyInfos.Count; i++)
+                            {
+                                PropertyInfo propertyInfo = propertyInfos[i];
+                                PropertyInfo? property = type.GetProperty(propertyInfo.Name);
+
+                                if (property != null)
+                                {
+                                    if (propertyInfo.Name == nameof(BaseEntity.Modifier))
+                                    {
+                                        propertyInfo.SetValue(obj, App.User.UserId > 0 ? App.User.UserName : "System");
+                                    }
+                                    else if (propertyInfo.Name == nameof(BaseEntity.ModifyDate))
+                                    {
+                                        propertyInfo.SetValue(obj, DateTime.Now);
+                                    }
+                                    else
+                                    {
+                                        propertyInfo.SetValue(obj, property.GetValue(item));
+                                    }
+                                }
+                            }
+                            list.Add(obj);
+                        }
+                    }
+                    if (list.Count > 0)
+                        _db.InsertableByObject(list).AS(type.Name + "_Hty").ExecuteCommand();
+
+                }
+            }
+            return DeleteData(entities);
+        }
+        //List<TResult> QueryMuch<T, T2, T3, TResult>(
+        //    Expression<Func<T, T2, T3, object[]>> joinExpression,
+        //    Expression<Func<T, T2, T3, TResult>> selectExpression,
+        //    Expression<Func<T, T2, T3, bool>> whereLambda = null) where T : class, new(){throw new NotImplementedException();}
+        //Task<PageModel<TEntity>> QueryPage(PaginationModel pagination){throw new NotImplementedException();}
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/IUnitOfWorkManage.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/IUnitOfWorkManage.cs"
new file mode 100644
index 0000000..7d715d8
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/IUnitOfWorkManage.cs"
@@ -0,0 +1,25 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.BaseRepository
+{
+    public interface IUnitOfWorkManage
+    {
+        SqlSugarClient GetDbClient();
+        int TranCount { get; }
+
+        UnitOfWork CreateUnitOfWork();
+
+        void BeginTran();
+        void BeginTran(MethodInfo method);
+        void CommitTran();
+        void CommitTran(MethodInfo method);
+        void RollbackTran();
+        void RollbackTran(MethodInfo method);
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWork.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWork.cs"
new file mode 100644
index 0000000..d4ca76b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWork.cs"
@@ -0,0 +1,55 @@
+锘縰sing Microsoft.Extensions.Logging;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.BaseRepository
+{
+    public class UnitOfWork : IDisposable
+    {
+        public ILogger Logger { get; set; }
+        public ISqlSugarClient Db { get; internal set; }
+
+        public ITenant Tenant { get; internal set; }
+
+        public bool IsTran { get; internal set; }
+
+        public bool IsCommit { get; internal set; }
+
+        public bool IsClose { get; internal set; }
+
+        public void Dispose()
+        {
+            if (IsTran && !IsCommit)
+            {
+                Logger.LogDebug("UnitOfWork RollbackTran");
+                this.Tenant.RollbackTran();
+            }
+
+            if (this.Db.Ado.Transaction != null || this.IsClose)
+                return;
+            this.Db.Close();
+        }
+
+        public bool Commit()
+        {
+            if (this.IsTran && !this.IsCommit)
+            {
+                Logger.LogDebug("UnitOfWork CommitTran");
+                this.Tenant.CommitTran();
+                this.IsCommit = true;
+            }
+
+            if (this.Db.Ado.Transaction == null && !this.IsClose)
+            {
+                this.Db.Close();
+                this.IsClose = true;
+            }
+
+            return this.IsCommit;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWorkManage.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWorkManage.cs"
new file mode 100644
index 0000000..81607a6
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWorkManage.cs"
@@ -0,0 +1,194 @@
+锘縰sing Microsoft.Extensions.Logging;
+using SqlSugar;
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.BaseRepository
+{
+    public class UnitOfWorkManage : IUnitOfWorkManage
+    {
+        private readonly ILogger<UnitOfWorkManage> _logger;
+        private readonly ISqlSugarClient _sqlSugarClient;
+
+        private int _tranCount { get; set; }
+        public int TranCount => _tranCount;
+        public readonly ConcurrentStack<string> TranStack = new();
+
+        public UnitOfWorkManage(ISqlSugarClient sqlSugarClient, ILogger<UnitOfWorkManage> logger)
+        {
+            _sqlSugarClient = sqlSugarClient;
+            _logger = logger;
+            _tranCount = 0;
+        }
+
+        /// <summary>
+        /// 鑾峰彇DB锛屼繚璇佸敮涓�鎬�
+        /// </summary>
+        /// <returns></returns>
+        public SqlSugarClient GetDbClient()
+        {
+            // 蹇呴』瑕乤s锛屽悗杈逛細鐢ㄥ埌鍒囨崲鏁版嵁搴撴搷浣�
+            return _sqlSugarClient as SqlSugarClient;
+        }
+
+
+        public UnitOfWork CreateUnitOfWork()
+        {
+            UnitOfWork uow = new UnitOfWork();
+            uow.Logger = _logger;
+            uow.Db = _sqlSugarClient;
+            uow.Tenant = (ITenant)_sqlSugarClient;
+            uow.IsTran = true;
+
+            uow.Db.Open();
+            uow.Tenant.BeginTran();
+            
+            _logger.LogDebug("UnitOfWork Begin");
+            return uow;
+        }
+
+        public void BeginTran()
+        {
+            lock (this)
+            {
+                _tranCount++;
+                GetDbClient().BeginTran();
+            }
+        }
+
+        public void BeginTran(MethodInfo method)
+        {
+            lock (this)
+            {
+                GetDbClient().BeginTran();
+                TranStack.Push(method.GetFullName());
+                _tranCount = TranStack.Count;
+            }
+        }
+
+        public WebResponseContent BeginTran(Func<WebResponseContent> func)
+        {
+            lock (this)
+            {
+                BeginTran();
+                try
+                {
+                    WebResponseContent content = func();
+                    if (content.Status)
+                    {
+                        CommitTran();
+                    }
+                    else
+                    {
+                        RollbackTran();
+                    }
+                    return content;
+                }
+                catch(Exception ex)
+                {
+                    RollbackTran();
+                    return WebResponseContent.Instance.Error(ex.Message);
+                }
+            }
+        }
+
+        public void CommitTran()
+        {
+            lock (this)
+            {
+                _tranCount--;
+                if (_tranCount == 0)
+                {
+                    try
+                    {
+                        GetDbClient().CommitTran();
+                    }
+                    catch (Exception ex)
+                    {
+                        Console.WriteLine(ex.Message);
+                        GetDbClient().RollbackTran();
+                    }
+                }
+            }
+        }
+
+        public void CommitTran(MethodInfo method)
+        {
+            lock (this)
+            {
+                string result = "";
+                while (!TranStack.IsEmpty && !TranStack.TryPeek(out result))
+                {
+                    Thread.Sleep(1);
+                }
+
+
+                if (result == method.GetFullName())
+                {
+                    try
+                    {
+                        GetDbClient().CommitTran();
+
+                        _logger.LogDebug($"Commit Transaction");
+                        Console.WriteLine($"Commit Transaction");
+                    }
+                    catch (Exception ex)
+                    {
+                        Console.WriteLine(ex.Message);
+                        GetDbClient().RollbackTran();
+                        _logger.LogDebug($"Commit Error , Rollback Transaction");
+                    }
+                    finally
+                    {
+                        while (!TranStack.TryPop(out _))
+                        {
+                            Thread.Sleep(1);
+                        }
+
+                        _tranCount = TranStack.Count;
+                    }
+                }
+            }
+        }
+
+        public void RollbackTran()
+        {
+            lock (this)
+            {
+                _tranCount--;
+                GetDbClient().RollbackTran();
+            }
+        }
+
+        public void RollbackTran(MethodInfo method)
+        {
+            lock (this)
+            {
+                string result = "";
+                while (!TranStack.IsEmpty && !TranStack.TryPeek(out result))
+                {
+                    Thread.Sleep(1);
+                }
+
+                if (result == method.GetFullName())
+                {
+                    GetDbClient().RollbackTran();
+                    _logger.LogDebug($"Rollback Transaction");
+                    Console.WriteLine($"Rollback Transaction");
+                    while (!TranStack.TryPop(out _))
+                    {
+                        Thread.Sleep(1);
+                    }
+
+                    _tranCount = TranStack.Count;
+                }
+            }
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/IService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/IService.cs"
new file mode 100644
index 0000000..a5cb22c
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/IService.cs"
@@ -0,0 +1,123 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.BaseServices
+{
+    public interface IService<TEntity> : IDependency where TEntity : class, new()
+    {
+        ISqlSugarClient Db { get; }
+
+        /// <summary>
+        /// 鍒嗛〉鏌ヨ鏁版嵁
+        /// </summary>
+        /// <param name="options"></param>
+        /// <returns></returns>
+        PageGridData<TEntity> GetPageData(PageDataOptions options);
+
+        object GetDetailPage(PageDataOptions pageData);
+
+        /// <summary>
+        /// 娣诲姞鏁版嵁
+        /// </summary>
+        /// <param name="entity">鍗曚釜瀹炰綋</param>
+        /// <returns></returns>
+        WebResponseContent AddData(TEntity entity);
+
+        /// <summary>
+        /// 娣诲姞鏁版嵁
+        /// </summary>
+        /// <param name="entities">瀹炰綋闆嗗悎</param>
+        /// <returns></returns>
+        WebResponseContent AddData(List<TEntity> entities);
+
+        /// <summary>
+        /// 娣诲姞鏁版嵁
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        WebResponseContent AddData(SaveModel saveModel);
+
+        /// <summary>
+        /// 淇敼鏁版嵁
+        /// </summary>
+        /// <param name="entity">鍗曚釜瀹炰綋</param>
+        /// <returns></returns>
+        WebResponseContent UpdateData(TEntity entity);
+
+        /// <summary>
+        /// 淇敼鏁版嵁
+        /// </summary>
+        /// <param name="entities">瀹炰綋闆嗗悎</param>
+        /// <returns></returns>
+        WebResponseContent UpdateData(List<TEntity> entities);
+
+        /// <summary>
+        /// 淇敼鏁版嵁
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        WebResponseContent UpdateData(SaveModel saveModel);
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="key">涓婚敭</param>
+        /// <returns></returns>
+        WebResponseContent DeleteData(object key);
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="keys">涓婚敭鏁扮粍</param>
+        /// <returns></returns>
+        WebResponseContent DeleteData(object[] keys);
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="entity">鍗曚釜瀹炰綋</param>
+        /// <returns></returns>
+        WebResponseContent DeleteData(TEntity entity);
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="entities">瀹炰綋闆嗗悎</param>
+        /// <returns></returns>
+        WebResponseContent DeleteData(List<TEntity> entities);
+
+        /// <summary>
+        /// 瀵煎嚭鏁版嵁
+        /// </summary>
+        /// <param name="pageData"></param>
+        /// <returns></returns>
+        WebResponseContent Export(PageDataOptions pageData);
+
+        /// <summary>
+        /// 瀵煎叆鏁版嵁
+        /// </summary>
+        /// <param name="files"></param>
+        /// <returns></returns>
+        WebResponseContent Import(List<IFormFile> files);
+
+        /// <summary>
+        /// 涓婁紶鏂囦欢
+        /// </summary>
+        /// <param name="files"></param>
+        /// <returns></returns>
+        WebResponseContent Upload(List<IFormFile> files);
+
+        /// <summary>
+        /// 妯℃澘涓嬭浇
+        /// </summary>
+        /// <returns></returns>
+        WebResponseContent DownLoadTemplate();
+
+        WebResponseContent ExportSeedData();
+    }
+}
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs"
new file mode 100644
index 0000000..6b3275f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs"
@@ -0,0 +1,923 @@
+锘縰sing AutoMapper.Execution;
+using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Core.Models;
+using Magicodes.ExporterAndImporter.Excel;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using Microsoft.Extensions.Options;
+using Newtonsoft.Json;
+using SqlSugar;
+using System.Drawing.Drawing2D;
+using System.Dynamic;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Reflection.Metadata;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+//using WIDESEA_Core.HostedService;
+using WIDESEA_Core.Utilities;
+using ICacheService = WIDESEA_Core.Caches.ICacheService;
+
+namespace WIDESEA_Core.BaseServices
+{
+    public class ServiceBase<TEntity, TRepository> : ServiceFunFilter<TEntity>, IService<TEntity>
+         where TEntity : class, new()
+         where TRepository : IRepository<TEntity>
+
+    {
+        public ServiceBase(TRepository BaseDal)
+        {
+            this.BaseDal = BaseDal;
+        }
+
+        public TRepository BaseDal { get; set; } //閫氳繃鍦ㄥ瓙绫荤殑鏋勯�犲嚱鏁颁腑娉ㄥ叆锛岃繖閲屾槸鍩虹被锛屼笉鐢ㄦ瀯閫犲嚱鏁�
+
+        public ISqlSugarClient Db => BaseDal.Db;
+
+        private PropertyInfo[] _propertyInfo { get; set; } = null;
+        public PropertyInfo[] TProperties
+        {
+            get
+            {
+                if (_propertyInfo != null)
+                {
+                    return _propertyInfo;
+                }
+                _propertyInfo = typeof(TEntity).GetProperties();
+                return _propertyInfo;
+            }
+        }
+
+        public virtual PageGridData<TEntity> GetPageData(PageDataOptions options)
+        {
+            ISugarQueryable<TEntity> sugarQueryable = Db.Queryable<TEntity>();
+
+            ValidatePageOptions(options, ref sugarQueryable);
+
+            List<OrderByModel> orderByModels = new List<OrderByModel>();
+
+            if (OrderByParameters != null)
+            {
+                foreach (var item in OrderByParameters)
+                {
+                    OrderByModel orderByModel = new OrderByModel()
+                    {
+                        FieldName = item.Key,
+                        OrderByType = item.Value
+                    };
+                    orderByModels.Add(orderByModel);
+                }
+            }
+            if (EnableWebOrderBy)
+            {
+                //鑾峰彇鎺掑簭瀛楁
+                Dictionary<string, OrderByType> orderbyDic = GetPageDataSort(options, TProperties);
+
+                foreach (var item in orderbyDic)
+                {
+                    OrderByModel orderByModel = new OrderByModel()
+                    {
+                        FieldName = item.Key,
+                        OrderByType = item.Value
+                    };
+                    orderByModels.Add(orderByModel);
+                }
+            }
+
+            int total = 0;
+            PageGridData<TEntity> pageGridData = new PageGridData<TEntity>();
+            sugarQueryable = sugarQueryable.OrderBy(orderByModels);
+            pageGridData.Rows = sugarQueryable.ToPageList(options.Page, options.Rows, ref total);
+            pageGridData.Total = total;
+
+            return pageGridData;
+        }
+
+        protected void ValidatePageOptions(PageDataOptions options, ref ISugarQueryable<TEntity> sugarQueryable)
+        {
+            options = options ?? new PageDataOptions();
+            List<SearchParameters> searchParametersList = new List<SearchParameters>();
+            if (options.Filter != null && options.Filter.Count > 0)
+            {
+                searchParametersList.AddRange(options.Filter);
+            }
+            else if (!string.IsNullOrEmpty(options.Wheres))
+            {
+                try
+                {
+                    searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
+                    options.Filter = searchParametersList;
+                }
+                catch { }
+            }
+            QueryRelativeList?.Invoke(searchParametersList);
+
+            for (int i = 0; i < searchParametersList.Count; i++)
+            {
+                if (string.IsNullOrEmpty(searchParametersList[i].Value))
+                {
+                    continue;
+                }
+
+                PropertyInfo? property = TProperties.Where(c => c.Name.ToUpper() == searchParametersList[i].Name.ToUpper()).FirstOrDefault();
+
+                if (property == null) continue;
+
+                List<(bool, string, object)> results = property.ValidationValueForDbType(searchParametersList[i].Value.Split(',')).ToList();
+                if (results == null || results.Count() == 0)
+                {
+                    continue;
+                }
+                for (int j = 0; j < results.Count(); j++)
+                {
+                    LinqExpressionType expressionType = searchParametersList[i].DisplayType.ToLower().GetLinqCondition();
+                    if (expressionType == LinqExpressionType.In)
+                    {
+                        Expression<Func<TEntity, bool>> expression = GetWhereExpression(property.Name, results.Select(x => x.Item3).ToArray(), null, expressionType);
+                        sugarQueryable = sugarQueryable.Where(expression);
+                        break;
+                    }
+                    else
+                    {
+                        Expression<Func<TEntity, bool>> expression = GetWhereExpression(property.Name, results[j].Item3, null, expressionType);
+                        sugarQueryable = sugarQueryable.Where(expression);
+                    }
+                }
+            }
+        }
+
+        protected Expression<Func<TEntity, bool>> GetWhereExpression(string propertyName, object propertyValue, ParameterExpression parameter, LinqExpressionType expressionType)
+        {
+            Type? proType = typeof(TEntity).GetProperty(propertyName)?.PropertyType;
+            if (proType == null) return p => true;
+            if (propertyValue == null) return p => true;
+            string? value = propertyValue?.ToString();
+            if (value == null) return p => true;
+
+
+            parameter = parameter ?? Expression.Parameter(typeof(TEntity), "x");
+            //鍒涘缓鑺傜偣鐨勫睘鎬=>p.name 灞炴�ame
+            MemberExpression memberProperty = Expression.PropertyOrField(parameter, propertyName);
+
+            if (expressionType == LinqExpressionType.In)
+            {
+                if (!(propertyValue is System.Collections.IList list) || list.Count == 0)
+                {
+                    if (!string.IsNullOrEmpty(propertyValue?.ToString()))
+                    {
+                        list = propertyValue.ToString().Split(",").ToList();
+                    }
+                    else
+                    {
+                        throw new Exception("灞炴�у�肩被鍨嬩笉姝g‘");
+                    }
+                }
+                //
+
+                bool isStringValue = true;
+                List<object> objList = new List<object>();
+
+                if (proType.ToString() != "System.String")
+                {
+                    isStringValue = false;
+                    foreach (var values in list)
+                    {
+                        objList.Add(values?.ToString().ChangeType(proType));
+                    }
+                    list = objList;
+                }
+
+                //if (isStringValue)
+                //{
+                //    //string 绫诲瀷鐨勫瓧娈碉紝濡傛灉鍊煎甫鏈�'鍗曞紩鍙�,EF浼氶粯璁ゅ彉鎴�''涓や釜鍗曞紩鍙�
+                //    MethodInfo method = typeof(System.Collections.IList).GetMethod("Contains");
+                //    //鍒涘缓闆嗗悎甯搁噺骞惰缃负甯搁噺鐨勫��
+                //    ConstantExpression constantCollection = Expression.Constant(list);
+                //    //鍒涘缓涓�涓〃绀鸿皟鐢ㄥ甫鍙傛暟鐨勬柟娉曠殑锛歯ew string[]{"1","a"}.Contains("a");
+                //    MethodCallExpression methodCall = Expression.Call(constantCollection, method, memberProperty);
+                //    return Expression.Lambda<Func<TEntity, bool>>(methodCall, parameter);
+                //}
+                //闈瀞tring瀛楁锛屾寜涓婇潰鏂瑰紡澶勭悊鎶ュ紓甯窷ull TypeMapping in Sql Tree
+                BinaryExpression body = null;
+                foreach (var values in list)
+                {
+                    ConstantExpression constantExpression = Expression.Constant(values);
+                    UnaryExpression unaryExpression = Expression.Convert(memberProperty, constantExpression.Type);
+
+                    body = body == null
+                        ? Expression.Equal(unaryExpression, constantExpression)
+                        : Expression.OrElse(body, Expression.Equal(unaryExpression, constantExpression));
+                }
+                return Expression.Lambda<Func<TEntity, bool>>(body, parameter);
+            }
+
+            ConstantExpression constant = proType.ToString() == "System.String"
+              ? Expression.Constant(propertyValue) : Expression.Constant(value.ChangeType(proType));
+
+            // DateTime鍙�夋嫨浜嗘棩鏈熺殑鏃跺�欒嚜鍔ㄥ湪缁撴潫鏃ユ湡鍔犱竴澶╋紝淇DateTime绫诲瀷浣跨敤鏃ユ湡鍖洪棿鏌ヨ鏃犳硶鏌ヨ鍒扮粨鏉熸棩鏈熺殑闂
+            if ((proType == typeof(DateTime) || proType == typeof(DateTime?)) && expressionType == LinqExpressionType.LessThanOrEqual && value.Length == 10)
+            {
+                constant = Expression.Constant(Convert.ToDateTime(value).AddDays(1));
+            }
+
+            UnaryExpression member = Expression.Convert(memberProperty, constant.Type);
+            Expression<Func<TEntity, bool>> expression = p => false;
+            switch (expressionType)
+            {
+                case LinqExpressionType.Equal:
+                    expression = Expression.Lambda<Func<TEntity, bool>>(Expression.Equal(member, constant), parameter);
+                    break;
+                case LinqExpressionType.NotEqual:
+                    expression = Expression.Lambda<Func<TEntity, bool>>(Expression.NotEqual(member, constant), parameter);
+                    break;
+                case LinqExpressionType.GreaterThan:
+                    expression = Expression.Lambda<Func<TEntity, bool>>(Expression.GreaterThan(member, constant), parameter);
+                    break;
+                case LinqExpressionType.LessThan:
+                    expression = Expression.Lambda<Func<TEntity, bool>>(Expression.LessThan(member, constant), parameter);
+                    break;
+                case LinqExpressionType.ThanOrEqual:
+                    expression = Expression.Lambda<Func<TEntity, bool>>(Expression.GreaterThanOrEqual(member, constant), parameter);
+                    break;
+                case LinqExpressionType.LessThanOrEqual:
+                    expression = Expression.Lambda<Func<TEntity, bool>>(Expression.LessThanOrEqual(member, constant), parameter);
+                    break;
+                case LinqExpressionType.Contains:
+                case LinqExpressionType.NotContains:
+                    MethodInfo? method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
+                    if (method != null)
+                    {
+                        constant = Expression.Constant(propertyValue, typeof(string));
+                        if (expressionType == LinqExpressionType.Contains)
+                        {
+                            expression = Expression.Lambda<Func<TEntity, bool>>(Expression.Call(member, method, constant), parameter);
+                        }
+                        else
+                        {
+                            expression = Expression.Lambda<Func<TEntity, bool>>(Expression.Not(Expression.Call(member, method, constant)), parameter);
+                        }
+                    }
+                    else
+                    {
+                        expression = p => true;
+                    }
+                    break;
+                default:
+                    expression = p => false;
+                    break;
+            }
+            return expression;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎺掑簭瀛楁
+        /// </summary>
+        /// <param name="pageData"></param>
+        /// <param name="propertyInfo"></param>
+        /// <returns></returns>
+        protected Dictionary<string, OrderByType> GetPageDataSort(PageDataOptions pageData, PropertyInfo[] propertyInfo)
+        {
+            if (!string.IsNullOrEmpty(pageData.Sort))
+            {
+                if (pageData.Sort.Contains(","))
+                {
+                    List<string> sortArr = pageData.Sort.Split(",").Where(x => propertyInfo.Any(p => p.Name == x)).ToList();
+                    Dictionary<string, OrderByType> sortDic = new Dictionary<string, OrderByType>();
+                    foreach (var item in sortArr)
+                    {
+                        sortDic[item] = pageData.Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc;
+                    }
+                    return sortDic;
+                }
+                else if (propertyInfo.Any(x => x.Name == pageData.Sort.FirstLetterToLower() || x.Name == pageData.Sort.FirstLetterToUpper()))
+                {
+                    return new Dictionary<string, OrderByType> {
+                        {
+                            pageData.Sort,pageData.Order?.ToLower() == OrderByType.Asc.ToString().ToLower() ? OrderByType.Asc : OrderByType.Desc
+                        } };
+                }
+            }
+            return new Dictionary<string, OrderByType> { { "CreateDate", pageData.Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc } };
+        }
+
+
+
+        //private string GetDataRole(Type type)
+        //{
+        //    try
+        //    {
+        //        UserRole? userRole = PermissionDataHostService.UserRoles.FirstOrDefault(x => x.UserId == App.User.UserId);
+        //        if (userRole == null)
+        //            throw new Exception($"鏃犳潈闄�");
+
+        //        if (type.IsAssignableFrom(typeof(BaseWarehouseEntity)) || type.GetProperty(nameof(BaseWarehouseEntity.WarehouseId)) != null)
+        //        {
+        //            if (userRole.WarehouseIds.Count > 0)
+        //            {
+        //                return $"{nameof(BaseWarehouseEntity.WarehouseId)} in ({userRole.WarehouseIds.Serialize().Replace("[", "").Replace("]", "")})";
+        //            }
+
+        //            else
+        //                return $"1 != 1";
+        //        }
+        //        else
+        //        {
+        //            return "1 = 1";
+        //        }
+
+        //        //UserRole? userRole = PermissionDataHostService.UserRoles.FirstOrDefault(x => x.UserId == App.User.UserId);
+        //        //if (userRole == null)
+        //        //    throw new Exception($"鏃犳潈闄�");
+
+        //        //if (userRole.AuthorityScope == (int)AuthorityScopeEnum.CurrentRole)
+        //        //{
+        //        //    List<int> userId = PermissionDataHostService.UserRoles.Where(x => x.RoleId == userRole.RoleId).Select(x => x.UserId).ToList();
+        //        //    return $"creater in ({userId.Serialize()})";
+        //        //}
+        //        //else if (userRole.AuthorityScope == (int)AuthorityScopeEnum.OnlySelf)
+        //        //{
+        //        //    return $"creater = '{userRole.UserName}'";
+        //        //}
+        //        //else if (userRole.AuthorityScope == (int)AuthorityScopeEnum.None)
+        //        //{
+        //        //    return $"1 != 1";
+        //        //}
+        //        //return "";
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        throw new Exception($"鏃犳潈闄愶紝{ex.Message}");
+        //    }
+        //}
+
+        public virtual object GetDetailPage(PageDataOptions pageData)
+        {
+            Type t = typeof(TEntity);
+
+            if (pageData.Value == null) return new PageGridData<object>(total: 0, null);
+            string keyName = t.GetKeyName();
+            ////鐢熸垚鏌ヨ鏉′欢
+            //Expression<Func<TEntity, bool>> whereExpression = keyName.CreateExpression<TEntity>(pageData.Value, LinqExpressionType.Equal);
+            int totalCount = 0;
+            PropertyInfo propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute<Navigate>() != null);
+            if (propertyInfo != null)
+            {
+                Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
+                Navigate navigate = propertyInfo.GetCustomAttribute<Navigate>();
+                List<ExpandoObject> list = BaseDal.Db.Queryable(detailType.Name, "detail").Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount);
+                return new PageGridData<ExpandoObject>(totalCount, list);
+            }
+            return new PageGridData<object>(total: 0, null);
+        }
+
+        /// <summary>
+        /// 娣诲姞鏁版嵁
+        /// </summary>
+        /// <param name="entity">鍗曚釜瀹炰綋</param>
+        /// <returns></returns>
+        public virtual WebResponseContent AddData(TEntity entity)
+        {
+            try
+            {
+                return BaseDal.AddData(entity) > 0 ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 娣诲姞鏁版嵁
+        /// </summary>
+        /// <param name="entities">瀹炰綋闆嗗悎</param>
+        /// <returns></returns>
+        public virtual WebResponseContent AddData(List<TEntity> entities)
+        {
+            try
+            {
+                return BaseDal.AddData(entities) > 0 ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 娣诲姞鏁版嵁
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        public virtual WebResponseContent AddData(SaveModel saveModel)
+        {
+            try
+            {
+                if (saveModel == null || saveModel.MainData == null || saveModel.MainData.Count == 0)//鍒ゆ柇鍙傛暟鏄惁浼犲叆
+                {
+                    return WebResponseContent.Instance.Error("浼犲弬閿欒,鍙傛暟涓嶈兘涓虹┖");
+                }
+                string validResult = typeof(TEntity).ValidateDicInEntity(saveModel.MainData, true, TProperties);
+
+                if (!string.IsNullOrEmpty(validResult))
+                {
+                    return WebResponseContent.Instance.Error(validResult);
+                }
+
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                if (keyPro == null)
+                {
+                    return WebResponseContent.Instance.Error("璇峰厛璁剧疆涓婚敭");
+                }
+                if (keyPro.PropertyType == typeof(Guid))
+                {
+                    saveModel.MainData.Add(keyPro.Name, Guid.NewGuid());
+                }
+                else if (keyPro.PropertyType == typeof(int) || keyPro.PropertyType == typeof(long))
+                {
+                    SugarColumn? sugarColumn = keyPro.GetCustomAttribute<SugarColumn>();
+                    if (sugarColumn?.IsIdentity ?? true)
+                    {
+                        saveModel.MainData.Remove(keyPro.Name.FirstLetterToUpper());
+                        saveModel.MainData.Remove(keyPro.Name.FirstLetterToLower());
+                    }
+                }
+                TEntity entity = saveModel.MainData.DicToModel<TEntity>();
+                if (saveModel.DetailData == null || saveModel.DetailData.Count == 0)
+                {
+                    BaseDal.AddData(entity);
+                    return WebResponseContent.Instance.OK();
+                }
+
+                if (typeof(TEntity).GetNavigatePro() == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈厤缃鑸睘鎬�");
+                }
+
+                Type detailType = typeof(TEntity).GetDetailType();
+                MethodInfo? methodInfo = GetType().GetMethod("AddDataIncludesDetail");
+                methodInfo = methodInfo?.MakeGenericMethod(new Type[] { detailType });
+                object? obj = methodInfo?.Invoke(this, new object[] { entity, detailType, saveModel.DetailData });
+                return obj as WebResponseContent;
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent AddDataIncludesDetail<TDetail>(TEntity entity, Type detailType, List<Dictionary<string, object>> detailDics) where TDetail : class, new()
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string name = typeof(TEntity).GetMainIdByDetail();
+                string reslut = detailType.ValidateDicInEntity(detailDics, true, new string[] { name });
+                if (reslut != string.Empty)
+                    return WebResponseContent.Instance.Error(reslut);
+
+                List<TDetail> list = detailDics.DicToIEnumerable<TDetail>();
+
+                ((SqlSugarClient)BaseDal.Db).BeginTran();
+
+                int id = BaseDal.Db.Insertable(entity).ExecuteReturnIdentity();
+
+                for (int i = 0; i < list.Count; i++)
+                {
+                    TDetail detail = list[i];
+                    typeof(TDetail).SetDetailId(detail, id, name);
+                }
+
+                BaseDal.Db.Insertable(list).ExecuteCommand();
+
+                ((SqlSugarClient)BaseDal.Db).CommitTran();
+
+                content = WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                ((SqlSugarClient)BaseDal.Db).RollbackTran();
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+
+        /// <summary>
+        /// 淇敼鏁版嵁
+        /// </summary>
+        /// <param name="entity">鍗曚釜瀹炰綋</param>
+        /// <returns></returns>
+        public virtual WebResponseContent UpdateData(TEntity entity)
+        {
+            try
+            {
+                return BaseDal.UpdateData(entity) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 淇敼鏁版嵁
+        /// </summary>
+        /// <param name="entities">瀹炰綋闆嗗悎</param>
+        /// <returns></returns>
+        public virtual WebResponseContent UpdateData(List<TEntity> entities)
+        {
+            try
+            {
+                return BaseDal.UpdateData(entities) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 淇敼鏁版嵁
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        public virtual WebResponseContent UpdateData(SaveModel saveModel)
+        {
+            try
+            {
+                List<string>? list = UpdateIgnoreColOnExecute?.Invoke(saveModel);
+                if (saveModel == null || saveModel.MainData == null || saveModel.MainData.Count == 0)//鍒ゆ柇鍙傛暟鏄惁浼犲叆
+                {
+                    return WebResponseContent.Instance.Error("浼犲弬閿欒,鍙傛暟涓嶈兘涓虹┖");
+                }
+                string validResult = typeof(TEntity).ValidateDicInEntity(saveModel.MainData, false, TProperties, list?.ToArray() ?? null);
+
+                if (!string.IsNullOrEmpty(validResult))
+                {
+                    return WebResponseContent.Instance.Error(validResult);
+                }
+
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                if (keyPro == null)
+                {
+                    return WebResponseContent.Instance.Error("璇峰厛璁剧疆涓婚敭");
+                }
+
+                TEntity entity = saveModel.MainData.DicToModel<TEntity>();
+
+                List<string> listCol = new List<string>();
+                foreach (var item in saveModel.MainData)
+                {
+                    PropertyInfo? propertyInfo = typeof(TEntity).GetProperty(item.Key);
+                    if (propertyInfo == null)
+                    {
+                        propertyInfo = typeof(TEntity).GetProperty(item.Key.FirstLetterToLower());
+                        if (propertyInfo == null)
+                        {
+                            propertyInfo = typeof(TEntity).GetProperty(item.Key.FirstLetterToUpper());
+                        }
+                    }
+
+                    listCol.Add(propertyInfo?.Name);
+                }
+
+                if (saveModel.DetailData == null || saveModel.DetailData.Count == 0)
+                {
+                    if (list != null)
+                        listCol = listCol.Where(x => !list.Contains(x)).ToList();
+                    bool result = BaseDal.UpdateData(entity, listCol, list);
+                    return WebResponseContent.Instance.OK();
+                }
+
+                if (typeof(TEntity).GetNavigatePro() == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈厤缃鑸睘鎬�");
+                }
+
+                Type detailType = typeof(TEntity).GetDetailType();
+                MethodInfo? methodInfo = GetType().GetMethod("UpdateDataInculdesDetail");
+                methodInfo = methodInfo?.MakeGenericMethod(new Type[] { detailType });
+                object? obj = methodInfo?.Invoke(this, new object[] { entity, detailType, saveModel.DetailData, saveModel.DelKeys });
+                return obj as WebResponseContent;
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent UpdateDataInculdesDetail<TDetail>(TEntity entity, Type detailType, List<Dictionary<string, object>> detailDics, List<object> delKeys) where TDetail : class, new()
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string name = typeof(TEntity).GetMainIdByDetail();
+                string reslut = detailType.ValidateDicInEntity(detailDics, true, new string[] { name });
+                if (reslut != string.Empty)
+                    return WebResponseContent.Instance.Error(reslut);
+
+                List<TDetail> list = detailDics.DicToIEnumerable<TDetail>();
+
+                List<object> dynamicDelKeys = new List<object>();
+                if (delKeys != null)
+                {
+                    for (int i = 0; i < delKeys.Count; i++)
+                    {
+                        dynamicDelKeys.Add(delKeys[i]);
+                    }
+                }
+
+                List<TDetail> updateRows = new List<TDetail>();
+                List<TDetail> addRows = new List<TDetail>();
+
+                for (int i = 0; i < list.Count; i++)
+                {
+                    object detailId = typeof(TDetail).GetPropertyValue(list[i], typeof(TDetail).GetKeyName());
+                    if (detailId != null)
+                    {
+                        if (detailId.ToString() != "0")
+                        {
+                            updateRows.Add(list[i]);
+                        }
+                        else
+                        {
+                            addRows.Add(list[i]);
+                        }
+                    }
+                }
+
+                object mainId = typeof(TEntity).GetPropertyValue(entity, typeof(TEntity).GetKeyName());
+                if (mainId != null)
+                {
+                    ((SqlSugarClient)BaseDal.Db).BeginTran();
+
+                    if (dynamicDelKeys.Count > 0)
+                        BaseDal.Db.Deleteable<object>().AS(detailType.Name).Where($"{detailType.GetKeyName()} in (@id)", new { id = dynamicDelKeys.ToArray() }).ExecuteCommandHasChange();
+
+                    BaseDal.Db.Updateable(entity).ExecuteCommandHasChange();
+
+                    BaseDal.Db.Updateable(updateRows).ExecuteCommand();
+
+                    for (int i = 0; i < addRows.Count; i++)
+                    {
+                        TDetail detail = addRows[i];
+                        typeof(TDetail).SetDetailId(detail, mainId, name);
+                    }
+
+                    BaseDal.Db.Insertable(addRows).ExecuteCommand();
+
+                    ((SqlSugarClient)BaseDal.Db).CommitTran();
+
+                    content = WebResponseContent.Instance.OK();
+                }
+                else
+                {
+                    content = WebResponseContent.Instance.Error("鏈壘鍒颁富琛ㄤ富閿��");
+                }
+
+            }
+            catch (Exception ex)
+            {
+                ((SqlSugarClient)BaseDal.Db).RollbackTran();
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="key">涓婚敭</param>
+        /// <returns></returns>
+        public virtual WebResponseContent DeleteData(object key)
+        {
+            try
+            {
+                return BaseDal.DeleteDataById(key) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="keys">涓婚敭鏁扮粍</param>
+        /// <returns></returns>
+        public virtual WebResponseContent DeleteData(object[] keys)
+        {
+            try
+            {
+                if (typeof(TEntity).GetNavigatePro() == null)
+                    return BaseDal.DeleteDataByIds(keys) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+                else
+                {
+                    if (keys != null)
+                    {
+                        Type detailType = typeof(TEntity).GetDetailType();
+                        string name = typeof(TEntity).GetMainIdByDetail();
+                        List<object> dynamicDelKeys = new List<object>();
+
+                        for (int i = 0; i < keys.Length; i++)
+                        {
+                            dynamicDelKeys.Add(keys[i]);
+                        }
+                        ((SqlSugarClient)BaseDal.Db).BeginTran();
+
+                        if (dynamicDelKeys.Count > 0)
+                            BaseDal.Db.Deleteable<object>().AS(detailType.Name).Where($"{name} in (@id)", new { id = dynamicDelKeys.ToArray() }).ExecuteCommandHasChange();
+
+                        BaseDal.DeleteDataByIds(keys);
+
+                        ((SqlSugarClient)BaseDal.Db).CommitTran();
+
+                        return WebResponseContent.Instance.OK();
+                    }
+                    else
+                    {
+                        return WebResponseContent.Instance.Error("鍙傛暟閿欒");
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                ((SqlSugarClient)BaseDal.Db).RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="entity">鍗曚釜瀹炰綋</param>
+        /// <returns></returns>
+        public virtual WebResponseContent DeleteData(TEntity entity)
+        {
+            try
+            {
+                return BaseDal.DeleteData(entity) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏁版嵁
+        /// </summary>
+        /// <param name="entities">瀹炰綋闆嗗悎</param>
+        /// <returns></returns>
+        public virtual WebResponseContent DeleteData(List<TEntity> entities)
+        {
+            try
+            {
+                return BaseDal.DeleteData(entities) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 瀵煎嚭鏁版嵁
+        /// </summary>
+        /// <param name="pageData"></param>
+        /// <returns></returns>
+        public virtual WebResponseContent Export(PageDataOptions options)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Type t = typeof(TEntity);
+
+                string savePath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelExport";
+                IExporter exporter = new ExcelExporter();
+                string wheres = options.ValidatePageOptions(TProperties);
+                //鑾峰彇鎺掑簭瀛楁
+                Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(TProperties);
+
+                List<TEntity> entities = BaseDal.QueryData(wheres, orderbyDic);
+
+                byte[] data = exporter.ExportAsByteArray(entities).Result;
+
+                string fileName = "";
+                SugarTable sugarTable = t.GetCustomAttribute<SugarTable>();
+                if (sugarTable != null)
+                {
+                    fileName = sugarTable.TableDescription + ".xlsx";
+                }
+                else
+                {
+                    fileName = nameof(TEntity) + ".xlsx";
+                }
+
+                FileHelper.WriteFile(savePath, fileName, data);
+
+                content = WebResponseContent.Instance.OK(data: savePath + "\\" + fileName);
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+
+        /// <summary>
+        /// 瀵煎叆鏁版嵁
+        /// </summary>
+        /// <param name="files"></param>
+        /// <returns></returns>
+        public virtual WebResponseContent Import(List<IFormFile> files)
+        {
+            try
+            {
+                if (files == null || files.Count == 0)
+                    return new WebResponseContent { Status = true, Message = "璇烽�夋嫨涓婁紶鐨勬枃浠�" };
+                Microsoft.AspNetCore.Http.IFormFile formFile = files[0];
+                string dicPath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelImprot/{DateTime.Now.ToString("yyyMMdd")}/{typeof(TEntity).Name}/";
+                if (!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath);
+                string fileName = $"{Guid.NewGuid()}_{formFile.FileName}";
+                dicPath = $"{dicPath}{fileName}";
+                using (FileStream stream = new FileStream(dicPath, FileMode.Create))
+                {
+                    formFile.CopyTo(stream);
+                }
+                ExcelImporter importer = new ExcelImporter();
+                ImportResult<TEntity> importResult = importer.Import<TEntity>(dicPath, "").Result;
+                if (importResult.HasError)
+                {
+                    return WebResponseContent.Instance.Error(importResult.TemplateErrors.Serialize());
+                }
+                BaseDal.AddData(importResult.Data.ToList());
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 涓婁紶鏂囦欢
+        /// </summary>
+        /// <param name="files"></param>
+        /// <returns></returns>
+        public virtual WebResponseContent Upload(List<IFormFile> files)
+        {
+            throw new NotImplementedException();
+        }
+
+        /// <summary>
+        /// 妯℃澘涓嬭浇
+        /// </summary>
+        /// <returns></returns>
+        public virtual WebResponseContent DownLoadTemplate()
+        {
+            WebResponseContent content = new WebResponseContent();
+            Type t = typeof(TEntity);
+            IExporter exporter = new ExcelExporter();
+            byte[] data = exporter.ExportHeaderAsByteArray(new TEntity()).Result;
+            string fileName = "";
+            SugarTable sugarTable = t.GetCustomAttribute<SugarTable>();
+            if (sugarTable != null)
+            {
+                fileName = sugarTable.TableDescription + "瀵煎叆妯℃澘.xlsx";
+            }
+            else
+            {
+                fileName = nameof(TEntity) + "瀵煎叆妯℃澘.xlsx";
+            }
+            string savePath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelImprotTemplate";
+            FileHelper.WriteFile(savePath, fileName, data);
+
+            content = WebResponseContent.Instance.OK(data: savePath + "\\" + fileName);
+            return content;
+        }
+
+        public WebResponseContent ExportSeedData()
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string seedDataFolder = $"WIDESEA_DB.DBSeed.Json/{typeof(TEntity).Name}.tsv";
+                List<TEntity> deviceInfos = BaseDal.QueryData();
+                string str = JsonConvert.SerializeObject(deviceInfos, Formatting.Indented);
+                List<Dictionary<string, object>> keyValuePairs = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(str);
+                FileHelper.WriteFileAndDelOldFile($"wwwroot/{seedDataFolder}", str);
+                content = WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceFunFilter.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceFunFilter.cs"
new file mode 100644
index 0000000..645355c
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceFunFilter.cs"
@@ -0,0 +1,238 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.BaseServices
+{
+    public abstract class ServiceFunFilter<T> where T : class
+    {
+        /// <summary>
+        /// 2020.08.15鏄惁寮�鍚绉熸埛鍔熻兘
+        /// 浣跨敤鏂规硶瑙佹枃妗f垨SellOrderService.cs
+        /// </summary>
+        protected bool IsMultiTenancy { get; set; }
+
+        /// <summary>
+        /// 鏌ヨ鐣岄潰table 缁熻銆佹眰鍜屻�佸钩鍧囧�肩瓑
+        /// 瀹炵幇鏂瑰紡
+        ///SummaryExpress = (IQueryable<App_TransactionAvgPrice> queryable) =>
+        //                {
+        //                return queryable.GroupBy(x => 1).Select(x => new
+        //                {
+        //                    AvgPrice = x.Average(o => o.AvgPrice),
+        //                    Enable = x.Sum(o => o.Enable)
+        //            }).FirstOrDefault();
+        //};
+        /// </summary>
+        //   protected Func<IGrouping<T, T>, object> SummaryExpress = null;
+        protected Func<IQueryable<T>, object> SummaryExpress = null;
+
+        /// <summary>
+        /// 鏄庣粏table 缁熻銆佹眰鍜屻�佸钩鍧囧�肩瓑
+        /// </summary>
+        /// <typeparam name="Detail"></typeparam>
+        /// <param name="queryeable"></param>
+        /// <returns></returns>
+        //protected abstract object GetDetailSummary<Detail>(IQueryable<Detail> queryeable);
+
+        /// <summary>
+        /// 鏄惁寮�鍚敤鎴锋暟鎹潈闄�,true=鐢ㄦ埛鍙兘鎿嶄綔鑷繁(鍙婁笅绾ц鑹�)鍒涘缓鐨勬暟鎹�,濡�:鏌ヨ銆佸垹闄ゃ�佷慨鏀圭瓑鎿嶄綔
+        /// 娉ㄦ剰锛氶渶瑕佸湪浠g爜鐢熸垚鍣ㄧ晫闈㈤�夋嫨銆愭槸銆戝強鐢熸垚Model鎵嶄細鐢熸晥)
+        /// </summary>
+        protected bool LimitCurrentUserPermission { get; set; } = false;
+
+        ///榛樿瀵煎嚭鏈�澶ц〃鏁伴噺锛�0涓嶉檺鍒� 
+        protected int Limit { get; set; } = 0;
+
+        /// <summary>
+        /// 榛樿涓婁紶鏂囦欢澶у皬闄愬埗3M
+        /// </summary>
+        protected int LimitUpFileSizee { get; set; } = 3;
+
+
+        /// <summary>
+        /// 2020.08.15娣诲姞鑷畾涔夊師鐢熸煡璇ql,杩欎釜瀵逛簬涓嶆兂鍐欒〃杈惧紡鍏宠仈鎴栬�呭鏉傛煡璇㈤潪甯告湁鐢�
+        /// 渚嬶細QuerySql=$"select * from tb1 as a where  a.name='xxxx' x.id in (select b.id from tb2 b)";
+        ///  select * 杩欓噷鍙互鑷畾涔夛紝浣唖elect 蹇呴』杩斿洖琛ㄦ墍鏈夌殑鍒楋紝涓嶈兘灏�
+        /// </summary>
+        protected string QuerySql = null;
+
+        /// <summary>
+        /// 鏌ヨ鍓�,瀵圭幇鍦ㄦ湁鐨勬煡璇㈠瓧绗︿覆鏉′欢澧炲姞鎴栧垹闄�
+        /// </summary>
+        protected Action<List<SearchParameters>> QueryRelativeList { get; set; }
+
+        //鏌ヨ鍓�,鍦ㄧ幇鏈夌殑鏌ヨ鏉′欢涓婇�氳繃琛ㄨ揪寮忎慨鏀规煡璇㈡潯浠�
+        protected Func<IQueryable<T>, IQueryable<T>> QueryRelativeExpression { get; set; }
+
+
+        /// <summary>
+        /// 鎸囧畾鏌ヨ鐨勫垪锛屾牸寮�:Expression<Func<T, object>> exp = x => new { x.瀛楁1, x.瀛楁2 }(鏆傛椂鏈惎鐢�)
+        /// </summary>
+        protected Expression<Func<T, object>> Columns { get; set; }
+
+        /// <summary>
+        /// 璁剧疆鏌ヨ鎺掑簭鍙傛暟鍙婃柟寮�,鍙傛暟鏍煎紡涓猴細
+        ///  Expression<Func<T, Dictionary<object, bool>>> orderBy = x => new Dictionary<object, QueryOrderBy>() 
+        ///            {{ x.ID, QueryOrderBy.Asc },{ x.DestWarehouseName, QueryOrderBy.Desc } };
+        /// 杩斿洖鐨勬槸new Dictionary<object, bool>(){{}}key涓烘帓搴忓瓧娈碉紝QueryOrderBy涓烘帓搴忔柟寮�
+        /// </summary>
+        protected Expression<Func<T, Dictionary<object, OrderByType>>> OrderByExpression;
+
+        protected Dictionary<string, OrderByType> OrderByParameters { get; set; }
+
+        protected bool EnableWebOrderBy { get; set; } = true;
+
+        /// <summary>
+        /// 璁剧疆鏌ヨ鐨勮〃鍚�(宸插純鐢�)
+        /// </summary>
+        protected string TableName { get; set; }
+
+        /// <summary>
+        /// 椤甸潰鏌ヨ鎴栧鍑猴紝浠庢暟鎹簱鏌ヨ鍑烘潵鐨勭粨鏋�
+        /// </summary>
+        protected Action<PageGridData<T>> GetPageDataOnExecuted;
+
+        /// <summary>
+        /// 璋冪敤鏂板缓澶勭悊鍓�(SaveModel涓轰紶鍏ョ殑鍘熺敓鏁版嵁)
+        /// </summary>
+        protected Func<SaveModel, WebResponseContent> AddOnExecute;
+
+        /// <summary>
+        /// 璋冪敤鏂板缓淇濆瓨鏁版嵁搴撳墠澶勭悊(宸插皢鎻愪氦鐨勫師鐢熸暟鎹浆鎹㈡垚浜嗗璞�)
+        ///  Func<T, object,ResponseData>  T涓轰富琛ㄦ暟鎹紝object涓烘槑缁嗘暟鎹�(濡傛灉闇�瑕佷娇鐢ㄦ槑缁嗗璞�,璇风敤 object as List<T>杞崲) 
+        /// </summary>
+        protected Func<T, object, WebResponseContent> AddOnExecuting;
+
+        /// <summary>
+        /// 璋冪敤鏂板缓淇濆瓨鏁版嵁搴撳悗澶勭悊銆�
+        /// **瀹炵幇褰撳墠鏂规硶鏃讹紝鍐呴儴榛樿宸茬粡寮�鍚簨鍔★紝濡傛灉瀹炵幇鐨勬柟娉曟搷浣滅殑鏄悓涓�鏁版嵁搴�,鍒欎笉闇�瑕佸湪AddOnExecuted涓簨鍔�
+        ///  Func<T, object,ResponseData>  T涓轰富琛ㄦ暟鎹紝object涓烘槑缁嗘暟鎹�(濡傛灉闇�瑕佷娇鐢ㄦ槑缁嗗璞�,璇风敤 object as List<T>杞崲) 
+        ///  姝ゅ宸插紑鍚簡DbContext浜嬪姟(閲嶇偣),濡傛灉杩樻湁鍏朵粬涓氬姟澶勪簨锛岀洿鎺ュ湪杩欓噷鍐橢F浠g爜,涓嶉渶瑕佸啀寮�鍚簨鍔�
+        /// 濡傛灉鎵ц鐨勬槸鎵嬪啓sql璇风敤repository.DbContext.Database.ExecuteSqlCommand()鎴� repository.DbContext.Set<T>().FromSql鎵ц鍏蜂綋sql璇彞
+        /// </summary>
+        protected Func<T, object, WebResponseContent> AddOnExecuted;
+
+        /// <summary>
+        /// 杩涘叆瀹℃壒娴佺▼鏂规硶涔嬪墠
+        /// </summary>
+        protected Func<T, bool> AddWorkFlowExecuting;
+
+        /// <summary>
+        /// 鍐欏叆瀹℃壒娴佺▼鏁版嵁涔嬪悗
+        /// list:瀹℃壒鐨勪汉id
+        /// </summary>
+        protected Action<T, List<int>> AddWorkFlowExecuted;
+
+        /// <summary>
+        /// 璋冪敤鏇存柊鏂规硶鍓嶅鐞�(SaveModel涓轰紶鍏ョ殑鍘熺敓鏁版嵁)
+        /// </summary>
+        protected Func<SaveModel, WebResponseContent> UpdateOnExecute;
+
+        /// <summary>
+        /// 璋冪敤鏇存柊鏂规硶鍓嶅鐞�(SaveModel涓轰紶鍏ョ殑鍘熺敓鏁版嵁)
+        /// </summary>
+        protected Func<SaveModel, List<string>> UpdateIgnoreColOnExecute;
+
+        /// <summary>
+        ///  璋冪敤鏇存柊鏂规硶淇濆瓨鏁版嵁搴撳墠澶勭悊
+        ///  (宸插皢鎻愪氦鐨勫師鐢熸暟鎹浆鎹㈡垚浜嗗璞�,灏嗘槑缁嗘柊澧炪�佷慨鏀广�佸垹闄ょ殑鏁版嵁鍒嗗埆鐢╫bject1/2/3鏍囪瘑鍑烘潵 )
+        ///  T=鏇存柊鐨勪富琛ㄥ璞�
+        ///  object1=涓烘柊澧炴槑缁嗙殑瀵硅薄锛屼娇鐢ㄦ椂灏唎bject as List<T>杞崲涓�涓�
+        ///  object2=涓烘洿鏂版槑缁嗙殑瀵硅薄
+        ///  List<object>=涓哄垹闄ょ殑缁嗙殑瀵硅薄Key
+        /// </summary>
+        protected Func<T, object, object, List<object>, WebResponseContent> UpdateOnExecuting;
+
+        /// <summary>
+        ///  璋冪敤鏇存柊鏂规硶淇濆瓨鏁版嵁搴撳悗澶勭悊
+        ///   **瀹炵幇褰撳墠鏂规硶鏃讹紝鍐呴儴榛樿宸茬粡寮�鍚簨鍔★紝濡傛灉瀹炵幇鐨勬柟娉曟搷浣滅殑鏄悓涓�鏁版嵁搴�,鍒欎笉闇�瑕佸湪UpdateOnExecuted涓簨鍔�
+        ///  (宸插皢鎻愪氦鐨勫師鐢熸暟鎹浆鎹㈡垚浜嗗璞�,灏嗘槑缁嗘柊澧炪�佷慨鏀广�佸垹闄ょ殑鏁版嵁鍒嗗埆鐢╫bject1/2/3鏍囪瘑鍑烘潵 )
+        ///  T=鏇存柊鐨勪富琛ㄥ璞�
+        ///  object1=涓烘柊澧炴槑缁嗙殑瀵硅薄锛屼娇鐢ㄦ椂灏唎bject as List<T>杞崲涓�涓�
+        ///  object2=涓烘洿鏂版槑缁嗙殑瀵硅薄
+        ///  List<object>=涓哄垹闄ょ殑缁嗙殑瀵硅薄Key
+        /// 姝ゅ宸插紑鍚簡DbContext浜嬪姟(閲嶇偣),濡傛灉杩樻湁鍏朵粬涓氬姟澶勪簨锛岀洿鎺ュ湪杩欓噷鍐橢F浠g爜,涓嶉渶瑕佸啀寮�鍚簨鍔�
+        /// 濡傛灉鎵ц鐨勬槸鎵嬪啓sql璇风敤repository.DbContext.Database.ExecuteSqlCommand()鎴� repository.DbContext.Set<T>().FromSql鎵ц鍏蜂綋sql璇彞
+        /// </summary>
+        protected Func<T, object, object, List<object>, WebResponseContent> UpdateOnExecuted;
+
+        /// <summary>
+        /// 鍒犻櫎鍓嶅鐞�,object[]鍑嗗鍒犻櫎鐨勪富閿�
+        /// </summary>
+        protected Func<object[], WebResponseContent> DelOnExecuting;
+
+        /// <summary>
+        /// 鍒犻櫎鍚庡鐞�,object[]宸插垹闄ょ殑涓婚敭,姝ゅ宸插紑鍚簡DbContext浜嬪姟(閲嶇偣),濡傛灉杩樻湁鍏朵粬涓氬姟澶勪簨锛岀洿鎺ュ湪杩欓噷鍐橢F浠g爜,涓嶉渶瑕佸啀寮�鍚簨鍔�
+        /// 濡傛灉鎵ц鐨勬槸鎵嬪啓sql璇风敤repository.DbContext.Database.ExecuteSqlCommand()鎴� repository.DbContext.Set<T>().FromSql鎵ц鍏蜂綋sql璇彞
+        /// </summary>
+        protected Func<object[], WebResponseContent> DelOnExecuted;
+
+        /// <summary>
+        /// 瀹℃牳鍓嶅鐞�
+        /// </summary>
+        protected Func<List<T>, WebResponseContent> AuditOnExecuting;
+        /// <summary>
+        /// 瀹℃牳鍚庡鐞�
+        /// </summary>
+        protected Func<List<T>, WebResponseContent> AuditOnExecuted;
+
+
+        /// <summary>
+        ///瀵煎嚭鍓嶅鐞�,DataTable瀵煎嚭鐨勮〃鏁版嵁
+        ///List<T>瀵煎嚭鐨勬暟鎹�, List<string>蹇界暐涓嶉渶瑕佸鍑虹殑瀛楁
+        ///姝ゆ柟娉曚笉寤鸿浣跨敤,鐢变笅闈xportColumns濮旀墭鏇夸唬2020.05.07
+        /// </summary>
+        protected Func<List<T>, List<string>, WebResponseContent> ExportOnExecuting;
+
+        /// <summary>
+        /// 2020.05.07
+        /// 瀵煎嚭琛ㄦ暟鎹�(鐣岄潰涓婂鍑烘搷浣�),鎸囧畾瑕佸鍑虹殑鍒楋紝鏍煎紡:Expression<Func<T, object>> exp = x => new { x.瀛楁1, x.瀛楁2 }
+        /// </summary>
+        protected Expression<Func<T, object>> ExportColumns { get; set; }
+
+
+        /// <summary>
+        /// 2020.05.07
+        /// 瀵煎嚭涓嬭浇妯℃澘锛屾寚瀹氳瀵煎嚭鐨勬ā鏉垮垪锛屾牸寮�:Expression<Func<T, object>> exp = x => new { x.瀛楁1, x.瀛楁2 }
+        /// </summary>
+        protected Expression<Func<T, object>> DownLoadTemplateColumns { get; set; }
+
+
+        /// <summary>
+        /// 瀵煎叆淇濆瓨鍚�
+        /// </summary>
+        protected Func<List<T>, WebResponseContent> ImportOnExecuted;
+
+        /// <summary>
+        /// 瀵煎叆淇濆瓨鍓�
+        /// </summary>
+        protected Func<List<T>, WebResponseContent> ImportOnExecuting;
+
+        /// <summary>
+        /// 瀵煎叆鏃朵笉楠岃瘉涓嬫媺妗嗘暟鎹簮鐨勫瓧娈靛��2023.05.03
+        /// </summary>
+        protected Expression<Func<T, object>> ImportIgnoreSelectValidationColumns;
+
+        /// <summary>
+        /// 2022.06.20澧炲姞鍘熺敓excel璇诲彇鏂规硶(瀵煎叆鏃跺彲浠ヨ嚜瀹氫箟璇诲彇excel鍐呭)
+        /// string=褰撳墠璇诲彇鐨別xcel鍗曞厓鏍肩殑鍊�
+        /// ExcelWorksheet=excel瀵硅薄
+        /// ExcelRange褰撳墠excel鍗曞厓鏍煎璞�
+        /// int=褰撳墠璇诲彇鐨勭鍑犳暟
+        /// int=褰撳墠璇诲彇鐨勭鍑犲垪
+        /// string=杩斿洖鐨勫��
+        /// </summary>
+        //protected Func<string, ExcelWorksheet, ExcelRange, int, int, string> ImportOnReadCellValue;
+
+
+        /// <summary>
+        /// 鑷畾涔変笂浼犳枃浠跺す(2022.10.07)
+        /// </summary>
+        protected string UploadFolder = null;
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Caches/Caching.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Caches/Caching.cs"
new file mode 100644
index 0000000..fff2699
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Caches/Caching.cs"
@@ -0,0 +1,351 @@
+锘縰sing Microsoft.Extensions.Caching.Distributed;
+using Microsoft.Extensions.Caching.Memory;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Const;
+
+namespace WIDESEA_Core.Caches
+{
+    /// <summary>
+    /// 瀹炰緥鍖栫紦瀛樻帴鍙Caching
+    /// </summary>
+    public class Caching : ICaching
+    {
+        private readonly IDistributedCache _cache;
+
+        public Caching(IDistributedCache cache)
+        {
+            _cache = cache;
+        }
+
+        private byte[] GetBytes<T>(T source)
+        {
+            return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(source));
+        }
+
+        public IDistributedCache Cache => _cache;
+
+        public void AddCacheKey(string cacheKey)
+        {
+            var res = _cache.GetString(CacheConst.KeyAll);
+            var allkeys = string.IsNullOrWhiteSpace(res) ? new List<string>() : JsonConvert.DeserializeObject<List<string>>(res);
+            if (!allkeys.Any(m => m == cacheKey))
+            {
+                allkeys.Add(cacheKey);
+                _cache.SetString(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys));
+            }
+        }
+
+        /// <summary>
+        /// 澧炲姞缂撳瓨Key
+        /// </summary>
+        /// <param name="cacheKey"></param>
+        /// <returns></returns>
+        public async Task AddCacheKeyAsync(string cacheKey)
+        {
+            var res = await _cache.GetStringAsync(CacheConst.KeyAll);
+            var allkeys = string.IsNullOrWhiteSpace(res) ? new List<string>() : JsonConvert.DeserializeObject<List<string>>(res);
+            if (!allkeys.Any(m => m == cacheKey))
+            {
+                allkeys.Add(cacheKey);
+                await _cache.SetStringAsync(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys));
+            }
+        }
+
+        public void DelByPattern(string key)
+        {
+            var allkeys = GetAllCacheKeys();
+            if (allkeys == null) return;
+
+            var delAllkeys = allkeys.Where(u => u.Contains(key)).ToList();
+            delAllkeys.ForEach(u => { _cache.Remove(u); });
+
+            // 鏇存柊鎵�鏈夌紦瀛橀敭
+            allkeys = allkeys.Where(u => !u.Contains(key)).ToList();
+            _cache.SetString(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys));
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏌愮壒寰佸叧閿瓧缂撳瓨
+        /// </summary>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        public async Task DelByPatternAsync(string key)
+        {
+            var allkeys = await GetAllCacheKeysAsync();
+            if (allkeys == null) return;
+
+            var delAllkeys = allkeys.Where(u => u.Contains(key)).ToList();
+            delAllkeys.ForEach(u => { _cache.Remove(u); });
+
+            // 鏇存柊鎵�鏈夌紦瀛橀敭
+            allkeys = allkeys.Where(u => !u.Contains(key)).ToList();
+            await _cache.SetStringAsync(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys));
+        }
+
+        public void DelCacheKey(string cacheKey)
+        {
+            var res = _cache.GetString(CacheConst.KeyAll);
+            var allkeys = string.IsNullOrWhiteSpace(res) ? new List<string>() : JsonConvert.DeserializeObject<List<string>>(res);
+            if (allkeys.Any(m => m == cacheKey))
+            {
+                allkeys.Remove(cacheKey);
+                _cache.SetString(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys));
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎缂撳瓨
+        /// </summary>
+        /// <param name="cacheKey"></param>
+        /// <returns></returns>
+        public async Task DelCacheKeyAsync(string cacheKey)
+        {
+            var res = await _cache.GetStringAsync(CacheConst.KeyAll);
+            var allkeys = string.IsNullOrWhiteSpace(res) ? new List<string>() : JsonConvert.DeserializeObject<List<string>>(res);
+            if (allkeys.Any(m => m == cacheKey))
+            {
+                allkeys.Remove(cacheKey);
+                await _cache.SetStringAsync(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys));
+            }
+        }
+
+        public bool Exists(string cacheKey)
+        {
+            var res = _cache.Get(cacheKey);
+            return res != null;
+        }
+
+        /// <summary>
+        /// 妫�鏌ョ粰瀹� key 鏄惁瀛樺湪
+        /// </summary>
+        /// <param name="cacheKey">閿�</param>
+        /// <returns></returns>
+        public async Task<bool> ExistsAsync(string cacheKey)
+        {
+            var res = await _cache.GetAsync(cacheKey);
+            return res != null;
+        }
+
+        public List<string> GetAllCacheKeys()
+        {
+            var res = _cache.GetString(CacheConst.KeyAll);
+            return string.IsNullOrWhiteSpace(res) ? null : JsonConvert.DeserializeObject<List<string>>(res);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎵�鏈夌紦瀛樺垪琛�
+        /// </summary>
+        /// <returns></returns>
+        public async Task<List<string>> GetAllCacheKeysAsync()
+        {
+            var res = await _cache.GetStringAsync(CacheConst.KeyAll);
+            return string.IsNullOrWhiteSpace(res) ? null : JsonConvert.DeserializeObject<List<string>>(res);
+        }
+
+        public T Get<T>(string cacheKey)
+        {
+            var res = _cache.Get(cacheKey);
+            return res == null ? default : JsonConvert.DeserializeObject<T>(Encoding.UTF8.GetString(res));
+        }
+
+        /// <summary>
+        /// 鑾峰彇缂撳瓨
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="cacheKey"></param>
+        /// <returns></returns>
+        public async Task<T> GetAsync<T>(string cacheKey)
+        {
+            var res = await _cache.GetAsync(cacheKey);
+            return res == null ? default : JsonConvert.DeserializeObject<T>(Encoding.UTF8.GetString(res));
+        }
+
+        public object Get(Type type, string cacheKey)
+        {
+            var res = _cache.Get(cacheKey);
+            return res == null ? default : JsonConvert.DeserializeObject(Encoding.UTF8.GetString(res), type);
+        }
+
+        public async Task<object> GetAsync(Type type, string cacheKey)
+        {
+            var res = await _cache.GetAsync(cacheKey);
+            return res == null ? default : JsonConvert.DeserializeObject(Encoding.UTF8.GetString(res), type);
+        }
+
+        public string GetString(string cacheKey)
+        {
+            return _cache.GetString(cacheKey);
+        }
+
+        /// <summary>
+        /// 鑾峰彇缂撳瓨
+        /// </summary>
+        /// <param name="cacheKey"></param>
+        /// <returns></returns>
+        public async Task<string> GetStringAsync(string cacheKey)
+        {
+            return await _cache.GetStringAsync(cacheKey);
+        }
+
+        public void Remove(string key)
+        {
+            _cache.Remove(key);
+            DelCacheKey(key);
+        }
+
+        /// <summary>
+        /// 鍒犻櫎缂撳瓨
+        /// </summary>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        public async Task RemoveAsync(string key)
+        {
+            await _cache.RemoveAsync(key);
+            await DelCacheKeyAsync(key);
+        }
+
+        public void RemoveAll()
+        {
+            var catches = GetAllCacheKeys();
+            foreach (var @catch in catches) Remove(@catch);
+
+            catches.Clear();
+            _cache.SetString(CacheConst.KeyAll, JsonConvert.SerializeObject(catches));
+        }
+
+        public async Task RemoveAllAsync()
+        {
+            var catches = await GetAllCacheKeysAsync();
+            foreach (var @catch in catches) await RemoveAsync(@catch);
+
+            catches.Clear();
+            await _cache.SetStringAsync(CacheConst.KeyAll, JsonConvert.SerializeObject(catches));
+        }
+
+
+        public void Set<T>(string cacheKey, T value, TimeSpan? expire = null)
+        {
+            _cache.Set(cacheKey, GetBytes(value),
+                expire == null
+                    ? new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(6) }
+                    : new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = expire });
+
+            AddCacheKey(cacheKey);
+        }
+
+        /// <summary>
+        /// 澧炲姞瀵硅薄缂撳瓨
+        /// </summary>
+        /// <param name="cacheKey"></param>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        public async Task SetAsync<T>(string cacheKey, T value)
+        {
+            await _cache.SetAsync(cacheKey, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value)),
+                new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(6) });
+
+            await AddCacheKeyAsync(cacheKey);
+        }
+
+        /// <summary>
+        /// 澧炲姞瀵硅薄缂撳瓨,骞惰缃繃鏈熸椂闂�
+        /// </summary>
+        /// <param name="cacheKey"></param>
+        /// <param name="value"></param>
+        /// <param name="expire"></param>
+        /// <returns></returns>
+        public async Task SetAsync<T>(string cacheKey, T value, TimeSpan expire)
+        {
+            await _cache.SetAsync(cacheKey, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value)),
+                new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = expire });
+
+            await AddCacheKeyAsync(cacheKey);
+        }
+
+        public void SetPermanent<T>(string cacheKey, T value)
+        {
+            _cache.Set(cacheKey, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value)));
+            AddCacheKey(cacheKey);
+        }
+
+        public async Task SetPermanentAsync<T>(string cacheKey, T value)
+        {
+            await _cache.SetAsync(cacheKey, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value)));
+            await AddCacheKeyAsync(cacheKey);
+        }
+
+        public void SetString(string cacheKey, string value, TimeSpan? expire = null)
+        {
+            if (expire == null)
+                _cache.SetString(cacheKey, value, new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(6) });
+            else
+                _cache.SetString(cacheKey, value, new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = expire });
+
+            AddCacheKey(cacheKey);
+        }
+
+        /// <summary>
+        /// 澧炲姞瀛楃涓茬紦瀛�
+        /// </summary>
+        /// <param name="cacheKey"></param>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        public async Task SetStringAsync(string cacheKey, string value)
+        {
+            await _cache.SetStringAsync(cacheKey, value, new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(6) });
+
+            await AddCacheKeyAsync(cacheKey);
+        }
+
+        /// <summary>
+        /// 澧炲姞瀛楃涓茬紦瀛�,骞惰缃繃鏈熸椂闂�
+        /// </summary>
+        /// <param name="cacheKey"></param>
+        /// <param name="value"></param>
+        /// <param name="expire"></param>
+        /// <returns></returns>
+        public async Task SetStringAsync(string cacheKey, string value, TimeSpan expire)
+        {
+            await _cache.SetStringAsync(cacheKey, value, new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = expire });
+
+            await AddCacheKeyAsync(cacheKey);
+        }
+
+
+        /// <summary>
+        /// 缂撳瓨鏈�澶ц鑹叉暟鎹寖鍥�
+        /// </summary>
+        /// <param name="userId"></param>
+        /// <param name="dataScopeType"></param>
+        /// <returns></returns>
+        public async Task SetMaxDataScopeType(long userId, int dataScopeType)
+        {
+            var cacheKey = CacheConst.KeyMaxDataScopeType + userId;
+            await SetStringAsync(cacheKey, dataScopeType.ToString());
+
+            await AddCacheKeyAsync(cacheKey);
+        }
+
+        /// <summary>
+        ///  鏍规嵁鐖堕敭娓呯┖
+        /// </summary>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        public async Task DelByParentKeyAsync(string key)
+        {
+            var allkeys = await GetAllCacheKeysAsync();
+            if (allkeys == null) return;
+
+            var delAllkeys = allkeys.Where(u => u.StartsWith(key)).ToList();
+            delAllkeys.ForEach(Remove);
+            // 鏇存柊鎵�鏈夌紦瀛橀敭
+            allkeys = allkeys.Where(u => !u.StartsWith(key)).ToList();
+            await SetStringAsync(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys));
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICacheService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICacheService.cs"
new file mode 100644
index 0000000..7deecbf
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICacheService.cs"
@@ -0,0 +1,60 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Caches
+{
+    public interface ICacheService : IDisposable
+    {
+        /// <summary>
+        /// 楠岃瘉缂撳瓨椤规槸鍚﹀瓨鍦�
+        /// </summary>
+        /// <param name="key">缂撳瓨Key</param>
+        /// <returns></returns>
+        bool Exists(string key);
+
+        /// <summary>
+        /// 娣诲姞缂撳瓨
+        /// </summary>
+        /// <param name="key">缂撳瓨Key</param>
+        /// <param name="value">缂撳瓨Value</param>
+        /// <param name="expiresIn">缂撳瓨鏃堕暱</param>
+        /// <param name="isSliding">鏄惁婊戝姩杩囨湡锛堝鏋滃湪杩囨湡鏃堕棿鍐呮湁鎿嶄綔锛屽垯浠ュ綋鍓嶆椂闂寸偣寤堕暱杩囨湡鏃堕棿锛� //new TimeSpan(0, 60, 0);</param>
+        /// <returns></returns>
+        bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false);
+
+        bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false);
+
+        void AddOrUpdate(string key, string value, int expireSeconds = -1, bool isSliding = false);
+
+        /// <summary>
+        /// 鍒犻櫎缂撳瓨
+        /// </summary>
+        /// <param name="key">缂撳瓨Key</param>
+        /// <returns></returns>
+        bool Remove(string key);
+
+        /// <summary>
+        /// 鎵归噺鍒犻櫎缂撳瓨
+        /// </summary>
+        /// <param name="key">缂撳瓨Key闆嗗悎</param>
+        /// <returns></returns>
+        void Remove(IEnumerable<string> keys);
+
+        /// <summary>
+        /// 鑾峰彇缂撳瓨
+        /// </summary>
+        /// <param name="key">缂撳瓨Key</param>
+        /// <returns></returns>
+        T Get<T>(string key) where T : class;
+
+        /// <summary>
+        /// 鑾峰彇缂撳瓨
+        /// </summary>
+        /// <param name="key">缂撳瓨Key</param>
+        /// <returns></returns>
+        string Get(string key);
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICaching.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICaching.cs"
new file mode 100644
index 0000000..052615c
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICaching.cs"
@@ -0,0 +1,59 @@
+锘縰sing Microsoft.Extensions.Caching.Distributed;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Caches
+{
+    /// <summary>
+    /// 缂撳瓨鎶借薄鎺ュ彛,鍩轰簬IDistributedCache灏佽
+    /// </summary>
+    public interface ICaching
+    {
+        public IDistributedCache Cache { get; }
+        void AddCacheKey(string cacheKey);
+        Task AddCacheKeyAsync(string cacheKey);
+
+        void DelByPattern(string key);
+        Task DelByPatternAsync(string key);
+
+        void DelCacheKey(string cacheKey);
+        Task DelCacheKeyAsync(string cacheKey);
+
+        bool Exists(string cacheKey);
+        Task<bool> ExistsAsync(string cacheKey);
+
+        List<string> GetAllCacheKeys();
+        Task<List<string>> GetAllCacheKeysAsync();
+
+        T Get<T>(string cacheKey);
+        Task<T> GetAsync<T>(string cacheKey);
+
+        object Get(Type type, string cacheKey);
+        Task<object> GetAsync(Type type, string cacheKey);
+
+        string GetString(string cacheKey);
+        Task<string> GetStringAsync(string cacheKey);
+
+        void Remove(string key);
+        Task RemoveAsync(string key);
+
+        void RemoveAll();
+        Task RemoveAllAsync();
+
+        void Set<T>(string cacheKey, T value, TimeSpan? expire = null);
+        Task SetAsync<T>(string cacheKey, T value);
+        Task SetAsync<T>(string cacheKey, T value, TimeSpan expire);
+
+        void SetPermanent<T>(string cacheKey, T value);
+        Task SetPermanentAsync<T>(string cacheKey, T value);
+
+        void SetString(string cacheKey, string value, TimeSpan? expire = null);
+        Task SetStringAsync(string cacheKey, string value);
+        Task SetStringAsync(string cacheKey, string value, TimeSpan expire);
+
+        Task DelByParentKeyAsync(string key);
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Caches/MemoryCacheService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Caches/MemoryCacheService.cs"
new file mode 100644
index 0000000..60a2d72
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Caches/MemoryCacheService.cs"
@@ -0,0 +1,113 @@
+锘縰sing Microsoft.Extensions.Caching.Memory;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Caches
+{
+    public class MemoryCacheService : ICacheService
+    {
+        protected IMemoryCache _cache;
+        public MemoryCacheService(IMemoryCache cache)
+        {
+            _cache = cache;
+
+        }
+
+        public bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false)
+        {
+            return AddObject(key, value, expireSeconds, isSliding);
+        }
+
+        public bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false)
+        {
+            if (expireSeconds != -1)
+            {
+                _cache.Set(key,
+                    value,
+                    new MemoryCacheEntryOptions()
+                    .SetSlidingExpiration(new TimeSpan(0, 0, expireSeconds))
+                    );
+            }
+            else
+            {
+                _cache.Set(key, value);
+            }
+
+            return true;
+        }
+
+        public void AddOrUpdate(string key, string value, int expireSeconds = -1, bool isSliding = false)
+        {
+            if (!string.IsNullOrEmpty(Get(key)))
+            {
+                Remove(key);
+                Add(key, value, expireSeconds, isSliding);
+            }
+            else
+            {
+                Add(key, value, expireSeconds, isSliding);
+            }
+        }
+
+        public void Dispose()
+        {
+            if (_cache != null)
+                _cache.Dispose();
+            GC.SuppressFinalize(this);
+        }
+
+        public bool Exists(string key)
+        {
+            if (key == null)
+            {
+                throw new ArgumentNullException(nameof(key));
+            }
+            return _cache.Get(key) != null;
+        }
+
+        public T Get<T>(string key) where T : class
+        {
+            if (key == null)
+            {
+                throw new ArgumentNullException(nameof(key));
+            }
+            return _cache.Get(key) as T;
+        }
+
+        public string? Get(string key)
+        {
+            try
+            {
+                return _cache.Get(key)?.ToString();
+            }
+            catch
+            {
+                return string.Empty;
+            }
+        }
+
+        public bool Remove(string key)
+        {
+            if (key == null)
+            {
+                throw new ArgumentNullException(nameof(key));
+            }
+            _cache.Remove(key);
+
+            return !Exists(key);
+        }
+
+        public void Remove(IEnumerable<string> keys)
+        {
+            if (keys == null)
+            {
+                throw new ArgumentNullException(nameof(keys));
+            }
+
+            keys.ToList().ForEach(item => _cache.Remove(item));
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisCodeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisCodeEnum.cs"
new file mode 100644
index 0000000..8067ce6
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisCodeEnum.cs"
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.CodeConfigEnum
+{
+    /// <summary>
+    /// 瑙f瀽瑙勫垯缂栧彿
+    /// </summary>
+    public enum AnalysisCodeEnum
+    {
+        /// <summary>
+        /// 鍐呯鐮�
+        /// </summary>
+        [Description("鍐呯鐮�")]
+        InnerCode,
+
+        /// <summary>
+        /// 澶栫鐮�
+        /// </summary>
+        [Description("澶栫鐮�")]
+        OutterCode,
+
+        MatSerNumAnalysis
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisFormatTypeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisFormatTypeEnum.cs"
new file mode 100644
index 0000000..a994796
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisFormatTypeEnum.cs"
@@ -0,0 +1,49 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.CodeConfigEnum
+{
+    /// <summary>
+    /// 瑙f瀽鏍煎紡绫诲瀷
+    /// </summary>
+    public enum AnalysisFormatTypeEnum
+    {
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [Description("鐗╂枡缂栧彿")]
+        MTC,
+        /// <summary>
+        /// 鐢熶骇鏃ユ湡
+        /// </summary>
+        [Description("鐢熶骇鏃ユ湡")]
+        MTPD,
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        [Description("鎵规鍙�")]
+        BHN,
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        [Description("鏁伴噺")]
+        MTQ,
+        /// <summary>
+        /// 璁㈠崟鍙�
+        /// </summary>
+        [Description("璁㈠崟鍙�")]
+        ODN,
+
+        [Description("鏈夋晥鏈�")]
+        ED,
+        /// <summary>
+        /// 鍘熷鏁版嵁
+        /// </summary>
+        [Description("鍘熷鏁版嵁")]
+        BD,
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisRuleEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisRuleEnum.cs"
new file mode 100644
index 0000000..7ee4115
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisRuleEnum.cs"
@@ -0,0 +1,27 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.CodeConfigEnum
+{
+    /// <summary>
+    /// 瑙f瀽瑙勫垯
+    /// </summary>
+    public enum AnalysisRuleEnum
+    {
+        /// <summary>
+        /// 鍒嗗壊瀛楃涓插垎鍓�
+        /// </summary>
+        [Description("鍒嗗壊瀛楃涓插垎鍓�")]
+        Split,
+
+        /// <summary>
+        /// 闀垮害鍒嗗壊
+        /// </summary>
+        [Description("闀垮害鍒嗗壊")]
+        Length
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/CodeFormatTypeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/CodeFormatTypeEnum.cs"
new file mode 100644
index 0000000..67e6783
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/CodeFormatTypeEnum.cs"
@@ -0,0 +1,51 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.CodeConfigEnum
+{
+    /// <summary>
+    /// 缂栫爜鏍煎紡绫诲瀷
+    /// </summary>
+    public enum CodeFormatTypeEnum
+    {
+        /// <summary>
+        /// 璧峰瀛楃涓�
+        /// </summary>
+        [Description("璧峰瀛楃涓�")]
+        ST,
+
+        /// <summary>
+        /// 4浣嶆暟骞�
+        /// </summary>
+        [Description("4浣嶆暟骞�")]
+        YYYY,
+
+        /// <summary>
+        /// 2浣嶆暟鏈�
+        /// </summary>
+        [Description("2浣嶆暟鏈�")]
+        MM,
+
+        /// <summary>
+        /// 2浣嶆暟鏃�
+        /// </summary>
+        [Description("2浣嶆暟鏃�")]
+        DD,
+
+        /// <summary>
+        /// 娴佹按鍙�
+        /// </summary>
+        [Description("娴佹按鍙�")]
+        NUM,
+
+        /// <summary>
+        /// 缁撴潫瀛楃涓�
+        /// </summary>
+        [Description("缁撴潫瀛楃涓�")]
+        ED
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/RuleCodeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/RuleCodeEnum.cs"
new file mode 100644
index 0000000..f270e87
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/RuleCodeEnum.cs"
@@ -0,0 +1,49 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.CodeConfigEnum
+{
+    /// <summary>
+    /// 缂栫爜瑙勫垯缂栧彿
+    /// </summary>
+    public enum RuleCodeEnum
+    {
+        /// <summary>
+        /// 鍏ュ簱鍗曞彿缂栫爜瑙勫垯缂栧彿
+        /// </summary>
+        [Description("鍏ュ簱鍗曞彿缂栫爜瑙勫垯缂栧彿")]
+        InboundOrderRule,
+
+        /// <summary>
+        /// 鍑哄簱鍗曞彿缂栫爜瑙勫垯缂栧彿
+        /// </summary>
+        [Description("鍑哄簱鍗曞彿缂栫爜瑙勫垯缂栧彿")]
+        OutboundOrderRule,
+
+        /// <summary>
+        /// 鏀惰揣鍗曞彿缂栫爜瑙勫垯缂栧彿
+        /// </summary>
+        [Description("鏀惰揣鍗曞彿缂栫爜瑙勫垯缂栧彿")]
+        ReceiveOrderRule,
+
+        /// <summary>
+        /// 璐ㄦ鍗曞彿缂栫爜瑙勫垯
+        /// </summary>
+        [Description("璐ㄦ鍗曞彿缂栫爜瑙勫垯")]
+        CheckOrderRule,
+        /// <summary>
+        /// 鍙戞枡鍗曞彿缂栫爜瑙勫垯
+        /// </summary>
+        [Description("鍙戞枡鍗曞彿缂栫爜瑙勫垯")]
+        FLCodeRule,
+        /// <summary>
+        /// 鍏ユ枡鍗曞彿缂栫爜瑙勫垯
+        /// </summary>
+        [Description("鍏ユ枡鍗曞彿缂栫爜瑙勫垯")]
+        RLCodeRule
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/AppSecret.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/AppSecret.cs"
new file mode 100644
index 0000000..8760498
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/AppSecret.cs"
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Const
+{
+    /// <summary>
+    /// 绉橀挜閰嶇疆
+    /// </summary>
+    public struct AppSecret
+    {
+        public const string JWT = "BB3647441FFA4B5DB4E64A29B53CE525";
+
+        public const string Audience = "WIDESEA_WMS";
+
+        public const string Issuer = "WIDESEA_WMS_Owner";
+
+        public const string TokenHeaderName = "Authorization";
+
+        public const string User = "C5ABA9E202D94C43A3CA66002BF77FAF";
+
+        public const string DB = "3F8B7B38AD3D484A89ACA513CBD79F36";
+
+        //杩炴帴瀛楃涓�
+        //Data Source=.;Initial Catalog=WIDESEA_DB_2;User ID=sa;Password=P@ssw0rd;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/CacheConst.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/CacheConst.cs"
new file mode 100644
index 0000000..841d5d2
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/CacheConst.cs"
@@ -0,0 +1,94 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Const
+{
+    /// <summary>
+    /// 缂撳瓨鐩稿叧甯搁噺
+    /// </summary>
+    public class CacheConst
+    {
+        /// <summary>
+        /// 鐢ㄦ埛缂撳瓨
+        /// </summary>
+        public const string KeyUser = "user:";
+
+        /// <summary>
+        /// 鐢ㄦ埛閮ㄩ棬缂撳瓨
+        /// </summary>
+        public const string KeyUserDepart = "userDepart:";
+
+        /// <summary>
+        /// 鑿滃崟缂撳瓨
+        /// </summary>
+        public const string KeyMenu = "menu:";
+
+        /// <summary>
+        /// 鑿滃崟
+        /// </summary>
+        public const string KeyPermissions = "permissions";
+
+        /// <summary>
+        /// 鏉冮檺缂撳瓨
+        /// </summary>
+        public const string KeyPermission = "permission:";
+
+        /// <summary>
+        /// 鎺ュ彛璺敱
+        /// </summary>
+        public const string KeyModules = "modules";
+
+        /// <summary>
+        /// 绯荤粺閰嶇疆
+        /// </summary>
+        public const string KeySystemConfig = "sysConfig";
+
+        /// <summary>
+        /// 鏌ヨ杩囨护鍣ㄧ紦瀛�
+        /// </summary>
+        public const string KeyQueryFilter = "queryFilter:";
+
+        /// <summary>
+        /// 鏈烘瀯Id闆嗗悎缂撳瓨
+        /// </summary>
+        public const string KeyOrgIdList = "org:";
+
+        /// <summary>
+        /// 鏈�澶ц鑹叉暟鎹寖鍥寸紦瀛�
+        /// </summary>
+        public const string KeyMaxDataScopeType = "maxDataScopeType:";
+
+        /// <summary>
+        /// 楠岃瘉鐮佺紦瀛�
+        /// </summary>
+        public const string KeyVerCode = "verCode:";
+
+        /// <summary>
+        /// 鎵�鏈夌紦瀛樺叧閿瓧闆嗗悎
+        /// </summary>
+        public const string KeyAll = "keys";
+
+        /// <summary>
+        /// 瀹氭椂浠诲姟缂撳瓨
+        /// </summary>
+        public const string KeyTimer = "timer:";
+
+        /// <summary>
+        /// 鍦ㄧ嚎鐢ㄦ埛缂撳瓨
+        /// </summary>
+        public const string KeyOnlineUser = "onlineuser:";
+
+        /// <summary>
+        /// 甯搁噺涓嬫媺妗�
+        /// </summary>
+        public const string KeyConstSelector = "selector:";
+
+        /// <summary>
+        /// swagger鐧诲綍缂撳瓨
+        /// </summary>
+        public const string SwaggerLogin = "swaggerLogin:";
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/ConfigConst.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/ConfigConst.cs"
new file mode 100644
index 0000000..e6c0f07
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/ConfigConst.cs"
@@ -0,0 +1,64 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Const
+{
+    /// <summary>
+    /// 鍒嗙被甯搁噺
+    /// </summary>
+    public class CateGoryConst
+    {
+        /// <summary>
+        /// 閭鍩虹
+        /// </summary>
+        public const string CONFIG_SYS_BaseExmail = "Sys_BaseExmail";
+
+        /// <summary>
+        /// 閭閰嶇疆
+        /// </summary>
+        public const string CONFIG_SYS_RegExmail = "Sys_RegExmail";
+    }
+
+    /// <summary>
+    /// 閰嶇疆Key甯搁噺
+    /// </summary>
+    public class SysConfigConst
+    {
+        /// <summary>
+        ///  閭SMTP鍦板潃
+        /// </summary>
+        public const string SMTP_Server = "smtpServer";
+
+        /// <summary>
+        ///  閭SMTP绔彛
+        /// </summary>
+        public const string SMTP_Port = "smtpPort";
+
+        /// <summary>
+        ///  閭SMTP璐﹀彿
+        /// </summary>
+        public const string SMTP_User = "smtpUser";
+
+        /// <summary>
+        ///  閭SMTP瀵嗙爜
+        /// </summary>
+        public const string SMTP_Pass = "smtpPass";
+
+        /// <summary>
+        ///  閭鏍囬
+        /// </summary>
+        public const string SMTP_Title = "smtpTitle";
+
+        /// <summary>
+        ///  閭鍐呭鏍囬
+        /// </summary>
+        public const string SMTP_ContentTitle = "smtpContentTitle";
+        /// <summary>
+        ///  閭鍐呭鏍囬
+        /// </summary>
+        public const string SMTP_RegUser = "smtpRegUser";
+    }
+}
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/ErrorMsgConst.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/ErrorMsgConst.cs"
new file mode 100644
index 0000000..3456c44
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/ErrorMsgConst.cs"
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Const
+{
+    public class ErrorMsgConst
+    {
+        public const string ParamIsNull = "鍙傛暟鏃犳晥";
+        public const string EntityValueIsNull = "涓哄繀椤绘彁浜ら」";
+        public const string SugarColumnIsNull = "璇烽厤缃甋ugarColumn灞炴��";
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/HtmlElementType.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/HtmlElementType.cs"
new file mode 100644
index 0000000..735718d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/HtmlElementType.cs"
@@ -0,0 +1,32 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Const
+{
+    public struct HtmlElementType
+    {
+        public const string drop = "drop";
+        public const string droplist = "droplist";
+        public const string select = "select";
+        public const string selectlist = "selectlist";
+        public const string checkbox = "checkbox";
+        public const string textarea = "textarea";
+        public const string thanorequal = "thanorequal";
+        public const string lessorequal = "lessorequal";
+
+
+        public const string gt = "gt";
+        public const string lt = "lt";
+        public const string GT = ">";
+        public const string LT = "<";
+        public const string like = "like";
+
+        public const string ThanOrEqual = ">=";
+        public const string LessOrequal = "<=";
+        public const string Contains = "in";
+        public const string Equal = "=";
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/SqlDbTypeName.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/SqlDbTypeName.cs"
new file mode 100644
index 0000000..b12f10d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/SqlDbTypeName.cs"
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Const
+{
+    public struct SqlDbTypeName
+    {
+        public const string NVarChar = "nvarchar";
+        public const string VarChar = "varchar";
+        public const string NChar = "nchar";
+        public const string Char = "char";
+        public const string Text = "text";
+        public const string Int = "int";
+        public const string BigInt = "bigint";
+        public const string DateTime = "datetime";
+        public const string Date = "date";
+        public const string SmallDateTime = "smalldatetime";
+        public const string SmallDate = "smalldate";
+        public const string Float = "float";
+        public const string Decimal = "decimal";
+        public const string Double = "double";
+        public const string Bit = "bit";
+        public const string Bool = "bool";
+        public const string UniqueIdentifier = "uniqueidentifier";
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/TenantConst.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/TenantConst.cs"
new file mode 100644
index 0000000..eeeeae4
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/TenantConst.cs"
@@ -0,0 +1,13 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Const
+{
+    public class TenantConst
+    {
+        public const string DBConStr = "Data Source={0};Initial Catalog={1};User ID={2};Password={3};Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/TenantStatus.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/TenantStatus.cs"
new file mode 100644
index 0000000..581b035
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Const/TenantStatus.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Const
+{
+    public struct TenantStatus
+    {
+        public const int Enable = 1;
+        public const int Disable = 2;
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Core/ConfigurableOptions.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Core/ConfigurableOptions.cs"
new file mode 100644
index 0000000..a313a78
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Core/ConfigurableOptions.cs"
@@ -0,0 +1,66 @@
+锘縰sing Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Core
+{
+    public static class ConfigurableOptions
+    {
+        /// <summary>娣诲姞閫夐」閰嶇疆</summary>
+        /// <typeparam name="TOptions">閫夐」绫诲瀷</typeparam>
+        /// <param name="services">鏈嶅姟闆嗗悎</param>
+        /// <returns>鏈嶅姟闆嗗悎</returns>
+        public static IServiceCollection AddConfigurableOptions<TOptions>(this IServiceCollection services)
+            where TOptions : class, IConfigurableOptions
+        {
+            Type optionsType = typeof(TOptions);
+            string path = GetConfigurationPath(optionsType);
+            services.Configure<TOptions>(App.Configuration.GetSection(path));
+
+            return services;
+        }
+
+        public static IServiceCollection AddConfigurableOptions(this IServiceCollection services, Type type)
+        {
+            string path = GetConfigurationPath(type);
+            var config = App.Configuration.GetSection(path);
+
+            Type iOptionsChangeTokenSource = typeof(IOptionsChangeTokenSource<>);
+            Type iConfigureOptions = typeof(IConfigureOptions<>);
+            Type configurationChangeTokenSource = typeof(ConfigurationChangeTokenSource<>);
+            Type namedConfigureFromConfigurationOptions = typeof(NamedConfigureFromConfigurationOptions<>);
+            iOptionsChangeTokenSource = iOptionsChangeTokenSource.MakeGenericType(type);
+            iConfigureOptions = iConfigureOptions.MakeGenericType(type);
+            configurationChangeTokenSource = configurationChangeTokenSource.MakeGenericType(type);
+            namedConfigureFromConfigurationOptions = namedConfigureFromConfigurationOptions.MakeGenericType(type);
+
+            services.AddOptions();
+            services.AddSingleton(iOptionsChangeTokenSource,
+                Activator.CreateInstance(configurationChangeTokenSource, Options.DefaultName, config) ?? throw new InvalidOperationException());
+            return services.AddSingleton(iConfigureOptions,
+                Activator.CreateInstance(namedConfigureFromConfigurationOptions, Options.DefaultName, config) ?? throw new InvalidOperationException());
+        }
+
+        /// <summary>鑾峰彇閰嶇疆璺緞</summary>
+        /// <param name="optionsType">閫夐」绫诲瀷</param>
+        /// <returns></returns>
+        public static string GetConfigurationPath(Type optionsType)
+        {
+            var endPath = new[] { "Option", "Options" };
+            var configurationPath = optionsType.Name;
+            foreach (var s in endPath)
+            {
+                if (configurationPath.EndsWith(s))
+                {
+                    return configurationPath[..^s.Length];
+                }
+            }
+
+            return configurationPath;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Core/IConfigurableOptions.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Core/IConfigurableOptions.cs"
new file mode 100644
index 0000000..a891834
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Core/IConfigurableOptions.cs"
@@ -0,0 +1,12 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Core
+{
+    public interface IConfigurableOptions
+    {
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Core/InternalApp.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Core/InternalApp.cs"
new file mode 100644
index 0000000..5dfff8e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Core/InternalApp.cs"
@@ -0,0 +1,47 @@
+锘縰sing Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Core
+{
+    public static class InternalApp
+    {
+        internal static IServiceCollection InternalServices;
+
+        /// <summary>鏍规湇鍔�</summary>
+        internal static IServiceProvider RootServices;
+
+        /// <summary>鑾峰彇Web涓绘満鐜</summary>
+        internal static IWebHostEnvironment WebHostEnvironment;
+
+        /// <summary>鑾峰彇娉涘瀷涓绘満鐜</summary>
+        internal static IHostEnvironment HostEnvironment;
+
+        /// <summary>閰嶇疆瀵硅薄</summary>
+        internal static IConfiguration Configuration;
+
+        public static void ConfigureApplication(this WebApplicationBuilder wab)
+        {
+            HostEnvironment = wab.Environment;
+            WebHostEnvironment = wab.Environment;
+            InternalServices = wab.Services;
+        }
+
+        public static void ConfigureApplication(this IConfiguration configuration)
+        {
+            Configuration = configuration;
+        }
+
+        public static void ConfigureApplication(this IHost app)
+        {
+            RootServices = app.Services;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/BaseDBConfig.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/BaseDBConfig.cs"
new file mode 100644
index 0000000..1382e3e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/BaseDBConfig.cs"
@@ -0,0 +1,121 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Dynamic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Tenants;
+
+namespace WIDESEA_Core.DB
+{
+    public class BaseDBConfig
+    {
+        /* 涔嬪墠鐨勫崟搴撴搷浣滃凡缁忓垹闄わ紝濡傛灉鎯宠涔嬪墠鐨勪唬鐮侊紝鍙互鏌ョ湅鎴戠殑GitHub鐨勫巻鍙茶褰�
+         * 鐩墠鏄搴撴搷浣滐紝榛樿鍔犺浇鐨勬槸appsettings.json璁剧疆涓簍rue鐨勭涓�涓猟b杩炴帴銆�
+         */
+        public static List<MutiDBOperate> MutiConnectionString => MutiInitConn();
+
+        private static string DifDBConnOfSecurity(params string[] conn)
+        {
+            foreach (var item in conn)
+            {
+                try
+                {
+                    if (File.Exists(item))
+                    {
+                        return File.ReadAllText(item).Trim();
+                    }
+                }
+                catch (System.Exception)
+                {
+                }
+            }
+
+            return conn[conn.Length - 1];
+        }
+
+        public static List<MutiDBOperate> MutiInitConn()
+        {
+            SqlSugarClient sqlSugarClient = new SqlSugarClient(new ConnectionConfig
+            {
+                ConfigId = MainDb.CurrentDbConnId,
+                ConnectionString = AppSettings.Get(MainDb.ConnectionString).DecryptDES(AppSecret.DB),
+                IsAutoCloseConnection = true,
+                DbType = MainDb.DbType,
+                AopEvents = new AopEvents
+                {
+                    OnError = x =>
+                    {
+                        Console.WriteLine(x.Sql);
+                    }
+                }
+            });
+
+            List<ExpandoObject> list = sqlSugarClient.Queryable(MainDb.TenantTableName, "x").Where(MainDb.TenantStatus, "=", TenantStatus.Enable).Select(TenantUtil.GetTenantSelectModels()).ToList();
+            List<MutiDBOperate> listdatabaseSlaveDB = new List<MutiDBOperate>();
+            MutiDBOperate mainDb = new MutiDBOperate()
+            {
+                Connection = AppSettings.Get(MainDb.ConnectionString).DecryptDES(AppSecret.DB),
+                ConnId = MainDb.CurrentDbConnId,
+                DbType = DataBaseType.SqlServer
+            };
+            listdatabaseSlaveDB.Add(mainDb);
+            for (int i = 0; i < list.Count; i++)
+            {
+                dynamic data = list[i];
+                MutiDBOperate mutiDBOperate = new MutiDBOperate()
+                {
+                    Connection = data.ConnectionString,
+                    ConnId = data.TenantId + "",
+                    DbType = (DataBaseType)data.DbType,
+                };
+                mutiDBOperate.Connection = mutiDBOperate.Connection.DecryptDES(AppSecret.DB);
+                listdatabaseSlaveDB.Add(mutiDBOperate);
+            }
+
+            return listdatabaseSlaveDB;
+        }
+    }
+
+    public enum DataBaseType
+    {
+        MySql = 0,
+        SqlServer = 1,
+        Sqlite = 2,
+        Oracle = 3,
+        PostgreSQL = 4,
+        Dm = 5,
+        Kdbndp = 6,
+    }
+
+    public class MutiDBOperate
+    {
+        /// <summary>
+        /// 杩炴帴鍚敤寮�鍏�
+        /// </summary>
+        public bool Enabled { get; set; }
+
+        /// <summary>
+        /// 杩炴帴ID
+        /// </summary>
+        public string ConnId { get; set; }
+
+        /// <summary>
+        /// 浠庡簱鎵ц绾у埆锛岃秺澶ц秺鍏堟墽琛�
+        /// </summary>
+        public int HitRate { get; set; }
+
+        /// <summary>
+        /// 杩炴帴瀛楃涓�
+        /// </summary>
+        public string Connection { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁搴撶被鍨�
+        /// </summary>
+        public DataBaseType DbType { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/MainDb.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/MainDb.cs"
new file mode 100644
index 0000000..4319cb3
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/MainDb.cs"
@@ -0,0 +1,32 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.DB
+{
+    public static class MainDb
+    {
+        public const string CurrentDbConnId = "WIDESEA";
+        public const string ConnectionStringsEncryption = "ConnectionStringsEncryption";
+        public const string ConnectionString = "ConnectionString";
+        public const string TenantTableName = "Sys_Tenant";
+        public const string TenantStatus = "Status";
+        public const string TenantId = "TenantId";
+        public const string TenantName = "TenantName";
+        public const string EntityNameSpace = "WIDESEA_Model.Models";
+        public const string TenantDbType = "DbType";
+        public const string AssemblyName = "WIDESEA_Model.dll";
+        public static DbType DbType = DbType.SqlServer;
+        public const string UserTableName = "Sys_User";
+        public const string RoleId = "RoleId";
+        public const string UserName = "UserName";
+        public const string UserId = "UserId";
+        public const string CodeRuleConfig = "Dt_CodeRuleConfig";
+        public const string RuleCode = "RuleCode";
+        public const string AnalysisRuleConfig = "Dt_AnalysisRuleConfig";
+        public const string AnalysisCode = "AnalysisCode";
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/BaseEntity.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/BaseEntity.cs"
new file mode 100644
index 0000000..7136886
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/BaseEntity.cs"
@@ -0,0 +1,82 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.DB.Models
+{
+    public class BaseEntity
+    {
+        #region 鏁版嵁鐘舵�佺鐞�
+
+        /// <summary>
+        /// 鐘舵�� <br/>
+        /// 涓珛瀛楁锛屾煇浜涜〃鍙娇鐢ㄦ煇浜涜〃涓嶄娇鐢�
+        /// </summary>
+        //public bool Enabled { get; set; } = true;
+
+        /// <summary>
+        /// 涓珛瀛楁锛屾煇浜涜〃鍙娇鐢ㄦ煇浜涜〃涓嶄娇鐢�   <br/>
+        /// 閫昏緫涓婄殑鍒犻櫎锛岄潪鐗╃悊鍒犻櫎  <br/>
+        /// 渚嬪锛氬崟鎹垹闄ゅ苟闈炵洿鎺ュ垹闄�
+        /// </summary>
+        //public bool IsDeleted { get; set; }
+
+        /// <summary>
+        /// 涓珛瀛楁 <br/>
+        /// 鏄惁鍐呯疆鏁版嵁
+        /// </summary>
+        //public bool IsInternal { get; set; }
+
+        #endregion 鏁版嵁鐘舵�佺鐞�
+
+        #region 鍒涘缓
+
+        /// <summary>
+        /// 鍒涘缓鑰�
+        /// </summary>
+        [ImporterHeader(Name = "鍒涘缓鑰�")]
+        [ExporterHeader(DisplayName = "鍒涘缓鑰�")]
+        [SugarColumn(IsNullable = false, Length = 50, IsOnlyIgnoreUpdate = true, ColumnDescription = "鍒涘缓鑰�")]
+        public string Creater { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "鍒涘缓鏃堕棿")]
+        [ExporterHeader(DisplayName = "鍒涘缓鏃堕棿")]
+        [SugarColumn(IsNullable = false, IsOnlyIgnoreUpdate = true, ColumnDescription = "鍒涘缓鏃堕棿")]
+        public DateTime CreateDate { get; set; } = DateTime.Now;
+
+        #endregion
+
+        #region 淇敼
+
+        /// <summary>
+        /// 鏇存柊鑰�
+        /// </summary>
+        [ImporterHeader(Name = "淇敼浜�")]
+        [ExporterHeader(DisplayName = "淇敼浜�")]
+        [SugarColumn(IsNullable = true, Length = 50, IsOnlyIgnoreInsert = true, ColumnDescription = "淇敼浜�")]
+        public string Modifier { get; set; }
+
+        /// <summary>
+        /// 淇敼鏃ユ湡
+        /// </summary>
+        [ImporterHeader(Name = "淇敼鏃ユ湡")]
+        [ExporterHeader(DisplayName = "淇敼鏃ユ湡")]
+        [SugarColumn(IsNullable = true, IsOnlyIgnoreInsert = true, ColumnDescription = "淇敼鏃ユ湡")]
+        public DateTime? ModifyDate { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁鐗堟湰
+        /// </summary>
+        //[SugarColumn(DefaultValue = "0", IsEnableUpdateVersionValidation = true)] //鏍囪瘑鐗堟湰瀛楁
+        //public long Version { get; set; }
+
+        #endregion 淇敼
+    }
+}
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/BaseWarehouseEntity.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/BaseWarehouseEntity.cs"
new file mode 100644
index 0000000..0839833
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/BaseWarehouseEntity.cs"
@@ -0,0 +1,15 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.DB.Models
+{
+    public interface BaseWarehouseEntity
+    {
+        [SugarColumn(IsNullable = false)]
+        int WarehouseId { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/IBaseHistoryEntity.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/IBaseHistoryEntity.cs"
new file mode 100644
index 0000000..a5b560f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/IBaseHistoryEntity.cs"
@@ -0,0 +1,37 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.DB.Models
+{
+    public interface IBaseHistoryEntity
+    {
+        /// <summary>
+        /// 鍘熻〃涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+        [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+        public int SourceId { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+        [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+        public string OperateType { get; set; }
+
+        /// <summary>
+        /// 绉诲叆鍘嗗彶鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+        [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+        public DateTime InsertTime { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/RepositorySetting.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/RepositorySetting.cs"
new file mode 100644
index 0000000..67c4968
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/DB/RepositorySetting.cs"
@@ -0,0 +1,53 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Tenants;
+
+namespace WIDESEA_Core.DB
+{
+    public class RepositorySetting
+    {
+        private static readonly Lazy<IEnumerable<Type>> AllEntitys = new(() =>
+        {
+            var path = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
+            var referencedAssemblies = System.IO.Directory.GetFiles(path, MainDb.AssemblyName).Select(Assembly.LoadFrom).FirstOrDefault();
+            return referencedAssemblies
+                .GetTypes()
+                .Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(BaseEntity)))
+                .Where(it => it.FullName != null && it.FullName.StartsWith(MainDb.EntityNameSpace));
+        });
+
+        public static IEnumerable<Type> Entitys => AllEntitys.Value;
+
+        /// <summary>
+        /// 閰嶇疆瀹炰綋杞垹闄よ繃婊ゅ櫒<br/>
+        /// 缁熶竴杩囨护 杞垹闄� 鏃犻渶鑷繁鍐欐潯浠�
+        /// </summary>
+        public static void SetDeletedEntityFilter(SqlSugarScopeProvider db)
+        {
+            //db.QueryFilter.AddTableFilter<IDeleteFilter>(it => it.IsDeleted == false);
+        }
+
+        /// <summary>
+        /// 閰嶇疆绉熸埛
+        /// </summary>
+        public static void SetTenantEntityFilter(SqlSugarScopeProvider db)
+        {
+            if (App.User is not { UserId: > 0, TenantId: > 0 })
+            {
+                return;
+            }
+
+            //澶氱鎴� 鍗曡〃
+            //db.QueryFilter.AddTableFilter<ITenantEntity>(it => it.TenantId == App.User.TenantId || it.TenantId == 0);
+
+            //澶氱鎴� 澶氳〃
+            //db.SetTenantTable(App.User.TenantId.ToString());
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Enums/AuthorityScopeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Enums/AuthorityScopeEnum.cs"
new file mode 100644
index 0000000..1950004
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Enums/AuthorityScopeEnum.cs"
@@ -0,0 +1,41 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Enums
+{
+    public enum AuthorityScopeEnum
+    {
+        /// <summary>
+        /// 鏃�
+        /// </summary>
+        None = -1,
+
+        /// <summary>
+        /// 浠呰嚜宸�
+        /// </summary>
+        OnlySelf = 1,
+
+        /// <summary>
+        /// 褰撳墠瑙掕壊
+        /// </summary>
+        CurrentRole = 2,
+
+        /// <summary>
+        /// 褰撳墠瑙掕壊鍙婁互涓�
+        /// </summary>
+        CurrentRoleAndDown = 3,
+
+        /// <summary>
+        /// 鑷畾涔�
+        /// </summary>
+        Custom = 4,
+
+        /// <summary>
+        /// 鎵�鏈�
+        /// </summary>
+        All = 10
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Enums/EnumHelper.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Enums/EnumHelper.cs"
new file mode 100644
index 0000000..60cddd4
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Enums/EnumHelper.cs"
@@ -0,0 +1,111 @@
+锘縰sing System.ComponentModel;
+using System.Reflection;
+
+namespace WIDESEA_Core.Enums
+{
+    public static class EnumHelper
+    {
+        /// <summary>  
+        /// 鏋氫妇杞瓧鍏搁泦鍚�  
+        /// </summary>  
+        /// <typeparam name="T">鏋氫妇绫诲悕绉�</typeparam>  
+        /// <param name="keyDefault">榛樿key鍊�</param>  
+        /// <param name="valueDefault">榛樿value鍊�</param>  
+        /// <returns>杩斿洖鐢熸垚鐨勫瓧鍏搁泦鍚�</returns>  
+        public static Dictionary<string, object> EnumListDic<T>(string keyDefault, string valueDefault = "")
+        {
+            Dictionary<string, object> dicEnum = new Dictionary<string, object>();
+            Type enumType = typeof(T);
+            if (!enumType.IsEnum)
+            {
+                return dicEnum;
+            }
+            if (!string.IsNullOrEmpty(keyDefault)) //鍒ゆ柇鏄惁娣诲姞榛樿閫夐」  
+            {
+                dicEnum.Add(keyDefault, valueDefault);
+            }
+            string[] fieldstrs = Enum.GetNames(enumType); //鑾峰彇鏋氫妇瀛楁鏁扮粍  
+            foreach (var item in fieldstrs)
+            {
+                string description = string.Empty;
+                var field = enumType.GetField(item);
+                object[] arr = field.GetCustomAttributes(typeof(DescriptionAttribute), true); //鑾峰彇灞炴�у瓧娈垫暟缁�  
+                if (arr != null && arr.Length > 0)
+                {
+                    description = ((DescriptionAttribute)arr[0]).Description;   //灞炴�ф弿杩�  
+                }
+                else
+                {
+                    description = item;  //鎻忚堪涓嶅瓨鍦ㄥ彇瀛楁鍚嶇О  
+                }
+                dicEnum.Add(description, (int)Enum.Parse(enumType, item));  //涓嶇敤鏋氫妇鐨剉alue鍊间綔涓哄瓧鍏竗ey鍊肩殑鍘熷洜浠庢灇涓句緥瀛愯兘鐪嬪嚭鏉ワ紝鍏跺疄杩欒竟搴旇鍒ゆ柇浠栫殑鍊间笉瀛樺湪锛岄粯璁ゅ彇瀛楁鍚嶇О  
+            }
+            return dicEnum;
+        }
+        /// <summary>
+        /// 鑾峰彇鏋氫妇椤规弿杩颁俊鎭� 渚嬪GetEnumDesc(Days.Sunday)
+        /// </summary>
+        /// <param name="en">鏋氫妇椤� 濡侱ays.Sunday</param>
+        /// <returns></returns>
+        public static string GetIntegralRuleTypeEnumDesc(this Enum en)
+        {
+            Type type = en.GetType();
+            MemberInfo[] memInfo = type.GetMember(en.ToString());
+            if (memInfo != null && memInfo.Length > 0)
+            {
+                object[] attrs = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
+                if (attrs != null && attrs.Length > 0)
+                    return ((DescriptionAttribute)attrs[0]).Description;
+            }
+            return en.ToString();
+        }
+        /// <summary>
+        /// 鑾峰彇鏋氫妇闆嗗悎
+        /// </summary>
+        /// <typeparam name="T">鏋氫妇绫诲悕绉�</typeparam>
+        /// <returns></returns>
+        public static IEnumerable<EnumModel> GetEnumList<T>()
+        {
+            var model = default(T);
+            FieldInfo[] fieldinfo = typeof(T).GetFields();
+            List<EnumModel> result = new List<EnumModel>();
+            foreach (FieldInfo field in fieldinfo)
+            {
+                EnumModel enumModel = new EnumModel();
+                if (!(Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) is DescriptionAttribute attribute))
+                {
+                    enumModel.Desc = field.GetValue(model).ToString();
+                }
+                else
+                {
+                    enumModel.Desc = attribute.Description;
+                }
+                enumModel.Value = field.GetValue(model).GetHashCode();
+                enumModel.Key = field.GetValue(model) as ValueType;
+                if (field.GetValue(model).ToString() != "0")
+                {
+                    result.Add(enumModel);
+                }
+
+            }
+            return result;
+        }
+    }
+
+    public class EnumModel
+    {
+        /// <summary>
+        /// Enum鐨勫��
+        /// </summary>
+        public int Value { get; set; }
+        /// <summary>
+        /// Enum鐨刱ey
+        /// </summary>
+        public ValueType Key { get; set; }
+        /// <summary>
+        /// Enum鎻忚堪
+        /// </summary>
+        public string Desc { get; set; }
+    }
+
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Enums/LinqExpressionType.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Enums/LinqExpressionType.cs"
new file mode 100644
index 0000000..cd90b5a
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Enums/LinqExpressionType.cs"
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Enums
+{
+    public enum LinqExpressionType
+    {
+        Equal = 0,//=
+        NotEqual = 1,//!=
+        GreaterThan,//>
+        LessThan,//<
+        ThanOrEqual,//>=
+        LessThanOrEqual,//<=
+        In,
+        Contains,//Contains
+        NotContains//NotContains
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Enums/OperateTypeEnum.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Enums/OperateTypeEnum.cs"
new file mode 100644
index 0000000..9c09173
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Enums/OperateTypeEnum.cs"
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Enums
+{
+    public enum OperateTypeEnum
+    {
+        浜哄伐鍒犻櫎 = 1,
+        鑷姩鍒犻櫎 = 2,
+        浜哄伐鎭㈠ = 3,
+        鑷姩鎭㈠ = 4,
+        浜哄伐瀹屾垚 = 5,
+        鑷姩瀹屾垚 = 6,
+        鍏抽棴 = 7
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/AllOptionRegister.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/AllOptionRegister.cs"
new file mode 100644
index 0000000..93eefc0
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/AllOptionRegister.cs"
@@ -0,0 +1,24 @@
+锘縰sing Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Core;
+
+namespace WIDESEA_Core.Extensions
+{
+    public static class AllOptionRegister
+    {
+        public static void AddAllOptionRegister(this IServiceCollection services)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+
+            foreach (var optionType in App.EffectiveTypes.Where(s =>
+                         !s.IsInterface && typeof(IConfigurableOptions).IsAssignableFrom(s)))
+            {
+                services.AddConfigurableOptions(optionType);
+            }
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/ApplicationSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/ApplicationSetup.cs"
new file mode 100644
index 0000000..404bf07
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/ApplicationSetup.cs"
@@ -0,0 +1,28 @@
+锘縰sing Microsoft.AspNetCore.Builder;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Extensions
+{
+    public static class ApplicationSetup
+    {
+        public static void UseApplicationSetup(this WebApplication app)
+        {
+            app.Lifetime.ApplicationStarted.Register(() =>
+            {
+                App.IsRun = true;
+            });
+
+            app.Lifetime.ApplicationStopped.Register(() =>
+            {
+                App.IsRun = false;
+
+                //娓呴櫎鏃ュ織
+                //Log.CloseAndFlush();
+            });
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/AutofacModuleRegister.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/AutofacModuleRegister.cs"
new file mode 100644
index 0000000..c98e78c
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/AutofacModuleRegister.cs"
@@ -0,0 +1,80 @@
+锘縰sing Autofac;
+using Autofac.Extras.DynamicProxy;
+using HslCommunication.WebSocket;
+using Microsoft.Extensions.DependencyModel;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.Loader;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.AOP;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.LogHelper;
+
+namespace WIDESEA_Core.Extensions
+{
+    public class AutofacModuleRegister : Autofac.Module
+    {
+        //private static readonly ILog log = LogManager.GetLogger(typeof(AutofacModuleRegister));
+        protected override void Load(ContainerBuilder builder)
+        {
+            var basePath = AppContext.BaseDirectory;
+            var cacheType = new List<Type>();
+
+            builder.RegisterType<LogAOP>();
+            if (AppSettings.Get("LogAopEnable").ObjToBool())
+            {
+                cacheType.Add(typeof(LogAOP));
+            }
+            
+            builder.RegisterGeneric(typeof(RepositoryBase<>)).As(typeof(IRepository<>)).InstancePerDependency();//娉ㄥ唽浠撳偍
+            builder.RegisterGeneric(typeof(ServiceBase<,>)).As(typeof(IService<>)).InstancePerDependency();//娉ㄥ唽鏈嶅姟
+
+            Type baseType = typeof(IDependency);
+
+            List<RuntimeLibrary> compilationLibrary = DependencyContext.Default
+                    .RuntimeLibraries
+                    .Where(x => !x.Serviceable
+                    && x.Type == "project")
+                    .ToList();
+            List<Assembly> assemblyList = new List<Assembly>();
+            foreach (var library in compilationLibrary)
+            {
+                try
+                {
+                    string path = Path.Combine(basePath, $"{library.Name}.dll");
+                    if (!File.Exists(path))
+                    {
+                        var msg = $"{library.Name}.dll涓㈠け锛屽洜涓洪」鐩В鑰︿簡锛屾墍浠ラ渶瑕佸厛F6缂栬瘧锛屽啀F5杩愯锛岃妫�鏌� bin 鏂囦欢澶癸紝骞舵嫹璐濄��";
+                        //log.Error(msg);
+                        throw new Exception(msg);
+                    }
+                    assemblyList.Add(Assembly.LoadFrom(path));
+                }
+                catch (Exception ex)
+                {
+                    Console.WriteLine(library.Name + ex.Message);
+                }
+            }
+
+            builder.RegisterAssemblyTypes(assemblyList.ToArray()).Where(x => !x.IsInterface && !x.IsAbstract && baseType.IsAssignableFrom(x))
+                        .AsImplementedInterfaces()
+                        .PropertiesAutowired()
+                        .InstancePerDependency().
+                        EnableInterfaceInterceptors()
+                        .InterceptedBy(cacheType.ToArray());
+
+            builder.RegisterType<UnitOfWorkManage>().As<IUnitOfWorkManage>()
+               .AsImplementedInterfaces()
+               .InstancePerLifetimeScope()
+               .PropertiesAutowired();
+
+            builder.RegisterType<RequestLogModel>().InstancePerLifetimeScope();
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/CorsSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/CorsSetup.cs"
new file mode 100644
index 0000000..417610d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/CorsSetup.cs"
@@ -0,0 +1,56 @@
+锘縰sing Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Extensions
+{
+    /// <summary>
+    /// Cors 璺ㄥ煙
+    /// </summary>
+    public static class CorsSetup
+    {
+        /// <summary>
+        /// 璺ㄥ煙
+        /// </summary>
+        /// <param name="services"></param>
+        /// <exception cref="ArgumentNullException"></exception>
+        public static void AddCorsSetup(this IServiceCollection services)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+
+            services.AddCors(c =>
+            {
+                if (!AppSettings.Get(new string[] { "Cors", "EnableAllIPs" }).ObjToBool())
+                {
+                    c.AddPolicy(AppSettings.Get(new string[] {"Cors", "PolicyName" }),
+
+                        policy =>
+                        {
+                            policy
+                            .WithOrigins(AppSettings.Get(new string[] { "Cors", "IPs" }).Split(','))
+                            .AllowAnyHeader()//Ensures that the policy allows any header.
+                            .AllowAnyMethod();
+                        });
+                }
+                else
+                {
+                    //鍏佽浠绘剰璺ㄥ煙璇锋眰
+                    c.AddPolicy(AppSettings.Get(new string[] { "Cors", "PolicyName" }),
+                        policy =>
+                        {
+                            policy
+                            .SetIsOriginAllowed((host) => true)
+                            .AllowAnyMethod()
+                            .AllowAnyHeader()
+                            .AllowCredentials();
+                        });
+                }
+
+            });
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/DbSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/DbSetup.cs"
new file mode 100644
index 0000000..dba095c
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/DbSetup.cs"
@@ -0,0 +1,24 @@
+锘縰sing Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Seed;
+
+namespace WIDESEA_Core
+{
+    /// <summary>
+    /// Db 鍚姩鏈嶅姟
+    /// </summary>
+    public static class DbSetup
+    {
+        public static void AddDbSetup(this IServiceCollection services)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+            
+            services.AddScoped<DBSeed>();
+            services.AddScoped<DBContext>();
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/HttpContextExtension.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/HttpContextExtension.cs"
new file mode 100644
index 0000000..92ecb6e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/HttpContextExtension.cs"
@@ -0,0 +1,24 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Extensions
+{
+    public static class HttpContextExtension
+    {
+        public static ISession GetSession(this HttpContext context)
+        {
+            try
+            {
+                return context.Session;
+            }
+            catch (Exception)
+            {
+                return default;
+            }
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/HttpContextSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/HttpContextSetup.cs"
new file mode 100644
index 0000000..2615700
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/HttpContextSetup.cs"
@@ -0,0 +1,30 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.HttpContextUser;
+
+namespace WIDESEA_Core.Extensions
+{
+    /// <summary>
+    /// HttpContext 鐩稿叧鏈嶅姟
+    /// </summary>
+    public static class HttpContextSetup
+    {
+        /// <summary>
+        ///  HttpContext 鐩稿叧鏈嶅姟
+        /// </summary>
+        /// <param name="services"></param>
+        /// <exception cref="ArgumentNullException"></exception>
+        public static void AddHttpContextSetup(this IServiceCollection services)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+
+            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
+            services.AddScoped<IUser, AspNetUser>();
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/InitializationHostServiceSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/InitializationHostServiceSetup.cs"
new file mode 100644
index 0000000..9acbd1e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/InitializationHostServiceSetup.cs"
@@ -0,0 +1,28 @@
+锘縰sing Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Extensions
+{
+    public static class InitializationHostServiceSetup
+    {
+        /// <summary>
+        /// 搴旂敤鍒濆鍖栨湇鍔℃敞鍏�
+        /// </summary>
+        /// <param name="services"></param>
+        public static void AddInitializationHostServiceSetup(this IServiceCollection services)
+        {
+            if (services is null)
+            {
+                ArgumentNullException.ThrowIfNull(nameof(services));
+            }
+            services.AddHostedService<SeedDataHostedService>();//绉嶅瓙鏁版嵁
+            //services.AddHostedService<QuartzJobHostedService>();
+            //services.AddHostedService<ConsulHostedService>();
+            //services.AddHostedService<EventBusHostedService>();
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/IpPolicyRateLimitSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/IpPolicyRateLimitSetup.cs"
new file mode 100644
index 0000000..9684dfa
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/IpPolicyRateLimitSetup.cs"
@@ -0,0 +1,43 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Extensions
+{
+    /// <summary>
+    /// IPLimit闄愭祦 鍚姩鏈嶅姟
+    /// </summary>
+    public static class IpPolicyRateLimitSetup
+    {
+        public static void AddIpPolicyRateLimitSetup(this IServiceCollection services, IConfiguration Configuration)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+
+            // needed to store rate limit counters and ip rules
+            //services.AddMemoryCache();
+
+            //load general configuration from appsettings.json
+            //services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
+
+            // inject counter and rules stores
+            //services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
+            //services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
+            //services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();
+
+            // inject counter and rules distributed cache stores
+            //services.AddSingleton<IIpPolicyStore, DistributedCacheIpPolicyStore>();
+            //services.AddSingleton<IRateLimitCounterStore, DistributedCacheRateLimitCounterStore>();
+
+            // the clientId/clientIp resolvers use it.
+            //services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
+
+            // configuration (resolvers, counter key builders)
+            //services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MemoryCacheSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MemoryCacheSetup.cs"
new file mode 100644
index 0000000..bd2f313
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MemoryCacheSetup.cs"
@@ -0,0 +1,28 @@
+锘縰sing Microsoft.Extensions.Caching.Memory;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+using System;
+using WIDESEA_Core.Caches;
+
+namespace WIDESEA_Core.Extensions
+{
+    /// <summary>
+    /// Memory缂撳瓨 鍚姩鏈嶅姟
+    /// </summary>
+    public static class MemoryCacheSetup
+    {
+        public static void AddMemoryCacheSetup(this IServiceCollection services)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+
+            services.AddSingleton<ICacheService, MemoryCacheService>();
+            services.AddMemoryCache();
+            //services.AddSingleton<IMemoryCache>(factory =>
+            //{
+            //    var value = factory.GetRequiredService<IOptions<MemoryCacheOptions>>();
+            //    var cache = new MemoryCache(value);
+            //    return cache;
+            //});
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MiniProfilerSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MiniProfilerSetup.cs"
new file mode 100644
index 0000000..3ceecb8
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MiniProfilerSetup.cs"
@@ -0,0 +1,32 @@
+锘縰sing Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Extensions
+{
+    /// <summary>
+    /// MiniProfiler 鎬ц兘鍒嗘瀽
+    /// </summary>
+    public static class MiniProfilerSetup
+    {
+        /// <summary>
+        /// 鎬ц兘鍒嗘瀽
+        /// </summary>
+        /// <param name="services"></param>
+        /// <exception cref="ArgumentNullException"></exception>
+        public static void AddMiniProfilerSetup(this IServiceCollection services)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+            //if (AppSettings.app(new string[] { "Startup", "MiniProfiler", "Enabled" }).ObjToBool())
+            //{
+            services.AddMiniProfiler(options =>
+            {
+                options.RouteBasePath = "/profiler";
+            });
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SqlsugarSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SqlsugarSetup.cs"
new file mode 100644
index 0000000..f2bb02c
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SqlsugarSetup.cs"
@@ -0,0 +1,150 @@
+锘縰sing Microsoft.Extensions.Caching.Memory;
+using Microsoft.Extensions.DependencyInjection;
+using SqlSugar;
+using StackExchange.Profiling;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.AOP;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.LogHelper;
+using WIDESEA_Core.Seed;
+
+namespace WIDESEA_Core
+{
+    /// <summary>
+    /// SqlSugar 鍚姩鏈嶅姟
+    /// </summary>
+    public static class SqlsugarSetup
+    {
+        private static readonly MemoryCache Cache = new MemoryCache(new MemoryCacheOptions());
+
+        public static void AddSqlsugarSetup(this IServiceCollection services)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+
+            // 榛樿娣诲姞涓绘暟鎹簱杩炴帴
+            //MainDb.CurrentDbConnId = AppSettings.app(new string[] { "MainDB" });
+
+            // SqlSugarScope鏄嚎绋嬪畨鍏紝鍙娇鐢ㄥ崟渚嬫敞鍏�
+            // 鍙傝�冿細https://www.donet5.com/Home/Doc?typeId=1181
+            services.AddScoped<ISqlSugarClient>(o =>
+            {
+                var memoryCache = o.GetRequiredService<IMemoryCache>();
+
+                // 杩炴帴瀛楃涓�
+                var listConfig = new List<ConnectionConfig>
+                {
+                    new ConnectionConfig
+                    {
+                        ConfigId = MainDb.CurrentDbConnId,
+                        ConnectionString = DBContext.GetMainConnectionDb().Connection,
+                        IsAutoCloseConnection = true,
+                        DbType = MainDb.DbType,
+                        AopEvents = new AopEvents
+                        {
+                            OnLogExecuting = (sql, p) =>
+                            {
+                                  Parallel.For(0, 1, e =>
+                                  {
+                                        MiniProfiler.Current.CustomTiming("SQL锛�", GetParas(p) + "銆怱QL璇彞銆戯細" + sql);
+                                     
+                                  });
+                                 if(AppSettings.GetValue("PrintSql").ObjToBool())
+                                {
+                                    Console.Out.WriteLine(GetParas(p));
+                                    Console.Out.WriteLine(sql);
+                                    Console.Out.WriteLine();
+                                }
+                            }
+                        }
+                    }
+                };
+                #region 浠庡簱
+                //var listConfig_Slave = new List<SlaveConnectionConfig>();
+                //BaseDBConfig.MutiConnectionString.ForEach(s =>
+                //{
+                //    if(s.ConnId != MainDb.CurrentDbConnId)
+                //    {
+                //        listConfig_Slave.Add(new SlaveConnectionConfig()
+                //        {
+                //            HitRate = s.HitRate,
+                //            ConnectionString = s.Connection
+                //        });
+                //    }
+
+                //});
+
+                //BaseDBConfig.MutiConnectionString.ForEach(m =>
+                //{
+                //    listConfig.Add(new ConnectionConfig()
+                //    {
+                //        ConfigId = m.ConnId.ObjToString().ToLower(),
+                //        ConnectionString = m.Connection,
+                //        DbType = (DbType)m.DbType,
+                //        IsAutoCloseConnection = true,
+                //        MoreSettings = new ConnMoreSettings()
+                //        {
+                //            //IsWithNoLockQuery = true,
+                //            IsAutoRemoveDataCache = true
+                //        },
+                //        // 浠庡簱
+                //        //SlaveConnectionConfigs = listConfig_Slave,
+                //        // 鑷畾涔夌壒鎬�
+                //        ConfigureExternalServices = new ConfigureExternalServices()
+                //        {
+                //            DataInfoCacheService = new SqlSugarMemoryCacheService(memoryCache),
+                //            EntityService = (property, column) =>
+                //            {
+                //                if (column.IsPrimarykey && property.PropertyType == typeof(int))
+                //                {
+                //                    column.IsIdentity = true;
+                //                }
+                //            }
+                //        },
+                //        InitKeyType = InitKeyType.Attribute,
+                //        AopEvents = new AopEvents()
+                //        {
+                //            OnError = x =>
+                //            {
+                //                Console.WriteLine(x.Sql);
+                //            }
+                //        }
+                //    }
+                //   );
+                //});
+                #endregion
+
+                SqlSugarClient sqlSugarClient = new SqlSugarClient(listConfig, db =>
+                {
+                    db.Aop.DataExecuting = SqlSugarAop.DataExecuting;
+                });
+                return sqlSugarClient;
+            });
+        }
+
+        private static string GetWholeSql(SugarParameter[] paramArr, string sql)
+        {
+            foreach (var param in paramArr)
+            {
+                sql.Replace(param.ParameterName, param.Value.ObjToString());
+            }
+
+            return sql;
+        }
+
+        private static string GetParas(SugarParameter[] pars)
+        {
+            string key = "銆怱QL鍙傛暟銆戯細";
+            foreach (var param in pars)
+            {
+                key += $"{param.ParameterName}:{param.Value}\n";
+            }
+
+            return key;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SwaggerContextExtension.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SwaggerContextExtension.cs"
new file mode 100644
index 0000000..d3e686f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SwaggerContextExtension.cs"
@@ -0,0 +1,72 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Extensions;
+using System;
+using System.Collections.Generic;
+using System.IdentityModel.Tokens.Jwt;
+using System.Linq;
+using System.Security.Claims;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Extensions
+{
+    public static class SwaggerContextExtension
+    {
+        public const string SwaggerCodeKey = "swagger-code";
+        public const string SwaggerJwt = "swagger-jwt";
+
+        public static bool IsSuccessSwagger()
+        {
+            return App.HttpContext?.GetSession()?.GetString(SwaggerCodeKey) == "success";
+        }
+
+        public static bool IsSuccessSwagger(this HttpContext context)
+        {
+            return context.GetSession()?.GetString(SwaggerCodeKey) == "success";
+        }
+
+        public static void SuccessSwagger()
+        {
+            App.HttpContext?.GetSession()?.SetString(SwaggerCodeKey, "success");
+        }
+
+        public static void SuccessSwagger(this HttpContext context)
+        {
+            context.GetSession()?.SetString(SwaggerCodeKey, "success");
+        }
+
+        public static void SuccessSwaggerJwt(this HttpContext context, string token)
+        {
+            var claims = new ClaimsIdentity(GetClaimsIdentity(token));
+            context.User.AddIdentity(claims);
+            context.GetSession().SetString(SwaggerJwt, token);
+        }
+
+        private static IEnumerable<Claim> GetClaimsIdentity(string token)
+        {
+            var jwtHandler = new JwtSecurityTokenHandler();
+            // token鏍¢獙
+            if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token))
+            {
+                var jwtToken = jwtHandler.ReadJwtToken(token);
+
+                return jwtToken.Claims;
+            }
+
+            return new List<Claim>();
+        }
+
+        public static string GetSuccessSwaggerJwt(this HttpContext context)
+        {
+            return context.GetSession().GetString(SwaggerJwt);
+        }
+
+
+        public static void RedirectSwaggerLogin(this HttpContext context)
+        {
+            var returnUrl = context.Request.GetDisplayUrl(); //鑾峰彇褰撳墠url鍦板潃 
+            context.Response.Redirect("/swg-login.html?returnUrl=" + returnUrl);
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SwaggerSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SwaggerSetup.cs"
new file mode 100644
index 0000000..baaf4c5
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SwaggerSetup.cs"
@@ -0,0 +1,113 @@
+锘�
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.OpenApi.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+using static WIDESEA_Core.Extensions.CustomApiVersion;
+using Swashbuckle.AspNetCore.Filters;
+
+namespace WIDESEA_Core.Extensions
+{
+    /// <summary>
+    /// Swagger 
+    /// </summary>
+    public static class SwaggerSetup
+    {
+        /// <summary>
+        /// Swagger
+        /// </summary>
+        /// <param name="services"></param>
+        /// <exception cref="ArgumentNullException"></exception>
+        public static void AddSwaggerSetup(this IServiceCollection services)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+
+            var basePath = AppContext.BaseDirectory;
+            var ApiName = AppSettings.Get(new string[] { "ApiName" });
+
+            services.AddSwaggerGen(c =>
+            {
+                //閬嶅巻鍑哄叏閮ㄧ殑鐗堟湰锛屽仛鏂囨。淇℃伅灞曠ず
+                //typeof(ApiVersions).GetEnumNames().ToList().ForEach(version =>
+                //{
+                c.SwaggerDoc("v1", new OpenApiInfo
+                {
+                    Version = "v1",
+                    Title = $"{ApiName} 鎺ュ彛鏂囨。鈥斺�攞RuntimeInformation.FrameworkDescription}",
+                    Description = $"{ApiName} HTTP API " + "v1"
+                });
+                c.OrderActionsBy(o => o.RelativePath);
+                //});
+
+                c.UseInlineDefinitionsForEnums();
+              
+                // 寮�鍚姞鏉冨皬閿�
+                c.OperationFilter<AddResponseHeadersFilter>();
+                c.OperationFilter<AppendAuthorizeToSummaryOperationFilter>();
+
+                // 鍦╤eader涓坊鍔爐oken锛屼紶閫掑埌鍚庡彴
+                c.OperationFilter<SecurityRequirementsOperationFilter>();
+
+                c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
+                {
+                    Description = "JWT鎺堟潈token鍓嶉潰闇�瑕佸姞涓婂瓧娈礏earer涓庝竴涓┖鏍�,濡侭earer token",
+                    Name = "Authorization",
+                    In = ParameterLocation.Header,
+                    Type = SecuritySchemeType.ApiKey,
+                    BearerFormat = "JWT",
+                    Scheme = "Bearer"
+                });
+
+                c.AddSecurityRequirement(new OpenApiSecurityRequirement
+                {
+                    {
+                        new OpenApiSecurityScheme
+                        {
+                            Reference = new OpenApiReference {
+                                Type = ReferenceType.SecurityScheme,
+                                Id = "Bearer"
+                            }
+                        },
+                        new string[] { }
+                    }
+                });
+            }).AddControllers()
+            .ConfigureApiBehaviorOptions(options =>
+            {
+                options.SuppressConsumesConstraintForFormFileParameters = true;
+                options.SuppressInferBindingSourcesForParameters = true;
+                options.SuppressModelStateInvalidFilter = true;
+                options.SuppressMapClientErrors = true;
+                options.ClientErrorMapping[404].Link =
+                    "https://*/404";
+            });
+            //services.AddSwaggerGenNewtonsoftSupport();
+        }
+    }
+
+    /// <summary>
+    /// 鑷畾涔夌増鏈�
+    /// </summary>
+    public class CustomApiVersion
+    {
+        /// <summary>
+        /// Api鎺ュ彛鐗堟湰 鑷畾涔�
+        /// </summary>
+        public enum ApiVersions
+        {
+            /// <summary>
+            /// V1 鐗堟湰
+            /// </summary>
+            V1 = 1,
+            /// <summary>
+            /// V2 鐗堟湰
+            /// </summary>
+            V2 = 2,
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/WebSocketSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/WebSocketSetup.cs"
new file mode 100644
index 0000000..1c6b23a
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Extensions/WebSocketSetup.cs"
@@ -0,0 +1,32 @@
+锘縰sing HslCommunication.WebSocket;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Extensions
+{
+    public static class WebSocketSetup
+    {
+        public static void AddWebSocketSetup(this IServiceCollection services)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+
+            int port = AppSettings.Get("WebSocketPort").ObjToInt();
+            if (port == 0)
+            {
+                port = 9296;
+            }
+
+            services.AddSingleton(x =>
+            {
+                WebSocketServer socketServer = new WebSocketServer();
+                socketServer.ServerStart(port);
+                return socketServer;
+            });
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/ActionExecuteFilter.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/ActionExecuteFilter.cs"
new file mode 100644
index 0000000..7dabe0d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/ActionExecuteFilter.cs"
@@ -0,0 +1,23 @@
+锘縰sing Microsoft.AspNetCore.Mvc.Filters;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Utilities;
+
+namespace WIDESEA_Core.Filter
+{
+    public class ActionExecuteFilter : IActionFilter
+    {
+        public void OnActionExecuted(ActionExecutedContext context)
+        {
+            
+        }
+
+        public void OnActionExecuting(ActionExecutingContext context)
+        {
+            context.ActionParamsValidator();
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/ApiAuthorizeFilter.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/ApiAuthorizeFilter.cs"
new file mode 100644
index 0000000..74593d0
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/ApiAuthorizeFilter.cs"
@@ -0,0 +1,95 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc.Filters;
+using Microsoft.Extensions.Hosting;
+using System;
+using System.Collections.Generic;
+using System.IdentityModel.Tokens.Jwt;
+using System.Linq;
+using System.Runtime;
+using System.Security.Claims;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Authorization;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Filter
+{
+    /// <summary>
+    /// 鍒ゆ柇token鏄惁姝g‘
+    /// </summary>
+    public class ApiAuthorizeFilter : IAuthorizationFilter
+    {
+        private static readonly string replaceTokenPath = "/api/Sys_User/replaceToken";
+        private static readonly string loginPath = "/api/Sys_User/login";
+        private static readonly string vierificationCodePath = "/api/Sys_User/getVierificationCode";
+
+        public ApiAuthorizeFilter()
+        {
+
+        }
+
+        /// <summary>
+        /// 鍙垽鏂璽oken鏄惁姝g‘锛屼笉鍒ゆ柇鏉冮檺
+        /// 濡傛灉闇�瑕佸垽鏂潈闄愮殑鍦ˋction涓婂姞涓夾piActionPermission灞炴�ф爣璇嗘潈闄愮被鍒紝ActionPermissionFilter浣滄潈闄愬鐞�
+        ///(string,string,string)1銆佽姹傚弬鏁�,2銆佽繑鍥炴秷鎭紝3,寮傚父娑堟伅,4鐘舵��
+        /// </summary>
+        /// <param name="context"></param>
+        public void OnAuthorization(AuthorizationFilterContext context)
+        {
+            if (context.ActionDescriptor.EndpointMetadata.Any(item => item is IAllowAnonymous))
+            {
+                if (!context.HttpContext.User.Identity?.IsAuthenticated ?? false && !string.IsNullOrEmpty(context.HttpContext.Request.Headers[AppSecret.TokenHeaderName]))
+                {
+                    context.AddIdentity();
+                }
+                return;
+            }
+            #region 鍗曠偣鐧诲綍
+            if (string.IsNullOrEmpty(App.User.Token))
+            {
+                if (!string.IsNullOrEmpty(context.HttpContext.Request.Headers[AppSecret.TokenHeaderName].ObjToString().Replace("Bearer ", "")))
+                {
+                    DateTime? expDate = context.HttpContext.User.Claims.Where(x => x.Type == JwtRegisteredClaimNames.Exp).Select(x => x.Value).FirstOrDefault()?.GetTimeSpmpToDate();
+                    //鍔ㄦ�佹爣璇嗗埛鏂皌oken(2021.05.01)
+                    int ExpMinutes = AppSettings.Get("ExpMinutes").ObjToInt();
+                    if ((expDate.GetValueOrDefault() - DateTime.Now).TotalMinutes > ExpMinutes)
+                    {
+                        context.Unauthorized("鐧婚檰宸茶繃鏈�");
+                        return;
+                    }
+                    else
+                    {
+                        App.User.UpdateToke(context.HttpContext.Request.Headers[AppSecret.TokenHeaderName].ObjToString().Replace("Bearer ", ""));
+                    }
+                }
+                else
+                {
+                    context.Unauthorized("鐧婚檰宸茶繃鏈�");
+                    return;
+                }
+            }
+            else
+            {
+                if (App.User.Token != ((ClaimsIdentity?)context.HttpContext.User.Identity)?.BootstrapContext?.ToString())
+                {
+                    context.Unauthorized("鐧婚檰宸茶繃鏈�");
+                    return;
+                }
+            }
+            #endregion
+
+            {
+                DateTime? expDate = context.HttpContext.User.Claims.Where(x => x.Type == JwtRegisteredClaimNames.Exp).Select(x => x.Value).FirstOrDefault()?.GetTimeSpmpToDate();
+                //鍔ㄦ�佹爣璇嗗埛鏂皌oken(2021.05.01)
+                int ExpMinutes = AppSettings.Get("ExpMinutes").ObjToInt();
+                if ((expDate.GetValueOrDefault() - DateTime.Now).TotalMinutes < ExpMinutes / 3 && context.HttpContext.Request.Path != replaceTokenPath)
+                {
+                    context.HttpContext.Response.Headers.Add("widesea_exp", "1");
+                }
+            }
+
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/ExporterHeaderFilter.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/ExporterHeaderFilter.cs"
new file mode 100644
index 0000000..81dc421
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/ExporterHeaderFilter.cs"
@@ -0,0 +1,23 @@
+锘縰sing Magicodes.ExporterAndImporter.Core.Filters;
+using Magicodes.ExporterAndImporter.Core.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Filter
+{
+    public class ExporterHeaderFilter : IExporterHeaderFilter
+    {
+        /// <summary>
+        /// 琛ㄥご绛涢�夊櫒锛堜慨鏀瑰悕绉帮級
+        /// </summary>
+        /// <param name="exporterHeaderInfo"></param>
+        /// <returns></returns>
+        public ExporterHeaderInfo Filter(ExporterHeaderInfo exporterHeaderInfo)
+        {
+            return exporterHeaderInfo;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/GlobalExceptionsFilter.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/GlobalExceptionsFilter.cs"
new file mode 100644
index 0000000..b8e02ba
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/GlobalExceptionsFilter.cs"
@@ -0,0 +1,93 @@
+锘縰sing Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc.Filters;
+using Microsoft.AspNetCore.Mvc.Rendering;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.SignalR;
+using Microsoft.Extensions.Logging;
+using StackExchange.Profiling;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+using System.Reflection.Metadata;
+using WIDESEA_Core.LogHelper;
+
+namespace WIDESEA_Core.Filter
+{
+    /// <summary>
+    /// 鍏ㄥ眬寮傚父閿欒鏃ュ織
+    /// </summary>
+    public class GlobalExceptionsFilter : IExceptionFilter
+    {
+        private readonly IWebHostEnvironment _env;
+        private readonly ILogger<GlobalExceptionsFilter> _loggerHelper;
+
+        public GlobalExceptionsFilter(IWebHostEnvironment env, ILogger<GlobalExceptionsFilter> loggerHelper)
+        {
+            _env = env;
+            _loggerHelper = loggerHelper;
+        }
+
+        public void OnException(ExceptionContext context)
+        {
+            var json = new WebResponseContent();
+
+            json.Message = context.Exception.Message;//閿欒淇℃伅
+            json.Code = 500;//500寮傚父 
+            var errorAudit = "Unable to resolve service for";
+            if (!string.IsNullOrEmpty(json.Message) && json.Message.Contains(errorAudit))
+            {
+                json.Message = json.Message.Replace(errorAudit, $"锛堣嫢鏂版坊鍔犳湇鍔★紝闇�瑕侀噸鏂扮紪璇戦」鐩級{errorAudit}");
+            }
+
+            if (_env.EnvironmentName.ObjToString().Equals("Development"))
+            {
+                json.DevMessage = context.Exception.StackTrace;//鍫嗘爤淇℃伅
+            }
+            var res = new ContentResult();
+            res.Content = json.Serialize();
+
+            context.Result = res;
+            MiniProfiler.Current.CustomTiming("Errors锛�", json.Message);
+
+            LogLock.OutLogAOP("鍏ㄥ眬寮傚父閿欒鏃ュ織", new string[] { json.Message + WriteLog(json.Message, context.Exception) });
+            //閲囩敤log4net 杩涜閿欒鏃ュ織璁板綍
+            //_loggerHelper.LogError(json.Message + WriteLog(json.Message, context.Exception));
+        }
+
+        /// <summary>
+        /// 鑷畾涔夎繑鍥炴牸寮�
+        /// </summary>
+        /// <param name="throwMsg"></param>
+        /// <param name="ex"></param>
+        /// <returns></returns>
+        public string WriteLog(string throwMsg, Exception ex)
+        {
+            return string.Format("\r\n銆愯嚜瀹氫箟閿欒銆戯細{0} \r\n銆愬紓甯哥被鍨嬨�戯細{1} \r\n銆愬紓甯镐俊鎭�戯細{2} \r\n銆愬爢鏍堣皟鐢ㄣ�戯細{3}", new object[] { throwMsg,
+                ex.GetType().Name, ex.Message, ex.StackTrace });
+        }
+
+    }
+    public class InternalServerErrorObjectResult : ObjectResult
+    {
+        public InternalServerErrorObjectResult(object value) : base(value)
+        {
+            StatusCode = StatusCodes.Status500InternalServerError;
+        }
+    }
+    //杩斿洖閿欒淇℃伅
+    public class JsonErrorResponse
+    {
+        /// <summary>
+        /// 鐢熶骇鐜鐨勬秷鎭�
+        /// </summary>
+        public string Message { get; set; }
+        /// <summary>
+        /// 寮�鍙戠幆澧冪殑娑堟伅
+        /// </summary>
+        public string DevelopmentMessage { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/IFixedTokenFilter.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/IFixedTokenFilter.cs"
new file mode 100644
index 0000000..99368a2
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/IFixedTokenFilter.cs"
@@ -0,0 +1,57 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc.Filters;
+using System;
+using System.Collections.Generic;
+using System.IdentityModel.Tokens.Jwt;
+using System.Linq;
+using System.Net;
+using System.Security.Claims;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Authorization;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Filter
+{
+    public interface IFixedTokenFilter : IFilterMetadata
+    {
+        AuthorizationFilterContext OnAuthorization(AuthorizationFilterContext context);
+    }
+    public class FixedTokenAttribute : Attribute, IFixedTokenFilter, IAllowAnonymous
+    {
+        public AuthorizationFilterContext OnAuthorization(AuthorizationFilterContext context)
+        {
+            string fixedoken = "";
+            //濡傛灉token宸插け鏁堬紝鐩存帴鑾峰彇header閲岀殑token
+            if (!context.HttpContext.User.Identity.IsAuthenticated)
+            {
+                fixedoken = context.HttpContext.Request.Headers[AppSecret.TokenHeaderName];
+                fixedoken = fixedoken?.Replace("Bearer ", "");
+                //鍒ゆ柇鏄惁浼犲叆浜唗oken
+                if (string.IsNullOrEmpty(fixedoken))
+                {
+                    return context.Unauthorized("娌℃湁浼犲叆token");
+                }
+                //瑙f瀽token
+                int userId = JwtHelper.GetUserId(fixedoken);
+                if (userId <= 0)
+                {
+                    return context.Unauthorized("token涓嶆纭�");
+                }
+                context.AddIdentity(userId);
+            }
+            else
+            {
+                fixedoken = ((ClaimsIdentity)context.HttpContext.User.Identity)
+                ?.BootstrapContext?.ToString();
+            }
+            //鍒ゆ柇褰撳墠鐢ㄦ埛鐨則oken涓庣紦瀛樼殑token鏄惁鐩稿悓
+            if (App.User.Token != fixedoken)
+            {
+                context.FilterResult(HttpStatusCode.Unauthorized, "token宸插け鏁�");
+            }
+            return context;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/UseServiceDIAttribute.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/UseServiceDIAttribute.cs"
new file mode 100644
index 0000000..be1d4a8
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Filter/UseServiceDIAttribute.cs"
@@ -0,0 +1,38 @@
+锘縰sing Microsoft.AspNetCore.Mvc.Filters;
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Filter
+{
+    public class UseServiceDIAttribute : ActionFilterAttribute
+    {
+
+        protected readonly ILogger<UseServiceDIAttribute> _logger;
+        //private readonly IBlogArticleServices _blogArticleServices;
+        private readonly string _name;
+
+        public UseServiceDIAttribute(ILogger<UseServiceDIAttribute> logger/*, IBlogArticleServices blogArticleServices*/, string Name = "")
+        {
+            _logger = logger;
+            /*_blogArticleServices = blogArticleServices;*/
+            _name = Name;
+        }
+
+
+        public override void OnActionExecuted(ActionExecutedContext context)
+        {
+            //var dd =await _blogArticleServices.Query();
+            base.OnActionExecuted(context);
+            DeleteSubscriptionFiles();
+        }
+
+        private void DeleteSubscriptionFiles()
+        {
+
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/AppSettings.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/AppSettings.cs"
new file mode 100644
index 0000000..c09bcba
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/AppSettings.cs"
@@ -0,0 +1,89 @@
+锘縰sing Microsoft.Extensions.Configuration.Json;
+using Microsoft.Extensions.Configuration;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Helper
+{
+    /// <summary>
+    /// appsettings.json鎿嶄綔绫�
+    /// </summary>
+    public class AppSettings
+    {
+        public static IConfiguration Configuration { get; set; }
+        static string contentPath { get; set; }
+
+        public AppSettings(string contentPath)
+        {
+            string Path = "appsettings.json";
+
+            //濡傛灉浣犳妸閰嶇疆鏂囦欢 鏄� 鏍规嵁鐜鍙橀噺鏉ュ垎寮�浜嗭紝鍙互杩欐牱鍐�
+            //Path = $"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json";
+
+            Configuration = new ConfigurationBuilder()
+               .SetBasePath(contentPath)
+               .Add(new JsonConfigurationSource { Path = Path, Optional = false, ReloadOnChange = true })//杩欐牱鐨勮瘽锛屽彲浠ョ洿鎺ヨ鐩綍閲岀殑json鏂囦欢锛岃�屼笉鏄� bin 鏂囦欢澶逛笅鐨勶紝鎵�浠ヤ笉鐢ㄤ慨鏀瑰鍒跺睘鎬�
+               .Build();
+        }
+
+        public AppSettings(IConfiguration configuration)
+        {
+            Configuration = configuration;
+        }
+
+        /// <summary>
+        /// 灏佽瑕佹搷浣滅殑瀛楃
+        /// </summary>
+        /// <param name="sections">鑺傜偣閰嶇疆</param>
+        /// <returns></returns>
+        public static string Get(params string[] sections)
+        {
+            try
+            {
+
+                if (sections.Any())
+                {
+                    return Configuration[string.Join(":", sections)];
+                }
+            }
+            catch (Exception) { }
+
+            return "";
+        }
+
+        /// <summary>
+        /// 閫掑綊鑾峰彇閰嶇疆淇℃伅鏁扮粍
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="sections"></param>
+        /// <returns></returns>
+        public static List<T> Get<T>(params string[] sections)
+        {
+            List<T> list = new List<T>();
+            // 寮曠敤 Microsoft.Extensions.Configuration.Binder 鍖�
+            Configuration.Bind(string.Join(":", sections), list);
+            return list;
+        }
+
+
+        /// <summary>
+        /// 鏍规嵁璺緞  configuration["App:Name"];
+        /// </summary>
+        /// <param name="sectionsPath"></param>
+        /// <returns></returns>
+        public static string GetValue(string sectionsPath)
+        {
+            try
+            {
+                return Configuration[sectionsPath];
+            }
+            catch (Exception) { }
+
+            return "";
+
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/AutoMapperHelper.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/AutoMapperHelper.cs"
new file mode 100644
index 0000000..cb72738
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/AutoMapperHelper.cs"
@@ -0,0 +1,23 @@
+锘縰sing AutoMapper;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Helper
+{
+
+    /// <summary>
+    /// AutoMapper鏄犲皠甯姪绫�
+    /// AutoMapper 鐗堟湰13.0.1
+    /// </summary>
+    public static class AutoMapperHelper
+    {
+
+
+    }
+
+    
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/CodeAnalysisHelper.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/CodeAnalysisHelper.cs"
new file mode 100644
index 0000000..dd90e9b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/CodeAnalysisHelper.cs"
@@ -0,0 +1,204 @@
+锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Seed;
+using WIDESEA_Core.Utilities;
+
+namespace WIDESEA_Core.Helper
+{
+    public class CodeAnalysisHelper
+    {
+        /// <summary>
+        /// 瑙f瀽缂栫爜鎴愬璞¢泦
+        /// </summary>
+        /// <typeparam name="T">娉涘瀷</typeparam>
+        /// <param name="analysisCode">瑙勫垯缂栧彿</param>
+        /// <param name="code">闇�瑙f瀽鐨勫瓧绗︿覆</param>
+        /// <returns></returns>
+        public static T CodeAnalysis<T>(AnalysisCodeEnum analysisCode, string code)
+        {
+            Type type = typeof(T);
+            object? obj = Activator.CreateInstance(type);
+            if (obj == null)
+                throw new Exception("瀹炰緥鍖栧璞¢敊璇�");
+            T result = (T)obj;
+            try
+            {
+                AnalysisRuleAttribute? analysisRule = type.GetCustomAttribute<AnalysisRuleAttribute>();
+                if (analysisRule != null)
+                {
+                    SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig
+                    {
+                        ConfigId = MainDb.CurrentDbConnId,
+                        ConnectionString = DBContext.GetMainConnectionDb().Connection,
+                        IsAutoCloseConnection = true,
+                        DbType = MainDb.DbType,
+                    });
+
+                    dynamic ruleConfig = sugarClient.Queryable(MainDb.AnalysisRuleConfig, "x").Where(MainDb.AnalysisCode, "=", analysisCode.ToString()).First();
+                    if (ruleConfig != null)
+                    {
+                        string format = ruleConfig.Format;
+                        string splitStr = ruleConfig.SplitStr;
+                        List<string> items = format.Split(splitStr).ToList();
+                        List<string> codes = code.Split(splitStr).ToList();
+                        if (items.Count == codes.Count)
+                        {
+                            PropertyInfo[] propertyInfos = type.GetProperties();
+                            if (AnalysisRuleEnum.Split == analysisRule.AnalysisRule)
+                            {
+                                for (int i = 0; i < propertyInfos.Length; i++)
+                                {
+                                    PropertyInfo propertyInfo = propertyInfos[i];
+                                    AnalysisItemRuleAttribute? analysisItemRule = propertyInfo.GetCustomAttribute<AnalysisItemRuleAttribute>();
+                                    if (analysisItemRule != null)
+                                    {
+                                        if (analysisItemRule.AnalysisFormaType == AnalysisFormatTypeEnum.BD)
+                                        {
+                                            propertyInfo.SetValue(result, code.ChangeType(propertyInfo.PropertyType));
+                                        }
+                                        else
+                                        {
+                                            int index = items.IndexOf($"[{analysisItemRule.AnalysisFormaType}]");
+                                            if (index != -1)
+                                            {
+                                                propertyInfo.SetValue(result, codes[index]);
+                                            }
+                                            else
+                                            {
+                                                string? codeItem = items.FirstOrDefault(x => x.Contains($"[{analysisItemRule.AnalysisFormaType}]"));
+                                                if (!string.IsNullOrEmpty(codeItem))
+                                                {
+                                                    index = items.IndexOf(codeItem);
+                                                    if (index != -1)
+                                                    {
+                                                        string value = codes[index];
+                                                        string replaceStr = codeItem.Replace($"[{analysisItemRule.AnalysisFormaType}]", "");
+
+                                                        propertyInfo.SetValue(result, value.Replace(replaceStr, "").ChangeType(propertyInfo.PropertyType));
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                throw new Exception($"瑙f瀽閿欒,{ex.Message}");
+            }
+
+            (bool, string, object?) validateResult = ModelValidate.ValidateModelData(result, type);
+            if (!validateResult.Item1)
+            {
+                throw new Exception($"瑙f瀽閿欒,{validateResult.Item2}");
+            }
+
+            return result;
+        }
+
+        /// <summary>
+        /// 瑙f瀽缂栫爜鎴愬璞¢泦鍚�
+        /// </summary>
+        /// <typeparam name="T">娉涘瀷</typeparam>
+        /// <param name="analysisCode">瑙勫垯缂栧彿</param>
+        /// <param name="codeList">闇�瑙f瀽鐨勫瓧绗︿覆闆嗗悎</param>
+        /// <returns></returns>
+        public static List<T> CodeAnalysis<T>(AnalysisCodeEnum analysisCode, List<string> codeList)
+        {
+            Type type = typeof(T);
+            List<T> list = new List<T>();
+
+            try
+            {
+                AnalysisRuleAttribute? analysisRule = type.GetCustomAttribute<AnalysisRuleAttribute>();
+                if (analysisRule != null)
+                {
+                    SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig
+                    {
+                        ConfigId = MainDb.CurrentDbConnId,
+                        ConnectionString = DBContext.GetMainConnectionDb().Connection,
+                        IsAutoCloseConnection = true,
+                        DbType = MainDb.DbType,
+                    });
+
+                    dynamic ruleConfig = sugarClient.Queryable(MainDb.AnalysisRuleConfig, "x").Where(MainDb.AnalysisCode, "=", analysisCode.ToString()).First();
+                    if (ruleConfig != null)
+                    {
+                        for (int j = 0; j < codeList.Count; j++)
+                        {
+                            T result = (T)Activator.CreateInstance(type);
+                            string code = codeList[j];
+                            string format = ruleConfig.Format;
+                            string splitStr = ruleConfig.SplitStr;
+                            List<string> items = format.Split(splitStr).ToList();
+                            List<string> codes = code.Split(splitStr).ToList();
+                            if (items.Count == codes.Count)
+                            {
+                                PropertyInfo[] propertyInfos = type.GetProperties();
+                                if (AnalysisRuleEnum.Split == analysisRule.AnalysisRule)
+                                {
+                                    for (int i = 0; i < propertyInfos.Length; i++)
+                                    {
+                                        PropertyInfo propertyInfo = propertyInfos[i];
+                                        AnalysisItemRuleAttribute? analysisItemRule = propertyInfo.GetCustomAttribute<AnalysisItemRuleAttribute>();
+                                        if (analysisItemRule != null)
+                                        {
+                                            if (analysisItemRule.AnalysisFormaType == AnalysisFormatTypeEnum.BD)
+                                            {
+                                                propertyInfo.SetValue(result, code.ChangeType(propertyInfo.PropertyType));
+                                            }
+                                            else
+                                            {
+                                                int index = items.IndexOf($"[{analysisItemRule.AnalysisFormaType}]");
+                                                if (index != -1)
+                                                {
+                                                    propertyInfo.SetValue(result, codes[index]);
+                                                }
+                                                else
+                                                {
+                                                    string? codeItem = items.FirstOrDefault(x => x.Contains($"[{analysisItemRule.AnalysisFormaType}]"));
+                                                    if (!string.IsNullOrEmpty(codeItem))
+                                                    {
+                                                        index = items.IndexOf(codeItem);
+                                                        if (index != -1)
+                                                        {
+                                                            string value = codes[index];
+                                                            string replaceStr = codeItem.Replace($"[{analysisItemRule.AnalysisFormaType}]", "");
+
+                                                            propertyInfo.SetValue(result, value.Replace(replaceStr, "").ChangeType(propertyInfo.PropertyType));
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                                list.Add(result);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return list;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/ConsoleHelper.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/ConsoleHelper.cs"
new file mode 100644
index 0000000..2cc4614
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/ConsoleHelper.cs"
@@ -0,0 +1,57 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Helper
+{
+    public static class ConsoleHelper
+    {
+        private static readonly object _objLock = new();
+
+        /// <summary>
+        /// 鍦ㄦ帶鍒跺彴杈撳嚭
+        /// </summary>
+        /// <param name="str">鏂囨湰</param>
+        /// <param name="color">鍓嶉鑹�</param>
+        public static void WriteColorLine(string str, ConsoleColor color)
+        {
+            lock (_objLock)
+            {
+                ConsoleColor currentForeColor = Console.ForegroundColor;
+                Console.ForegroundColor = color;
+                Console.WriteLine(str);
+                Console.ForegroundColor = currentForeColor;
+            }
+        }
+
+        /// <summary>
+        /// 鎵撳嵃閿欒淇℃伅
+        /// </summary>
+        /// <param name="str">寰呮墦鍗扮殑瀛楃涓�</param>
+        /// <param name="color">鎯宠鎵撳嵃鐨勯鑹�</param>
+        public static void WriteErrorLine(this string str, ConsoleColor color = ConsoleColor.Red) => WriteColorLine(str, color);
+
+        /// <summary>
+        /// 鎵撳嵃璀﹀憡淇℃伅
+        /// </summary>
+        /// <param name="str">寰呮墦鍗扮殑瀛楃涓�</param>
+        /// <param name="color">鎯宠鎵撳嵃鐨勯鑹�</param>
+        public static void WriteWarningLine(this string str, ConsoleColor color = ConsoleColor.Yellow) => WriteColorLine(str, color);
+
+        /// <summary>
+        /// 鎵撳嵃姝e父淇℃伅
+        /// </summary>
+        /// <param name="str">寰呮墦鍗扮殑瀛楃涓�</param>
+        /// <param name="color">鎯宠鎵撳嵃鐨勯鑹�</param>
+        public static void WriteInfoLine(this string str, ConsoleColor color = ConsoleColor.White) => WriteColorLine(str, color);
+
+        /// <summary>
+        /// 鎵撳嵃鎴愬姛鐨勪俊鎭�
+        /// </summary>
+        /// <param name="str">寰呮墦鍗扮殑瀛楃涓�</param>
+        /// <param name="color">鎯宠鎵撳嵃鐨勯鑹�</param>
+        public static void WriteSuccessLine(this string str, ConsoleColor color = ConsoleColor.Green) => WriteColorLine(str, color);
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/ExportHelper.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/ExportHelper.cs"
new file mode 100644
index 0000000..6e9a8fc
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/ExportHelper.cs"
@@ -0,0 +1,106 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Excel;
+using Magicodes.IE.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Helper
+{
+    public static class ExportHelper
+    {
+        public static Type CreateDynamicClass(this PropertyInfo[] propertyInfos)
+        {
+            string className = "DynamicClass";
+            AssemblyName assemblyName = new AssemblyName("WIDESEA_Model.Models");
+            AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);//瀹氫箟鍏锋湁鎸囧畾鍚嶇О鍜岃闂潈闄愮殑鍔ㄦ�佺▼搴忛泦
+            ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MainModule");//鍦ㄦ绋嬪簭闆嗕腑瀹氫箟鍛藉悕鐨勬殏鏃跺姩鎬佹ā鍧�
+            TypeBuilder typeBuilder = moduleBuilder.DefineType(className, TypeAttributes.Public);//TypeBuilder:鍦ㄨ繍琛屾椂瀹氫箟骞跺垱寤虹被鐨勬柊瀹炰緥
+
+            Type attributeType1 = typeof(ExcelExporterAttribute);
+            MethodInfo [] methodInfos = attributeType1.GetMethods(BindingFlags.Public);
+            ConstructorInfo[] constructorInfos2 = attributeType1.GetConstructors();
+            ConstructorInfo constructorInfo2 = constructorInfos2[0];
+            CustomAttributeBuilder customAttributeBuilder2 = new CustomAttributeBuilder(constructorInfo2, new object[] { });
+
+            typeBuilder.SetCustomAttribute(customAttributeBuilder2);
+
+            foreach (var property in propertyInfos)
+            {
+                string propertyName = property.Name;
+                Type propertyType = property.PropertyType;
+
+                FieldBuilder fieldBuilder = typeBuilder.DefineField("_" + propertyName, propertyType, FieldAttributes.Private);
+                PropertyBuilder propertyBuilder = typeBuilder.DefineProperty(propertyName, PropertyAttributes.HasDefault, propertyType, null);
+
+                SugarColumn sugarColumn = property.GetCustomAttribute<SugarColumn>();
+                if (sugarColumn != null)
+                {
+                    Type attributeType = typeof(ExporterHeaderAttribute);
+                    ConstructorInfo[] constructorInfos = attributeType.GetConstructors();
+                    ConstructorInfo constructorInfo = constructorInfos[0];
+                    CustomAttributeBuilder customAttributeBuilder = new CustomAttributeBuilder(constructorInfo, new object[] { sugarColumn.ColumnDescription, 11f, null, false, true, true, 0, KnownColor.Empty });
+                    propertyBuilder.SetCustomAttribute(customAttributeBuilder);
+                }
+
+                MethodAttributes getSetAttributes = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig;
+
+                MethodBuilder getMethodBuilder = typeBuilder.DefineMethod("get_" + propertyName, getSetAttributes, propertyType, Type.EmptyTypes);
+                ILGenerator getIL = getMethodBuilder.GetILGenerator();
+                getIL.Emit(OpCodes.Ldarg_0);
+                getIL.Emit(OpCodes.Ldfld, fieldBuilder);
+                getIL.Emit(OpCodes.Ret);
+
+                MethodBuilder setMethodBuilder = typeBuilder.DefineMethod("set_" + propertyName, getSetAttributes, null, new Type[] { propertyType });
+                ILGenerator setIL = setMethodBuilder.GetILGenerator();
+                setIL.Emit(OpCodes.Ldarg_0);
+                setIL.Emit(OpCodes.Ldarg_1);
+                setIL.Emit(OpCodes.Stfld, fieldBuilder);
+                setIL.Emit(OpCodes.Ret);
+
+                propertyBuilder.SetGetMethod(getMethodBuilder);
+                propertyBuilder.SetSetMethod(setMethodBuilder);
+
+
+            }
+
+            Type generatedType = typeBuilder.CreateType();
+            return generatedType;
+        }
+
+        public static void SetProperty(object instance, string propertyName, object value)
+        {
+            Type type = instance.GetType();
+            PropertyInfo propertyInfo = type.GetProperty(propertyName);
+            propertyInfo.SetValue(instance, value);
+        }
+
+        public static object GetProperty(object instance, string propertyName)
+        {
+            Type type = instance.GetType();
+            PropertyInfo propertyInfo = type.GetProperty(propertyName);
+            return propertyInfo.GetValue(instance);
+        }
+
+        public static void SetValue<T>(object instance, T value)
+        {
+            Type type = instance.GetType();
+
+            PropertyInfo[] propertyInfos = typeof(T).GetProperties();
+            for (int j = 0; j < propertyInfos.Length; j++)
+            {
+                PropertyInfo propertyInfo = type.GetProperty(propertyInfos[j].Name);
+                object obj = propertyInfos[j].GetValue(value);
+                propertyInfo.SetValue(instance, obj);
+                ExporterHeaderAttribute exporterHeaderAttribute = propertyInfo.GetCustomAttribute<ExporterHeaderAttribute>();
+            }
+
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/FileHelper.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/FileHelper.cs"
new file mode 100644
index 0000000..df88f8a
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/FileHelper.cs"
@@ -0,0 +1,451 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Helper
+{
+    public class FileHelper : IDisposable
+    {
+
+        private bool _alreadyDispose = false;
+
+        #region 鏋勯�犲嚱鏁�
+        public FileHelper()
+        {
+
+        }
+        ~FileHelper()
+        {
+            Dispose(); ;
+        }
+
+        protected virtual void Dispose(bool isDisposing)
+        {
+            if (_alreadyDispose) return;
+            _alreadyDispose = true;
+        }
+        #endregion
+
+        #region IDisposable 鎴愬憳
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        #endregion
+
+        #region 鍙栧緱鏂囦欢鍚庣紑鍚�
+        /****************************************
+          * 鍑芥暟鍚嶇О锛欸etPostfixStr
+          * 鍔熻兘璇存槑锛氬彇寰楁枃浠跺悗缂�鍚�
+          * 鍙�     鏁帮細filename:鏂囦欢鍚嶇О
+          * 璋冪敤绀哄垪锛�
+          *            string filename = "aaa.aspx";        
+          *            string s = EC.FileObj.GetPostfixStr(filename);         
+         *****************************************/
+        /// <summary>
+        /// 鍙栧悗缂�鍚�
+        /// </summary>
+        /// <param name="filename">鏂囦欢鍚�</param>
+        /// <returns>.gif|.html鏍煎紡</returns>
+        public static string GetPostfixStr(string filename)
+        {
+            int start = filename.LastIndexOf(".");
+            int length = filename.Length;
+            string postfix = filename.Substring(start, length - start);
+            return postfix;
+        }
+        #endregion
+
+        #region 鏍规嵁鏂囦欢澶у皬鑾峰彇鎸囧畾鍓嶇紑鐨勫彲鐢ㄦ枃浠跺悕
+        /// <summary>
+        /// 鏍规嵁鏂囦欢澶у皬鑾峰彇鎸囧畾鍓嶇紑鐨勫彲鐢ㄦ枃浠跺悕
+        /// </summary>
+        /// <param name="folderPath">鏂囦欢澶�</param>
+        /// <param name="prefix">鏂囦欢鍓嶇紑</param>
+        /// <param name="size">鏂囦欢澶у皬(1m)</param>
+        /// <param name="ext">鏂囦欢鍚庣紑(.log)</param>
+        /// <returns>鍙敤鏂囦欢鍚�</returns>
+        public static string GetAvailableFileWithPrefixOrderSize(string folderPath, string prefix, int size = 1 * 1024 * 1024, string ext = ".log")
+        {
+            var allFiles = new DirectoryInfo(folderPath);
+            var selectFiles = allFiles.GetFiles().Where(fi => fi.Name.ToLower().Contains(prefix.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size).OrderByDescending(d => d.Name).ToList();
+
+            if (selectFiles.Count > 0)
+            {
+                return selectFiles.FirstOrDefault().FullName;
+            }
+
+            return Path.Combine(folderPath, $@"{prefix}_{DateTime.Now.DateToTimeStamp()}.log");
+        }
+        public static string GetAvailableFileNameWithPrefixOrderSize(string _contentRoot, string prefix, int size = 1 * 1024 * 1024, string ext = ".log")
+        {
+            var folderPath = Path.Combine(_contentRoot, "Log");
+            if (!Directory.Exists(folderPath))
+            {
+                Directory.CreateDirectory(folderPath);
+            }
+
+            var allFiles = new DirectoryInfo(folderPath);
+            var selectFiles = allFiles.GetFiles().Where(fi => fi.Name.ToLower().Contains(prefix.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size).OrderByDescending(d => d.Name).ToList();
+
+            if (selectFiles.Count > 0)
+            {
+                return selectFiles.FirstOrDefault().Name.Replace(".log", "");
+            }
+
+            return $@"{prefix}_{DateTime.Now.DateToTimeStamp()}";
+        }
+        #endregion
+
+        #region 鍐欐枃浠�
+        /****************************************
+          * 鍑芥暟鍚嶇О锛歐riteFile
+          * 鍔熻兘璇存槑锛氬啓鏂囦欢,浼氳鐩栨帀浠ュ墠鐨勫唴瀹�
+          * 鍙�     鏁帮細Path:鏂囦欢璺緞,Strings:鏂囨湰鍐呭
+          * 璋冪敤绀哄垪锛�
+          *            string Path = Server.MapPath("Default2.aspx");       
+          *            string Strings = "杩欐槸鎴戝啓鐨勫唴瀹瑰晩";
+          *            EC.FileObj.WriteFile(Path,Strings);
+         *****************************************/
+        /// <summary>
+        /// 鍐欐枃浠�
+        /// </summary>
+        /// <param name="Path">鏂囦欢璺緞</param>
+        /// <param name="Strings">鏂囦欢鍐呭</param>
+        public static void WriteFile(string Path, string Strings)
+        {
+            if (!File.Exists(Path))
+            {
+                FileStream f = File.Create(Path);
+                f.Close();
+            }
+            StreamWriter f2 = new StreamWriter(Path, false, System.Text.Encoding.UTF8);
+            f2.Write(Strings);
+            f2.Close();
+            f2.Dispose();
+        }
+
+        /// <summary>
+        /// 鍐欐枃浠�
+        /// </summary>
+        /// <param name="Path">鏂囦欢璺緞</param>
+        /// <param name="Strings">鏂囦欢鍐呭</param>
+        public static void WriteFileAndDelOldFile(string Path, string Strings)
+        {
+            if (!File.Exists(Path))
+            {
+                FileStream f = File.Create(Path);
+                f.Close();
+            }
+            else
+            {
+                File.Delete(Path);
+            }
+            StreamWriter f2 = new StreamWriter(Path, false, System.Text.Encoding.UTF8);
+            f2.Write(Strings);
+            f2.Close();
+            f2.Dispose();
+        }
+
+        /// <summary>
+        /// 鍐欐枃浠�
+        /// </summary>
+        /// <param name="Path">鏂囦欢璺緞</param>
+        /// <param name="Strings">鏂囦欢鍐呭</param>
+        public static void WriteFile(string Path, byte[] buf)
+        {
+            if (!File.Exists(Path))
+            {
+                FileStream f = File.Create(Path);
+                f.Close();
+            }
+            FileStream f2 = new FileStream(Path, FileMode.Create, FileAccess.Write);
+            f2.Write(buf, 0, buf.Length);
+            f2.Close();
+            f2.Dispose();
+        }
+
+        public static void WriteFile(string Path, string fileName, byte[] buf)
+        {
+            if (!Directory.Exists(Path))
+            {
+                Directory.CreateDirectory(Path);
+            }
+            if (!File.Exists(Path + "\\" + fileName))
+            {
+                FileStream f = File.Create(Path + "\\" + fileName);
+                f.Close();
+            }
+            FileStream f2 = new FileStream(Path + "\\" + fileName, FileMode.Create, FileAccess.Write);
+            f2.Write(buf, 0, buf.Length);
+            f2.Close();
+            f2.Dispose();
+        }
+
+        /// <summary>
+        /// 鍐欐枃浠�
+        /// </summary>
+        /// <param name="Path">鏂囦欢璺緞</param>
+        /// <param name="Strings">鏂囦欢鍐呭</param>
+        /// <param name="encode">缂栫爜鏍煎紡</param>
+        public static void WriteFile(string Path, string Strings, Encoding encode)
+        {
+            if (!File.Exists(Path))
+            {
+                FileStream f = File.Create(Path);
+                f.Close();
+            }
+            StreamWriter f2 = new StreamWriter(Path, false, encode);
+            f2.Write(Strings);
+            f2.Close();
+            f2.Dispose();
+        }
+        #endregion
+
+        #region 璇绘枃浠�
+        /****************************************
+          * 鍑芥暟鍚嶇О锛歊eadFile
+          * 鍔熻兘璇存槑锛氳鍙栨枃鏈唴瀹�
+          * 鍙�     鏁帮細Path:鏂囦欢璺緞
+          * 璋冪敤绀哄垪锛�
+          *            string Path = Server.MapPath("Default2.aspx");       
+          *            string s = EC.FileObj.ReadFile(Path);
+         *****************************************/
+        /// <summary>
+        /// 璇绘枃浠�
+        /// </summary>
+        /// <param name="Path">鏂囦欢璺緞</param>
+        /// <returns></returns>
+        public static string ReadFile(string Path)
+        {
+            string s = "";
+            if (!File.Exists(Path))
+                s = "涓嶅瓨鍦ㄧ浉搴旂殑鐩綍";
+            else
+            {
+                StreamReader f2 = new StreamReader(Path, System.Text.Encoding.GetEncoding("gb2312"));
+                s = f2.ReadToEnd();
+                f2.Close();
+                f2.Dispose();
+            }
+
+            return s;
+        }
+
+        /// <summary>
+        /// 璇绘枃浠�
+        /// </summary>
+        /// <param name="Path">鏂囦欢璺緞</param>
+        /// <param name="encode">缂栫爜鏍煎紡</param>
+        /// <returns></returns>
+        public static string ReadFile(string Path, Encoding encode)
+        {
+            string s = "";
+            if (!File.Exists(Path))
+                s = "涓嶅瓨鍦ㄧ浉搴旂殑鐩綍";
+            else
+            {
+                StreamReader f2 = new StreamReader(Path, encode);
+                s = f2.ReadToEnd();
+                f2.Close();
+                f2.Dispose();
+            }
+
+            return s;
+        }
+        #endregion
+
+        #region 杩藉姞鏂囦欢
+        /****************************************
+          * 鍑芥暟鍚嶇О锛欶ileAdd
+          * 鍔熻兘璇存槑锛氳拷鍔犳枃浠跺唴瀹�
+          * 鍙�     鏁帮細Path:鏂囦欢璺緞,strings:鍐呭
+          * 璋冪敤绀哄垪锛�
+          *            string Path = Server.MapPath("Default2.aspx");     
+          *            string Strings = "鏂拌拷鍔犲唴瀹�";
+          *            EC.FileObj.FileAdd(Path, Strings);
+         *****************************************/
+        /// <summary>
+        /// 杩藉姞鏂囦欢
+        /// </summary>
+        /// <param name="Path">鏂囦欢璺緞</param>
+        /// <param name="strings">鍐呭</param>
+        public static void FileAdd(string Path, string strings)
+        {
+            StreamWriter sw = File.AppendText(Path);
+            sw.Write(strings);
+            sw.Flush();
+            sw.Close();
+        }
+        #endregion
+
+        #region 鎷疯礉鏂囦欢
+        /****************************************
+          * 鍑芥暟鍚嶇О锛欶ileCoppy
+          * 鍔熻兘璇存槑锛氭嫹璐濇枃浠�
+          * 鍙�     鏁帮細OrignFile:鍘熷鏂囦欢,NewFile:鏂版枃浠惰矾寰�
+          * 璋冪敤绀哄垪锛�
+          *            string orignFile = Server.MapPath("Default2.aspx");     
+          *            string NewFile = Server.MapPath("Default3.aspx");
+          *            EC.FileObj.FileCoppy(OrignFile, NewFile);
+         *****************************************/
+        /// <summary>
+        /// 鎷疯礉鏂囦欢
+        /// </summary>
+        /// <param name="OrignFile">鍘熷鏂囦欢</param>
+        /// <param name="NewFile">鏂版枃浠惰矾寰�</param>
+        public static void FileCoppy(string orignFile, string NewFile)
+        {
+            File.Copy(orignFile, NewFile, true);
+        }
+
+        #endregion
+
+        #region 鍒犻櫎鏂囦欢
+        /****************************************
+          * 鍑芥暟鍚嶇О锛欶ileDel
+          * 鍔熻兘璇存槑锛氬垹闄ゆ枃浠�
+          * 鍙�     鏁帮細Path:鏂囦欢璺緞
+          * 璋冪敤绀哄垪锛�
+          *            string Path = Server.MapPath("Default3.aspx");    
+          *            EC.FileObj.FileDel(Path);
+         *****************************************/
+        /// <summary>
+        /// 鍒犻櫎鏂囦欢
+        /// </summary>
+        /// <param name="Path">璺緞</param>
+        public static void FileDel(string Path)
+        {
+            File.Delete(Path);
+        }
+        #endregion
+
+        #region 绉诲姩鏂囦欢
+        /****************************************
+          * 鍑芥暟鍚嶇О锛欶ileMove
+          * 鍔熻兘璇存槑锛氱Щ鍔ㄦ枃浠�
+          * 鍙�     鏁帮細OrignFile:鍘熷璺緞,NewFile:鏂版枃浠惰矾寰�
+          * 璋冪敤绀哄垪锛�
+          *             string orignFile = Server.MapPath("../璇存槑.txt");    
+          *             string NewFile = Server.MapPath("http://www.cnblogs.com/璇存槑.txt");
+          *             EC.FileObj.FileMove(OrignFile, NewFile);
+         *****************************************/
+        /// <summary>
+        /// 绉诲姩鏂囦欢
+        /// </summary>
+        /// <param name="OrignFile">鍘熷璺緞</param>
+        /// <param name="NewFile">鏂拌矾寰�</param>
+        public static void FileMove(string orignFile, string NewFile)
+        {
+            File.Move(orignFile, NewFile);
+        }
+        #endregion
+
+        #region 鍦ㄥ綋鍓嶇洰褰曚笅鍒涘缓鐩綍
+        /****************************************
+          * 鍑芥暟鍚嶇О锛欶olderCreate
+          * 鍔熻兘璇存槑锛氬湪褰撳墠鐩綍涓嬪垱寤虹洰褰�
+          * 鍙�     鏁帮細OrignFolder:褰撳墠鐩綍,NewFloder:鏂扮洰褰�
+          * 璋冪敤绀哄垪锛�
+          *            string orignFolder = Server.MapPath("test/");    
+          *            string NewFloder = "new";
+          *            EC.FileObj.FolderCreate(OrignFolder, NewFloder);
+         *****************************************/
+        /// <summary>
+        /// 鍦ㄥ綋鍓嶇洰褰曚笅鍒涘缓鐩綍
+        /// </summary>
+        /// <param name="OrignFolder">褰撳墠鐩綍</param>
+        /// <param name="NewFloder">鏂扮洰褰�</param>
+        public static void FolderCreate(string orignFolder, string NewFloder)
+        {
+            Directory.SetCurrentDirectory(orignFolder);
+            Directory.CreateDirectory(NewFloder);
+        }
+        #endregion
+
+        #region 閫掑綊鍒犻櫎鏂囦欢澶圭洰褰曞強鏂囦欢
+        /****************************************
+          * 鍑芥暟鍚嶇О锛欴eleteFolder
+          * 鍔熻兘璇存槑锛氶�掑綊鍒犻櫎鏂囦欢澶圭洰褰曞強鏂囦欢
+          * 鍙�     鏁帮細dir:鏂囦欢澶硅矾寰�
+          * 璋冪敤绀哄垪锛�
+          *            string dir = Server.MapPath("test/");  
+          *            EC.FileObj.DeleteFolder(dir);       
+         *****************************************/
+        /// <summary>
+        /// 閫掑綊鍒犻櫎鏂囦欢澶圭洰褰曞強鏂囦欢
+        /// </summary>
+        /// <param name="dir"></param>
+        /// <returns></returns>
+        public static void DeleteFolder(string dir)
+        {
+            if (Directory.Exists(dir)) //濡傛灉瀛樺湪杩欎釜鏂囦欢澶瑰垹闄や箣
+            {
+                foreach (string d in Directory.GetFileSystemEntries(dir))
+                {
+                    if (File.Exists(d))
+                        File.Delete(d); //鐩存帴鍒犻櫎鍏朵腑鐨勬枃浠�
+                    else
+                        DeleteFolder(d); //閫掑綊鍒犻櫎瀛愭枃浠跺す
+                }
+                Directory.Delete(dir); //鍒犻櫎宸茬┖鏂囦欢澶�
+            }
+
+        }
+        #endregion
+
+        #region 灏嗘寚瀹氭枃浠跺す涓嬮潰鐨勬墍鏈夊唴瀹筩opy鍒扮洰鏍囨枃浠跺す涓嬮潰 鏋滅洰鏍囨枃浠跺す涓哄彧璇诲睘鎬у氨浼氭姤閿欍��
+        /****************************************
+          * 鍑芥暟鍚嶇О锛欳opyDir
+          * 鍔熻兘璇存槑锛氬皢鎸囧畾鏂囦欢澶逛笅闈㈢殑鎵�鏈夊唴瀹筩opy鍒扮洰鏍囨枃浠跺す涓嬮潰 鏋滅洰鏍囨枃浠跺す涓哄彧璇诲睘鎬у氨浼氭姤閿欍��
+          * 鍙�     鏁帮細srcPath:鍘熷璺緞,aimPath:鐩爣鏂囦欢澶�
+          * 璋冪敤绀哄垪锛�
+          *            string srcPath = Server.MapPath("test/");  
+          *            string aimPath = Server.MapPath("test1/");
+          *            EC.FileObj.CopyDir(srcPath,aimPath);   
+         *****************************************/
+        /// <summary>
+        /// 鎸囧畾鏂囦欢澶逛笅闈㈢殑鎵�鏈夊唴瀹筩opy鍒扮洰鏍囨枃浠跺す涓嬮潰
+        /// </summary>
+        /// <param name="srcPath">鍘熷璺緞</param>
+        /// <param name="aimPath">鐩爣鏂囦欢澶�</param>
+        public static void CopyDir(string srcPath, string aimPath)
+        {
+            try
+            {
+                // 妫�鏌ョ洰鏍囩洰褰曟槸鍚︿互鐩綍鍒嗗壊瀛楃缁撴潫濡傛灉涓嶆槸鍒欐坊鍔犱箣
+                if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar)
+                    aimPath += Path.DirectorySeparatorChar;
+                // 鍒ゆ柇鐩爣鐩綍鏄惁瀛樺湪濡傛灉涓嶅瓨鍦ㄥ垯鏂板缓涔�
+                if (!Directory.Exists(aimPath))
+                    Directory.CreateDirectory(aimPath);
+                // 寰楀埌婧愮洰褰曠殑鏂囦欢鍒楄〃锛岃閲岄潰鏄寘鍚枃浠朵互鍙婄洰褰曡矾寰勭殑涓�涓暟缁�
+                //濡傛灉浣犳寚鍚慶opy鐩爣鏂囦欢涓嬮潰鐨勬枃浠惰�屼笉鍖呭惈鐩綍璇蜂娇鐢ㄤ笅闈㈢殑鏂规硶
+                //string[] fileList = Directory.GetFiles(srcPath);
+                string[] fileList = Directory.GetFileSystemEntries(srcPath);
+                //閬嶅巻鎵�鏈夌殑鏂囦欢鍜岀洰褰�
+                foreach (string file in fileList)
+                {
+                    //鍏堝綋浣滅洰褰曞鐞嗗鏋滃瓨鍦ㄨ繖涓洰褰曞氨閫掑綊Copy璇ョ洰褰曚笅闈㈢殑鏂囦欢
+
+                    if (Directory.Exists(file))
+                        CopyDir(file, aimPath + Path.GetFileName(file));
+                    //鍚﹀垯鐩存帴Copy鏂囦欢
+                    else
+                        File.Copy(file, aimPath + Path.GetFileName(file), true);
+                }
+
+            }
+            catch (Exception ee)
+            {
+                throw new Exception(ee.ToString());
+            }
+        }
+        #endregion
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpContextHelper.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpContextHelper.cs"
new file mode 100644
index 0000000..d0d23cd
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpContextHelper.cs"
@@ -0,0 +1,36 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Helper
+{
+    public static class HttpContextHelper
+    {
+        public static string GetUserIp(this HttpContext context)
+        {
+            string realIP = null;
+            string forwarded = null;
+            string remoteIpAddress = context.Connection.RemoteIpAddress.ToString();
+            if (context.Request.Headers.ContainsKey("X-Real-IP"))
+            {
+                realIP = context.Request.Headers["X-Real-IP"].ToString();
+                if (realIP != remoteIpAddress)
+                {
+                    remoteIpAddress = realIP;
+                }
+            }
+            if (context.Request.Headers.ContainsKey("X-Forwarded-For"))
+            {
+                forwarded = context.Request.Headers["X-Forwarded-For"].ToString();
+                if (forwarded != remoteIpAddress)
+                {
+                    remoteIpAddress = forwarded;
+                }
+            }
+            return remoteIpAddress;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpHelper.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpHelper.cs"
new file mode 100644
index 0000000..c020a67
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpHelper.cs"
@@ -0,0 +1,136 @@
+锘縰sing Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http.Headers;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.LogHelper;
+
+namespace WIDESEA_Core.Helper
+{
+    public class HttpHelper
+    {
+        public static async Task<string> GetAsync(string serviceAddress, Dictionary<string, string>? headers = null)
+        {
+            string result = string.Empty;
+            DateTime beginDate = DateTime.Now;
+            try
+            {
+                using HttpClient httpClient = new HttpClient();
+                httpClient.Timeout = new TimeSpan(0, 0, 60);
+                
+                if (headers != null)
+                {
+                    foreach (var header in headers)
+                        httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
+                }
+
+                result = await httpClient.GetAsync(serviceAddress).Result.Content.ReadAsStringAsync();
+                return result;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+            finally
+            {
+                Logger.Add(serviceAddress, "", result, beginDate);
+            }
+        }
+
+        public static async Task<string?> PostAsync(string serviceAddress, string requestJson = "", string contentType = "application/json", Dictionary<string, string>? headers = null)
+        {
+            string result = string.Empty;
+            DateTime beginDate = DateTime.Now;
+            try
+            {
+                using (HttpContent httpContent = new StringContent(requestJson))
+                {
+                    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
+                    using HttpClient httpClient = new HttpClient();
+                    httpClient.Timeout = new TimeSpan(0, 0, 60);
+
+                    if (headers != null)
+                    {
+                        foreach (var header in headers)
+                            httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
+                    }
+
+                    result = await httpClient.PostAsync(serviceAddress, httpContent).Result.Content.ReadAsStringAsync();
+                }
+                return result;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+            finally
+            {
+                Logger.Add(serviceAddress, requestJson, result, beginDate);
+            }
+        }
+
+        public static string Get(string serviceAddress, string contentType = "application/json", Dictionary<string, string>? headers = null)
+        {
+            string result = string.Empty;
+            DateTime beginDate = DateTime.Now;
+            try
+            {
+                using HttpClient httpClient = new HttpClient();
+                httpClient.Timeout = new TimeSpan(0, 0, 60);
+
+                if (headers != null)
+                {
+                    foreach (var header in headers)
+                        httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
+                }
+
+                result = httpClient.GetStringAsync(serviceAddress).Result;
+                return result;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+            finally
+            {
+                Logger.Add(serviceAddress, "", result, beginDate);
+            }
+        }
+
+        public static string Post(string serviceAddress, string requestJson = "", string contentType = "application/json", Dictionary<string, string>? headers = null)
+        {
+            string result = string.Empty;
+            DateTime beginDate = DateTime.Now;
+            try
+            {
+                using (HttpContent httpContent = new StringContent(requestJson))
+                {
+                    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
+                    using HttpClient httpClient = new HttpClient();
+                    httpClient.Timeout = new TimeSpan(0, 0, 60);
+
+                    if (headers != null)
+                    {
+                        foreach (var header in headers)
+                            httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
+                    }
+
+                    result = httpClient.PostAsync(serviceAddress, httpContent).Result.Content.ReadAsStringAsync().Result;
+                }
+                return result;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+            finally
+            {
+                Logger.Add(serviceAddress, requestJson, result, beginDate);
+            }
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs"
new file mode 100644
index 0000000..36da40e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs"
@@ -0,0 +1,83 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Net.Http.Headers;
+using WIDESEA_Core.LogHelper;
+using System.Security.Cryptography;
+
+namespace WIDESEA_Core.Helper
+{
+    public class HttpMesHelper
+    {
+        public static string Post(string serviceAddress, string requestJson = null, string contentType = "application/json", Dictionary<string, string>? headers = null)
+        {
+            string result = string.Empty;
+            DateTime beginDate = DateTime.Now;
+            try
+            {
+                using (HttpContent httpContent = new StringContent(requestJson))
+                {
+                    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
+                    
+                    using HttpClient httpClient = new HttpClient();
+                    httpClient.Timeout = new TimeSpan(0, 0, 60);
+                    string authorization = "AppKey 1830415116987195392";
+                    headers = new Dictionary<string, string>
+                    {
+                        { "Authorization", authorization },
+                        { "Site_tenant_id", "0dc2d164-8a62-417e-8a00-808007464feb" }
+                    };
+                    if (headers != null)
+                    {
+                        foreach (var header in headers)
+                            httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
+                    }
+                    HttpResponseMessage responseMessage = httpClient.PostAsync(serviceAddress, httpContent).Result;
+                    result = responseMessage.Content.ReadAsStringAsync().Result;
+                }
+                return result;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+            finally
+            {
+                Logger.Add(serviceAddress, requestJson == null ? "" : requestJson, result, beginDate);
+            }
+        }
+        public static string GetStr(string textToEncrypt)
+        {
+            string publicKey;
+            string privateKey;
+            GenerateRSAKeyPair(out publicKey, out privateKey);
+            byte[] encryptedBytes = RSAEncrypt(textToEncrypt, publicKey);
+            // 鍙互灏嗗姞瀵嗗悗鐨勫瓧鑺傛暟缁勮浆鎹负Base64瀛楃涓叉柟渚垮悗缁鐞嗭紝渚嬪浼犺緭绛�
+            string encryptedBase64 = Convert.ToBase64String(encryptedBytes);
+            return encryptedBase64;
+        }
+        public static void GenerateRSAKeyPair(out string publicKey, out string privateKey)
+        {
+            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048))
+            {
+                publicKey = rsa.ToXmlString(false);
+                privateKey = rsa.ToXmlString(true);
+            }
+        }
+        public static byte[] RSAEncrypt(string plainText, string publicKey)
+        {
+            byte[] encryptedData;
+            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
+            {
+                rsa.FromXmlString(publicKey);
+                // 灏嗘枃鏈浆鎹负UTF8缂栫爜鐨勫瓧鑺傛暟缁�
+                byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
+                // 浣跨敤SHA1鍝堝笇绠楁硶浠ュ強Pkcs1濉厖瑙勫垯杩涜鍔犲瘑
+                encryptedData = rsa.Encrypt(plainBytes, true);
+            }
+            return encryptedData;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/MethodInfoExtensions.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/MethodInfoExtensions.cs"
new file mode 100644
index 0000000..63edd4b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/MethodInfoExtensions.cs"
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Helper
+{
+    public static class MethodInfoExtensions
+    {
+        public static string GetFullName(this MethodInfo method)
+        {
+            if (method.DeclaringType == null)
+            {
+                return $@"{method.Name}";
+            }
+
+            return $"{method.DeclaringType.FullName}.{method.Name}";
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/ObjectExtension.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/ObjectExtension.cs"
new file mode 100644
index 0000000..b051c14
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/ObjectExtension.cs"
@@ -0,0 +1,59 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Helper
+{
+    public static class ObjectExtension
+    {
+        public static List<T> DicToIEnumerable<T>(this List<Dictionary<string, object>> dicList)
+        {
+            List<T> list = new List<T>();
+            foreach (Dictionary<string, object> dic in dicList)
+            {
+                list.Add(dic.DicToModel<T>());
+            }
+            return list;
+        }
+
+        public static T DicToModel<T>(this Dictionary<string, object> dic)
+        {
+            T model = Activator.CreateInstance<T>();
+            PropertyInfo[] propertyInfos = typeof(T).GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance);
+            foreach (var property in propertyInfos)
+            {
+                object? value = null;
+                if (!dic.TryGetValue(property.Name, out value))
+                {
+                    if (!dic.TryGetValue(property.Name.FirstLetterToUpper(), out value))
+                    {
+                        if (!dic.TryGetValue(property.Name.FirstLetterToLower(), out value))
+                        {
+                            continue;
+                        }
+                    }
+                };
+
+                SugarColumn? sugarColumn = property.GetCustomAttribute<SugarColumn>();
+                if (sugarColumn != null && sugarColumn.IsIdentity && (value == null || value.Equals("")))
+                {
+                    continue;
+                }
+                //if (value != null && sugarColumn != null && !sugarColumn.IsNullable)
+                try
+                {
+                    property.SetValue(model, value.ChangeType(property.PropertyType));
+                }
+                catch
+                {
+
+                }
+            }
+            return model;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/RuntimeExtension.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/RuntimeExtension.cs"
new file mode 100644
index 0000000..702db9b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/RuntimeExtension.cs"
@@ -0,0 +1,89 @@
+锘�
+using Microsoft.Extensions.DependencyModel;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.Loader;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Helper
+{
+    public static class RuntimeExtension
+    {
+        /// <summary>
+        /// 鑾峰彇椤圭洰绋嬪簭闆嗭紝鎺掗櫎鎵�鏈夌殑绯荤粺绋嬪簭闆�(Microsoft.***銆丼ystem.***绛�)銆丯uget涓嬭浇鍖�
+        /// </summary>
+        /// <returns></returns>
+        public static IList<Assembly> GetAllAssemblies()
+        {
+            var list = new List<Assembly>();
+            var deps = DependencyContext.Default;
+            //鍙姞杞介」鐩腑鐨勭▼搴忛泦
+            var libs = deps.CompileLibraries.Where(lib => !lib.Serviceable && lib.Type == "project"); //鎺掗櫎鎵�鏈夌殑绯荤粺绋嬪簭闆嗐�丯uget涓嬭浇鍖�
+            foreach (var lib in libs)
+            {
+                try
+                {
+                    var assembly = AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(lib.Name));
+                    list.Add(assembly);
+                }
+                catch (Exception e)
+                {
+                    //Log.Debug(e, "GetAllAssemblies Exception:{ex}", e.Message);
+                }
+            }
+
+            return list;
+        }
+
+        public static Assembly GetAssembly(string assemblyName)
+        {
+            return GetAllAssemblies().FirstOrDefault(assembly => assembly.FullName.Contains(assemblyName));
+        }
+
+        public static IList<Type> GetAllTypes()
+        {
+            var list = new List<Type>();
+            foreach (var assembly in GetAllAssemblies())
+            {
+                var typeInfos = assembly.DefinedTypes;
+                foreach (var typeInfo in typeInfos)
+                {
+                    list.Add(typeInfo.AsType());
+                }
+            }
+
+            return list;
+        }
+
+        public static IList<Type> GetTypesByAssembly(string assemblyName)
+        {
+            var list = new List<Type>();
+            var assembly = AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(assemblyName));
+            var typeInfos = assembly.DefinedTypes;
+            foreach (var typeInfo in typeInfos)
+            {
+                list.Add(typeInfo.AsType());
+            }
+
+            return list;
+        }
+
+        public static Type GetImplementType(string typeName, Type baseInterfaceType)
+        {
+            return GetAllTypes().FirstOrDefault(t =>
+            {
+                if (t.Name == typeName &&
+                    t.GetTypeInfo().GetInterfaces().Any(b => b.Name == baseInterfaceType.Name))
+                {
+                    var typeInfo = t.GetTypeInfo();
+                    return typeInfo.IsClass && !typeInfo.IsAbstract && !typeInfo.IsGenericType;
+                }
+
+                return false;
+            });
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/SecurityEncDecryptHelper.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/SecurityEncDecryptHelper.cs"
new file mode 100644
index 0000000..c44c9e2
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/SecurityEncDecryptHelper.cs"
@@ -0,0 +1,93 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.DB;
+
+namespace WIDESEA_Core.Helper
+{
+    public static class SecurityEncDecryptHelper
+    {
+        private static byte[] Keys = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
+        /// <summary> 
+        /// DES鍔犲瘑瀛楃涓� 
+        /// </summary> 
+        /// <param name="encryptString">寰呭姞瀵嗙殑瀛楃涓�</param> 
+        /// <param name="encryptKey">鍔犲瘑瀵嗛挜,瑕佹眰涓�16浣�</param> 
+        /// <returns>鍔犲瘑鎴愬姛杩斿洖鍔犲瘑鍚庣殑瀛楃涓诧紝澶辫触杩斿洖婧愪覆</returns> 
+
+        public static string EncryptDES(this string encryptString, string encryptKey)
+        {
+            try
+            {
+                byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 16));
+                byte[] rgbIV = Keys;
+                byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
+
+                using (var DCSP = Aes.Create())
+                {
+                    using (MemoryStream mStream = new MemoryStream())
+                    {
+                        using (CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write))
+                        {
+                            cStream.Write(inputByteArray, 0, inputByteArray.Length);
+                            cStream.FlushFinalBlock();
+                            return Convert.ToBase64String(mStream.ToArray()).Replace('+', '_').Replace('/', '~');
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                throw new Exception("瀵嗙爜鍔犲瘑寮傚父" + ex.Message);
+            }
+
+        }
+
+        /// <summary> 
+        /// DES瑙e瘑瀛楃涓� 
+        /// </summary> 
+        /// <param name="decryptString">寰呰В瀵嗙殑瀛楃涓�</param> 
+        /// <param name="decryptKey">瑙e瘑瀵嗛挜,瑕佹眰涓�16浣�,鍜屽姞瀵嗗瘑閽ョ浉鍚�</param> 
+        /// <returns>瑙e瘑鎴愬姛杩斿洖瑙e瘑鍚庣殑瀛楃涓诧紝澶辫触杩旀簮涓�</returns> 
+
+        public static string DecryptDES(this string decryptString, string decryptKey)
+        {
+            if (decryptKey == AppSecret.DB && !AppSettings.Get(MainDb.ConnectionStringsEncryption).ObjToBool())
+                return decryptString;
+
+            byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0, 16));
+            byte[] rgbIV = Keys;
+            byte[] inputByteArray = Convert.FromBase64String(decryptString.Replace('_', '+').Replace('~', '/'));
+            using (var DCSP = Aes.Create())
+            {
+                using (MemoryStream mStream = new MemoryStream())
+                {
+                    using (CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write))
+                    {
+                        byte[] inputByteArrays = new byte[inputByteArray.Length];
+                        cStream.Write(inputByteArray, 0, inputByteArray.Length);
+                        cStream.FlushFinalBlock();
+                        return Encoding.UTF8.GetString(mStream.ToArray());
+                    }
+                }
+            }
+        }
+        public static bool TryDecryptDES(this string decryptString, string decryptKey, out string result)
+        {
+            result = "";
+            try
+            {
+                result = DecryptDES(decryptString, decryptKey);
+                return true;
+            }
+            catch
+            {
+                return false;
+            }
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs"
new file mode 100644
index 0000000..d9c8538
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs"
@@ -0,0 +1,983 @@
+锘縰sing NetTaste;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using System.Web;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Enums;
+
+namespace WIDESEA_Core.Helper
+{
+    public static class UtilConvert
+    {
+        private static DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
+
+        private static long longTime = 621355968000000000;
+
+        private static int samllTime = 10000000;
+        /// <summary>
+        /// 鏃堕棿鎴宠浆鎹㈡垚鏃ユ湡
+        /// </summary>
+        /// <param name="timeStamp"></param>
+        /// <returns></returns>
+        public static DateTime GetTimeSpmpToDate(this object timeStamp)
+        {
+            if (timeStamp == null) return dateStart;
+            DateTime dateTime = new DateTime(longTime + Convert.ToInt64(timeStamp) * samllTime, DateTimeKind.Utc).ToLocalTime();
+            return dateTime;
+        }
+
+        public static string Serialize(this object obj, JsonSerializerSettings formatDate = null)
+        {
+            if (obj == null) return null;
+            formatDate = formatDate ?? new JsonSerializerSettings
+            {
+                DateFormatString = "yyyy-MM-dd HH:mm:ss"
+            };
+            return JsonConvert.SerializeObject(obj, formatDate);
+        }
+
+        public static T DeserializeObject<T>(this string json)
+        {
+            if (string.IsNullOrEmpty(json))
+            {
+                return default(T);
+            }
+            if (json == "{}")
+            {
+                json = "[]";
+            }
+            return JsonConvert.DeserializeObject<T>(json);
+        }
+
+        public static string FirstLetterToLower(this string thisValue)
+        {
+            if (string.IsNullOrEmpty(thisValue)) return string.Empty;
+            string result = thisValue.Substring(0, 1).ToLower() + thisValue.Substring(1, thisValue.Length - 1);
+            return result;
+        }
+
+        public static string FirstLetterToUpper(this string thisValue)
+        {
+            if (string.IsNullOrEmpty(thisValue)) return string.Empty;
+            string result = thisValue.Substring(0, 1).ToUpper() + thisValue.Substring(1, thisValue.Length - 1);
+            return result;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <returns></returns>
+        public static int ObjToInt(this object thisValue)
+        {
+            int reval = 0;
+            if (thisValue == null) return 0;
+            if (thisValue is Enum && thisValue != DBNull.Value && Enum.TryParse(thisValue.GetType(), thisValue.ToString(), out var val))
+            {
+                return Convert.ToInt32(val.ChangeType(typeof(int)));
+            }
+            if (thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval))
+            {
+                return reval;
+            }
+
+            return reval;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <returns></returns>
+        public static int DoubleToInt(this double thisValue)
+        {
+            int reval = 0;
+
+            return Convert.ToInt32(thisValue);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <param name="errorValue"></param>
+        /// <returns></returns>
+        public static int ObjToInt(this object thisValue, int errorValue)
+        {
+            int reval = 0;
+            if (thisValue != null && thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval))
+            {
+                return reval;
+            }
+
+            return errorValue;
+        }
+
+        public static long ObjToLong(this object thisValue)
+        {
+            long reval = 0;
+            if (thisValue == null) return 0;
+            if (thisValue != DBNull.Value && long.TryParse(thisValue.ToString(), out reval))
+            {
+                return reval;
+            }
+
+            return reval;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <returns></returns>
+        public static double ObjToMoney(this object thisValue)
+        {
+            double reval = 0;
+            if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval))
+            {
+                return reval;
+            }
+
+            return 0;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <param name="errorValue"></param>
+        /// <returns></returns>
+        public static double ObjToMoney(this object thisValue, double errorValue)
+        {
+            double reval = 0;
+            if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval))
+            {
+                return reval;
+            }
+
+            return errorValue;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <returns></returns>
+        public static string ObjToString(this object thisValue)
+        {
+            if (thisValue != null) return thisValue.ToString().Trim();
+            return "";
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <returns></returns>
+        public static bool IsNotEmptyOrNull(this object thisValue)
+        {
+            return ObjToString(thisValue) != "" && ObjToString(thisValue) != "undefined" && ObjToString(thisValue) != "null";
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <param name="errorValue"></param>
+        /// <returns></returns>
+        public static string ObjToString(this object thisValue, string errorValue)
+        {
+            if (thisValue != null) return thisValue.ToString().Trim();
+            return errorValue;
+        }
+
+        public static bool IsNullOrEmpty(this object thisValue) => thisValue == null || thisValue == DBNull.Value || string.IsNullOrWhiteSpace(thisValue.ToString());
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <returns></returns>
+        public static Decimal ObjToDecimal(this object thisValue)
+        {
+            Decimal reval = 0;
+            if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval))
+            {
+                return reval;
+            }
+
+            return 0;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <param name="errorValue"></param>
+        /// <returns></returns>
+        public static Decimal ObjToDecimal(this object thisValue, decimal errorValue)
+        {
+            Decimal reval = 0;
+            if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval))
+            {
+                return reval;
+            }
+
+            return errorValue;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <returns></returns>
+        public static DateTime ObjToDate(this object thisValue)
+        {
+            DateTime reval = DateTime.MinValue;
+            if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval))
+            {
+                reval = Convert.ToDateTime(thisValue);
+            }
+
+            return reval;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <param name="errorValue"></param>
+        /// <returns></returns>
+        public static DateTime ObjToDate(this object thisValue, DateTime errorValue)
+        {
+            DateTime reval = DateTime.MinValue;
+            if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval))
+            {
+                return reval;
+            }
+
+            return errorValue;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <returns></returns>
+        public static bool ObjToBool(this object thisValue)
+        {
+            bool reval = false;
+            if (thisValue != null && thisValue != DBNull.Value && bool.TryParse(thisValue.ToString(), out reval))
+            {
+                return reval;
+            }
+
+            return reval;
+        }
+
+
+        /// <summary>
+        /// 鑾峰彇褰撳墠鏃堕棿鐨勬椂闂存埑
+        /// </summary>
+        /// <param name="thisValue"></param>
+        /// <returns></returns>
+        public static string DateToTimeStamp(this DateTime thisValue)
+        {
+            TimeSpan ts = thisValue - new DateTime(1970, 1, 1, 0, 0, 0, 0);
+            return Convert.ToInt64(ts.TotalSeconds).ToString();
+        }
+
+        public static object ChangeType(this object value, Type type)
+        {
+            if (value == null && type.IsGenericType) return Activator.CreateInstance(type);
+            if (value == null) return null;
+            if (type == value.GetType()) return value;
+            if (type.IsEnum)
+            {
+                if (value is string)
+                    return Enum.Parse(type, value as string);
+                else
+                    return Enum.ToObject(type, value);
+            }
+
+            if (!type.IsInterface && type.IsGenericType)
+            {
+                Type innerType = type.GetGenericArguments()[0];
+                object innerValue = ChangeType(value, innerType);
+                return Activator.CreateInstance(type, new object[] { innerValue });
+            }
+
+            if (value is string && type == typeof(Guid)) return new Guid(value as string);
+            if (value is string && type == typeof(Version)) return new Version(value as string);
+            if (!(value is IConvertible)) return value;
+            return Convert.ChangeType(value, type);
+        }
+
+        public static object ChangeTypeList(this object value, Type type)
+        {
+            if (value == null) return default;
+
+            var gt = typeof(List<>).MakeGenericType(type);
+            dynamic lis = Activator.CreateInstance(gt);
+
+            var addMethod = gt.GetMethod("Add");
+            string values = value.ToString();
+            if (values != null && values.StartsWith("(") && values.EndsWith(")"))
+            {
+                string[] splits;
+                if (values.Contains("\",\""))
+                {
+                    splits = values.Remove(values.Length - 2, 2)
+                        .Remove(0, 2)
+                        .Split("\",\"");
+                }
+                else
+                {
+                    splits = values.Remove(0, 1)
+                        .Remove(values.Length - 2, 1)
+                        .Split(",");
+                }
+
+                foreach (var split in splits)
+                {
+                    var str = split;
+                    if (split.StartsWith("\"") && split.EndsWith("\""))
+                    {
+                        str = split.Remove(0, 1)
+                            .Remove(split.Length - 2, 1);
+                    }
+
+                    addMethod.Invoke(lis, new object[] { ChangeType(str, type) });
+                }
+            }
+
+            return lis;
+        }
+
+        public static string ToJson(this object value)
+        {
+            return JsonConvert.SerializeObject(value);
+        }
+
+        public static bool IsNumeric(this object value)
+        {
+            if (value == null)
+                return false;
+            bool reslut = decimal.TryParse(value.ToString(), out decimal _number);
+            return reslut;
+        }
+
+        public static bool IsInt(this object obj)
+        {
+            if (obj == null)
+                return false;
+            bool reslut = Int32.TryParse(obj.ToString(), out int _number);
+            return reslut;
+
+        }
+        public static bool IsDate(this object str)
+        {
+            return str.IsDate(out _);
+        }
+        public static bool IsDate(this object str, out DateTime dateTime)
+        {
+            dateTime = DateTime.Now;
+            if (str == null || str.ToString() == "")
+            {
+                return false;
+            }
+            return DateTime.TryParse(str.ToString(), out dateTime);
+        }
+
+        /// <summary>
+        /// 鏍规嵁浼犲叆鏍煎紡鍒ゆ柇鏄惁涓哄皬鏁�
+        /// </summary>
+        /// <param name="str"></param>
+        /// <param name="formatString">18,5</param>
+        /// <returns></returns>
+        public static bool IsNumber(this string str, string formatString)
+        {
+            if (string.IsNullOrEmpty(str)) return false;
+
+            return Regex.IsMatch(str, @"^[+-]?\d*[.]?\d*$");
+        }
+
+        public static bool IsGuid(this string guid)
+        {
+            Guid newId;
+            return guid.GetGuid(out newId);
+        }
+
+        public static bool GetGuid(this string guid, out Guid outId)
+        {
+            Guid emptyId = Guid.Empty;
+            return Guid.TryParse(guid, out outId);
+        }
+
+        /// <summary>
+        /// 杞崲涓虹煭鏁村瀷 qy 2024-7-15
+        /// </summary>
+        /// <param name="data">鏁版嵁</param>
+        public static short ToShort(this object data)
+        {
+            if (data == null)
+                return 0;
+            short result;
+            var success = short.TryParse(data.ToString(), out result);
+            if (success)
+                return result;
+            try
+            {
+                return Convert.ToInt16(data);
+            }
+            catch (Exception)
+            {
+                return 0;
+            }
+        }
+
+        /// <summary>
+        /// 杞崲涓洪珮绮惧害娴偣鏁�,骞舵寜鎸囧畾鐨勫皬鏁颁綅4鑸�5鍏� qy 2024-7-15
+        /// </summary>
+        /// <param name="data">鏁版嵁</param>
+        /// <param name="digits">灏忔暟浣嶆暟</param>
+        public static decimal ToDecimal(this object data, int digits)
+        {
+            return Math.Round(ObjToDecimal(data), digits);
+        }
+
+
+
+        /// <summary>
+        /// 鏋氫妇杞琇ist qy 2024-7-15
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <returns></returns>
+        public static List<object> GetEnumList<T>()
+        {
+            List<object> list = new List<object>();
+            var t = typeof(T);
+            foreach (var item in Enum.GetValues(typeof(T)))
+            {
+                FieldInfo f = t.GetField(Enum.GetName(typeof(T), item));
+                var r = (System.ComponentModel.DescriptionAttribute[])f.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
+                list.Add(new { ID = item, value = Enum.GetName(typeof(T), item), name = r[0].Description });
+            }
+            return list;
+        }
+
+        /// <summary> 
+        /// 楠岃瘉鍔ㄦ�佺被鍨嬪厓绱犳槸鍚︿负绌� qy 2024-7-15
+        /// </summary>
+        /// <param name="obj"></param>
+        /// <returns></returns>
+        public static bool CheckDynamic(object obj)
+        {
+            return (obj != null && Convert.ToString(obj) != "") ? true : false;
+        }
+
+        /// <summary>
+        /// 鍔ㄦ�佺被鍨嬪厓绱犺浆瀛楃涓插苟瑙g爜 qy 2024-7-15
+        /// </summary>
+        /// <param name="obj"></param>
+        /// <returns></returns>
+        public static string DynamicToString(object obj)
+        {
+            return CheckDynamic(obj) ? HttpUtility.UrlDecode(Convert.ToString(obj).Trim()) : "";
+        }
+
+        /// <summary> 
+        /// DataTable杞负json  qy 2024-7-15
+        /// </summary> 
+        /// <param name="parObjRefDataTable">DataTable</param> 
+        /// <returns>json鏁版嵁</returns> 
+        public static string ToJson(this DataTable parObjRefDataTable)
+        {
+            List<object> objArrList = new List<object>();
+
+            foreach (DataRow objDataRow in parObjRefDataTable.Rows)
+            {
+                Dictionary<string, object> objResult = new Dictionary<string, object>();
+
+                foreach (DataColumn objDataColumn in parObjRefDataTable.Columns)
+                    objResult.Add(objDataColumn.ColumnName, objDataRow[objDataColumn].ToString());
+
+                objArrList.Add(objResult);
+            }
+
+            return ToJson(objArrList);
+        }
+        /// <summary>
+        /// Json杞琇ist qy 2024-7-15
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="parJson"></param>
+        /// <returns></returns>
+        public static List<T> JsonToList<T>(this string parJson)
+        {
+            if (string.IsNullOrWhiteSpace(parJson))
+            {
+                return new List<T>();
+            }
+            else
+            {
+                return JsonConvert.DeserializeObject<List<T>>(parJson);
+            }
+        }
+
+        /// <summary>
+        /// 鏃ユ湡杞负unix鍊�
+        /// </summary>
+        /// <param name="dt"></param>
+        /// <param name="utc">T:鎸塙TC鏃堕棿璁$畻(榛樿);F:鎸夋湰鍦版椂闂磋绠�</param>
+        /// <returns></returns>
+        public static double ToUnix(this DateTime dt, bool utc = true)
+        {
+            double intResult = 0;
+            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
+            intResult = (dt - startTime).TotalSeconds;
+            intResult = Math.Round(intResult, 0);
+            return intResult;
+        }
+
+        #region 鍒ゆ柇鏄惁涓哄瓧绗︿覆 qy 2024-7-15
+        /// <summary>
+        /// 鍒ゆ柇瀛楃涓叉槸鍚︿负鍚堟硶鐨刯son瀛楃涓� qy 2024-7-15
+        /// </summary>
+        /// <param name="json"></param>
+        /// <returns></returns>
+        public static bool IsJson(string json)
+        {
+            int errIndex;
+            return IsJson(json, out errIndex);
+        }
+        public static bool IsJson(string json, out int errIndex)
+        {
+            errIndex = 0;
+            if (IsJsonStart(ref json))
+            {
+                CharState cs = new CharState();
+                char c;
+                for (int i = 0; i < json.Length; i++)
+                {
+                    c = json[i];
+                    if (SetCharState(c, ref cs) && cs.childrenStart)//璁剧疆鍏抽敭绗﹀彿鐘舵�併��
+                    {
+                        string item = json.Substring(i);
+                        int err;
+                        int length = GetValueLength(item, true, out err);
+                        cs.childrenStart = false;
+                        if (err > 0)
+                        {
+                            errIndex = i + err;
+                            return false;
+                        }
+                        i = i + length - 1;
+                    }
+                    if (cs.isError)
+                    {
+                        errIndex = i;
+                        return false;
+                    }
+                }
+
+                return !cs.arrayStart && !cs.jsonStart;
+            }
+            return false;
+        }
+
+        private static bool IsJsonStart(ref string json)
+        {
+            if (!string.IsNullOrEmpty(json))
+            {
+                json = json.Trim('\r', '\n', ' ');
+                if (json.Length > 1)
+                {
+                    char s = json[0];
+                    char e = json[json.Length - 1];
+                    return (s == '{' && e == '}') || (s == '[' && e == ']');
+                }
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍊肩殑闀垮害锛堝綋Json鍊煎祵濂椾互"{"鎴�"["寮�澶存椂锛� qy 2024-7-15
+        /// </summary>
+        private static int GetValueLength(string json, bool breakOnErr, out int errIndex)
+        {
+            errIndex = 0;
+            int len = 0;
+            if (!string.IsNullOrEmpty(json))
+            {
+                CharState cs = new CharState();
+                char c;
+                for (int i = 0; i < json.Length; i++)
+                {
+                    c = json[i];
+                    if (!SetCharState(c, ref cs))//璁剧疆鍏抽敭绗﹀彿鐘舵�併��
+                    {
+                        if (!cs.jsonStart && !cs.arrayStart)//json缁撴潫锛屽張涓嶆槸鏁扮粍锛屽垯閫�鍑恒��
+                        {
+                            break;
+                        }
+                    }
+                    else if (cs.childrenStart)//姝e父瀛楃锛屽�肩姸鎬佷笅銆�
+                    {
+                        int length = GetValueLength(json.Substring(i), breakOnErr, out errIndex);//閫掑綊瀛愬�硷紝杩斿洖涓�涓暱搴︺�傘�傘��
+                        cs.childrenStart = false;
+                        cs.valueStart = 0;
+                        //cs.state = 0;
+                        i = i + length - 1;
+                    }
+                    if (breakOnErr && cs.isError)
+                    {
+                        errIndex = i;
+                        return i;
+                    }
+                    if (!cs.jsonStart && !cs.arrayStart)//璁板綍褰撳墠缁撴潫浣嶇疆銆�
+                    {
+                        len = i + 1;//闀垮害姣旂储寮�+1
+                        break;
+                    }
+                }
+            }
+            return len;
+        }
+
+        /// <summary>
+        /// 瀛楃鐘舵�� qy 2024-7-15
+        /// </summary>
+        private class CharState
+        {
+            internal bool jsonStart = false;//浠� "{"寮�濮嬩簡...
+            internal bool setDicValue = false;// 鍙互璁剧疆瀛楀吀鍊间簡銆�
+            internal bool escapeChar = false;//浠�"\"杞箟绗﹀彿寮�濮嬩簡
+            /// <summary>
+            /// 鏁扮粍寮�濮嬨�愪粎绗竴寮�澶存墠绠椼�戯紝鍊煎祵濂楃殑浠ャ�恈hildrenStart銆戞潵鏍囪瘑銆�
+            /// </summary>
+            internal bool arrayStart = false;//浠�"[" 绗﹀彿寮�濮嬩簡
+            internal bool childrenStart = false;//瀛愮骇宓屽寮�濮嬩簡銆�
+            /// <summary>
+            /// 銆�0 鍒濆鐘舵�侊紝鎴� 閬囧埌鈥�,鈥濋�楀彿銆戯紱銆�1 閬囧埌鈥滐細鈥濆啋鍙枫��
+            /// </summary>
+            internal int state = 0;
+
+            /// <summary>
+            /// 銆�-1 鍙栧�肩粨鏉熴�戙��0 鏈紑濮嬨�戙��1 鏃犲紩鍙峰紑濮嬨�戙��2 鍗曞紩鍙峰紑濮嬨�戙��3 鍙屽紩鍙峰紑濮嬨��
+            /// </summary>
+            internal int keyStart = 0;
+            /// <summary>
+            /// 銆�-1 鍙栧�肩粨鏉熴�戙��0 鏈紑濮嬨�戙��1 鏃犲紩鍙峰紑濮嬨�戙��2 鍗曞紩鍙峰紑濮嬨�戙��3 鍙屽紩鍙峰紑濮嬨��
+            /// </summary>
+            internal int valueStart = 0;
+            internal bool isError = false;//鏄惁璇硶閿欒銆�
+
+            internal void CheckIsError(char c)//鍙綋鎴愪竴绾у鐞嗭紙鍥犱负GetLength浼氶�掑綊鍒版瘡涓�涓瓙椤瑰鐞嗭級
+            {
+                if (keyStart > 1 || valueStart > 1)
+                {
+                    return;
+                }
+                //绀轰緥 ["aa",{"bbbb":123,"fff","ddd"}] 
+                switch (c)
+                {
+                    case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]
+                        isError = jsonStart && state == 0;//閲嶅寮�濮嬮敊璇� 鍚屾椂涓嶆槸鍊煎鐞嗐��
+                        break;
+                    case '}':
+                        isError = !jsonStart || (keyStart != 0 && state == 0);//閲嶅缁撴潫閿欒 鎴栬�� 鎻愬墠缁撴潫{"aa"}銆傛甯哥殑鏈墈}
+                        break;
+                    case '[':
+                        isError = arrayStart && state == 0;//閲嶅寮�濮嬮敊璇�
+                        break;
+                    case ']':
+                        isError = !arrayStart || jsonStart;//閲嶅寮�濮嬮敊璇� 鎴栬�� Json 鏈粨鏉�
+                        break;
+                    case '"':
+                    case '\'':
+                        isError = !(jsonStart || arrayStart); //json 鎴栨暟缁勫紑濮嬨��
+                        if (!isError)
+                        {
+                            //閲嶅寮�濮� [""",{"" "}]
+                            isError = (state == 0 && keyStart == -1) || (state == 1 && valueStart == -1);
+                        }
+                        if (!isError && arrayStart && !jsonStart && c == '\'')//['aa',{}]
+                        {
+                            isError = true;
+                        }
+                        break;
+                    case ':':
+                        isError = !jsonStart || state == 1;//閲嶅鍑虹幇銆�
+                        break;
+                    case ',':
+                        isError = !(jsonStart || arrayStart); //json 鎴栨暟缁勫紑濮嬨��
+                        if (!isError)
+                        {
+                            if (jsonStart)
+                            {
+                                isError = state == 0 || (state == 1 && valueStart > 1);//閲嶅鍑虹幇銆�
+                            }
+                            else if (arrayStart)//["aa,] [,]  [{},{}]
+                            {
+                                isError = keyStart == 0 && !setDicValue;
+                            }
+                        }
+                        break;
+                    case ' ':
+                    case '\r':
+                    case '\n'://[ "a",\r\n{} ]
+                    case '\0':
+                    case '\t':
+                        break;
+                    default: //鍊煎紑澶淬�傘��
+                        isError = (!jsonStart && !arrayStart) || (state == 0 && keyStart == -1) || (valueStart == -1 && state == 1);//
+                        break;
+                }
+                //if (isError)
+                //{
+
+                //}
+            }
+        }
+        /// <summary>
+        /// 璁剧疆瀛楃鐘舵��(杩斿洖true鍒欎负鍏抽敭璇嶏紝杩斿洖false鍒欏綋涓烘櫘閫氬瓧绗﹀鐞嗭級 qy 2024-7-15
+        /// </summary>
+        private static bool SetCharState(char c, ref CharState cs)
+        {
+            cs.CheckIsError(c);
+            switch (c)
+            {
+                case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]
+                    #region 澶ф嫭鍙�
+                    if (cs.keyStart <= 0 && cs.valueStart <= 0)
+                    {
+                        cs.keyStart = 0;
+                        cs.valueStart = 0;
+                        if (cs.jsonStart && cs.state == 1)
+                        {
+                            cs.childrenStart = true;
+                        }
+                        else
+                        {
+                            cs.state = 0;
+                        }
+                        cs.jsonStart = true;//寮�濮嬨��
+                        return true;
+                    }
+                    #endregion
+                    break;
+                case '}':
+                    #region 澶ф嫭鍙风粨鏉�
+                    if (cs.keyStart <= 0 && cs.valueStart < 2 && cs.jsonStart)
+                    {
+                        cs.jsonStart = false;//姝e父缁撴潫銆�
+                        cs.state = 0;
+                        cs.keyStart = 0;
+                        cs.valueStart = 0;
+                        cs.setDicValue = true;
+                        return true;
+                    }
+                    // cs.isError = !cs.jsonStart && cs.state == 0;
+                    #endregion
+                    break;
+                case '[':
+                    #region 涓嫭鍙峰紑濮�
+                    if (!cs.jsonStart)
+                    {
+                        cs.arrayStart = true;
+                        return true;
+                    }
+                    else if (cs.jsonStart && cs.state == 1)
+                    {
+                        cs.childrenStart = true;
+                        return true;
+                    }
+                    #endregion
+                    break;
+                case ']':
+                    #region 涓嫭鍙风粨鏉�
+                    if (cs.arrayStart && !cs.jsonStart && cs.keyStart <= 2 && cs.valueStart <= 0)//[{},333]//杩欐牱缁撴潫銆�
+                    {
+                        cs.keyStart = 0;
+                        cs.valueStart = 0;
+                        cs.arrayStart = false;
+                        return true;
+                    }
+                    #endregion
+                    break;
+                case '"':
+                case '\'':
+                    #region 寮曞彿
+                    if (cs.jsonStart || cs.arrayStart)
+                    {
+                        if (cs.state == 0)//key闃舵,鏈夊彲鑳芥槸鏁扮粍["aa",{}]
+                        {
+                            if (cs.keyStart <= 0)
+                            {
+                                cs.keyStart = (c == '"' ? 3 : 2);
+                                return true;
+                            }
+                            else if ((cs.keyStart == 2 && c == '\'') || (cs.keyStart == 3 && c == '"'))
+                            {
+                                if (!cs.escapeChar)
+                                {
+                                    cs.keyStart = -1;
+                                    return true;
+                                }
+                                else
+                                {
+                                    cs.escapeChar = false;
+                                }
+                            }
+                        }
+                        else if (cs.state == 1 && cs.jsonStart)//鍊奸樁娈靛繀椤绘槸Json寮�濮嬩簡銆�
+                        {
+                            if (cs.valueStart <= 0)
+                            {
+                                cs.valueStart = (c == '"' ? 3 : 2);
+                                return true;
+                            }
+                            else if ((cs.valueStart == 2 && c == '\'') || (cs.valueStart == 3 && c == '"'))
+                            {
+                                if (!cs.escapeChar)
+                                {
+                                    cs.valueStart = -1;
+                                    return true;
+                                }
+                                else
+                                {
+                                    cs.escapeChar = false;
+                                }
+                            }
+
+                        }
+                    }
+                    #endregion
+                    break;
+                case ':':
+                    #region 鍐掑彿
+                    if (cs.jsonStart && cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 0)
+                    {
+                        if (cs.keyStart == 1)
+                        {
+                            cs.keyStart = -1;
+                        }
+                        cs.state = 1;
+                        return true;
+                    }
+                    // cs.isError = !cs.jsonStart || (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1);
+                    #endregion
+                    break;
+                case ',':
+                    #region 閫楀彿 //["aa",{aa:12,}]
+
+                    if (cs.jsonStart)
+                    {
+                        if (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1)
+                        {
+                            cs.state = 0;
+                            cs.keyStart = 0;
+                            cs.valueStart = 0;
+                            //if (cs.valueStart == 1)
+                            //{
+                            //    cs.valueStart = 0;
+                            //}
+                            cs.setDicValue = true;
+                            return true;
+                        }
+                    }
+                    else if (cs.arrayStart && cs.keyStart <= 2)
+                    {
+                        cs.keyStart = 0;
+                        //if (cs.keyStart == 1)
+                        //{
+                        //    cs.keyStart = -1;
+                        //}
+                        return true;
+                    }
+                    #endregion
+                    break;
+                case ' ':
+                case '\r':
+                case '\n'://[ "a",\r\n{} ]
+                case '\0':
+                case '\t':
+                    if (cs.keyStart <= 0 && cs.valueStart <= 0) //cs.jsonStart && 
+                    {
+                        return true;//璺宠繃绌烘牸銆�
+                    }
+                    break;
+                default: //鍊煎紑澶淬�傘��
+                    if (c == '\\') //杞箟绗﹀彿
+                    {
+                        if (cs.escapeChar)
+                        {
+                            cs.escapeChar = false;
+                        }
+                        else
+                        {
+                            cs.escapeChar = true;
+                            return true;
+                        }
+                    }
+                    else
+                    {
+                        cs.escapeChar = false;
+                    }
+                    if (cs.jsonStart || cs.arrayStart) // Json 鎴栨暟缁勫紑濮嬩簡銆�
+                    {
+                        if (cs.keyStart <= 0 && cs.state == 0)
+                        {
+                            cs.keyStart = 1;//鏃犲紩鍙风殑
+                        }
+                        else if (cs.valueStart <= 0 && cs.state == 1 && cs.jsonStart)//鍙湁Json寮�濮嬫墠鏈夊�笺��
+                        {
+                            cs.valueStart = 1;//鏃犲紩鍙风殑
+                        }
+                    }
+                    break;
+            }
+            return false;
+        }
+
+        #endregion
+
+        public static LinqExpressionType GetLinqCondition(this string stringType)
+        {
+            LinqExpressionType linqExpression;
+            switch (stringType)
+            {
+                case HtmlElementType.Contains:
+                    linqExpression = LinqExpressionType.In;
+                    break;
+                case HtmlElementType.ThanOrEqual:
+                    linqExpression = LinqExpressionType.ThanOrEqual;
+                    break;
+                case HtmlElementType.LessOrequal:
+                    linqExpression = LinqExpressionType.LessThanOrEqual;
+                    break;
+                case HtmlElementType.GT:
+                    linqExpression = LinqExpressionType.GreaterThan;
+                    break;
+                case HtmlElementType.lt:
+                    linqExpression = LinqExpressionType.LessThan;
+                    break;
+                case HtmlElementType.like:
+                    linqExpression = LinqExpressionType.Contains;
+                    break;
+                default:
+                    linqExpression = LinqExpressionType.Equal;
+                    break;
+            }
+            return linqExpression;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/HostedService/PermissionDataHostService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/HostedService/PermissionDataHostService.cs"
new file mode 100644
index 0000000..0ca0a50
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/HostedService/PermissionDataHostService.cs"
@@ -0,0 +1,200 @@
+锘�//using HslCommunication.WebSocket;
+//using Microsoft.Extensions.Hosting;
+//using SqlSugar;
+//using System;
+//using System.Collections.Generic;
+//using System.Dynamic;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+//using WIDESEA_Core.Helper;
+//using WIDESEA_Core.Seed;
+//using ICacheService = WIDESEA_Core.Caches.ICacheService;
+
+//namespace WIDESEA_Core.HostedService
+//{
+//    public class PermissionDataHostService : IHostedService
+//    {
+//        private readonly DBContext _dbContext;
+//        private readonly ICacheService _cacheService;
+//        private readonly WebSocketServer _server;
+
+//        public static List<UserRole> UserRoles;
+
+//        public PermissionDataHostService(DBContext dbContext, ICacheService cacheService, WebSocketServer server)
+//        {
+//            _dbContext = dbContext;
+//            _cacheService = cacheService;
+//            _server = server;
+//        }
+
+//        public Task StartAsync(CancellationToken cancellationToken)
+//        {
+//            List<UserRole> userRoles = GetUserRoles(_dbContext.Db);
+//            UserRoles = userRoles;
+//            _cacheService.AddOrUpdate("UserRoles", userRoles.Serialize());
+
+//            return Task.CompletedTask;
+//        }
+
+//        public Task StopAsync(CancellationToken cancellationToken)
+//        {
+//            throw new NotImplementedException();
+//        }
+
+//        public static List<UserRole> GetUserRoles(ISqlSugarClient db)
+//        {
+//            List<ExpandoObject> roles = db.Queryable("Sys_Role", "x").Select(RoleSelectModes).ToList();
+//            List<dynamic> roleDynamics = new List<dynamic>();
+//            foreach (var item in roles)
+//            {
+//                roleDynamics.Add(item);
+//            }
+
+//            List<dynamic> roleDataDynamics = new List<dynamic>();
+//            List<ExpandoObject> roleDatas = db.Queryable("Sys_RoleDataPermission", "x").Select(RoleDataSelectModes).ToList();
+//            foreach (var item in roleDatas)
+//            {
+//                roleDataDynamics.Add(item);
+//            }
+
+//            List<ExpandoObject> users = db.Queryable("Sys_User", "x").Select(UserSelectModes).ToList();
+
+//            List<UserRole> userRoles = new List<UserRole>();
+//            foreach (var item in users)
+//            {
+//                dynamic user = item;
+//                dynamic? role = roleDynamics.FirstOrDefault(x => x.RoleId == user.RoleId);
+//                List<object> warehouseIds = roleDataDynamics.Where(x => x.RoleId == user.RoleId).Select(x => x.WarehouseId).ToList();
+//                List<int> ids = new List<int>();
+//                for (int i = 0; i < warehouseIds.Count; i++)
+//                {
+//                    ids.Add(Convert.ToInt32(warehouseIds[i]));
+//                }
+//                if (role != null)
+//                {
+//                    userRoles.Add(new UserRole
+//                    {
+//                        RoleId = role.RoleId,
+//                        RoleName = role.RoleName,
+//                        ParentId = role.ParentId,
+//                        UserId = user.UserId,
+//                        UserName = user.UserName,
+//                        WarehouseIds = ids
+//                    });
+//                }
+//            }
+//            return userRoles;
+//        }
+
+//        public static List<UserRole> GetUserRoles(ISqlSugarClient db, int userId)
+//        {
+//            List<ExpandoObject> roles = db.Queryable("Sys_Role", "x").Select(RoleSelectModes).ToList();
+//            List<dynamic> roleDynamics = new List<dynamic>();
+//            foreach (var item in roles)
+//            {
+//                roleDynamics.Add(item);
+//            }
+
+//            List<dynamic> roleDataDynamics = new List<dynamic>();
+//            List<ExpandoObject> roleDatas = db.Queryable("Sys_RoleDataPermission", "x").Select(RoleDataSelectModes).ToList();
+//            foreach (var item in roleDatas)
+//            {
+//                roleDataDynamics.Add(item);
+//            }
+
+//            List<ExpandoObject> users = db.Queryable("Sys_User", "x").Where($"UserId={userId}").Select(UserSelectModes).ToList();
+
+//            List<UserRole> userRoles = new List<UserRole>();
+//            foreach (var item in users)
+//            {
+//                dynamic user = item;
+//                dynamic? role = roleDynamics.FirstOrDefault(x => x.RoleId == user.RoleId);
+//                List<object> warehouseIds = roleDataDynamics.Where(x => x.RoleId == user.RoleId).Select(x => x.WarehouseId).ToList();
+//                List<int> ids = new List<int>();
+//                for (int i = 0; i < warehouseIds.Count; i++)
+//                {
+//                    ids.Add(Convert.ToInt32(warehouseIds[i]));
+//                }
+//                if (role != null)
+//                {
+//                    userRoles.Add(new UserRole
+//                    {
+//                        RoleId = role.RoleId,
+//                        RoleName = role.RoleName,
+//                        ParentId = role.ParentId,
+//                        UserId = user.UserId,
+//                        UserName = user.UserName,
+//                        WarehouseIds = ids
+//                    });
+//                }
+//            }
+//            return userRoles;
+//        }
+
+//        static List<SelectModel> RoleSelectModes = new List<SelectModel>()
+//        {
+//            new SelectModel()
+//            {
+//                 FieldName = "RoleId",
+//            },
+//            new SelectModel()
+//            {
+//                 FieldName = "ParentId",
+//            },
+//            new SelectModel()
+//            {
+//                 FieldName = "RoleName",
+//            },
+//        };
+
+//        static List<SelectModel> UserSelectModes = new List<SelectModel>()
+//        {
+//            new SelectModel()
+//            {
+//                 FieldName = "UserId",
+//            },
+//            new SelectModel()
+//            {
+//                 FieldName = "UserName",
+//            },
+//            new SelectModel()
+//            {
+//                 FieldName = "RoleId",
+//            },
+//            new SelectModel()
+//            {
+//                 FieldName = "RoleName",
+//            }
+//        };
+
+//        static List<SelectModel> RoleDataSelectModes = new List<SelectModel>()
+//        {
+//            new SelectModel()
+//            {
+//                 FieldName = "RoleId",
+//            },
+//            new SelectModel()
+//            {
+//                 FieldName = "WarehouseId",
+//            }
+//        };
+//    }
+
+//    public class UserRole
+//    {
+//        public int UserId { get; set; }
+
+//        public int RoleId { get; set; }
+
+//        public string RoleName { get; set; }
+
+//        public string UserName { get; set; }
+
+//        public int ParentId { get; set; }
+
+//        public int AuthorityScope { get; set; }
+
+//        public List<int> WarehouseIds { get; set; }
+//    }
+//}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/HostedService/SeedDataHostedService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/HostedService/SeedDataHostedService.cs"
new file mode 100644
index 0000000..9d96422
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/HostedService/SeedDataHostedService.cs"
@@ -0,0 +1,63 @@
+锘縰sing HslCommunication.WebSocket;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Seed;
+
+namespace WIDESEA_Core
+{
+    public sealed class SeedDataHostedService : IHostedService
+        {
+            private readonly DBContext _dbContext;
+        private readonly ILogger<SeedDataHostedService> _logger;
+        private readonly string _webRootPath;
+
+        public SeedDataHostedService(IServiceProvider serviceProvider, IWebHostEnvironment webHostEnvironment, ILogger<SeedDataHostedService> logger, DBContext dbContext)
+        {
+            _logger = logger;
+            _webRootPath = webHostEnvironment.WebRootPath;
+            _dbContext = dbContext;
+        }
+
+        public Task StartAsync(CancellationToken cancellationToken)
+        {
+            _logger.LogInformation("Start Initialization Db Seed Service!");
+            DoWork();
+            return Task.CompletedTask;
+        }
+
+        private void DoWork()
+        {
+            try
+            {
+                if (AppSettings.GetValue("DBSeedEnable").ObjToBool())
+                {
+
+                    DBSeed.SeedAsync(_dbContext, _webRootPath);
+
+                    //澶氱鎴� 鍚屾
+                    //await DBSeed.TenantSeedAsync(_dbContext);
+                }
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, "Error occured seeding the Database.");
+                throw;
+            }
+        }
+
+        public Task StopAsync(CancellationToken cancellationToken)
+        {
+            _logger.LogInformation("Stop Initialization Db Seed Service!");
+            return Task.CompletedTask;
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs"
new file mode 100644
index 0000000..da7b185
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs"
@@ -0,0 +1,188 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.IdentityModel.Tokens.Jwt;
+using System.Linq;
+using System.Security.Claims;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Extensions;
+using WIDESEA_Core.Helper;
+using ICacheService = WIDESEA_Core.Caches.ICacheService;
+
+namespace WIDESEA_Core.HttpContextUser
+{
+    public class AspNetUser : IUser
+    {
+        private readonly IHttpContextAccessor _accessor;
+        private readonly ICacheService _cacheService;
+        //private readonly ILogger<AspNetUser> _logger;
+
+        public AspNetUser(IHttpContextAccessor accessor, ICacheService cacheService)
+        {
+            _accessor = accessor;
+            _cacheService = cacheService;
+            /*_logger = logger;*/
+        }
+
+        public string UserName => GetUserInfoFromToken(ClaimTypes.Name).FirstOrDefault() ?? "";
+
+        public int UserId => GetClaimValueByType(JwtRegisteredClaimNames.Jti) == null ? 0 : GetClaimValueByType(JwtRegisteredClaimNames.Jti).FirstOrDefault()?.ObjToInt() ?? 0;
+
+        public long TenantId => GetUserInfoFromToken(nameof(TenantId)).FirstOrDefault()?.ObjToLong() ?? -1;
+
+        public int RoleId => GetUserInfoFromToken(ClaimTypes.Role).FirstOrDefault()?.ObjToInt() ?? 0;
+
+        public string Token => GetToken();
+
+        public int MenuType => (_accessor.HttpContext?.Request.Headers.ContainsKey("uniapp") ?? false) ? 1 : 0;
+
+        public bool IsAuthenticated()
+        {
+            return _accessor.HttpContext?.User?.Identity?.IsAuthenticated ?? false;
+        }
+
+        public string GetToken()
+        {
+            string token = _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", "") ?? "";
+            if (!token.IsNullOrEmpty())
+            {
+                return token;
+            }
+            if (_accessor.HttpContext?.IsSuccessSwagger() == true)
+            {
+                token = _accessor.HttpContext.GetSuccessSwaggerJwt();
+                if (token.IsNotEmptyOrNull())
+                {
+                    //UserInfo userInfo = JwtHelper.SerializeJwt(token);
+                    //if (userInfo.UserId > 0)
+                    //{
+                    //    return token;
+                    //}
+                    List<Claim> claims1 = _accessor.HttpContext.User.Claims.ToList();
+                    if (_accessor.HttpContext.User.Claims.Any(s => s.Type == JwtRegisteredClaimNames.Jti))
+                    {
+                        return token;
+                    }
+
+                    var claims = new ClaimsIdentity(GetClaimsIdentity(token));
+                    _accessor.HttpContext.User.AddIdentity(claims);
+                    return token;
+                }
+            }
+
+            if (MenuType == 0)
+            {
+                token = _cacheService.Get(UserId.ToString());
+                if (!string.IsNullOrEmpty(token)) { return token; }
+                return token;
+            }
+            else
+            {
+                token = _cacheService.Get(UserId.ToString() + "-App");
+                if (!string.IsNullOrEmpty(token)) { return token; }
+                return token;
+            }
+        }
+
+        public void UpdateToke(string token)
+        {
+            if (MenuType == 0)
+                _cacheService.AddOrUpdate(UserId.ToString(), token);
+            else
+                _cacheService.AddOrUpdate(UserId.ToString() + "-App", token);
+        }
+
+        public void UpdateToke(string token, int userId)
+        {
+            if (MenuType == 0)
+                _cacheService.AddOrUpdate(userId.ToString(), token);
+            else
+                _cacheService.AddOrUpdate(userId.ToString() + "-App", token);
+        }
+
+        public bool IsSuperAdmin => IsRoleIdSuperAdmin(RoleId);
+
+        public bool IsHighestRole => UserId == 1;
+
+        public List<string> GetUserInfoFromToken(string ClaimType)
+        {
+            var jwtHandler = new JwtSecurityTokenHandler();
+            var token = "";
+
+            token = GetToken();
+            // token鏍¢獙
+            if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token))
+            {
+                JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
+
+                List<string> items = (from item in jwtToken.Claims
+                                      where item.Type == ClaimType
+                                      select item.Value).ToList();
+                return items;
+            }
+
+            return new List<string>() { };
+        }
+
+        public IEnumerable<Claim> GetClaimsIdentity()
+        {
+            if (_accessor.HttpContext != null)
+            {
+                var claims = _accessor.HttpContext.User.Claims.ToList();
+                var headers = _accessor.HttpContext.Request.Headers;
+                foreach (var header in headers)
+                {
+                    claims.Add(new Claim(header.Key, header.Value));
+                }
+
+                return claims;
+            }
+            return ArraySegment<Claim>.Empty;
+        }
+
+        public IEnumerable<Claim> GetClaimsIdentity(string token)
+        {
+            var jwtHandler = new JwtSecurityTokenHandler();
+            // token鏍¢獙
+            if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token))
+            {
+                var jwtToken = jwtHandler.ReadJwtToken(token);
+
+                return jwtToken.Claims;
+            }
+
+            return new List<Claim>();
+        }
+
+        public List<string> GetClaimValueByType(string ClaimType)
+        {
+            return (from item in GetClaimsIdentity()
+                    where item.Type == ClaimType
+                    select item.Value).ToList();
+        }
+
+        public bool IsRoleIdSuperAdmin(int roleId)
+        {
+            return roleId == 1;
+        }
+    }
+
+    public class UserInfo
+    {
+        public long TenantId { get; set; }
+
+        public int RoleId { get; set; }
+
+        public string UserName { get; set; }
+
+        public int UserId { get; set; }
+
+        public string UserTrueName { get; set; }
+
+        public string HeadImageUrl { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/IUser.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/IUser.cs"
new file mode 100644
index 0000000..db4d27b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/IUser.cs"
@@ -0,0 +1,57 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Claims;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.HttpContextUser
+{
+    public interface IUser
+    {
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        string UserName { get; }
+
+        /// <summary>
+        /// UserId
+        /// </summary>
+        int UserId { get; }
+
+        /// <summary>
+        /// 绉熸埛ID
+        /// </summary>
+        long TenantId { get; }
+
+        int RoleId { get; }
+
+        string Token { get; }
+
+        int MenuType { get; }
+
+        void UpdateToke(string token);
+
+        void UpdateToke(string token, int userId);
+
+        /// <summary>
+        /// 鏄惁璁よ瘉
+        /// </summary>
+        /// <returns></returns>
+        bool IsAuthenticated();
+
+        IEnumerable<Claim> GetClaimsIdentity();
+
+        List<string> GetClaimValueByType(string ClaimType);
+
+        string GetToken();
+
+        List<string> GetUserInfoFromToken(string ClaimType);
+
+        bool IsSuperAdmin { get; }
+
+        bool IsHighestRole { get; }
+
+        bool IsRoleIdSuperAdmin(int roleId);
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/IDependency.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/IDependency.cs"
new file mode 100644
index 0000000..98e47b1
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/IDependency.cs"
@@ -0,0 +1,12 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core
+{
+    public interface IDependency
+    {
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/LogLock.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/LogLock.cs"
new file mode 100644
index 0000000..50da663
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/LogLock.cs"
@@ -0,0 +1,92 @@
+锘�
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.LogHelper
+{
+    public class LogLock
+    {
+        static ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim();
+        static int WritedCount = 0;
+        static int FailedCount = 0;
+        static string _contentRoot = string.Empty;
+
+        public LogLock(string contentPath)
+        {
+            _contentRoot = contentPath;
+        }
+
+        public static void OutLogAOP(string prefix, string[] dataParas, bool IsHeader = true)
+        {
+            OutSql2LogToFile(prefix, dataParas, IsHeader);
+        }
+
+        public static void OutSql2LogToFile(string prefix, string[] dataParas, bool IsHeader = true, bool isWrt = false)
+        {
+            try
+            {
+                //璁剧疆璇诲啓閿佷负鍐欏叆妯″紡鐙崰璧勬簮锛屽叾浠栧啓鍏ヨ姹傞渶瑕佺瓑寰呮湰娆″啓鍏ョ粨鏉熶箣鍚庢墠鑳界户缁啓鍏�
+                //娉ㄦ剰锛氶暱鏃堕棿鎸佹湁璇荤嚎绋嬮攣鎴栧啓绾跨▼閿佷細浣垮叾浠栫嚎绋嬪彂鐢熼ゥ楗� (starve)銆� 涓轰簡寰楀埌鏈�濂界殑鎬ц兘锛岄渶瑕佽�冭檻閲嶆柊鏋勯�犲簲鐢ㄧ▼搴忎互灏嗗啓璁块棶鐨勬寔缁椂闂村噺灏戝埌鏈�灏忋��
+                //      浠庢�ц兘鏂归潰鑰冭檻锛岃姹傝繘鍏ュ啓鍏ユā寮忓簲璇ョ揣璺熸枃浠舵搷浣滀箣鍓嶏紝鍦ㄦ澶勮繘鍏ュ啓鍏ユā寮忎粎鏄负浜嗛檷浣庝唬鐮佸鏉傚害
+                //      鍥犺繘鍏ヤ笌閫�鍑哄啓鍏ユā寮忓簲鍦ㄥ悓涓�涓猼ry finally璇彞鍧楀唴锛屾墍浠ュ湪璇锋眰杩涘叆鍐欏叆妯″紡涔嬪墠涓嶈兘瑙﹀彂寮傚父锛屽惁鍒欓噴鏀炬鏁板ぇ浜庤姹傛鏁板皢浼氳Е鍙戝紓甯�
+                LogWriteLock.EnterWriteLock();
+
+                var folderPath = Path.Combine(_contentRoot, "Log");
+                if (!Directory.Exists(folderPath))
+                {
+                    Directory.CreateDirectory(folderPath);
+                }
+                //string logFilePath = Path.Combine(path, $@"{filename}.log");
+                var logFilePath = FileHelper.GetAvailableFileWithPrefixOrderSize(folderPath, prefix);
+
+                var now = DateTime.Now;
+                string logContent = String.Join("\r\n", dataParas);
+                if (IsHeader)
+                {
+                    logContent = (
+                       "--------------------------------\r\n" +
+                       DateTime.Now + "|\r\n" +
+                       String.Join("\r\n", dataParas) + "\r\n"
+                       );
+                }
+                else
+                {
+                    logContent = (
+                       dataParas[1] + ",\r\n"
+                       );
+                }
+
+                //if (logContent.IsNotEmptyOrNull() && logContent.Length > 500)
+                //{
+                //    logContent = logContent.Substring(0, 500) + "\r\n";
+                //}
+                if (isWrt)
+                {
+                    System.IO.File.WriteAllText(logFilePath, logContent);
+                }
+                else
+                {
+                    System.IO.File.AppendAllText(logFilePath, logContent);
+                }
+                WritedCount++;
+            }
+            catch (Exception e)
+            {
+                //Console.Write(e.Message);
+                FailedCount++;
+            }
+            finally
+            {
+                //閫�鍑哄啓鍏ユā寮忥紝閲婃斁璧勬簮鍗犵敤
+                //娉ㄦ剰锛氫竴娆¤姹傚搴斾竴娆¢噴鏀�
+                //      鑻ラ噴鏀炬鏁板ぇ浜庤姹傛鏁板皢浼氳Е鍙戝紓甯竅鍐欏叆閿佸畾鏈粡淇濇寔鍗宠閲婃斁]
+                //      鑻ヨ姹傚鐞嗗畬鎴愬悗鏈噴鏀惧皢浼氳Е鍙戝紓甯竅姝ゆā寮忎笉涓嬪厑璁镐互閫掑綊鏂瑰紡鑾峰彇鍐欏叆閿佸畾]
+                LogWriteLock.ExitWriteLock();
+            }
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/Logger.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/Logger.cs"
new file mode 100644
index 0000000..d833379
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/Logger.cs"
@@ -0,0 +1,251 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using SqlSugar;
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.HttpContextUser;
+using WIDESEA_Core.Seed;
+
+namespace WIDESEA_Core.LogHelper
+{
+    public static class Logger
+    {
+        public static ConcurrentQueue<dynamic> loggerQueueData = new ConcurrentQueue<dynamic>();
+        static Logger()
+        {
+            Task.Run(() =>
+            {
+                StartWriteLog();
+            });
+
+        }
+
+        static void StartWriteLog()
+        {
+            DataTable queueTable = CreateEmptyTable();
+            while (true)
+            {
+                try
+                {
+                    //濡傛灉闃熷垪涓湁鏁版嵁涓旈槦鍒楄〃涓殑琛屾暟灏忎簬500锛屽垯灏嗛槦鍒椾腑鐨勬暟鎹啓鍏ラ槦鍒楄〃
+                    if (loggerQueueData.Count() > 0 && queueTable.Rows.Count < 500)
+                    {
+                        DequeueToTable(queueTable); continue;
+                    }
+                    //姣�5绉掑啓涓�娆℃暟鎹�
+                    Thread.Sleep(5000);
+
+                    //濡傛灉闃熷垪琛ㄤ腑鐨勮鏁颁负0锛屽垯璺宠繃鏈寰幆
+                    if (queueTable.Rows.Count == 0) { continue; }
+
+                    //鍒涘缓SqlSugarClient瀵硅薄锛岀敤浜庤繛鎺ユ暟鎹簱
+                    SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig()
+                    {
+                        ConnectionString = DBContext.GetMainConnectionDb().Connection,
+                        IsAutoCloseConnection = true,
+                        DbType = MainDb.DbType,
+                    });
+
+                    //灏嗛槦鍒楄〃涓殑鏁版嵁鎵归噺鎻掑叆鏁版嵁搴�
+                    int rows = sugarClient.Fastest<DataTable>().AS("Sys_Log").BulkCopy(queueTable);
+
+                    //娓呯┖闃熷垪琛�
+                    queueTable.Clear();
+                }
+                catch (Exception ex)
+                {
+                    //鎵撳嵃寮傚父淇℃伅
+                    Console.WriteLine(ex.ToString());
+                }
+            }
+        }
+
+        private static void DequeueToTable(DataTable queueTable)
+        {
+            loggerQueueData.TryDequeue(out dynamic log);
+            if (log != null)
+            {
+                DataRow row = queueTable.NewRow();
+                // 濡傛灉log鐨凚eginDate涓虹┖鎴栬�匓eginDate鐨勫勾浠藉皬浜�2010锛屽垯灏咮eginDate璁剧疆涓哄綋鍓嶆椂闂�
+                if (log.BeginDate == null || log.BeginDate?.Year < 2010)
+                {
+                    log.BeginDate = DateTime.Now;
+                }
+                // 濡傛灉log鐨凟ndDate涓虹┖锛屽垯灏咵ndDate璁剧疆涓哄綋鍓嶆椂闂�
+                if (log.EndDate == null)
+                {
+                    log.EndDate = DateTime.Now;
+                }
+                //  row["Id"] = log.Id;
+                // 灏哛equestParam涓殑鎹㈣绗︽浛鎹负绌哄瓧绗︿覆
+                row["RequestParam"] = log.RequestParam?.Replace("\r\n", "").Replace("\n", "");
+                // 灏哛esponseParam涓殑鎹㈣绗︽浛鎹负绌哄瓧绗︿覆
+                row["ResponseParam"] = log.ResponseParam?.Replace("\r\n", "").Replace("\n", "");
+                //row["Success"] = log.Success ?? -1;
+                // 灏咮eginDate璁剧疆涓簂og鐨凚eginDate
+                row["BeginDate"] = log.BeginDate;
+                // 灏咵ndDate璁剧疆涓簂og鐨凟ndDate
+                row["EndDate"] = log.EndDate;
+                // 璁$畻ElapsedTime锛屽嵆EndDate鍑忓幓BeginDate鐨勬绉掓暟
+                row["ElapsedTime"] = ((DateTime)log.EndDate - (DateTime)log.BeginDate).TotalMilliseconds;
+                // 灏哢serIP璁剧疆涓簂og鐨刄serIP
+                row["UserIP"] = log.UserIP;
+                // 灏哢rl璁剧疆涓簂og鐨刄rl
+                row["Url"] = log.Url;
+                // 濡傛灉log鐨刄serId涓虹┖锛屽垯灏哢serId璁剧疆涓�-1锛屽惁鍒欒缃负log鐨刄serId
+                row["UserId"] = log.UserId ?? -1;
+                // 灏哢serName璁剧疆涓簂og鐨刄serName
+                row["UserName"] = log.UserName;
+                // 灏唕ow娣诲姞鍒皅ueueTable涓�
+                queueTable.Rows.Add(row);
+            }
+        }
+
+        private static DataTable CreateEmptyTable()
+        {
+            DataTable queueTable = new DataTable();
+            queueTable.Columns.Add("BeginDate", Type.GetType("System.DateTime"));
+            queueTable.Columns.Add("ElapsedTime", Type.GetType("System.Int32"));
+            queueTable.Columns.Add("EndDate", Type.GetType("System.DateTime"));
+            queueTable.Columns.Add("RequestParam", typeof(string));
+            queueTable.Columns.Add("ResponseParam", typeof(string));
+            //queueTable.Columns.Add("Success", Type.GetType("System.Int32"));
+            queueTable.Columns.Add("Url", typeof(string));
+            queueTable.Columns.Add("UserIP", typeof(string));
+            queueTable.Columns.Add("UserName", typeof(string));
+            queueTable.Columns.Add("UserId", Type.GetType("System.Int32"));
+            //queueTable.Columns.Add("LogType", typeof(string));
+            //queueTable.Columns.Add("ExceptionInfo", typeof(string));
+            //queueTable.Columns.Add("ServiceIP", typeof(string));
+            //queueTable.Columns.Add("BrowserType", typeof(string));
+            //queueTable.Columns.Add("Role_Id", Type.GetType("System.Int32"));
+            return queueTable;
+        }
+
+        public static void Add(string requestParameter, string responseParameter)
+        {
+            dynamic log = null;
+            try
+            {
+                //鑾峰彇褰撳墠HttpContext
+                HttpContext context = App.HttpContext;
+                //濡傛灉HttpContext涓虹┖锛屽垯杩斿洖
+                if (context == null)
+                {
+                    return;
+                }
+                //濡傛灉璇锋眰鏂规硶涓篛PTIONS锛屽垯杩斿洖
+                if (context.Request.Method == "OPTIONS") return;
+                //鑾峰彇RequestLogModel瀹炰緥
+                RequestLogModel logModel = (context.RequestServices.GetService(typeof(RequestLogModel)) as RequestLogModel) ?? new RequestLogModel { RequestDate = DateTime.Now };
+
+                //鑾峰彇褰撳墠鐢ㄦ埛
+                IUser user = App.User;
+                //鍒涘缓鏃ュ織瀵硅薄
+                log = new
+                {
+                    //璇锋眰寮�濮嬫椂闂�
+                    BeginDate = logModel.RequestDate,
+                    //璇锋眰缁撴潫鏃堕棿
+                    EndDate = DateTime.Now,
+                    //璇锋眰鍙傛暟
+                    RequestParam = requestParameter,
+                    //鍝嶅簲鍙傛暟
+                    ResponseParam = responseParameter,
+                    //璇锋眰URL
+                    Url = context.Request.Scheme + "://" + context.Request.Host + context.Request.PathBase + context.Request.Path,
+                    //瀹㈡埛绔疘P
+                    UserIP = GetClientIP(context)?.Replace("::ffff:", "").Replace("::1", "127.0.0.1"),
+                    //鐢ㄦ埛ID
+                    UserId = user.UserId,
+                    //鐢ㄦ埛鍚�
+                    UserName = user.UserName
+                };
+            }
+            catch (Exception exception)
+            {
+                //濡傛灉鍙戠敓寮傚父锛屽垯鍒涘缓鏃ュ織瀵硅薄
+                log = log ?? new
+                {
+                    //璇锋眰寮�濮嬫椂闂�
+                    BeginDate = DateTime.Now,
+                    //璇锋眰缁撴潫鏃堕棿
+                    EndDate = DateTime.Now,
+                    //璇锋眰鍙傛暟
+                    RequestParam = requestParameter,
+                    //鍝嶅簲鍙傛暟
+                    ResponseParam = responseParameter,
+                };
+            }
+            //娣诲姞绯荤粺鏃ュ織
+            loggerQueueData.Enqueue(log);
+        }
+
+        public static void Add(string url, string requestParameter, string responseParameter, DateTime beginDate)
+        {
+            dynamic? log = null;
+            try
+            {
+                //鑾峰彇褰撳墠鐢ㄦ埛
+                IUser? user = App.User;
+                //鍒涘缓鏃ュ織瀵硅薄
+                log = new
+                {
+                    //璇锋眰寮�濮嬫椂闂�
+                    BeginDate = beginDate,
+                    //璇锋眰缁撴潫鏃堕棿
+                    EndDate = DateTime.Now,
+                    //璇锋眰鍙傛暟
+                    RequestParam = requestParameter,
+                    //鍝嶅簲鍙傛暟
+                    ResponseParam = responseParameter,
+                    //璇锋眰URL
+                    Url = url,
+                    //瀹㈡埛绔疘P
+                    UserIP = "",
+                    //鐢ㄦ埛ID
+                    UserId = user?.UserId,
+                    //鐢ㄦ埛鍚�
+                    UserName = user?.UserName
+                };
+            }
+            catch (Exception exception)
+            {
+                //濡傛灉鍙戠敓寮傚父锛屽垯鍒涘缓鏃ュ織瀵硅薄
+                log = log ?? new
+                {
+                    //璇锋眰寮�濮嬫椂闂�
+                    BeginDate = DateTime.Now,
+                    //璇锋眰缁撴潫鏃堕棿
+                    EndDate = DateTime.Now,
+                    //璇锋眰鍙傛暟
+                    RequestParam = requestParameter,
+                    //鍝嶅簲鍙傛暟
+                    ResponseParam = responseParameter,
+                };
+            }
+            //娣诲姞绯荤粺鏃ュ織
+            loggerQueueData.Enqueue(log);
+        }
+
+        public static string GetClientIP(HttpContext context)
+        {
+            // 鑾峰彇璇锋眰澶翠腑鐨刋-Forwarded-For瀛楁锛屽苟灏嗗叾杞崲涓哄瓧绗︿覆
+            var ip = context.Request.Headers["X-Forwarded-For"].ObjToString();
+            // 濡傛灉X-Forwarded-For瀛楁涓虹┖锛屽垯鑾峰彇杩滅▼IP鍦板潃
+            if (string.IsNullOrEmpty(ip))
+            {
+                ip = context.Connection.RemoteIpAddress.ObjToString();
+            }
+
+            // 杩斿洖IP鍦板潃
+            return ip;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/RequestLogModel.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/RequestLogModel.cs"
new file mode 100644
index 0000000..0404a69
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/RequestLogModel.cs"
@@ -0,0 +1,13 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.LogHelper
+{
+    public class RequestLogModel
+    {
+        public DateTime RequestDate { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/AllServicesMiddleware.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/AllServicesMiddleware.cs"
new file mode 100644
index 0000000..79eeb42
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/AllServicesMiddleware.cs"
@@ -0,0 +1,62 @@
+锘縰sing Autofac.Core;
+using Autofac.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Middlewares
+{
+    /// <summary>
+    /// 鏌ョ湅鎵�鏈夋敞鍏ョ殑鏈嶅姟
+    /// </summary>
+    public static class AllServicesMiddleware
+    {
+        public static void UseAllServicesMiddle(this IApplicationBuilder app, IServiceCollection _services)
+        {
+            if (app == null) throw new ArgumentNullException(nameof(app));
+
+            //List<Type> tsDIAutofac = new List<Type>();
+            //tsDIAutofac.AddRange(Assembly.LoadFrom(Path.Combine(AppContext.BaseDirectory, "Blog.Core.Services.dll")).GetTypes().ToList());
+            //tsDIAutofac.AddRange(Assembly.LoadFrom(Path.Combine(AppContext.BaseDirectory, "Blog.Core.Repository.dll")).GetTypes().ToList());
+
+            IEnumerable<IComponentRegistration> autofacContainers = (app.ApplicationServices.GetAutofacRoot())?.ComponentRegistry?.Registrations ?? new List<IComponentRegistration>();
+
+
+            app.Map("/allservices", builder => builder.Run(async context =>
+            {
+                context.Response.ContentType = "text/html; charset=utf-8";
+                await context.Response.WriteAsync("<style>.table2_1 table {width:100%;margin:15px 0}.table2_1 th {background-color:#93DAFF;color:#000000}.table2_1,.table2_1 th,.table2_1 td{font-size:0.95em;text-align:center;padding:4px;border:1px solid #c1e9fe;border-collapse:collapse}.table2_1 tr:nth-child(odd){background-color:#dbf2fe;}.table2_1 tr:nth-child(even){background-color:#fdfdfd;}</style>");
+
+                await context.Response.WriteAsync($"<h3>鎵�鏈夋湇鍔_services.Count}涓�</h3><table class='table2_1'><thead><tr><th>绫诲瀷</th><th>鐢熷懡鍛ㄦ湡</th><th>Instance</th></tr></thead><tbody>");
+
+                foreach (var svc in _services)
+                {
+                    await context.Response.WriteAsync("<tr>");
+                    await context.Response.WriteAsync($"<td>{svc.ServiceType.FullName}</td>");
+                    await context.Response.WriteAsync($"<td>{svc.Lifetime}</td>");
+                    await context.Response.WriteAsync($"<td>{svc.ImplementationType?.Name}</td>");
+                    await context.Response.WriteAsync("</tr>");
+                }
+                foreach (var item in autofacContainers?.ToList())
+                {
+                    var interfaceType = item.Services;
+                    foreach (var typeArray in interfaceType)
+                    {
+                        await context.Response.WriteAsync("<tr>");
+                        await context.Response.WriteAsync($"<td>{typeArray?.Description}</td>");
+                        await context.Response.WriteAsync($"<td>{item?.Lifetime}</td>");
+                        await context.Response.WriteAsync($"<td>{item?.Target.Activator.ObjToString().Replace("(ReflectionActivator)", "")}</td>");
+                        await context.Response.WriteAsync("</tr>");
+                    }
+                }
+                await context.Response.WriteAsync("</tbody></table>");
+            }));
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
new file mode 100644
index 0000000..d047780
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
@@ -0,0 +1,161 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using Org.BouncyCastle.Asn1.Ocsp;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.LogHelper;
+
+namespace WIDESEA_Core.Middlewares
+{
+    /// <summary>
+    /// 璁板綍璇锋眰鍜屽搷搴旀暟鎹�
+    /// </summary>
+    public class ApiLogMiddleware
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        private readonly RequestDelegate _next;
+
+        public ApiLogMiddleware(RequestDelegate next, ILogger<ApiLogMiddleware> logger)
+        {
+            _next = next;
+        }
+
+        //todo
+        /// <summary>
+        /// API鏃ュ織涓棿浠讹紝鐢ㄤ簬澶勭悊HTTP璇锋眰鍜屽搷搴旂殑鏃ュ織璁板綍
+        /// </summary>
+        /// <remarks>
+        /// 1. 妫�鏌ョ郴缁熻繃鏈熸椂闂达紝鑻ヨ繃鏈熷垯杩斿洖500閿欒
+        /// 2. 浠呭鐞嗗寘鍚�"api"璺緞鐨勮姹�
+        /// 3. 璁板綍璇锋眰鍜屽搷搴旀暟鎹埌鏃ュ織绯荤粺
+        /// 4. 鏀寔閫氳繃閰嶇疆蹇界暐鐗瑰畾URL鐨勬棩蹇楄褰�
+        /// </remarks>
+        /// <param name="context">褰撳墠HTTP涓婁笅鏂�</param>
+        /// <returns>寮傛浠诲姟</returns>
+        public async Task InvokeAsync(HttpContext context)
+        {
+            if (App.ExpDateTime != null && (DateTime.Now - App.ExpDateTime.GetValueOrDefault()).TotalSeconds > 0)
+            {
+                context.Response.StatusCode = HttpStatusCode.InternalServerError.ObjToInt();
+                context.Response.ContentType = "application/json";
+
+                var json = new WebResponseContent();
+
+                json.Message = HttpStatusCode.InternalServerError.ToString();//閿欒淇℃伅
+                json.Code = 500;//500寮傚父 
+
+                StreamWriter streamWriter = new StreamWriter(context.Response.Body);
+                await streamWriter.WriteAsync(json.Serialize());
+                return;
+            }
+
+            // 杩囨护锛屽彧鏈夋帴鍙�
+            if (context.Request.Path.Value?.Contains("api") ?? false)
+            {
+                context.Request.EnableBuffering();
+                Stream originalBody = context.Response.Body;
+                string requestParam = string.Empty;
+                string responseParam = string.Empty;
+                try
+                {
+                    string? apiIgnore = AppSettings.GetValue("ApiLogIgnore")?.ToString();
+                    string[] ignoreUrls = !string.IsNullOrEmpty(apiIgnore) ? apiIgnore.Split(",") : new string[] { "get" };
+
+                    (context.RequestServices.GetService(typeof(RequestLogModel)) as RequestLogModel).RequestDate = DateTime.Now;
+                    try
+                    {
+                        // 瀛樺偍璇锋眰鏁版嵁
+                        requestParam = RequestDataLog(context);
+                        context.Request.Body.Position = 0;
+                    }
+                    catch { }
+                    using MemoryStream ms = new();
+                    context.Response.Body = ms;
+
+                    await _next(context);
+
+                    try
+                    {
+                        // 瀛樺偍鍝嶅簲鏁版嵁
+                        responseParam = ResponseDataLog(context.Response);
+                    }
+                    catch { }
+
+                    ms.Position = 0;
+                    await ms.CopyToAsync(originalBody);
+
+                    if (!ignoreUrls.Any(x => context.Request.Path.Value?.Contains(x) ?? false))
+                    {
+                        Logger.Add(requestParam, responseParam);
+                    }
+                }
+                catch (Exception ex)
+                {
+                    // 璁板綍寮傚父
+
+                }
+                finally
+                {
+                    context.Response.Body = originalBody;
+                }
+            }
+            else
+            {
+                await _next(context);
+            }
+        }
+
+        private string RequestDataLog(HttpContext context)
+        {
+            var request = context.Request;
+
+            var sr = new StreamReader(request.Body);
+
+            object obj;
+            string bodyData = sr.ReadToEndAsync().Result;
+            if (request.ContentLength <= 100000)
+            {
+                obj = new
+                {
+                    QueryString = request.QueryString.ToString(),
+                    BodyData = bodyData
+                };
+            }
+            else
+            {
+                obj = new
+                {
+                    QueryString = request.QueryString.ToString(),
+                    BodyData = ""
+                };
+            }
+            string data = JsonConvert.SerializeObject(obj);
+
+            request.Body.Position = 0;
+
+            return data; ;
+        }
+
+        private string ResponseDataLog(HttpResponse response)
+        {
+            if (response.ContentLength <= 100000)
+            {
+                response.Body.Position = 0;
+                using StreamReader stream = new StreamReader(response.Body, leaveOpen: true);
+                string body = stream.ReadToEnd();
+                response.Body.Position = 0;
+                return body;
+            }
+            return "";
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ExceptionHandlerMiddleware.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ExceptionHandlerMiddleware.cs"
new file mode 100644
index 0000000..33d8e0d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ExceptionHandlerMiddleware.cs"
@@ -0,0 +1,59 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.DirectoryServices.Protocols;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Middlewares
+{
+    public class ExceptionHandlerMiddleware
+    {
+        private readonly RequestDelegate _next;
+
+        public ExceptionHandlerMiddleware(RequestDelegate next)
+        {
+            _next = next;
+        }
+
+        public async Task Invoke(HttpContext context)
+        {
+            try
+            {
+                await _next(context);
+            }
+            catch (Exception ex)
+            {
+                await HandleExceptionAsync(context, ex);
+            }
+        }
+
+        private async Task HandleExceptionAsync(HttpContext context, Exception e)
+        {
+            if (e == null) return;
+
+            await WriteExceptionAsync(context, e).ConfigureAwait(false);
+        }
+
+        private static async Task WriteExceptionAsync(HttpContext context, Exception e)
+        {
+            var message = e.Message;
+            switch (e)
+            {
+                case UnauthorizedAccessException:
+                    context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
+                    break;
+                default:
+                    context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
+                    break;
+            }
+            context.Response.ContentType = "application/json";
+            await context.Response
+                .WriteAsync(JsonConvert.SerializeObject(WebResponseContent.Instance.Error(message)))
+                .ConfigureAwait(false);
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/HttpRequestMiddleware.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/HttpRequestMiddleware.cs"
new file mode 100644
index 0000000..deb4a6d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/HttpRequestMiddleware.cs"
@@ -0,0 +1,25 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Middlewares
+{
+    public class HttpRequestMiddleware
+    {
+        private readonly RequestDelegate _next;
+
+        public HttpRequestMiddleware(RequestDelegate next)
+        {
+            _next = next;
+        }
+
+        public async Task InvokeAsync(HttpContext context)
+        {
+            context.Response.Headers.Add("Access-Control-Expose-Headers", "widesea_exp");
+            await _next(context);
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/IpLimitMiddleware.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/IpLimitMiddleware.cs"
new file mode 100644
index 0000000..279f7a4
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/IpLimitMiddleware.cs"
@@ -0,0 +1,40 @@
+锘�
+using Microsoft.AspNetCore.Builder;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Middlewares
+{
+    /// <summary>
+    /// ip 闄愭祦
+    /// </summary>
+    public static class IpLimitMiddleware
+    {
+        /// <summary>
+        /// ip闄愭祦
+        /// </summary>
+        /// <param name="app"></param>
+        /// <exception cref="ArgumentNullException"></exception>
+        public static void UseIpLimitMiddle(this IApplicationBuilder app)
+        {
+            if (app == null) throw new ArgumentNullException(nameof(app));
+
+            //try
+            //{
+            //    if (AppSettings.app("Middleware", "IpRateLimit", "Enabled").ObjToBool())
+            //    {
+            //        app.UseIpRateLimiting();
+            //    }
+            //}
+            //catch (Exception e)
+            //{
+            //    Log.Error($"Error occured limiting ip rate.\n{e.Message}");
+            //    throw;
+            //}
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/JwtTokenAuthMiddleware.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/JwtTokenAuthMiddleware.cs"
new file mode 100644
index 0000000..ef95892
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/JwtTokenAuthMiddleware.cs"
@@ -0,0 +1,94 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Authorization;
+using WIDESEA_Core.HttpContextUser;
+
+namespace WIDESEA_Core.Middlewares
+{
+    /// <summary>
+    /// 涓棿浠�
+    /// 鍘熷仛涓鸿嚜瀹氫箟鎺堟潈涓棿浠�
+    /// 鍏堝仛妫�鏌� header token鐨勪娇鐢�
+    /// </summary>
+    public class JwtTokenAuthMiddleware
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        private readonly RequestDelegate _next;
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="next"></param>
+        public JwtTokenAuthMiddleware(RequestDelegate next)
+        {
+            _next = next;
+        }
+
+
+        private void PreProceed(HttpContext next)
+        {
+            //Console.WriteLine($"{DateTime.Now} middleware invoke preproceed");
+            //...
+        }
+        private void PostProceed(HttpContext next)
+        {
+            //Console.WriteLine($"{DateTime.Now} middleware invoke postproceed");
+            //....
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="httpContext"></param>
+        /// <returns></returns>
+        public Task Invoke(HttpContext httpContext)
+        {
+            PreProceed(httpContext);
+
+
+            //妫�娴嬫槸鍚﹀寘鍚�'Authorization'璇锋眰澶�
+            if (!httpContext.Request.Headers.ContainsKey("Authorization"))
+            {
+                PostProceed(httpContext);
+
+                return _next(httpContext);
+            }
+            //var tokenHeader = httpContext.Request.Headers["Authorization"].ToString();
+            var tokenHeader = httpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", "");
+
+            try
+            {
+                if (tokenHeader.Length >= 128)
+                {
+                    //Console.WriteLine($"{DateTime.Now} token :{tokenHeader}");
+                    UserInfo tm = JwtHelper.SerializeJwt(tokenHeader);
+
+                    //鎺堟潈
+                    //var claimList = new List<Claim>();
+                    //var claim = new Claim(ClaimTypes.Role, tm.Role);
+                    //claimList.Add(claim);
+                    //var identity = new ClaimsIdentity(claimList);
+                    //var principal = new ClaimsPrincipal(identity);
+                    //httpContext.User = principal;
+                }
+
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine($"{DateTime.Now} middleware wrong:{e.Message}");
+            }
+
+
+            PostProceed(httpContext);
+
+
+            return _next(httpContext);
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/MiddlewareHelpers.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/MiddlewareHelpers.cs"
new file mode 100644
index 0000000..917faa5
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/MiddlewareHelpers.cs"
@@ -0,0 +1,42 @@
+锘縰sing Microsoft.AspNetCore.Builder;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Middlewares
+{
+    public static class MiddlewareHelpers
+    {
+        /// <summary>
+        /// 璇锋眰鍝嶅簲涓棿浠�
+        /// </summary>
+        /// <param name="app"></param>
+        /// <returns></returns>
+        public static IApplicationBuilder UseApiLogMiddleware(this IApplicationBuilder app)
+        {
+            return app.UseMiddleware<ApiLogMiddleware>();
+        }
+
+        /// <summary>
+        /// 鑷畾涔夋巿鏉冧腑闂翠欢
+        /// </summary>
+        /// <param name="app"></param>
+        /// <returns></returns>
+        public static IApplicationBuilder UseJwtTokenAuth(this IApplicationBuilder app)
+        {
+            return app.UseMiddleware<JwtTokenAuthMiddleware>();
+        }
+
+        /// <summary>
+        /// 寮傚父澶勭悊涓棿浠�
+        /// </summary>
+        /// <param name="app"></param>
+        /// <returns></returns>
+        public static IApplicationBuilder UseExceptionHandlerMiddle(this IApplicationBuilder app)
+        {
+            return app.UseMiddleware<ExceptionHandlerMiddleware>();
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/SwaggerAuthMiddleware.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/SwaggerAuthMiddleware.cs"
new file mode 100644
index 0000000..21c2606
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/SwaggerAuthMiddleware.cs"
@@ -0,0 +1,86 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Http;
+using WIDESEA_Core.Extensions;
+
+namespace WIDESEA_Core.Middlewares
+{
+    public class SwaggerAuthMiddleware
+    {
+
+        private readonly RequestDelegate next;
+
+        public SwaggerAuthMiddleware(RequestDelegate next)
+        {
+            this.next = next;
+        }
+
+        public async Task InvokeAsync(HttpContext context)
+        {
+            // 涔熷彲浠ユ牴鎹槸鍚︽槸鏈湴鍋氬垽鏂� IsLocalRequest
+            if (context.Request.Path.Value?.ToLower().Contains("index.html") ?? false)
+            {
+                // 鍒ゆ柇鏉冮檺鏄惁姝g‘
+                if (IsAuthorized(context))
+                {
+                    await next.Invoke(context);
+                    return;
+                }
+
+                // 鏃犳潈闄愶紝璺宠浆swagger鐧诲綍椤�
+                context.RedirectSwaggerLogin();
+            }
+            else
+            {
+                await next.Invoke(context);
+            }
+        }
+
+        /// <summary>
+        /// 妫�鏌ュ綋鍓岺TTP涓婁笅鏂囨槸鍚﹀凡閫氳繃Swagger璁よ瘉
+        /// </summary>
+        /// <param name="context">HTTP涓婁笅鏂囧璞�</param>
+        /// <returns>杩斿洖true琛ㄧず宸查�氳繃璁よ瘉锛宖alse琛ㄧず鏈�氳繃</returns>
+        public bool IsAuthorized(HttpContext context)
+        {
+            // 浣跨敤session妯″紡
+            // 鍙互浣跨敤鍏朵粬鐨�
+            return context.IsSuccessSwagger();
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄笉鏄湰鍦拌闂�
+        /// 鏈湴涓嶇敤swagger鎷︽埅
+        /// </summary>
+        /// <param name="context"></param>
+        /// <returns></returns>
+        public bool IsLocalRequest(HttpContext context)
+        {
+            if (context.Connection.RemoteIpAddress == null && context.Connection.LocalIpAddress == null)
+            {
+                return true;
+            }
+            if (context.Connection.RemoteIpAddress?.Equals(context.Connection.LocalIpAddress) ?? false)
+            {
+                return true;
+            }
+            if (IPAddress.IsLoopback(context.Connection.RemoteIpAddress))
+            {
+                return true;
+            }
+            return false;
+        }
+    }
+    public static class SwaggerAuthorizeExtensions
+    {
+        public static IApplicationBuilder UseSwaggerAuthorized(this IApplicationBuilder builder)
+        {
+            return builder.UseMiddleware<SwaggerAuthMiddleware>();
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/SwaggerMiddleware.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/SwaggerMiddleware.cs"
new file mode 100644
index 0000000..27c2a23
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/SwaggerMiddleware.cs"
@@ -0,0 +1,62 @@
+锘�
+using Microsoft.AspNetCore.Builder;
+using Swashbuckle.AspNetCore.SwaggerUI;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+using static WIDESEA_Core.Extensions.CustomApiVersion;
+
+namespace WIDESEA_Core.Middlewares
+{
+    /// <summary>
+    /// Swagger涓棿浠�
+    /// </summary>
+    public static class SwaggerMiddleware
+    {
+        /// <summary>
+        /// 閰嶇疆搴旂敤绋嬪簭浣跨敤Swagger涓棿浠�
+        /// </summary>
+        /// <param name="app">搴旂敤绋嬪簭鏋勫缓鍣�</param>
+        /// <param name="streamHtml">鐢ㄤ簬鑾峰彇鑷畾涔塖wagger棣栭〉HTML娴佺殑鍑芥暟</param>
+        /// <remarks>
+        /// 姝ゆ墿灞曟柟娉曢厤缃甋wagger UI锛屽寘鎷細
+        /// 1. 璁剧疆API鏂囨。绔偣
+        /// 2. 鑷畾涔夋枃妗f爣棰樺拰鏍峰紡
+        /// 3. 閰嶇疆鑷畾涔夐椤垫祦
+        /// 4. 璁剧疆鏂囨。灞曞紑琛屼负鍜岃矾鐢卞墠缂�
+        /// 濡傛灉streamHtml杩斿洖null锛屽皢鎶涘嚭寮傚父鎻愮ず闇�瑕佸皢index.html璁剧疆涓哄祵鍏ヨ祫婧�
+        /// </remarks>
+        public static void UseSwaggerMiddle(this IApplicationBuilder app, Func<Stream> streamHtml)
+        {
+            if (app == null) throw new ArgumentNullException(nameof(app));
+
+            app.UseSwagger();
+            app.UseSwaggerUI(c =>
+            {
+                //鏍规嵁鐗堟湰鍚嶇О鍊掑簭 閬嶅巻灞曠ず
+                var apiName = AppSettings.Get(new string[] { "ApiName" });
+                c.SwaggerEndpoint($"/swagger/v1/swagger.json", $"{apiName} v1");
+
+                // 灏唖wagger棣栭〉锛岃缃垚鎴戜滑鑷畾涔夌殑椤甸潰锛岃寰楄繖涓瓧绗︿覆鐨勫啓娉曪細{椤圭洰鍚�.index.html}
+                if (streamHtml.Invoke() == null)
+                {
+                    var msg = "index.html鐨勫睘鎬э紝蹇呴』璁剧疆涓哄祵鍏ョ殑璧勬簮";
+                    //Log.Error(msg);
+                    throw new Exception(msg);
+                }
+                c.DocumentTitle = $"{apiName} 鍦ㄧ嚎璋冭瘯鏂囨。";
+
+                c.InjectStylesheet("/css/swaggerdoc.css");
+                c.InjectJavascript("/js/swaggerdoc.js");
+                c.IndexStream = streamHtml;
+                c.DocExpansion(DocExpansion.None); //->淇敼鐣岄潰鎵撳紑鏃惰嚜鍔ㄦ姌鍙�
+
+                // 璺緞閰嶇疆锛岃缃负绌猴紝琛ㄧず鐩存帴鍦ㄦ牴鍩熷悕锛坙ocalhost:8001锛夎闂鏂囦欢,娉ㄦ剰localhost:8001/swagger鏄闂笉鍒扮殑锛屽幓launchSettings.json鎶妉aunchUrl鍘绘帀锛屽鏋滀綘鎯虫崲涓�涓矾寰勶紝鐩存帴鍐欏悕瀛楀嵆鍙紝姣斿鐩存帴鍐檆.RoutePrefix = "doc";
+                c.RoutePrefix = "";
+            });
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Seed/DBContext.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Seed/DBContext.cs"
new file mode 100644
index 0000000..14df465
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Seed/DBContext.cs"
@@ -0,0 +1,216 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Seed
+{
+    public class DBContext
+    {
+        private static MutiDBOperate connectObject => GetMainConnectionDb();
+        private static string _connectionString = connectObject.Connection;
+        private static DbType _dbType = (DbType)connectObject.DbType;
+        public static string ConnId = connectObject.ConnId;
+        private SqlSugarClient _db;
+
+        /// <summary>
+        /// 杩炴帴瀛楃涓� 
+        /// </summary>
+        public static MutiDBOperate GetMainConnectionDb()
+        {
+            MutiDBOperate mainDb = new MutiDBOperate()
+            {
+                Connection = AppSettings.Get(MainDb.ConnectionString).DecryptDES(AppSecret.DB),
+                ConnId = MainDb.CurrentDbConnId,
+                DbType = DataBaseType.SqlServer
+            };
+
+            return mainDb;
+        }
+        /// <summary>
+        /// 杩炴帴瀛楃涓� 
+        /// </summary>
+        public static string ConnectionString
+        {
+            get { return _connectionString; }
+            set { _connectionString = value; }
+        }
+        /// <summary>
+        /// 鏁版嵁搴撶被鍨� 
+        /// </summary>
+        public static DbType DbType
+        {
+            get { return _dbType; }
+            set { _dbType = value; }
+        }
+        /// <summary>
+        /// 鏁版嵁杩炴帴瀵硅薄 
+        /// </summary>
+        public SqlSugarClient Db
+        {
+            get { return _db; }
+            private set { _db = value; }
+        }
+
+        //public SqlSugarScope DbClient
+        //{
+        //    get { return _dbClient; }
+        //    private set { _dbClient = value; }
+        //}
+
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鏋勯�犲嚱鏁�
+        /// </summary>
+        public DBContext(ISqlSugarClient sqlSugarClient)
+        {
+            if (string.IsNullOrEmpty(_connectionString))
+                throw new ArgumentNullException("鏁版嵁搴撹繛鎺ュ瓧绗︿覆涓虹┖");
+
+            _db = sqlSugarClient as SqlSugarClient;
+            //_db.Aop.DataExecuting = SqlSugarAop.DataExecuting;
+        }
+
+        #region 瀹炰緥鏂规硶
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鑾峰彇鏁版嵁搴撳鐞嗗璞�
+        /// </summary>
+        /// <returns>杩斿洖鍊�</returns>
+        public SimpleClient<T> GetEntityDB<T>() where T : class, new()
+        {
+            return new SimpleClient<T>(_db);
+        }
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鑾峰彇鏁版嵁搴撳鐞嗗璞�
+        /// </summary>
+        /// <param name="db">db</param>
+        /// <returns>杩斿洖鍊�</returns>
+        //public SimpleClient<T> GetEntityDB<T>(SqlSugarClient db) where T : class, new()
+        //{
+        //    return new SimpleClient<T>(db);
+        //}
+
+
+
+        #endregion
+
+
+        #region 鏍规嵁瀹炰綋绫荤敓鎴愭暟鎹簱琛�
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鏍规嵁瀹炰綋绫荤敓鎴愭暟鎹簱琛�
+        /// </summary>
+        /// <param name="blnBackupTable">鏄惁澶囦唤琛�</param>
+        /// <param name="lstEntitys">鎸囧畾鐨勫疄浣�</param>
+        public void CreateTableByEntity<T>(bool blnBackupTable, params T[] lstEntitys) where T : class, new()
+        {
+            Type[] lstTypes = null;
+            if (lstEntitys != null)
+            {
+                lstTypes = new Type[lstEntitys.Length];
+                for (int i = 0; i < lstEntitys.Length; i++)
+                {
+                    T t = lstEntitys[i];
+                    lstTypes[i] = typeof(T);
+                }
+            }
+            CreateTableByEntity(blnBackupTable, lstTypes);
+        }
+
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鏍规嵁瀹炰綋绫荤敓鎴愭暟鎹簱琛�
+        /// </summary>
+        /// <param name="blnBackupTable">鏄惁澶囦唤琛�</param>
+        /// <param name="lstEntitys">鎸囧畾鐨勫疄浣�</param>
+        public void CreateTableByEntity(bool blnBackupTable, params Type[] lstEntitys)
+        {
+            if (blnBackupTable)
+            {
+                _db.CodeFirst.BackupTable().InitTables(lstEntitys); //change entity backupTable            
+            }
+            else
+            {
+                _db.CodeFirst.InitTables(lstEntitys);
+            }
+        }
+        #endregion
+
+
+        #region 闈欐�佹柟娉�
+
+        ///// <summary>
+        ///// 鍔熻兘鎻忚堪:鑾峰緱涓�涓狣bContext
+        ///// </summary>
+        ///// <returns></returns>
+        //public static MyContext GetDbContext()
+        //{
+        //    return new MyContext();
+        //}
+
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:璁剧疆鍒濆鍖栧弬鏁�
+        /// </summary>
+        /// <param name="strConnectionString">杩炴帴瀛楃涓�</param>
+        /// <param name="enmDbType">鏁版嵁搴撶被鍨�</param>
+        public static void Init(string strConnectionString, DbType enmDbType = SqlSugar.DbType.SqlServer)
+        {
+            _connectionString = strConnectionString;
+            _dbType = enmDbType;
+        }
+
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鍒涘缓涓�涓摼鎺ラ厤缃�
+        /// </summary>
+        /// <param name="blnIsAutoCloseConnection">鏄惁鑷姩鍏抽棴杩炴帴</param>
+        /// <param name="blnIsShardSameThread">鏄惁澶哥被浜嬪姟</param>
+        /// <returns>ConnectionConfig</returns>
+        public static ConnectionConfig GetConnectionConfig(bool blnIsAutoCloseConnection = true, bool blnIsShardSameThread = false)
+        {
+            ConnectionConfig config = new ConnectionConfig()
+            {
+                ConnectionString = _connectionString,
+                DbType = _dbType,
+                IsAutoCloseConnection = blnIsAutoCloseConnection,
+                ConfigureExternalServices = new ConfigureExternalServices()
+                {
+                    //DataInfoCacheService = new HttpRuntimeCache()
+                },
+                //IsShardSameThread = blnIsShardSameThread
+            };
+            return config;
+        }
+
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鑾峰彇涓�涓嚜瀹氫箟鐨凞B
+        /// </summary>
+        /// <param name="config">config</param>
+        /// <returns>杩斿洖鍊�</returns>
+        public static SqlSugarClient GetCustomDB(ConnectionConfig config)
+        {
+            return new SqlSugarClient(config);
+        }
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鑾峰彇涓�涓嚜瀹氫箟鐨勬暟鎹簱澶勭悊瀵硅薄
+        /// </summary>
+        /// <param name="sugarClient">sugarClient</param>
+        /// <returns>杩斿洖鍊�</returns>
+        public static SimpleClient<T> GetCustomEntityDB<T>(SqlSugarClient sugarClient) where T : class, new()
+        {
+            return new SimpleClient<T>(sugarClient);
+        }
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鑾峰彇涓�涓嚜瀹氫箟鐨勬暟鎹簱澶勭悊瀵硅薄
+        /// </summary>
+        /// <param name="config">config</param>
+        /// <returns>杩斿洖鍊�</returns>
+        public static SimpleClient<T> GetCustomEntityDB<T>(ConnectionConfig config) where T : class, new()
+        {
+            SqlSugarClient sugarClient = GetCustomDB(config);
+            return GetCustomEntityDB<T>(sugarClient);
+        }
+        #endregion
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Seed/DBSeed.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Seed/DBSeed.cs"
new file mode 100644
index 0000000..4a92f35
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Seed/DBSeed.cs"
@@ -0,0 +1,318 @@
+锘縰sing Castle.Components.DictionaryAdapter.Xml;
+using Microsoft.AspNetCore.Mvc.Rendering;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Dynamic;
+using System.Linq;
+using System.Net.Sockets;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Tenants;
+
+namespace WIDESEA_Core.Seed
+{
+    public class DBSeed
+    {
+        private static string SeedDataFolder = "WIDESEA_DB.DBSeed.Json/{0}.tsv";
+
+        /// <summary>
+        /// 寮傛娣诲姞绉嶅瓙鏁版嵁
+        /// </summary>
+        /// <param name="myContext"></param>
+        /// <param name="WebRootPath"></param>
+        /// <returns></returns>
+        public static void SeedAsync(DBContext dbContext, string WebRootPath)
+        {
+            try
+            {
+                if (string.IsNullOrEmpty(WebRootPath))
+                {
+                    throw new Exception("鑾峰彇wwwroot璺緞鏃讹紝寮傚父锛�");
+                }
+
+                SeedDataFolder = Path.Combine(WebRootPath, SeedDataFolder);
+
+                Console.WriteLine("************ WIDESEA DataBase Set *****************");
+
+                Console.WriteLine($"Master DB Type: {DBContext.DbType}");
+
+                Console.WriteLine();
+
+                // 鍒涘缓鏁版嵁搴�
+                Console.WriteLine($"Create Database(The Db Id:{DBContext.ConnId})...");
+
+                if (DBContext.DbType != SqlSugar.DbType.Oracle)
+                {
+                    dbContext.Db.DbMaintenance.CreateDatabase();
+                    ConsoleHelper.WriteSuccessLine($"Database Created Successfully!");
+                }
+                else
+                {
+                    //Oracle 鏁版嵁搴撲笉鏀寔璇ユ搷浣�
+                    ConsoleHelper.WriteSuccessLine($"Oracle 鏁版嵁搴撲笉鏀寔璇ユ搷浣滐紝鍙墜鍔ㄥ垱寤篛racle鏁版嵁搴�!");
+                }
+
+                // 鍒涘缓鏁版嵁搴撹〃锛岄亶鍘嗘寚瀹氬懡鍚嶇┖闂翠笅鐨刢lass锛�
+                // 娉ㄦ剰涓嶈鎶婂叾浠栧懡鍚嶇┖闂翠笅鐨勪篃娣诲姞杩涙潵銆�
+                Console.WriteLine("Create Tables...");
+
+                var path = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
+                var referencedAssemblies = Directory.GetFiles(path, MainDb.AssemblyName).Select(Assembly.LoadFrom).ToArray();
+
+                var modelTypes = referencedAssemblies
+                    .SelectMany(a => a.DefinedTypes)
+                    .Select(type => type.AsType())
+                    .Where(x => x.IsClass && x.Namespace is MainDb.EntityNameSpace && x.GetCustomAttribute<SugarTable>() != null)
+                    .ToList();
+
+                modelTypes.ForEach(t =>
+                {
+                    //var diffString = dbContext.Db.CodeFirst.GetDifferenceTables(t).ToDiffString();
+                    // 杩欓噷鍙敮鎸佹坊鍔犺〃锛屼笉鏀寔鍒犻櫎
+                    // 濡傛灉鎯宠鍒犻櫎锛屾暟鎹簱鐩存帴鍙抽敭鍒犻櫎锛屾垨鑰呰仈绯籗qlSugar浣滆�咃紱
+                    IDbMaintenance dbMaintenance = dbContext.Db.DbMaintenance;
+                    if (!dbMaintenance.IsAnyTable(t.Name, false))
+                    {
+                        ConsoleHelper.WriteSuccessLine($"Table [{t.Name}] Created Successfully");
+                        dbContext.Db.CodeFirst.InitTables(t);
+
+                        string seedData = FileHelper.ReadFile(string.Format(SeedDataFolder, t.Name), Encoding.UTF8);
+
+                        #region AddSeedData
+                        if (seedData != "涓嶅瓨鍦ㄧ浉搴旂殑鐩綍")
+                        {
+                            List<Dictionary<string, object>>? dicFile = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(seedData);
+
+                            if (dicFile != null && dicFile.Count > 0)
+                            {
+                                List<Dictionary<string, object>> dic = new List<Dictionary<string, object>>();
+
+                                List<string> columnNames = dbContext.Db.DbMaintenance.GetColumnInfosByTableName(t.Name, false).Select(x => x.DbColumnName).ToList();
+                                var a = t.GetProperties().FirstOrDefault(x => !columnNames.Contains(x.Name));
+
+                                List<PropertyInfo> propertyInfos = t.GetProperties().Where(x => columnNames.Contains(x.Name)).ToList();
+                                for (int j = 0; j < dicFile.Count; j++)
+                                {
+                                    Dictionary<string, object> keyValuePairs = new Dictionary<string, object>();
+                                    for (int i = 0; i < propertyInfos.Count; i++)
+                                    {
+                                        PropertyInfo propertyInfo = propertyInfos[i];
+                                        SugarColumn? sugarColumn = propertyInfo.GetCustomAttribute<SugarColumn>();
+                                        if (sugarColumn != null)
+                                        {
+                                            if (!sugarColumn.IsIgnore)
+                                            {
+                                                keyValuePairs.Add(propertyInfo.Name, dicFile[j][propertyInfo.Name]);
+                                            }
+                                        }
+                                    }
+                                    dic.Add(keyValuePairs);
+                                }
+
+                                if (dic.Count > 0)
+                                {
+                                    for (int i = 0; i < dic.Count; i++)
+                                    {
+                                        if (dic[i].ContainsKey("CreateDate"))
+                                            dic[i]["CreateDate"] = DateTime.Now;
+                                        else
+                                            dic[i].Add("CreateDate", DateTime.Now);
+                                    }
+                                    string str = $"SET IDENTITY_INSERT {t.Name} ON;";
+
+                                    str += dbContext.Db.Insertable(dic).AS(t.Name).ToSqlString();
+
+                                    str += ($"SET IDENTITY_INSERT {t.Name} OFF;");
+
+                                    dbContext.Db.Ado.ExecuteCommand(str);
+
+                                    ConsoleHelper.WriteSuccessLine($"Table [{t.Name}] SeedData Added Successfully");
+                                }
+                            }
+                        }
+                        #endregion
+                    }
+                    else
+                    {
+                        List<string> columnNames = dbContext.Db.DbMaintenance.GetColumnInfosByTableName(t.Name, false).Select(x => x.DbColumnName).ToList();
+                        if (t.GetProperties().FirstOrDefault(x => !columnNames.Contains(x.Name)) != null)
+                        {
+                            bool isChange = true;
+                            List<PropertyInfo> propertyInfos = t.GetProperties().Where(x => !columnNames.Contains(x.Name)).ToList();
+                            for (int i = 0; i < propertyInfos.Count; i++)
+                            {
+                                PropertyInfo propertyInfo = propertyInfos[i];
+                                SugarColumn? sugarColumn = propertyInfo.GetCustomAttribute<SugarColumn>();
+                                if (sugarColumn != null)
+                                {
+                                    if (!sugarColumn.IsIgnore)
+                                    {
+                                        if (!sugarColumn.IsNullable)
+                                        {
+                                            isChange = false;
+                                            break;
+                                        }
+                                    }
+                                }
+                            }
+                            if (isChange)
+                                dbContext.Db.CodeFirst.InitTables(t);
+                        }
+                    }
+                });
+                ConsoleHelper.WriteSuccessLine($"Tables Created Successfully!");
+                Console.WriteLine();
+
+
+            }
+            catch (Exception ex)
+            {
+                // 1銆佽嫢鏄疢ysql,鏌ョ湅甯歌闂:https://github.com/anjoy8/Blog.Core/issues/148#issue-776281770
+                //2銆佽嫢鏄疧racle,鏌ョ湅甯歌闂:https://github.com/anjoy8/Blog.Core/issues/148#issuecomment-752340231
+                throw new Exception("閿欒锛�" + ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鍒濆鍖� 澶氱鎴�
+        /// </summary>
+        /// <param name="dbContext"></param>
+        /// <returns></returns>
+        public static async Task TenantSeedAsync(DBContext dbContext)
+        {
+
+            if (BaseDBConfig.MutiConnectionString.Where(x => x.ConnId != MainDb.CurrentDbConnId).Any())
+            {
+                Console.WriteLine($@"Init Multi Tenant Db");
+                foreach (MutiDBOperate tenant in BaseDBConfig.MutiConnectionString.Where(x => x.ConnId != MainDb.CurrentDbConnId))
+                {
+
+                    Console.WriteLine($@"Init Multi Tenant Db : {tenant.ConnId}");
+                    ConnectionConfig connectionConfig = new ConnectionConfig()
+                    {
+                        ConfigId = tenant.ConnId,
+                        ConnectionString = tenant.Connection,
+                        IsAutoCloseConnection = true,
+                        MoreSettings = new ConnMoreSettings()
+                        {
+                            IsAutoRemoveDataCache = true
+                        },
+                        DbType = (DbType)tenant.DbType,
+                    };
+                    await InitTenantSeedAsync(dbContext.Db.AsTenant(), connectionConfig);
+                }
+
+                Console.WriteLine(DateTime.Now + $@"Init Multi Tenant Db Finish");
+            }
+
+            //tenants = await myContext.Db.Queryable<SysTenant>().Where(s => s.TenantType == TenantTypeEnum.Tables).ToListAsync();
+            //if (tenants.Any())
+            //{
+            //    await InitTenantSeedAsync(myContext, tenants);
+            //}
+        }
+
+        #region 澶氱鎴� 澶氬簱 鍒濆鍖�
+
+        /// <summary>
+        /// 鍒濆鍖栧搴�
+        /// </summary>
+        /// <param name="itenant"></param>
+        /// <param name="config"></param>
+        /// <returns></returns>
+        public static async Task InitTenantSeedAsync(ITenant itenant, ConnectionConfig config)
+        {
+            Console.WriteLine(DateTime.Now + $@"Init Multi Tenant Db");
+            //itenant.RemoveConnection(config.ConfigId);
+            itenant.AddConnection(config);
+
+            var db = itenant.GetConnectionScope(config.ConfigId);
+
+            db.DbMaintenance.CreateDatabase();
+            ConsoleHelper.WriteSuccessLine($"Init Multi Tenant Db : {config.ConfigId} Database created successfully!");
+
+            Console.WriteLine($@"Init Multi Tenant Db : {config.ConfigId}  Create Tables");
+
+            // 鑾峰彇鎵�鏈夊疄浣撹〃-鍒濆鍖栫鎴蜂笟鍔¤〃
+            var entityTypes = TenantUtil.GetTenantEntityTypes(TenantTypeEnum.Db);
+            if (!entityTypes.Any()) return;
+            foreach (var entityType in entityTypes)
+            {
+                //var splitTable = entityType.GetCustomAttribute<SplitTableAttribute>();
+                //if (splitTable == null)
+                db.CodeFirst.InitTables(entityType);
+                //else
+                //    db.CodeFirst.SplitTables().InitTables(entityType);
+
+                Console.WriteLine(entityType.Name);
+            }
+            Console.WriteLine(DateTime.Now + $@"Init Multi Tenant Db Finish");
+            //澶氱鎴峰垵濮嬪寲绉嶅瓙鏁版嵁
+            //await TenantSeedDataAsync(db, TenantTypeEnum.Db);
+        }
+
+        #endregion
+
+        //private static async Task TenantSeedDataAsync(ISqlSugarClient db, TenantTypeEnum tenantType)
+        //{
+        //    // 鑾峰彇鎵�鏈夌瀛愰厤缃�-鍒濆鍖栨暟鎹�
+        //    var seedDataTypes = AssemblysExtensions.GetAllAssemblies().SelectMany(s => s.DefinedTypes)
+        //        .Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass)
+        //        .Where(u =>
+        //        {
+        //            var esd = u.GetInterfaces().FirstOrDefault(i => i.HasImplementedRawGeneric(typeof(IEntitySeedData<>)));
+        //            if (esd is null)
+        //            {
+        //                return false;
+        //            }
+
+        //            var eType = esd.GenericTypeArguments[0];
+        //            return eType.IsTenantEntity(tenantType);
+        //        });
+        //    if (!seedDataTypes.Any()) return;
+        //    foreach (var seedType in seedDataTypes)
+        //    {
+        //        dynamic instance = Activator.CreateInstance(seedType);
+        //        //鍒濆鍖栨暟鎹�
+        //        {
+        //            var seedData = instance.InitSeedData();
+        //            if (seedData != null && Enumerable.Any(seedData))
+        //            {
+        //                var entityType = seedType.GetInterfaces().First().GetGenericArguments().First();
+        //                var entity = db.EntityMaintenance.GetEntityInfo(entityType);
+
+        //                if (!await db.Queryable(entity.DbTableName, "").AnyAsync())
+        //                {
+        //                    await db.Insertable(Enumerable.ToList(seedData)).ExecuteCommandAsync();
+        //                    Console.WriteLine($"Table:{entity.DbTableName} init success!");
+        //                }
+        //            }
+        //        }
+
+        //        //绉嶅瓙鏁版嵁
+        //        {
+        //            var seedData = instance.SeedData();
+        //            if (seedData != null && Enumerable.Any(seedData))
+        //            {
+        //                var entityType = seedType.GetInterfaces().First().GetGenericArguments().First();
+        //                var entity = db.EntityMaintenance.GetEntityInfo(entityType);
+
+        //                await db.Storageable(Enumerable.ToList(seedData)).ExecuteCommandAsync();
+        //                Console.WriteLine($"Table:{entity.DbTableName} seedData success!");
+        //            }
+        //        }
+
+        //        //鑷畾涔夊鐞�
+        //        {
+        //            await instance.CustomizeSeedData(db);
+        //        }
+        //    }
+        //}
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Seed/FrameSeed.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Seed/FrameSeed.cs"
new file mode 100644
index 0000000..4711bda
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Seed/FrameSeed.cs"
@@ -0,0 +1,582 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Seed
+{
+    public class FrameSeed
+    {
+
+        /// <summary>
+        /// 鐢熸垚Controller灞�
+        /// </summary>
+        /// <param name="sqlSugarClient">sqlsugar瀹炰緥</param>
+        /// <param name="ConnId">鏁版嵁搴撻摼鎺D</param>
+        /// <param name="tableNames">鏁版嵁搴撹〃鍚嶆暟缁勶紝榛樿绌猴紝鐢熸垚鎵�鏈夎〃</param>
+        /// <param name="isMuti"></param>
+        /// <returns></returns>
+        public static bool CreateControllers(SqlSugarScope sqlSugarClient, string ConnId = null, bool isMuti = false, string[] tableNames = null)
+        {
+            Create_Controller_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\Blog.Core.Api.Controllers", "Blog.Core.Api.Controllers", tableNames, "", isMuti);
+            return true;
+        }
+
+        /// <summary>
+        /// 鐢熸垚Model灞�
+        /// </summary>
+        /// <param name="sqlSugarClient">sqlsugar瀹炰緥</param>
+        /// <param name="ConnId">鏁版嵁搴撻摼鎺D</param>
+        /// <param name="tableNames">鏁版嵁搴撹〃鍚嶆暟缁勶紝榛樿绌猴紝鐢熸垚鎵�鏈夎〃</param>
+        /// <param name="isMuti"></param>
+        /// <returns></returns>
+        public static bool CreateModels(SqlSugarScope sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null)
+        {
+            Create_Model_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\Blog.Core.Model", "Blog.Core.Model.Models", tableNames, "", isMuti);
+            return true;
+        }
+
+        /// <summary>
+        /// 鐢熸垚IRepository灞�
+        /// </summary>
+        /// <param name="sqlSugarClient">sqlsugar瀹炰緥</param>
+        /// <param name="ConnId">鏁版嵁搴撻摼鎺D</param>
+        /// <param name="isMuti"></param>
+        /// <param name="tableNames">鏁版嵁搴撹〃鍚嶆暟缁勶紝榛樿绌猴紝鐢熸垚鎵�鏈夎〃</param>
+        /// <returns></returns>
+        public static bool CreateIRepositorys(SqlSugarScope sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null)
+        {
+            Create_IRepository_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\Blog.Core.IRepository", "Blog.Core.IRepository", tableNames, "", isMuti);
+            return true;
+        }
+
+
+
+        /// <summary>
+        /// 鐢熸垚 IService 灞�
+        /// </summary>
+        /// <param name="sqlSugarClient">sqlsugar瀹炰緥</param>
+        /// <param name="ConnId">鏁版嵁搴撻摼鎺D</param>
+        /// <param name="isMuti"></param>
+        /// <param name="tableNames">鏁版嵁搴撹〃鍚嶆暟缁勶紝榛樿绌猴紝鐢熸垚鎵�鏈夎〃</param>
+        /// <returns></returns>
+        public static bool CreateIServices(SqlSugarScope sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null)
+        {
+            Create_IServices_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\Blog.Core.IServices", "Blog.Core.IServices", tableNames, "", isMuti);
+            return true;
+        }
+
+
+
+        /// <summary>
+        /// 鐢熸垚 Repository 灞�
+        /// </summary>
+        /// <param name="sqlSugarClient">sqlsugar瀹炰緥</param>
+        /// <param name="ConnId">鏁版嵁搴撻摼鎺D</param>
+        /// <param name="isMuti"></param>
+        /// <param name="tableNames">鏁版嵁搴撹〃鍚嶆暟缁勶紝榛樿绌猴紝鐢熸垚鎵�鏈夎〃</param>
+        /// <returns></returns>
+        public static bool CreateRepository(SqlSugarScope sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null)
+        {
+            Create_Repository_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\Blog.Core.Repository", "Blog.Core.Repository", tableNames, "", isMuti);
+            return true;
+        }
+
+
+
+        /// <summary>
+        /// 鐢熸垚 Service 灞�
+        /// </summary>
+        /// <param name="sqlSugarClient">sqlsugar瀹炰緥</param>
+        /// <param name="ConnId">鏁版嵁搴撻摼鎺D</param>
+        /// <param name="isMuti"></param>
+        /// <param name="tableNames">鏁版嵁搴撹〃鍚嶆暟缁勶紝榛樿绌猴紝鐢熸垚鎵�鏈夎〃</param>
+        /// <returns></returns>
+        public static bool CreateServices(SqlSugarScope sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null)
+        {
+            Create_Services_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\Blog.Core.Services", "Blog.Core.Services", tableNames, "", isMuti);
+            return true;
+        }
+
+
+        #region 鏍规嵁鏁版嵁搴撹〃鐢熶骇Controller灞�
+
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鏍规嵁鏁版嵁搴撹〃鐢熶骇Controller灞�
+        /// 浣溿��銆�鑰�:Blog.Core
+        /// </summary>
+        /// <param name="sqlSugarClient"></param>
+        /// <param name="ConnId">鏁版嵁搴撻摼鎺D</param>
+        /// <param name="strPath">瀹炰綋绫诲瓨鏀捐矾寰�</param>
+        /// <param name="strNameSpace">鍛藉悕绌洪棿</param>
+        /// <param name="lstTableNames">鐢熶骇鎸囧畾鐨勮〃</param>
+        /// <param name="strInterface">瀹炵幇鎺ュ彛</param>
+        /// <param name="isMuti"></param>
+        /// <param name="blnSerializable">鏄惁搴忓垪鍖�</param>
+        private static void Create_Controller_ClassFileByDBTalbe(
+          SqlSugarScope sqlSugarClient,
+          string ConnId,
+          string strPath,
+          string strNameSpace,
+          string[] lstTableNames,
+          string strInterface,
+          bool isMuti = false,
+          bool blnSerializable = false)
+        {
+            var IDbFirst = sqlSugarClient.DbFirst;
+            if (lstTableNames != null && lstTableNames.Length > 0)
+            {
+                IDbFirst = IDbFirst.Where(lstTableNames);
+            }
+            var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
+
+                 .SettingClassTemplate(p => p =
+@"using Blog.Core.IServices;
+using Blog.Core.Model;
+using Blog.Core.Model.Models;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+
+namespace " + strNameSpace + @"
+{
+	[Route(""api/[controller]/[action]"")]
+	[ApiController]
+    [Authorize(Permissions.Name)]
+     public class {ClassName}Controller : ControllerBase
+    {
+            /// <summary>
+            /// 鏈嶅姟鍣ㄦ帴鍙o紝鍥犱负鏄ā鏉跨敓鎴愶紝鎵�浠ラ瀛楁瘝鏄ぇ鍐欑殑锛岃嚜宸卞彲浠ラ噸鏋勪笅
+            /// </summary>
+            private readonly I{ClassName}Services _{ClassName}Services;
+    
+            public {ClassName}Controller(I{ClassName}Services {ClassName}Services)
+            {
+                _{ClassName}Services = {ClassName}Services;
+            }
+    
+            [HttpGet]
+            public async Task<MessageModel<PageModel<{ClassName}>>> Get(int page = 1, string key = """",int intPageSize = 50)
+            {
+                if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
+                {
+                    key = """";
+                }
+    
+                Expression<Func<{ClassName}, bool>> whereExpression = a => true;
+    
+                return new MessageModel<PageModel<{ClassName}>>()
+                {
+                    msg = ""鑾峰彇鎴愬姛"",
+                    success = true,
+                    response = await _{ClassName}Services.QueryPage(whereExpression, page, intPageSize)
+                };
+
+            }
+
+            [HttpGet(""{id}"")]
+            public async Task<MessageModel<{ClassName}>> Get(string id)
+            {
+                return new MessageModel<{ClassName}>()
+                {
+                    msg = ""鑾峰彇鎴愬姛"",
+                    success = true,
+                    response = await _{ClassName}Services.QueryById(id)
+                };
+            }
+
+            [HttpPost]
+            public async Task<MessageModel<string>> Post([FromBody] {ClassName} request)
+            {
+                var data = new MessageModel<string>();
+
+                var id = await _{ClassName}Services.Add(request);
+                data.success = id > 0;
+                if (data.success)
+                {
+                    data.response = id.ObjToString();
+                    data.msg = ""娣诲姞鎴愬姛"";
+                } 
+
+                return data;
+            }
+
+            [HttpPut]
+            public async Task<MessageModel<string>> Put([FromBody] {ClassName} request)
+            {
+                var data = new MessageModel<string>();
+                data.success = await _{ClassName}Services.Update(request);
+                if (data.success)
+                {
+                    data.msg = ""鏇存柊鎴愬姛"";
+                    data.response = request?.id.ObjToString();
+                }
+
+                return data;
+            }
+
+            [HttpDelete]
+            public async Task<MessageModel<string>> Delete(int id)
+            {
+                var data = new MessageModel<string>();
+                var model = await _{ClassName}Services.QueryById(id);
+                model.IsDeleted = true;
+                data.success = await _departmentServices.Update(model);
+                if (data.success)
+                {
+                    data.msg = ""鍒犻櫎鎴愬姛"";
+                    data.response = model?.Id.ObjToString();
+                }
+
+                return data;
+            }
+    }
+}")
+
+                  .ToClassStringList(strNameSpace);
+
+            Dictionary<string, string> newdic = new Dictionary<string, string>();
+            //寰幆澶勭悊 棣栧瓧姣嶅皬鍐� 骞舵彃鍏ユ柊鐨� Dictionary
+            foreach (KeyValuePair<string, string> item in ls)
+            {
+                string newkey = "_" + item.Key.First().ToString().ToLower() + item.Key.Substring(1);
+                string newvalue = item.Value.Replace("_" + item.Key, newkey);
+                newdic.Add(item.Key, newvalue);
+            }
+            CreateFilesByClassStringList(newdic, strPath, "{0}Controller");
+        }
+        #endregion
+
+
+        #region 鏍规嵁鏁版嵁搴撹〃鐢熶骇Model灞�
+
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鏍规嵁鏁版嵁搴撹〃鐢熶骇Model灞�
+        /// 浣溿��銆�鑰�:Blog.Core
+        /// </summary>
+        /// <param name="sqlSugarClient"></param>
+        /// <param name="ConnId">鏁版嵁搴撻摼鎺D</param>
+        /// <param name="strPath">瀹炰綋绫诲瓨鏀捐矾寰�</param>
+        /// <param name="strNameSpace">鍛藉悕绌洪棿</param>
+        /// <param name="lstTableNames">鐢熶骇鎸囧畾鐨勮〃</param>
+        /// <param name="strInterface">瀹炵幇鎺ュ彛</param>
+        /// <param name="isMuti"></param>
+        /// <param name="blnSerializable">鏄惁搴忓垪鍖�</param>
+        private static void Create_Model_ClassFileByDBTalbe(
+          SqlSugarScope sqlSugarClient,
+          string ConnId,
+          string strPath,
+          string strNameSpace,
+          string[] lstTableNames,
+          string strInterface,
+          bool isMuti = false,
+          bool blnSerializable = false)
+        {
+            //澶氬簱鏂囦欢鍒嗙
+            if (isMuti)
+            {
+                strPath = strPath + @"\Models\" + ConnId;
+                strNameSpace = strNameSpace + "." + ConnId;
+            }
+
+            var IDbFirst = sqlSugarClient.DbFirst;
+            if (lstTableNames != null && lstTableNames.Length > 0)
+            {
+                IDbFirst = IDbFirst.Where(lstTableNames);
+            }
+            var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
+
+                  .SettingClassTemplate(p => p =
+@"{using}
+
+namespace " + strNameSpace + @"
+{
+{ClassDescription}
+    [SugarTable( ""{ClassName}"", """ + ConnId + @""")]" + (blnSerializable ? "\n    [Serializable]" : "") + @"
+    public class {ClassName}" + (string.IsNullOrEmpty(strInterface) ? "" : (" : " + strInterface)) + @"
+    {
+           public {ClassName}()
+           {
+           }
+{PropertyName}
+    }
+}")
+                  //.SettingPropertyDescriptionTemplate(p => p = string.Empty)
+                  .SettingPropertyTemplate(p => p =
+@"{SugarColumn}
+           public {PropertyType} {PropertyName} { get; set; }")
+
+                   //.SettingConstructorTemplate(p => p = "              this._{PropertyName} ={DefaultValue};")
+
+                   .ToClassStringList(strNameSpace);
+            CreateFilesByClassStringList(ls, strPath, "{0}");
+        }
+        #endregion
+
+
+        #region 鏍规嵁鏁版嵁搴撹〃鐢熶骇IRepository灞�
+
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鏍规嵁鏁版嵁搴撹〃鐢熶骇IRepository灞�
+        /// 浣溿��銆�鑰�:Blog.Core
+        /// </summary>
+        /// <param name="sqlSugarClient"></param>
+        /// <param name="ConnId">鏁版嵁搴撻摼鎺D</param>
+        /// <param name="strPath">瀹炰綋绫诲瓨鏀捐矾寰�</param>
+        /// <param name="strNameSpace">鍛藉悕绌洪棿</param>
+        /// <param name="lstTableNames">鐢熶骇鎸囧畾鐨勮〃</param>
+        /// <param name="strInterface">瀹炵幇鎺ュ彛</param>
+        /// <param name="isMuti"></param>
+        private static void Create_IRepository_ClassFileByDBTalbe(
+          SqlSugarScope sqlSugarClient,
+          string ConnId,
+          string strPath,
+          string strNameSpace,
+          string[] lstTableNames,
+          string strInterface,
+          bool isMuti = false
+            )
+        {
+            //澶氬簱鏂囦欢鍒嗙
+            if (isMuti)
+            {
+                strPath = strPath + @"\" + ConnId;
+                strNameSpace = strNameSpace + "." + ConnId;
+            }
+
+            var IDbFirst = sqlSugarClient.DbFirst;
+            if (lstTableNames != null && lstTableNames.Length > 0)
+            {
+                IDbFirst = IDbFirst.Where(lstTableNames);
+            }
+            var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
+
+                 .SettingClassTemplate(p => p =
+@"using Blog.Core.IRepository.Base;
+using Blog.Core.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @";
+
+namespace " + strNameSpace + @"
+{
+	/// <summary>
+	/// I{ClassName}Repository
+	/// </summary>	
+    public interface I{ClassName}Repository : IBaseRepository<{ClassName}>" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @"
+    {
+    }
+}")
+
+                  .ToClassStringList(strNameSpace);
+            CreateFilesByClassStringList(ls, strPath, "I{0}Repository");
+        }
+        #endregion
+
+
+        #region 鏍规嵁鏁版嵁搴撹〃鐢熶骇IServices灞�
+
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鏍规嵁鏁版嵁搴撹〃鐢熶骇IServices灞�
+        /// 浣溿��銆�鑰�:Blog.Core
+        /// </summary>
+        /// <param name="sqlSugarClient"></param>
+        /// <param name="ConnId">鏁版嵁搴撻摼鎺D</param>
+        /// <param name="strPath">瀹炰綋绫诲瓨鏀捐矾寰�</param>
+        /// <param name="strNameSpace">鍛藉悕绌洪棿</param>
+        /// <param name="lstTableNames">鐢熶骇鎸囧畾鐨勮〃</param>
+        /// <param name="strInterface">瀹炵幇鎺ュ彛</param>
+        /// <param name="isMuti"></param>
+        private static void Create_IServices_ClassFileByDBTalbe(
+          SqlSugarScope sqlSugarClient,
+          string ConnId,
+          string strPath,
+          string strNameSpace,
+          string[] lstTableNames,
+          string strInterface,
+          bool isMuti = false)
+        {
+            //澶氬簱鏂囦欢鍒嗙
+            if (isMuti)
+            {
+                strPath = strPath + @"\" + ConnId;
+                strNameSpace = strNameSpace + "." + ConnId;
+            }
+
+            var IDbFirst = sqlSugarClient.DbFirst;
+            if (lstTableNames != null && lstTableNames.Length > 0)
+            {
+                IDbFirst = IDbFirst.Where(lstTableNames);
+            }
+            var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
+
+                  .SettingClassTemplate(p => p =
+@"using Blog.Core.IServices.BASE;
+using Blog.Core.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @";
+
+namespace " + strNameSpace + @"
+{	
+	/// <summary>
+	/// I{ClassName}Services
+	/// </summary>	
+    public interface I{ClassName}Services :IBaseServices<{ClassName}>" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @"
+	{
+    }
+}")
+
+                   .ToClassStringList(strNameSpace);
+            CreateFilesByClassStringList(ls, strPath, "I{0}Services");
+        }
+        #endregion
+
+
+
+        #region 鏍规嵁鏁版嵁搴撹〃鐢熶骇 Repository 灞�
+
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鏍规嵁鏁版嵁搴撹〃鐢熶骇 Repository 灞�
+        /// 浣溿��銆�鑰�:Blog.Core
+        /// </summary>
+        /// <param name="sqlSugarClient"></param>
+        /// <param name="ConnId">鏁版嵁搴撻摼鎺D</param>
+        /// <param name="strPath">瀹炰綋绫诲瓨鏀捐矾寰�</param>
+        /// <param name="strNameSpace">鍛藉悕绌洪棿</param>
+        /// <param name="lstTableNames">鐢熶骇鎸囧畾鐨勮〃</param>
+        /// <param name="strInterface">瀹炵幇鎺ュ彛</param>
+        /// <param name="isMuti"></param>
+        private static void Create_Repository_ClassFileByDBTalbe(
+          SqlSugarScope sqlSugarClient,
+          string ConnId,
+          string strPath,
+          string strNameSpace,
+          string[] lstTableNames,
+          string strInterface,
+          bool isMuti = false)
+        {
+            //澶氬簱鏂囦欢鍒嗙
+            if (isMuti)
+            {
+                strPath = strPath + @"\" + ConnId;
+                strNameSpace = strNameSpace + "." + ConnId;
+            }
+
+            var IDbFirst = sqlSugarClient.DbFirst;
+            if (lstTableNames != null && lstTableNames.Length > 0)
+            {
+                IDbFirst = IDbFirst.Where(lstTableNames);
+            }
+            var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
+
+                  .SettingClassTemplate(p => p =
+@"using Blog.Core.IRepository" + (isMuti ? "." + ConnId + "" : "") + @";
+using Blog.Core.IRepository.UnitOfWork;
+using Blog.Core.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @";
+using Blog.Core.Repository.Base;
+
+namespace " + strNameSpace + @"
+{
+	/// <summary>
+	/// {ClassName}Repository
+	/// </summary>
+    public class {ClassName}Repository : BaseRepository<{ClassName}>, I{ClassName}Repository" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @"
+    {
+        public {ClassName}Repository(IUnitOfWork unitOfWork) : base(unitOfWork)
+        {
+        }
+    }
+}")
+                  .ToClassStringList(strNameSpace);
+
+
+            CreateFilesByClassStringList(ls, strPath, "{0}Repository");
+        }
+        #endregion
+
+
+        #region 鏍规嵁鏁版嵁搴撹〃鐢熶骇 Services 灞�
+
+        /// <summary>
+        /// 鍔熻兘鎻忚堪:鏍规嵁鏁版嵁搴撹〃鐢熶骇 Services 灞�
+        /// 浣溿��銆�鑰�:Blog.Core
+        /// </summary>
+        /// <param name="sqlSugarClient"></param>
+        /// <param name="ConnId">鏁版嵁搴撻摼鎺D</param>
+        /// <param name="strPath">瀹炰綋绫诲瓨鏀捐矾寰�</param>
+        /// <param name="strNameSpace">鍛藉悕绌洪棿</param>
+        /// <param name="lstTableNames">鐢熶骇鎸囧畾鐨勮〃</param>
+        /// <param name="strInterface">瀹炵幇鎺ュ彛</param>
+        /// <param name="isMuti"></param>
+        private static void Create_Services_ClassFileByDBTalbe(
+          SqlSugarScope sqlSugarClient,
+          string ConnId,
+          string strPath,
+          string strNameSpace,
+          string[] lstTableNames,
+          string strInterface,
+          bool isMuti = false)
+        {
+            //澶氬簱鏂囦欢鍒嗙
+            if (isMuti)
+            {
+                strPath = strPath + @"\" + ConnId;
+                strNameSpace = strNameSpace + "." + ConnId;
+            }
+
+            var IDbFirst = sqlSugarClient.DbFirst;
+            if (lstTableNames != null && lstTableNames.Length > 0)
+            {
+                IDbFirst = IDbFirst.Where(lstTableNames);
+            }
+            var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
+
+                  .SettingClassTemplate(p => p =
+@"
+using Blog.Core.IServices" + (isMuti ? "." + ConnId + "" : "") + @";
+using Blog.Core.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @";
+using Blog.Core.Services.BASE;
+using Blog.Core.IRepository.Base;
+
+namespace " + strNameSpace + @"
+{
+    public class {ClassName}Services : BaseServices<{ClassName}>, I{ClassName}Services" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @"
+    {
+        private readonly IBaseRepository<{ClassName}> _dal;
+        public {ClassName}Services(IBaseRepository<{ClassName}> dal)
+        {
+            this._dal = dal;
+            base.BaseDal = dal;
+        }
+    }
+}")
+                  .ToClassStringList(strNameSpace);
+
+            CreateFilesByClassStringList(ls, strPath, "{0}Services");
+        }
+        #endregion
+
+
+        #region 鏍规嵁妯℃澘鍐呭鎵归噺鐢熸垚鏂囦欢
+        /// <summary>
+        /// 鏍规嵁妯℃澘鍐呭鎵归噺鐢熸垚鏂囦欢
+        /// </summary>
+        /// <param name="ls">绫绘枃浠跺瓧绗︿覆list</param>
+        /// <param name="strPath">鐢熸垚璺緞</param>
+        /// <param name="fileNameTp">鏂囦欢鍚嶆牸寮忔ā鏉�</param>
+        private static void CreateFilesByClassStringList(Dictionary<string, string> ls, string strPath, string fileNameTp)
+        {
+
+            foreach (var item in ls)
+            {
+                var fileName = $"{string.Format(fileNameTp, item.Key)}.cs";
+                var fileFullPath = Path.Combine(strPath, fileName);
+                if (!Directory.Exists(strPath))
+                {
+                    Directory.CreateDirectory(strPath);
+                }
+                File.WriteAllText(fileFullPath, item.Value, Encoding.UTF8);
+            }
+        }
+        #endregion
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Tenants/ITenantEntity.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Tenants/ITenantEntity.cs"
new file mode 100644
index 0000000..ca499c4
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Tenants/ITenantEntity.cs"
@@ -0,0 +1,21 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Tenants
+{
+    /// <summary>
+    /// 绉熸埛妯″瀷鎺ュ彛
+    /// </summary>
+    public interface ITenantEntity
+    {
+        /// <summary>
+        /// 绉熸埛Id
+        /// </summary>
+        [SugarColumn(DefaultValue = "0")]
+        public long TenantId { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Tenants/MultiTenantAttribute.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Tenants/MultiTenantAttribute.cs"
new file mode 100644
index 0000000..a0927c3
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Tenants/MultiTenantAttribute.cs"
@@ -0,0 +1,56 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Tenants
+{
+    /// <summary>
+    /// 鏍囪瘑 澶氱鎴� 鐨勪笟鍔¤〃 <br/>
+    /// 榛樿璁剧疆鏄搴�       <br/>
+    /// 鍏叡琛ㄦ棤闇�鍖哄垎 鐩存帴浣跨敤涓诲簱 鍚勮嚜涓氬姟鍦ㄥ悇鑷簱涓� <br/>
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Class)]
+    public class MultiTenantAttribute : Attribute
+    {
+        public MultiTenantAttribute()
+        {
+        }
+
+        public MultiTenantAttribute(TenantTypeEnum tenantType)
+        {
+            TenantType = tenantType;
+        }
+
+
+        public TenantTypeEnum TenantType { get; set; } = TenantTypeEnum.Db;
+    }
+
+    /// <summary>
+    /// 绉熸埛闅旂鏂规
+    /// </summary>
+    public enum TenantTypeEnum
+    {
+        None = 0,
+
+        /// <summary>
+        /// Id闅旂
+        /// </summary>
+        [Description("Id闅旂")]
+        Id = 1,
+
+        /// <summary>
+        /// 搴撻殧绂�
+        /// </summary>
+        [Description("搴撻殧绂�")]
+        Db = 2,
+
+        /// <summary>
+        /// 琛ㄩ殧绂�
+        /// </summary>
+        [Description("琛ㄩ殧绂�")]
+        Tables = 3,
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Tenants/TenantUtil.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Tenants/TenantUtil.cs"
new file mode 100644
index 0000000..a0a9755
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Tenants/TenantUtil.cs"
@@ -0,0 +1,127 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB;
+
+namespace WIDESEA_Core.Tenants
+{
+    public static class TenantUtil
+    {
+        //public static SysTenant DefaultTenantConfig(this SysTenant tenant)
+        //{
+        //    tenant.DbType ??= DbType.Sqlite;
+
+        //    //濡傛灉娌℃湁閰嶇疆杩炴帴
+        //    if (tenant.Connection.IsNullOrEmpty())
+        //    {
+        //        //姝ゅ榛樿閰嶇疆 Sqlite 鍦板潃
+        //        //瀹為檯涓氬姟涓� 涔熶細鏈夎繍缁淬�佺郴缁熺鐞嗗憳绛夋潵缁存姢
+        //        switch (tenant.DbType.Value)
+        //        {
+        //            case DbType.Sqlite:
+        //                tenant.Connection = $"DataSource={Path.Combine(Environment.CurrentDirectory, tenant.ConfigId)}.db";
+        //                break;
+        //        }
+        //    }
+
+        //    return tenant;
+        //}
+
+        //public static ConnectionConfig GetConnectionConfig(this SysTenant tenant)
+        //{
+        //    if (tenant.DbType is null)
+        //    {
+        //        throw new ArgumentException("Tenant DbType Must");
+        //    }
+
+
+        //    return new ConnectionConfig()
+        //    {
+        //        ConfigId = tenant.ConfigId,
+        //        DbType = tenant.DbType.Value,
+        //        ConnectionString = tenant.Connection,
+        //        IsAutoCloseConnection = true,
+        //        MoreSettings = new ConnMoreSettings()
+        //        {
+        //            IsAutoRemoveDataCache = true
+        //        },
+        //    };
+        //}
+
+        public static List<Type> GetTenantEntityTypes(TenantTypeEnum? tenantType = null)
+        {
+            List<Type> types = RepositorySetting.Entitys.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass).ToList();
+
+            List<Type> returnTypes = types.Where(s => IsTenantEntity(s, tenantType)).ToList();
+            return returnTypes;
+        }
+
+        public static bool IsTenantEntity(this Type u, TenantTypeEnum? tenantType = null)
+        {
+            var mta = u.GetCustomAttribute<MultiTenantAttribute>();
+            if (mta is null)
+            {
+                return false;
+            }
+
+            if (tenantType != null)
+            {
+                if (mta.TenantType != tenantType)
+                {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        public static string GetTenantTableName(this Type type, ISqlSugarClient db, string id)
+        {
+            var entityInfo = db.EntityMaintenance.GetEntityInfo(type);
+            return $@"{entityInfo.DbTableName}_{id}";
+        }
+
+        //public static string GetTenantTableName(this Type type, ISqlSugarClient db, SysTenant tenant)
+        //{
+        //    return GetTenantTableName(type, db, tenant.Id.ToString());
+        //}
+
+        public static void SetTenantTable(this ISqlSugarClient db, string id)
+        {
+            var types = GetTenantEntityTypes(TenantTypeEnum.Tables);
+
+            foreach (var type in types)
+            {
+                db.MappingTables.Add(type.Name, type.GetTenantTableName(db, id));
+            }
+        }
+
+        public static List<SelectModel> GetTenantSelectModels()
+        {
+            List<SelectModel> selectModels = new List<SelectModel>()
+            {
+                new SelectModel
+                {
+                    FieldName = MainDb.TenantId
+                },
+                //new SelectModel
+                //{
+                //    FieldName = MainDb.TenantName
+                //},
+                new SelectModel
+                {
+                    FieldName = MainDb.ConnectionString,
+                },
+                new SelectModel
+                {
+                    FieldName = MainDb.TenantDbType
+                }
+            };
+            return selectModels;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs"
new file mode 100644
index 0000000..a57e31b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs"
@@ -0,0 +1,367 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Utilities
+{
+    public static class EntityProperties
+    {
+        /// <summary>
+        /// 楠岃瘉鏁版嵁搴撳瓧娈电被鍨嬩笌鍊兼槸鍚︽纭紝
+        /// </summary>
+        /// <param name="value">鍊�</param>
+        /// <param name="propertyInfo">瑕侀獙璇佺殑绫荤殑灞炴�э紝鑻ヤ笉涓簄ull锛屽垯浼氬垽鏂瓧绗︿覆鐨勯暱搴︽槸鍚︽纭�</param>
+        /// <returns>(bool, string, object)bool鎴愬惁鏍¢獙鎴愬姛,string鏍¢獙澶辫触淇℃伅,object,褰撳墠鏍¢獙鐨勫��</returns>
+        public static (bool, string, object) ValidationVal(this PropertyInfo propertyInfo, object value)
+        {
+            string dbType = "";
+            SugarColumn sugarColumn = null;
+            if (propertyInfo != null)
+            {
+                sugarColumn = propertyInfo.GetCustomAttribute<SugarColumn>();
+                dbType = propertyInfo.PropertyType != null ? propertyInfo.GetProperWithDbType() : SqlDbTypeName.NVarChar;
+            }
+            dbType = dbType.ToLower();
+            string val = value?.ToString();
+            //楠岃瘉闀垮害
+            string reslutMsg = string.Empty;
+            if (dbType == SqlDbTypeName.Int)
+            {
+                if (!value.IsInt())
+                    reslutMsg = "鍙兘涓烘湁鏁堟暣鏁�";
+            }  //2021.10.12澧炲姞灞炴�ф牎楠宭ong绫诲瀷鐨勬敮鎸�
+            else if (dbType == SqlDbTypeName.BigInt)
+            {
+                if (!long.TryParse(val, out _))
+                {
+                    reslutMsg = "鍙兘涓烘湁鏁堟暣鏁�";
+                }
+            }
+            else if (dbType == SqlDbTypeName.DateTime
+                || dbType == SqlDbTypeName.Date
+                || dbType == SqlDbTypeName.SmallDateTime
+                || dbType == SqlDbTypeName.SmallDate
+                )
+            {
+                if (!value.IsDate())
+                    reslutMsg = "蹇呴』涓烘棩鏈熸牸寮�";
+            }
+            else if (dbType == SqlDbTypeName.Float || dbType == SqlDbTypeName.Decimal || dbType == SqlDbTypeName.Double)
+            {
+
+                if (!val.IsNumber(null))
+                {
+                    reslutMsg = "涓嶆槸鏈夋晥鏁板瓧";
+                }
+            }
+            else if (dbType == SqlDbTypeName.UniqueIdentifier)
+            {
+                if (!val.IsGuid())
+                {
+                    reslutMsg = propertyInfo.Name + "Guid涓嶆纭�";
+                }
+            }
+            else if (propertyInfo != null
+                && (dbType == SqlDbTypeName.VarChar
+                || dbType == SqlDbTypeName.NVarChar
+                || dbType == SqlDbTypeName.NChar
+                || dbType == SqlDbTypeName.Char
+                || dbType == SqlDbTypeName.Text))
+            {
+
+                //榛樿nvarchar(max) 銆乼ext 闀垮害涓嶈兘瓒呰繃20000
+                if (val.Length > 200000)
+                {
+                    reslutMsg = $"瀛楃闀垮害鏈�澶氥��200000銆�";
+                }
+                else
+                {
+
+                    int length = sugarColumn.Length;
+                    if (length == 0) { return (true, null, value); }
+                    //鍒ゆ柇鍙屽瓧鑺備笌鍗曞瓧娈�
+                    else if (length < 8000 &&
+                        ((dbType.Substring(0, 1) != "n"
+                        && Encoding.UTF8.GetBytes(val.ToCharArray()).Length > length)
+                         || val.Length > length)
+                         )
+                    {
+                        reslutMsg = $"鏈�澶氬彧鑳姐�恵length}銆戜釜瀛楃銆�";
+                    }
+                }
+            }
+            if (!string.IsNullOrEmpty(reslutMsg) && propertyInfo != null)
+            {
+                reslutMsg = sugarColumn.ColumnDescription + reslutMsg;
+            }
+            return (reslutMsg == "" ? true : false, reslutMsg, value);
+        }
+
+        public static List<(bool, string, object)> ValidationValueForDbType(this PropertyInfo propertyInfo, params object[] values)
+        {
+            List<(bool, string, object)> result = new List<(bool, string, object)>();
+            foreach (object value in values)
+            {
+                result.Add(propertyInfo.ValidationVal(value));
+            }
+            return result;
+        }
+
+        private static readonly Dictionary<Type, string> ProperWithDbType = new Dictionary<Type, string>() {
+            {  typeof(string),SqlDbTypeName.NVarChar },
+            { typeof(DateTime),SqlDbTypeName.DateTime},
+            {typeof(long),SqlDbTypeName.BigInt },
+            {typeof(int),SqlDbTypeName.Int},
+            { typeof(decimal),SqlDbTypeName.Decimal },
+            { typeof(float),SqlDbTypeName.Float },
+            { typeof(double),SqlDbTypeName.Double },
+            {  typeof(byte),SqlDbTypeName.Int },//绫诲瀷寰呭畬
+            { typeof(Guid),SqlDbTypeName.UniqueIdentifier}
+        };
+
+        public static string GetProperWithDbType(this PropertyInfo propertyInfo)
+        {
+            bool result = ProperWithDbType.TryGetValue(propertyInfo.PropertyType, out string value);
+            if (result)
+            {
+                return value;
+            }
+            return SqlDbTypeName.NVarChar;
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇hash鐨勫垪鏄惁涓哄搴旂殑瀹炰綋锛屽苟涓斿�兼槸鍚︽湁鏁�
+        /// </summary>
+        /// <param name="typeinfo"></param>
+        /// <param name="dic"></param>
+        /// <param name="removeNotContains">绉婚櫎涓嶅瓨鍦ㄥ瓧娈�</param>
+        /// <param name="removerKey">绉婚櫎涓婚敭</param>
+        /// <returns></returns>
+        public static string ValidateDicInEntity(this Type typeinfo, Dictionary<string, object> dic, bool removerKey, PropertyInfo[] propertyInfo, string[]? ignoreFields = null)
+        {
+            if (dic == null || dic.Count == 0) { return "鍙傛暟鏃犳晥"; }
+
+            // 涓嶅瓨鍦ㄧ殑瀛楁鐩存帴绉婚櫎
+            dic.Where(x => !propertyInfo.Any(p => p.Name == x.Key.FirstLetterToUpper())).Select(s => s.Key).ToList().ForEach(f =>
+            {
+                dic.Remove(f);
+            });
+
+            string keyName = typeinfo.GetKeyName();
+            //绉婚櫎涓婚敭
+            if (removerKey)
+                dic.Remove(keyName);
+            //else
+            //{
+            //    if (!dic.ContainsKey(keyName))
+            //        return "璇蜂紶鍏ヤ富閿弬鏁�";
+            //}
+
+            foreach (PropertyInfo property in propertyInfo)
+            {
+                SugarColumn? sugarColumn = property.GetCustomAttribute<SugarColumn>();
+                if (sugarColumn == null)
+                {
+                    Navigate? navigate = property.GetCustomAttribute<Navigate>();
+                    if(navigate != null)
+                    {
+                        continue;
+                    }
+                    return "璇烽厤缃甋ugarColumn灞炴��";
+                }
+                    
+                //蹇界暐涓庝富閿殑瀛楁涓嶅仛楠岃瘉
+                if (property.Name == keyName.FirstLetterToUpper() || (ignoreFields != null && ignoreFields.Contains(property.Name)) || sugarColumn.IsOnlyIgnoreInsert || sugarColumn.IsOnlyIgnoreUpdate || sugarColumn.IsIgnore)
+                    continue;
+
+                //涓嶅湪缂栬緫涓殑鍒楋紝鏄惁涔熻蹇呭~
+                if (!dic.ContainsKey(property.Name.FirstLetterToLower()))
+                {
+                    if (!sugarColumn.IsNullable)
+                    {
+                        if (sugarColumn.DefaultValue == null)
+                            return sugarColumn.ColumnDescription + "涓哄繀椤绘彁浜ら」";
+                        continue;
+                    }
+                    continue;
+                }
+                if(dic[property.Name.FirstLetterToLower()] != null)
+                {
+                    string str = dic[property.Name.FirstLetterToLower()].ToString();
+                    //灏嗘墍鏈夌┖鍊艰缃负null
+                    if (str == string.Empty)
+                        dic[property.Name.FirstLetterToLower()] = null;
+                }
+                
+            }
+            return string.Empty;
+        }
+
+        public static string ValidateDicInEntity(this Type typeinfo, List<Dictionary<string, object>> dicList, bool removerKey, string[] ignoreFields = null)
+        {
+            PropertyInfo[] propertyInfo = typeinfo.GetProperties();
+            string reslutMsg = string.Empty;
+            foreach (Dictionary<string, object> dic in dicList)
+            {
+                reslutMsg = typeinfo.ValidateDicInEntity(dic, removerKey, propertyInfo, ignoreFields);
+                if (!string.IsNullOrEmpty(reslutMsg))
+                    return reslutMsg;
+            }
+            return reslutMsg;
+        }
+
+        public static string GetKeyName(this Type typeinfo)
+        {
+            return typeinfo.GetProperties().GetKeyName();
+        }
+
+        public static string GetKeyName(this PropertyInfo[] properties)
+        {
+            foreach (PropertyInfo property in properties)
+            {
+                SugarColumn? sugarColumn = property.GetCustomAttribute<SugarColumn>();
+                if (sugarColumn != null)
+                {
+                    if (sugarColumn.IsPrimaryKey)
+                        return property.Name;
+                }
+            }
+            return null;
+        }
+
+        public static PropertyInfo GetKeyProperty(this Type typeinfo)
+        {
+            PropertyInfo[] properties = typeinfo.GetProperties();
+            foreach (PropertyInfo property in properties)
+            {
+                SugarColumn sugarColumn = property.GetCustomAttribute<SugarColumn>();
+                if (sugarColumn?.IsPrimaryKey ?? false)
+                {
+                    return property;
+                }
+            }
+            return null;
+        }
+
+        public static Type GetDetailType(this Type typeinfo)
+        {
+            PropertyInfo[] properties = typeinfo.GetProperties();
+            foreach (PropertyInfo property in properties)
+            {
+                Navigate? navigate = property.GetCustomAttribute<Navigate>();
+                if (navigate is not null)
+                {
+                    if (navigate.GetNavigateType() == NavigateType.OneToOne)
+                        return property.PropertyType;
+                    else
+                        return property.PropertyType.GenericTypeArguments[0];
+                }
+            }
+            return null;
+        }
+
+        public static string GetMainIdByDetail(this Type typeinfo)
+        {
+            PropertyInfo[] properties = typeinfo.GetProperties();
+            foreach (PropertyInfo property in properties)
+            {
+                Navigate? navigate = property.GetCustomAttribute<Navigate>();
+                if (navigate is not null)
+                {
+                    return navigate.GetName();
+                }
+            }
+            return null;
+        }
+
+        public static void SetDetailId<T>(this Type typeinfo, T enetiy, object id, string name)
+        {
+            PropertyInfo property = typeinfo.GetProperty(name);
+            if (property != null)
+            {
+                property.SetValue(enetiy, id);
+            }
+        }
+
+        public static PropertyInfo? GetNavigatePro(this Type typeinfo)
+        {
+            PropertyInfo[] properties = typeinfo.GetProperties();
+            foreach (PropertyInfo property in properties)
+            {
+                Navigate? navigate = property.GetCustomAttribute<Navigate>();
+                if (navigate is not null)
+                {
+                    return property;
+                }
+            }
+            return null;
+        }
+
+        public static object GetPropertyValue<T>(this Type typeinfo, T data, string propertyName)
+        {
+            if (typeinfo != typeof(T))
+                return null;
+
+            PropertyInfo? property = typeinfo.GetProperty(propertyName);
+            if (property != null)
+            {
+                return property.GetValue(data);
+            }
+            return null;
+        }
+
+        public static void ValidatePageOptions<TEntity>(PageDataOptions options, ref ISugarQueryable<TEntity> sugarQueryable)
+        {
+            string where = string.Empty;
+            PropertyInfo[] entityProperties = typeof(TEntity).GetProperties();
+            List<SearchParameters> searchParametersList = new List<SearchParameters>();
+            if (options.Filter != null && options.Filter.Count > 0)
+            {
+                searchParametersList.AddRange(options.Filter);
+            }
+            else if (!string.IsNullOrEmpty(options.Wheres))
+            {
+                try
+                {
+                    searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
+                    options.Filter = searchParametersList;
+                }
+                catch { }
+            }
+            for (int i = 0; i < searchParametersList.Count; i++)
+            {
+                if (string.IsNullOrEmpty(searchParametersList[i].Value))
+                {
+                    continue;
+                }
+
+                PropertyInfo? property = entityProperties.Where(c => c.Name.ToUpper() == searchParametersList[i].Name.ToUpper()).FirstOrDefault();
+
+                if (property == null) continue;
+
+                List<(bool, string, object)> results = property.ValidationValueForDbType(searchParametersList[i].Value.Split(',')).ToList();
+                if (results == null || results.Count() == 0)
+                {
+                    continue;
+                }
+                for (int j = 0; j < results.Count(); j++)
+                {
+                    LinqExpressionType expressionType = searchParametersList[i].DisplayType.GetLinqCondition();
+                    Expression<Func<TEntity, bool>> expression = property.GetWhereExpression<TEntity>(results[j].Item3, null, expressionType);
+                    sugarQueryable = sugarQueryable.Where(expression);
+                }
+            }
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/LambdaExtensions.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/LambdaExtensions.cs"
new file mode 100644
index 0000000..a8e0099
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/LambdaExtensions.cs"
@@ -0,0 +1,248 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Utilities
+{
+    public static class LambdaExtensions
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="propertyName">瀛楁鍚�</param>
+        /// <param name="propertyValue">琛ㄨ揪寮忕殑鍊�</param>
+        /// <param name="expressionType">鍒涘缓琛ㄨ揪寮忕殑绫诲瀷,濡�:p=>p.propertyName != propertyValue 
+        /// p=>p.propertyName.Contains(propertyValue)</param>
+        /// <returns></returns>
+        public static Expression<Func<T, bool>> CreateExpression<T>(this string propertyName, object propertyValue, LinqExpressionType expressionType)
+        {
+            return propertyName.CreateExpression<T>(propertyValue, null, expressionType);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="propertyName">瀛楁鍚�</param>
+        /// <param name="propertyValue">琛ㄨ揪寮忕殑鍊�</param>
+        /// <param name="expressionType">鍒涘缓琛ㄨ揪寮忕殑绫诲瀷,濡�:p=>p.propertyName != propertyValue 
+        /// p=>p.propertyName.Contains(propertyValue)</param>
+        /// <returns></returns>
+        private static Expression<Func<T, bool>> CreateExpression<T>(
+          this string propertyName,
+          object propertyValue,
+          ParameterExpression parameter,
+          LinqExpressionType expressionType)
+        {
+            Type proType = null;
+            PropertyInfo propertyInfo = typeof(T).GetProperty(propertyName);
+            if (propertyInfo != null)
+                proType = propertyInfo.PropertyType;
+            else
+            {
+                propertyInfo = typeof(T).GetProperty(propertyName.FirstLetterToLower());
+                if (propertyInfo != null)
+                    proType = propertyInfo.PropertyType;
+                else
+                {
+                    propertyInfo = typeof(T).GetProperty(propertyName.FirstLetterToUpper());
+                    if (propertyInfo != null)
+                        proType = propertyInfo.PropertyType;
+                    else
+                    {
+                        throw new Exception($"鏈壘鍒拌灞炴��,type:{typeof(T)}");
+                    }
+                }
+            }
+            //鍒涘缓鑺傜偣鍙橀噺濡俻=>鐨勮妭鐐筽
+            //  parameter ??= Expression.Parameter(typeof(T), "p");//鍒涘缓鍙傛暟p
+            parameter = parameter ?? Expression.Parameter(typeof(T), "p");
+
+            //鍒涘缓鑺傜偣鐨勫睘鎬=>p.name 灞炴�ame
+            MemberExpression memberProperty = Expression.PropertyOrField(parameter, propertyName);
+            if (expressionType == LinqExpressionType.In)
+            {
+                if (!(propertyValue is System.Collections.IList list) || list.Count == 0) throw new Exception("灞炴�у�肩被鍨嬩笉姝g‘");
+
+                bool isStringValue = true;
+                List<object> objList = new List<object>();
+
+                if (proType.ToString() != "System.String")
+                {
+                    isStringValue = false;
+                    foreach (var value in list)
+                    {
+                        objList.Add(value.ToString().ChangeType(proType));
+                    }
+                    list = objList;
+                }
+
+                if (isStringValue)
+                {
+                    //string 绫诲瀷鐨勫瓧娈碉紝濡傛灉鍊煎甫鏈�'鍗曞紩鍙�,EF浼氶粯璁ゅ彉鎴�''涓や釜鍗曞紩鍙�
+                    MethodInfo method = typeof(System.Collections.IList).GetMethod("Contains");
+                    //鍒涘缓闆嗗悎甯搁噺骞惰缃负甯搁噺鐨勫��
+                    ConstantExpression constantCollection = Expression.Constant(list);
+                    //鍒涘缓涓�涓〃绀鸿皟鐢ㄥ甫鍙傛暟鐨勬柟娉曠殑锛歯ew string[]{"1","a"}.Contains("a");
+                    MethodCallExpression methodCall = Expression.Call(constantCollection, method, memberProperty);
+                    return Expression.Lambda<Func<T, bool>>(methodCall, parameter);
+                }
+                //闈瀞tring瀛楁锛屾寜涓婇潰鏂瑰紡澶勭悊鎶ュ紓甯窷ull TypeMapping in Sql Tree
+                BinaryExpression body = null;
+                foreach (var value in list)
+                {
+                    ConstantExpression constantExpression = Expression.Constant(value);
+                    UnaryExpression unaryExpression = Expression.Convert(memberProperty, constantExpression.Type);
+
+                    body = body == null
+                        ? Expression.Equal(unaryExpression, constantExpression)
+                        : Expression.OrElse(body, Expression.Equal(unaryExpression, constantExpression));
+                }
+                return Expression.Lambda<Func<T, bool>>(body, parameter);
+            }
+
+            //  object value = propertyValue;
+            ConstantExpression constant = proType.ToString() == "System.String"
+                ? Expression.Constant(propertyValue) : Expression.Constant(propertyValue.ToString().ChangeType(proType));
+
+            // DateTime鍙�夋嫨浜嗘棩鏈熺殑鏃跺�欒嚜鍔ㄥ湪缁撴潫鏃ユ湡鍔犱竴澶╋紝淇DateTime绫诲瀷浣跨敤鏃ユ湡鍖洪棿鏌ヨ鏃犳硶鏌ヨ鍒扮粨鏉熸棩鏈熺殑闂
+            if ((proType == typeof(DateTime) || proType == typeof(DateTime?)) && expressionType == LinqExpressionType.LessThanOrEqual && propertyValue.ToString().Length == 10)
+            {
+                constant = Expression.Constant(Convert.ToDateTime(propertyValue.ToString()).AddDays(1));
+            }
+
+            UnaryExpression member = Expression.Convert(memberProperty, constant.Type);
+            Expression<Func<T, bool>> expression;
+            switch (expressionType)
+            {
+                //p=>p.propertyName == propertyValue
+                case LinqExpressionType.Equal:
+                    expression = Expression.Lambda<Func<T, bool>>(Expression.Equal(member, constant), parameter);
+                    break;
+                //p=>p.propertyName != propertyValue
+                case LinqExpressionType.NotEqual:
+                    expression = Expression.Lambda<Func<T, bool>>(Expression.NotEqual(member, constant), parameter);
+                    break;
+                //   p => p.propertyName > propertyValue
+                case LinqExpressionType.GreaterThan:
+                    expression = Expression.Lambda<Func<T, bool>>(Expression.GreaterThan(member, constant), parameter);
+                    break;
+                //   p => p.propertyName < propertyValue
+                case LinqExpressionType.LessThan:
+                    expression = Expression.Lambda<Func<T, bool>>(Expression.LessThan(member, constant), parameter);
+                    break;
+                // p => p.propertyName >= propertyValue
+                case LinqExpressionType.ThanOrEqual:
+                    expression = Expression.Lambda<Func<T, bool>>(Expression.GreaterThanOrEqual(member, constant), parameter);
+                    break;
+                // p => p.propertyName <= propertyValue
+                case LinqExpressionType.LessThanOrEqual:
+                    expression = Expression.Lambda<Func<T, bool>>(Expression.LessThanOrEqual(member, constant), parameter);
+                    break;
+                //   p => p.propertyName.Contains(propertyValue)
+                // p => !p.propertyName.Contains(propertyValue)
+                case LinqExpressionType.Contains:
+                case LinqExpressionType.NotContains:
+                    MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
+                    constant = Expression.Constant(propertyValue, typeof(string));
+                    if (expressionType == LinqExpressionType.Contains)
+                    {
+                        expression = Expression.Lambda<Func<T, bool>>(Expression.Call(member, method, constant), parameter);
+                    }
+                    else
+                    {
+                        expression = Expression.Lambda<Func<T, bool>>(Expression.Not(Expression.Call(member, method, constant)), parameter);
+                    }
+                    break;
+                default:
+                    // p => p.false
+                    expression = False<T>();
+                    break;
+            }
+            return expression;
+        }
+
+        /// <summary>
+        /// 鍒涘缓lambda琛ㄨ揪寮忥細p=>false
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <returns></returns>
+        public static Expression<Func<T, bool>> False<T>()
+        {
+
+            return p => false;
+        }
+
+        public static Expression<Func<TEntity, bool>> GetWhereExpression<TEntity>(this PropertyInfo propertyInfo, object propertyValue, ParameterExpression parameter, LinqExpressionType expressionType)
+        {
+            Type proType = propertyInfo.PropertyType;
+            ConstantExpression constant = proType.ToString() == "System.String"
+               ? Expression.Constant(propertyValue) : Expression.Constant(propertyValue.ToString().ChangeType(proType));
+
+            // DateTime鍙�夋嫨浜嗘棩鏈熺殑鏃跺�欒嚜鍔ㄥ湪缁撴潫鏃ユ湡鍔犱竴澶╋紝淇DateTime绫诲瀷浣跨敤鏃ユ湡鍖洪棿鏌ヨ鏃犳硶鏌ヨ鍒扮粨鏉熸棩鏈熺殑闂
+            if ((proType == typeof(DateTime) || proType == typeof(DateTime?)) && expressionType == LinqExpressionType.LessThanOrEqual && propertyValue.ToString().Length == 10)
+            {
+                constant = Expression.Constant(Convert.ToDateTime(propertyValue.ToString()).AddDays(1));
+            }
+            parameter = parameter ?? Expression.Parameter(typeof(TEntity), "b");
+            //鍒涘缓鑺傜偣鐨勫睘鎬=>p.name 灞炴�ame
+            MemberExpression memberProperty = Expression.PropertyOrField(parameter, propertyInfo.Name);
+            UnaryExpression member = Expression.Convert(memberProperty, constant.Type);
+            Expression<Func<TEntity, bool>> expression = p => false;
+            switch (expressionType)
+            {
+                //p=>p.propertyName == propertyValue
+                case LinqExpressionType.Equal:
+                    expression = Expression.Lambda<Func<TEntity, bool>>(Expression.Equal(member, constant), parameter);
+                    break;
+                //p=>p.propertyName != propertyValue
+                case LinqExpressionType.NotEqual:
+                    expression = Expression.Lambda<Func<TEntity, bool>>(Expression.NotEqual(member, constant), parameter);
+                    break;
+                //   p => p.propertyName > propertyValue
+                case LinqExpressionType.GreaterThan:
+                    expression = Expression.Lambda<Func<TEntity, bool>>(Expression.GreaterThan(member, constant), parameter);
+                    break;
+                //   p => p.propertyName < propertyValue
+                case LinqExpressionType.LessThan:
+                    expression = Expression.Lambda<Func<TEntity, bool>>(Expression.LessThan(member, constant), parameter);
+                    break;
+                // p => p.propertyName >= propertyValue
+                case LinqExpressionType.ThanOrEqual:
+                    expression = Expression.Lambda<Func<TEntity, bool>>(Expression.GreaterThanOrEqual(member, constant), parameter);
+                    break;
+                // p => p.propertyName <= propertyValue
+                case LinqExpressionType.LessThanOrEqual:
+                    expression = Expression.Lambda<Func<TEntity, bool>>(Expression.LessThanOrEqual(member, constant), parameter);
+                    break;
+                //   p => p.propertyName.Contains(propertyValue)
+                // p => !p.propertyName.Contains(propertyValue)
+                case LinqExpressionType.Contains:
+                case LinqExpressionType.NotContains:
+                    MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
+                    constant = Expression.Constant(propertyValue, typeof(string));
+                    if (expressionType == LinqExpressionType.Contains)
+                    {
+                        expression = Expression.Lambda<Func<TEntity, bool>>(Expression.Call(member, method, constant), parameter);
+                    }
+                    else
+                    {
+                        expression = Expression.Lambda<Func<TEntity, bool>>(Expression.Not(Expression.Call(member, method, constant)), parameter);
+                    }
+                    break;
+                default:
+                    // 
+                    expression = p => false;
+                    break;
+            }
+            return expression;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ModelValidate.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ModelValidate.cs"
new file mode 100644
index 0000000..b8bb9a9
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ModelValidate.cs"
@@ -0,0 +1,239 @@
+锘縰sing Microsoft.AspNetCore.Mvc.ModelBinding;
+using Microsoft.Extensions.DependencyModel;
+using Microsoft.IdentityModel.Tokens;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+using SqlSugar;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Utilities
+{
+    public class ModelValidate
+    {
+        /// <summary>
+        /// 楠岃瘉瀹炰綋鍙傛暟
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="data"></param>
+        /// <returns></returns>
+        public static (bool, string, object?) ValidateModelData<T>(T data) where T : class, new()
+        {
+            Type modelType = typeof(T);
+            if (data == null) return (false, "浼犲叆鍙傛暟涓嶅彲涓簄ull", data);
+            ModelValidateAttribute? modelAttribute = modelType.GetCustomAttribute<ModelValidateAttribute>();
+            if (modelAttribute == null) return (false, $"{modelType.Name}鏈畾涔夈�怣odelValidateAttribute銆戠壒鎬�", data);
+            PropertyInfo[] propertyInfos = modelType.GetProperties();
+            return SimpleValidate(propertyInfos, data);
+        }
+
+        public static (bool, string, object?) ValidateModelData(object data, Type type)
+        {
+            if (data == null) return (false, "浼犲叆鍙傛暟涓嶅彲涓簄ull", data);
+            ModelValidateAttribute? modelAttribute = type.GetCustomAttribute<ModelValidateAttribute>();
+            if (modelAttribute == null) return (false, $"{type.Name}鏈畾涔夈�怣odelValidateAttribute銆戠壒鎬�", data);
+            PropertyInfo[] propertyInfos = type.GetProperties();
+            return SimpleValidate(propertyInfos, data);
+        }
+
+        /// <summary>
+        /// 楠岃瘉瀹炰綋鍙傛暟
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="data"></param>
+        /// <returns></returns>
+        public static (bool, string, object?) ValidateModelData<T>(List<T> datas) where T : class, new()
+        {
+            Type modelType = typeof(T);
+            if (datas == null) return (false, "浼犲叆鍙傛暟涓嶅彲涓簄ull", datas);
+            if (datas.Count == 0) return (false, "闆嗗悎涓暟涓嶅彲绛変簬0", datas);
+            foreach (T data in datas)
+            {
+                if (data == null) return (false, "浼犲叆鍙傛暟涓嶅彲涓簄ull", data);
+                ModelValidateAttribute? modelAttribute = modelType.GetCustomAttribute<ModelValidateAttribute>();
+                if (modelAttribute == null) return (false, $"{modelType.Name}鏈畾涔夈�怣odelValidateAttribute銆戠壒鎬�", data);
+                PropertyInfo[] propertyInfos = modelType.GetProperties();
+                (bool, string, object?) result = SimpleValidate(propertyInfos, data);
+                if (!result.Item1) return result;
+            }
+
+            return (true, $"鎴愬姛", datas);
+        }
+
+        private static (bool, string, object?) SimpleValidate<T>(PropertyInfo[] propertyInfos, T data) where T : class, new()
+        {
+            try
+            {
+                foreach (PropertyInfo propertyInfo in propertyInfos)
+                {
+                    PropertyValidateAttribute? propertyAttribute = propertyInfo.GetCustomAttribute<PropertyValidateAttribute>();
+                    if (propertyAttribute == null) continue;
+
+                    object? value = propertyInfo.GetValue(data, null);
+                    if (value is IList)
+                    {
+                        IList list = (IList)value;
+                        Type? t = list.GetType().GetGenericArguments().FirstOrDefault();
+                        if (t != null && t.IsClass)
+                        {
+                            foreach (var item in list)
+                            {
+                                (bool, string, object?) result = ValidateModelData(item, t);
+                                if (!result.Item1) return result;
+                            }
+                        }
+                    }
+
+                    if (propertyAttribute.NotNullAndEmpty)
+                    {
+                        if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})涓嶅彲涓簄ull", data);
+                        if (string.IsNullOrEmpty(value.ToString())) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})涓嶅彲涓虹┖瀛楃涓�", data);
+                    }
+
+                    if (propertyAttribute.MinValue > int.MinValue)
+                    {
+                        if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})涓嶅彲涓簄ull", data);
+                        if (propertyAttribute.IsContainMinValue)
+                        {
+                            if (Convert.ToInt32(value.ToString()) < propertyAttribute.MinValue) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})鐨勫�笺�恵value}銆戜笉鍙皬浜庛�恵propertyAttribute.MinValue}銆�", data);
+                        }
+                        else
+                        {
+                            if (Convert.ToInt32(value.ToString()) <= propertyAttribute.MinValue) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})鐨勫�笺�恵value}銆戣澶т簬銆恵propertyAttribute.MinValue}銆�", data);
+                        }
+                    }
+
+                    if (propertyAttribute.MaxValue < int.MaxValue)
+                    {
+                        if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})涓嶅彲涓簄ull", data);
+                        if (propertyAttribute.IsContainMaxValue)
+                        {
+                            if (Convert.ToInt32(value.ToString()) >= propertyAttribute.MaxValue) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})鐨勫�笺�恵value}銆戜笉鍙ぇ浜庛�恵propertyAttribute.MaxValue}銆�", data);
+                        }
+                        else
+                        {
+                            if (Convert.ToInt32(value.ToString()) > propertyAttribute.MaxValue) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})鐨勫�笺�恵value}銆戣灏忎簬銆恵propertyAttribute.MaxValue}銆�", data);
+                        }
+                    }
+
+                    if (!string.IsNullOrEmpty(propertyAttribute.NotNullAndEmptyWithProperty))
+                    {
+                        PropertyInfo? property = propertyInfos.FirstOrDefault(x => x.Name == propertyAttribute.NotNullAndEmptyWithProperty);
+                        if (property != null)
+                        {
+                            object? tempValue = property.GetValue(data);
+                            if (tempValue != null && !string.IsNullOrEmpty(tempValue.ToString()))
+                            {
+                                Type[] types = propertyInfo.PropertyType.GenericTypeArguments;
+                                if (types.Length == 1)
+                                {
+                                    string str = value.Serialize();
+                                    if (str == "[]")
+                                    {
+                                        return (false, $"銆恵property.Name}銆戝睘鎬х殑鍊奸潪绌烘椂銆恵propertyInfo.Name}銆戝睘鎬х殑鍊间篃涓嶅彲涓虹┖", data);
+                                    }
+                                }
+                                else if (types.Length == 0)
+                                {
+                                    if (value == null)
+                                    {
+                                        return (false, $"銆恵property.Name}銆戝睘鎬х殑鍊奸潪绌烘椂銆恵propertyInfo.Name}銆戝睘鎬х殑鍊间篃涓嶅彲涓虹┖", data);
+                                    }
+                                }
+
+                            }
+                        }
+                        else
+                        {
+                            return (false, $"鏈壘鍒般�恵propertyInfo.Name}銆戠壒鎬у睘鎬с�恵propertyAttribute.NotNullAndEmptyWithProperty}銆�", data);
+                        }
+                    }
+
+                    if (propertyAttribute.NotNullAndEmptyWithPropertyAndValue != null && propertyAttribute.NotNullAndEmptyWithPropertyAndValue.Length == 2)
+                    {
+                        PropertyInfo? property = propertyInfos.FirstOrDefault(x => x.Name == propertyAttribute.NotNullAndEmptyWithPropertyAndValue[0]);
+                        if (property != null)
+                        {
+                            object? tempValue = property.GetValue(data);
+                            if (tempValue != null && !string.IsNullOrEmpty(tempValue.ToString()))
+                            {
+                                Type[] types = propertyInfo.PropertyType.GenericTypeArguments;
+                                if (types.Length == 1)
+                                {
+                                    if (tempValue.ChangeType(property.PropertyType).ToString() == propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1].ChangeType(property.PropertyType).ToString())
+                                    {
+                                        string str = value.Serialize();
+
+                                        if (typeof(IList).IsAssignableFrom(property.PropertyType) && str == "[]")
+                                        {
+                                            return (false, $"銆恵property.Name}銆戝睘鎬х殑鍊间负銆恵propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1]}銆戞椂銆恵propertyInfo.Name}銆戝睘鎬х殑鍊间笉鍙负绌�", data);
+                                        }
+                                        else if (property.PropertyType.IsArray && str == "[]")
+                                        {
+                                            return (false, $"銆恵property.Name}銆戝睘鎬х殑鍊间负銆恵propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1]}銆戞椂銆恵propertyInfo.Name}銆戝睘鎬х殑鍊间笉鍙负绌�", data);
+                                        }
+                                    }
+                                }
+                                else if (types.Length == 0)
+                                {
+                                    if (tempValue.ChangeType(property.PropertyType).ToString() == propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1].ChangeType(property.PropertyType).ToString() && value == null && string.IsNullOrEmpty(value.ToString()))
+                                    {
+                                        return (false, $"銆恵property.Name}銆戝睘鎬х殑鍊间负銆恵propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1]}銆戞椂銆恵propertyInfo.Name}銆戝睘鎬х殑鍊间笉鍙负绌�", data);
+                                    }
+                                }
+                            }
+                        }
+                        else
+                        {
+                            return (false, $"鏈壘鍒板睘鎬с�恵propertyAttribute.NotNullAndEmptyWithProperty}銆�", data);
+                        }
+                    }
+
+                    if (propertyAttribute.Check != null && propertyAttribute.Check.Length > 0)
+                    {
+                        if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})涓嶅彲涓簄ull", data);
+                        if (propertyAttribute.Check.FirstOrDefault(x => x.ToString() == value.ToString()) == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})浣跨敤浜咰heck绾︽潫锛屼紶鍏ョ殑鍊间笉鍦▄propertyAttribute.Check.Serialize()}涓�", data);
+                    }
+
+                    if (!string.IsNullOrEmpty(propertyAttribute.StartWith) && !string.IsNullOrWhiteSpace(propertyAttribute.EndWith))
+                    {
+                        if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})涓嶅彲涓簄ull", data);
+                        else
+                        {
+                            if (value.ToString().StartsWith(propertyAttribute.StartWith.Trim())) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})蹇呴』浠propertyAttribute.StartWith}寮�澶�", data);
+                        }
+                    }
+
+                    if (!string.IsNullOrEmpty(propertyAttribute.EndWith) && !string.IsNullOrWhiteSpace(propertyAttribute.EndWith))
+                    {
+                        if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})涓嶅彲涓簄ull", data);
+                        else
+                        {
+                            if (value.ToString().EndsWith(propertyAttribute.EndWith.Trim())) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})蹇呴』浠propertyAttribute.EndWith}缁撳熬", data);
+                        }
+                    }
+
+                    if (propertyAttribute.MaxLength > propertyAttribute.MinLength && propertyAttribute.MinLength > 0)
+                    {
+                        if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}涓嶅彲涓簄ull", data);
+                        if (value.ToString().Length > propertyAttribute.MaxLength) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}鐨勫�艰秴鍑烘渶澶ч暱搴︺�恵propertyAttribute.MaxLength}銆戯紝鏁版嵁:{value}", data);
+
+                        if (value.ToString().Length < propertyAttribute.MinLength) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}鐨勫�煎皬浜庢渶灏忛暱搴︺�恵propertyAttribute.MinLength}銆戯紝鏁版嵁:{value}", data);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                return (false, $"鏁版嵁楠岃瘉寮傚父,寮傚父淇℃伅:{ex.Message}", data);
+            }
+            return (true, "楠岃瘉鎴愬姛", data);
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ParamsValidator.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ParamsValidator.cs"
new file mode 100644
index 0000000..1be56f5
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ParamsValidator.cs"
@@ -0,0 +1,48 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Filters;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+
+namespace WIDESEA_Core.Utilities
+{
+    public static class ParamsValidator
+    {
+        public static void ActionParamsValidator(this ActionExecutingContext context)
+        {
+            List<object> obj = context.ActionDescriptor.EndpointMetadata.ToList();
+
+            if (obj.Any(x => x is MethodParamsValidateAttribute))
+            {
+                foreach (var param in context.ActionDescriptor.Parameters)
+                {
+                    ModelValidateAttribute? modelValidate = param.ParameterType.GetCustomAttribute<ModelValidateAttribute>();
+                    if (modelValidate != null && context.ActionArguments.TryGetValue(param.Name, out object? value) && value != null)
+                    {
+                        (bool, string, object?) result = ModelValidate.ValidateModelData(value, param.ParameterType);
+                        if (!result.Item1)
+                        {
+                            context.Result = new JsonResult(new WebResponseContent()
+                            {
+                                Status = false,
+                                Data = result.Item3,
+                                Message = result.Item2
+                            });
+                        }
+                    }
+                    //else
+                    //{
+                    //    if (param.ParameterType == typeof(SaveModel) && context.ActionArguments.TryGetValue(param.Name, out value) && value != null)
+                    //    {
+
+                    //    }
+                    //}
+                }
+            }
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/VierificationCode.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/VierificationCode.cs"
new file mode 100644
index 0000000..b0cdec4
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Utilities/VierificationCode.cs"
@@ -0,0 +1,122 @@
+锘縰sing SkiaSharp;
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Utilities
+{
+    public static class VierificationCode
+    {
+        private static readonly string[] _chars = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "P", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
+
+        private static readonly SKColor[] colors = { SKColors.Black, SKColors.Green, SKColors.Brown };
+
+        private static readonly string[] fonts = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "瀹嬩綋" };
+        public static string RandomText()
+        {
+            string code = "";//浜х敓鐨勯殢鏈烘暟
+            int temp = -1;
+            Random rand = new Random();
+            for (int i = 1; i < 5; i++)
+            {
+                if (temp != -1)
+                {
+                    rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));
+                }
+                int t = rand.Next(61);
+                if (temp != -1 && temp == t)
+                {
+                    return RandomText();
+                }
+                temp = t;
+                code += _chars[t];
+            }
+            return code;
+        }
+        public static string CreateBase64Imgage(string code)
+        {
+            var random = new Random();
+            var info = new SKImageInfo((int)code.Length * 18, 32);
+            using var bitmap = new SKBitmap(info);
+            using var canvas = new SKCanvas(bitmap);
+
+            canvas.Clear(SKColors.White);
+
+            using var pen = new SKPaint();
+            pen.FakeBoldText = true;
+            pen.Style = SKPaintStyle.Fill;
+            pen.TextSize = 20;// 0.6f * info.Width * pen.TextSize / pen.MeasureText(code);
+
+            //缁樺埗闅忔満瀛楃
+            for (int i = 0; i < code.Length; i++)
+            {
+                pen.Color = random.GetRandom(colors);//闅忔満棰滆壊绱㈠紩鍊�
+
+                pen.Typeface = SKTypeface.FromFamilyName(random.GetRandom(fonts), 700, 20, SKFontStyleSlant.Italic);//閰嶇疆瀛椾綋
+                var point = new SKPoint()
+                {
+                    X = i * 16,
+                    Y = 22// info.Height - ((i + 1) % 2 == 0 ? 2 : 4),
+
+                };
+                canvas.DrawText(code.Substring(i, 1), point, pen);//缁樺埗涓�涓獙璇佸瓧绗�
+
+            }
+
+            // 缁樺埗鍣偣
+            var points = Enumerable.Range(0, 100).Select(
+                _ => new SKPoint(random.Next(bitmap.Width), random.Next(bitmap.Height))
+            ).ToArray();
+            canvas.DrawPoints(
+                SKPointMode.Points,
+                points,
+                pen);
+
+            //缁樺埗璐濆灏旂嚎鏉�
+            for (int i = 0; i < 2; i++)
+            {
+                var p1 = new SKPoint(0, 0);
+                var p2 = new SKPoint(0, 0);
+                var p3 = new SKPoint(0, 0);
+                var p4 = new SKPoint(0, 0);
+
+                var touchPoints = new SKPoint[] { p1, p2, p3, p4 };
+
+                using var bPen = new SKPaint();
+                bPen.Color = random.GetRandom(colors);
+                bPen.Style = SKPaintStyle.Stroke;
+
+                using var path = new SKPath();
+                path.MoveTo(touchPoints[0]);
+                path.CubicTo(touchPoints[1], touchPoints[2], touchPoints[3]);
+                canvas.DrawPath(path, bPen);
+            }
+            return bitmap.ToBase64String(SKEncodedImageFormat.Png);
+        }
+
+        public static T GetRandom<T>(this Random random, T[] tArray)
+        {
+            if (random == null) random = new Random();
+            return tArray[random.Next(tArray.Length)];
+        }
+
+        /// <summary>
+        /// SKBitmap杞珺ase64String
+        /// </summary>
+        /// <param name="bitmap"></param>
+        /// <param name="format"></param>
+        /// <returns></returns>
+        public static string ToBase64String(this SKBitmap bitmap, SKEncodedImageFormat format)
+        {
+            using var memStream = new MemoryStream();
+            using var wstream = new SKManagedWStream(memStream);
+            bitmap.Encode(wstream, format, 32);
+            memStream.TryGetBuffer(out ArraySegment<byte> buffer);
+            return $"{Convert.ToBase64String(buffer.Array, 0, (int)memStream.Length)}";
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/WIDESEA_Core.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/WIDESEA_Core.csproj"
new file mode 100644
index 0000000..be85784
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/WIDESEA_Core.csproj"
@@ -0,0 +1,41 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+    <Version>1.0.0</Version>
+    <Authors></Authors>
+    <Description></Description>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Autofac" Version="8.0.0" />
+    <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="9.0.0" />
+    <PackageReference Include="Autofac.Extras.DynamicProxy" Version="7.1.0" />
+    <PackageReference Include="AutoMapper" Version="13.0.1" />
+    <PackageReference Include="HslCommunication" Version="12.1.3" />
+    <PackageReference Include="Magicodes.IE.EPPlus" Version="2.7.5.1" />
+    <PackageReference Include="Magicodes.IE.Excel" Version="2.7.5.1" />
+    <PackageReference Include="MailKit" Version="4.7.1.1" />
+    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.29" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
+    <PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.3.8" />
+    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
+    <PackageReference Include="OfficeOpenXml.Core.ExcelPackage" Version="1.0.0" />
+    <PackageReference Include="Quartz" Version="3.13.1" />
+    <PackageReference Include="SkiaSharp" Version="2.88.8" />
+    <PackageReference Include="SqlSugarCore" Version="5.1.4.167" />
+    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
+    <PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="7.0.5" />
+    <PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="6.5.0" />
+    <PackageReference Include="System.Linq.Dynamic.Core" Version="1.4.5" />
+    <PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Folder Include="ServiceExtensions\" />
+    <Folder Include="SystemConfig\" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/CachePointGroupDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/CachePointGroupDTO.cs"
new file mode 100644
index 0000000..edd66c5
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/CachePointGroupDTO.cs"
@@ -0,0 +1,35 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Basic
+{
+    public class CachePointGroupDTO
+    {
+        public int IdA { get; set; }
+
+        public int IdB { get; set; }
+
+        public string PointCodeA { get; set; }
+
+        public string PointCodeB { get; set; }
+
+        public int PointTypeA { get; set; }
+
+        public int PointTypeB { get; set; }
+
+        public int PointStatusA { get; set; }
+
+        public int PointStatusB { get; set; }
+
+        public int DepthA { get; set; }
+
+        public int DepthB { get; set; }
+
+        public int EnableStatusA { get; set; }
+
+        public int EnableStatusB { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/InitializationLocationDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/InitializationLocationDTO.cs"
new file mode 100644
index 0000000..cd6e309
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/InitializationLocationDTO.cs"
@@ -0,0 +1,43 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+
+namespace WIDESEA_DTO.Basic
+{
+    [ModelValidate]
+    public class InitializationLocationDTO
+    {
+        /// <summary>
+        /// 宸烽亾鍙�
+        /// </summary>
+        [PropertyValidate("宸烽亾鍙�", NotNullAndEmpty = true)]
+        public string Roadway { get; set; }
+
+        /// <summary>
+        /// 琛�
+        /// </summary>
+        [PropertyValidate("琛�", MinValue = 1, IsContainMinValue = false)]
+        public int MaxRow { get; set; }
+
+        /// <summary>
+        /// 鍒�
+        /// </summary>
+        [PropertyValidate("鍒�", MinValue = 1, IsContainMinValue = false)]
+        public int MaxColumn { get; set; }
+
+        /// <summary>
+        /// 灞�
+        /// </summary>
+        [PropertyValidate("灞�", MinValue = 1, IsContainMinValue = false)]
+        public int MaxLayer { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍗曟繁璐т綅
+        /// </summary>
+        [PropertyValidate("娣卞害", MinValue = 1, NotNullAndEmpty = true, IsContainMinValue = true)]
+        public int Depth { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/InnerCodeDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/InnerCodeDTO.cs"
new file mode 100644
index 0000000..3d2e1a6
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/InnerCodeDTO.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Basic
+{
+    public class InnerCodeDTO
+    {
+        public string matCode { get; set; }
+        public string batchNo { get; set; }
+        public string purchaseOrderNo { get; set; }
+        public int qty { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/LocationGroupDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/LocationGroupDTO.cs"
new file mode 100644
index 0000000..a3df6d3
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/LocationGroupDTO.cs"
@@ -0,0 +1,35 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Basic
+{
+    public class LocationGroupDTO
+    {
+        public int IdA { get; set; }
+
+        public int IdB { get; set; }
+
+        public string LocationCodeA { get; set; }
+
+        public string LocationCodeB { get; set; }
+
+        public int LocationTypeA { get; set; }
+
+        public int LocationTypeB { get; set; }
+
+        public int LocationStatusA { get; set; }
+
+        public int LocationStatusB { get; set; }
+
+        public int DepthA { get; set; }
+
+        public int DepthB { get; set; }
+
+        public int EnableStatusA { get; set; }
+
+        public int EnableStatusB { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/MatSerNumAnalysisModel.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/MatSerNumAnalysisModel.cs"
new file mode 100644
index 0000000..d8c83e1
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/MatSerNumAnalysisModel.cs"
@@ -0,0 +1,59 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.CodeConfigEnum;
+
+namespace WIDESEA_DTO.Basic
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    [AnalysisRule, ModelValidate]
+    public class MatSerNumAnalysisModel
+    {
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [AnalysisItemRule(AnalysisFormatTypeEnum.MTC), PropertyValidate("鐗╂枡缂栧彿", NotNullAndEmpty = true)]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        [AnalysisItemRule(AnalysisFormatTypeEnum.BHN), PropertyValidate("鎵规鍙�", NotNullAndEmpty = true)]
+        public string LotNo { get; set; }
+
+        /// <summary>
+        /// 鐢熶骇鏃ユ湡
+        /// </summary>
+        [AnalysisItemRule(AnalysisFormatTypeEnum.MTPD), PropertyValidate("鐢熶骇鏃ユ湡", NotNullAndEmpty = true)]
+        public string ProductionDate { get; set; }
+
+        /// <summary>
+        /// 鏈夋晥鏈�
+        /// </summary>
+        [AnalysisItemRule(AnalysisFormatTypeEnum.ED), PropertyValidate("鏈夋晥鏈�", NotNullAndEmpty = true)]
+        public string EffectiveDate { get; set; }
+
+        /// <summary>
+        /// 閲囪喘鍗曞彿
+        /// </summary>
+        [AnalysisItemRule(AnalysisFormatTypeEnum.ODN), PropertyValidate("閲囪喘鍗曞彿", NotNullAndEmpty = true)]
+        public string PurchaseOrderNo { get; set; }
+
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        [AnalysisItemRule(AnalysisFormatTypeEnum.MTQ), PropertyValidate("鏁伴噺", NotNullAndEmpty = true)]
+        public float Quantity { get; set; }
+
+        /// <summary>
+        /// 鍘熷鏁版嵁
+        /// </summary>
+        [AnalysisItemRule(AnalysisFormatTypeEnum.BD), PropertyValidate("鍘熷鏁版嵁", NotNullAndEmpty = true)]
+        public string SerialNumber { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/SupplierDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/SupplierDTO.cs"
new file mode 100644
index 0000000..f5d96aa
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Basic/SupplierDTO.cs"
@@ -0,0 +1,79 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+
+namespace WIDESEA_DTO.Basic
+{
+    [ModelValidate]
+    public class SupplierDTO
+    {
+        /// <summary>
+        /// 渚涘簲鍟嗙紪鐮�
+        /// </summary>
+        [PropertyValidate("渚涘簲鍟嗙紪鐮�", NotNullAndEmpty = true)]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 渚涘簲鍟嗗叏绉�
+        /// </summary>
+        [PropertyValidate("渚涘簲鍟嗗叏绉�", NotNullAndEmpty = true)]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 渚涘簲鍟嗙畝绉�
+        /// </summary>
+        [PropertyValidate("渚涘簲鍟嗙畝绉�", NotNullAndEmpty = true)]
+        public string ShortName { get; set; }
+
+        /// <summary>
+        /// 鑱旂郴浜�
+        /// </summary>
+        [PropertyValidate("鑱旂郴浜�", NotNullAndEmpty = true)]
+        public string Contacts { get; set; }
+
+        /// <summary>
+        /// 鑱旂郴鐢佃瘽
+        /// </summary>
+        [PropertyValidate("鑱旂郴鐢佃瘽", NotNullAndEmpty = true)]
+        public string ContactNumber { get; set; }
+
+        /// <summary>
+        /// 鑱旂郴鍦板潃
+        /// </summary>
+        [PropertyValidate("鑱旂郴鍦板潃", NotNullAndEmpty = true)]
+        public string ContactAddress { get; set; }
+
+        /// <summary>
+        /// 鐢靛瓙閭
+        /// </summary>
+        [PropertyValidate("鐢靛瓙閭", NotNullAndEmpty = true)]
+        public string Email { get; set; }
+
+        /// <summary>
+        /// 鎻忚堪
+        /// </summary>
+        [PropertyValidate("鎻忚堪", NotNullAndEmpty = true)]
+        public string Description { get; set; }
+
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        [PropertyValidate("鐘舵��", NotNullAndEmpty = true)]
+        public int State { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨缁勭粐
+        /// </summary>
+        [PropertyValidate("搴撳瓨缁勭粐", NotNullAndEmpty = true)]
+        public string InvOrgId { get; set; } = "娣畨鐗瑰垱浜屽巶";
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [PropertyValidate("鎿嶄綔绫诲瀷", NotNullAndEmpty = true,Check = new object[] { 0, 1, 2 })]
+        public string OperateType { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderAddDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderAddDTO.cs"
new file mode 100644
index 0000000..8665342
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderAddDTO.cs"
@@ -0,0 +1,79 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+
+namespace WIDESEA_DTO.Inbound
+{
+    [ModelValidate]
+    public class InboundOrderAddDTO
+    {
+        /// <summary>
+        /// 涓婃父鍗曟嵁缂栧彿
+        /// </summary>
+        [PropertyValidate("涓婃父鍗曟嵁缂栧彿", NotNullAndEmpty = true)]
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁绫诲瀷
+        /// </summary>
+        [PropertyValidate("鍗曟嵁绫诲瀷", NotNullAndEmpty = true)]
+        public int Type { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [PropertyValidate("鎿嶄綔绫诲瀷", Check = new object[] { 1, 2, 3, 4 })]
+        public int OperateType { get; set; }
+
+        /// <summary>
+        /// 閲囪喘鏁伴噺
+        /// </summary>
+        [PropertyValidate("閲囪喘鏁伴噺", MinValue = 0, IsContainMinValue = false)]
+        public float Amount { get; set; }
+
+        /// <summary>
+        /// 涓嬪崟鏃ユ湡
+        /// </summary>
+        [PropertyValidate("涓嬪崟鏃ユ湡", NotNullAndEmpty = true)]
+        public string OrderDate { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string Note { get; set; }
+
+        [PropertyValidate("鍗曟嵁鏄庣粏淇℃伅", NotNullAndEmpty = true)]
+        public List<InboundOrderDetailAddDTO> MList { get; set; }
+    }
+
+    [ModelValidate]
+    public class InboundOrderDetailAddDTO
+    {
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [PropertyValidate("鐗╂枡缂栧彿", NotNullAndEmpty = true)]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        [PropertyValidate("鏁伴噺", NotNullAndEmpty = true, MinValue = 0, IsContainMinValue = false)]
+        public float Qty { get; set; }
+
+        /// <summary>
+        /// 浠撳簱缂栧彿
+        /// </summary>
+        [PropertyValidate("浠撳簱缂栧彿", NotNullAndEmpty = true)]
+        public int WaId { get; set; }
+
+        /// <summary>
+        /// 鍗曚綅
+        /// </summary>
+        [PropertyValidate("鍗曚綅", NotNullAndEmpty = true)]
+        public string Unit { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderDetailAddDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderDetailAddDTO.cs"
new file mode 100644
index 0000000..37aca4d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderDetailAddDTO.cs"
@@ -0,0 +1,11 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+
+namespace WIDESEA_DTO.Inbound
+{
+    
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderGetDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderGetDTO.cs"
new file mode 100644
index 0000000..f9defcf
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/InboundOrderGetDTO.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Inbound
+{
+    public class InboundOrderGetDTO
+    {
+        public string OrderNo { get; set; }
+        public int pageNo { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/MaterielGroupDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/MaterielGroupDTO.cs"
new file mode 100644
index 0000000..f29b9b9
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/MaterielGroupDTO.cs"
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+
+namespace WIDESEA_DTO.Inbound
+{
+    [ModelValidate]
+    public class MaterielGroupDTO
+    {
+        [PropertyValidate("鎵樼洏缂栧彿", NotNullAndEmpty = true)]
+        public string PalletCode { get; set; }
+
+        [PropertyValidate("鍗曟嵁缂栧彿", NotNullAndEmpty = true)]
+        public string OrderNo { get; set; }
+
+        [PropertyValidate("搴忓垪鍙锋潯鐮�", NotNullAndEmpty = true)]
+        public List<string> SerialNumbers { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderAddDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderAddDTO.cs"
new file mode 100644
index 0000000..7d949ad
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderAddDTO.cs"
@@ -0,0 +1,37 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+
+namespace WIDESEA_DTO.Outbound
+{
+    [ModelValidate]
+    public class OutboundOrderAddDTO
+    {
+        /// <summary>
+        /// 涓婃父鍗曟嵁缂栧彿
+        /// </summary>
+        public string UpperOrderNo { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁缂栧彿
+        /// </summary>
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁绫诲瀷
+        /// </summary>
+        [PropertyValidate("鍗曟嵁绫诲瀷", NotNullAndEmpty = true)]
+        public int OrderType { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string Remark { get; set; }
+
+        [PropertyValidate("鍗曟嵁鏄庣粏淇℃伅", NotNullAndEmpty = true)]
+        public List<OutboundOrderDetailAddDTO> Details { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderDetailAddDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderDetailAddDTO.cs"
new file mode 100644
index 0000000..e5bbbf8
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderDetailAddDTO.cs"
@@ -0,0 +1,39 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+
+namespace WIDESEA_DTO.Outbound
+{
+    [ModelValidate]
+    public class OutboundOrderDetailAddDTO
+    {
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [PropertyValidate("鐗╂枡缂栧彿", NotNullAndEmpty = true)]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public string MaterielName { get; set; }
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        public string BatchNo { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁鏁伴噺
+        /// </summary>
+        [PropertyValidate("鍗曟嵁鏁伴噺", NotNullAndEmpty = true, MinValue = 0, IsContainMinValue = false)]
+        public decimal OrderQuantity { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderGetDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderGetDTO.cs"
new file mode 100644
index 0000000..e029706
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderGetDTO.cs"
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Outbound
+{
+    public class OutboundOrderGetDTO
+    {
+        public string OrderNo { get; set; }
+        public int pageNo { get; set; }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockSelectViewDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockSelectViewDTO.cs"
new file mode 100644
index 0000000..d90115b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockSelectViewDTO.cs"
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Stock
+{
+    public class StockSelectViewDTO
+    {
+
+        public string MaterielCode { get; set; }
+
+        public string MaterielName { get; set; }
+
+        public float UseableQuantity { get; set; }
+
+        public string PalletCode { get; set; }
+
+        public string LocationCode { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs"
new file mode 100644
index 0000000..39e46e9
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs"
@@ -0,0 +1,133 @@
+锘�
+using Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_DTO.Stock
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class StockViewDTO
+    {
+        /// <summary>
+        /// 浠撳簱ID
+        /// </summary>
+        public int WarehouseId {  get; set; }
+        /// <summary>
+        /// 璐т綅缂栧彿
+        /// </summary>
+        public string LocationCode { get; set; }
+
+        /// <summary>
+        /// 璐т綅鍚嶇О
+        /// </summary>
+        public string LocationName { get; set; }
+
+        /// <summary>
+        /// 璐т綅鍒�
+        /// </summary>
+        public int Column { get; set; }
+
+        /// <summary>
+        /// 璐т綅琛�
+        /// </summary>
+        public int Row { get; set; }
+
+        /// <summary>
+        /// 璐т綅灞�
+        /// </summary>
+        public int Layer { get; set; }
+
+        /// <summary>
+        /// 璐т綅娣卞害
+        /// </summary>
+        public int Depth { get; set; }
+
+        /// <summary>
+        /// 璐т綅鐘舵��
+        /// </summary>
+        public int LocationStatus { get; set; }
+
+        /// <summary>
+        /// 璐т綅绫诲瀷
+        /// </summary>
+        public int LocationType { get; set; }
+
+        /// <summary>
+        /// 宸烽亾缂栧彿
+        /// </summary>
+        public string RoadwayNo { get; set; }
+
+        /// <summary>
+        /// 绂佺敤鐘舵��
+        /// </summary>
+        public int EnalbeStatus { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨涓婚敭
+        /// </summary>
+        public int StockId { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏鍙�
+        /// </summary>
+        public string PalletCode { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public bool IsFull { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鎵瑰彿
+        /// </summary>
+        public string BatchNo { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨鐘舵��
+        /// </summary>
+        public int StockStatus { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨澶囨敞
+        /// </summary>
+        public string StockRemark { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        public string Creater { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTime CreateDate { get; set; }
+
+        /// <summary>
+        /// 淇敼浜�
+        /// </summary>
+        public string Modifier { get; set; }
+
+        /// <summary>
+        /// 淇敼鏃堕棿
+        /// </summary>
+        public DateTime? ModifyDate { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨璇︽儏
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(Dt_StockInfoDetail.StockId), nameof(StockId))]
+        public List<Dt_StockInfoDetail> Details { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/ActionDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/ActionDTO.cs"
new file mode 100644
index 0000000..57ed299
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/ActionDTO.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.System
+{
+    public class ActionDTO
+    {
+        public int ActionId { get; set; }
+        public int MenuId { get; set; }
+        public string Text { get; set; }
+        public string Value { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/DictionaryDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/DictionaryDTO.cs"
new file mode 100644
index 0000000..c914b41
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/DictionaryDTO.cs"
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.System
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class DictionaryDTO
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public object Key {  get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public object Value {  get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public object Extra {  get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/MenuDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/MenuDTO.cs"
new file mode 100644
index 0000000..44d8bde
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/MenuDTO.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_DTO.System
+{
+    public class MenuDTO : Sys_Menu
+    {
+        public List<ActionDTO> Actions { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/UserPermissions.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/UserPermissions.cs"
new file mode 100644
index 0000000..9c892bb
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/UserPermissions.cs"
@@ -0,0 +1,17 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.System
+{
+    public class UserPermissionDTO
+    {
+        public int Id { get; set; }
+        public int Pid { get; set; }
+        public string Text { get; set; }
+        public bool IsApp { get; set; }
+        public List<ActionDTO> Actions { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/VueDictionaryDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/VueDictionaryDTO.cs"
new file mode 100644
index 0000000..ffa7f3b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/System/VueDictionaryDTO.cs"
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.System
+{
+    public class VueDictionaryDTO
+    {
+        public string DicNo { get; set; }
+
+        public string Config { get; set; }
+
+        public object Data {  get; set; }
+
+        public bool SaveCache { get; set; } = true;
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Task/WCSTaskDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Task/WCSTaskDTO.cs"
new file mode 100644
index 0000000..570a8c1
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Task/WCSTaskDTO.cs"
@@ -0,0 +1,104 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Task
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class WCSTaskDTO
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        public int TaskId { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public int TaskNum { get; set; }
+        /// <summary>
+        /// AGV浠诲姟鍙�
+        /// </summary>
+        public string AgvTaskNum { get; set; }
+        /// <summary>
+        /// 鎵樼洏缂栧彿
+        /// </summary>
+        public string PalletCode { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏绫诲瀷
+        /// </summary>
+        public int PalletType { get; set; }
+
+        /// <summary>
+        /// 璁惧缂栧彿
+        /// </summary>
+        public string DeviceCode { get; set; }
+
+        /// <summary>
+        /// 宸烽亾鍙�
+        /// </summary>
+        public string Roadway { get; set; }
+
+        /// <summary>
+        /// 浠诲姟绫诲瀷
+        /// </summary>
+        public int TaskType { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鐘舵��
+        /// </summary>
+        public int TaskState { get; set; }
+
+        /// <summary>
+        /// 璧峰鍦板潃
+        /// </summary>
+        public string SourceAddress { get; set; }
+
+        /// <summary>
+        /// 鐩爣鍦板潃
+        /// </summary>
+        public string TargetAddress { get; set; }
+
+        /// <summary>
+        /// 褰撳墠浣嶇疆
+        /// </summary>
+        public string CurrentAddress { get; set; }
+
+        /// <summary>
+        /// 涓嬩竴鍦板潃
+        /// </summary>
+        public string NextAddress { get; set; }
+
+        /// <summary>
+        /// 寮傚父淇℃伅
+        /// </summary>
+        public string? ExceptionMessage { get; set; }
+
+        /// <summary>
+        /// 浼樺厛绾�
+        /// </summary>
+        public int Grade { get; set; }
+
+        /// <summary>
+        /// WMS浠诲姟涓婚敭
+        /// </summary>
+        public int WMSId { get; set; }
+
+        /// <summary>
+        /// 浠诲姟涓嬪彂鏃堕棿
+        /// </summary>
+        public DateTime? Dispatchertime { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs"
new file mode 100644
index 0000000..4b0b5f8
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs"
@@ -0,0 +1,75 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Task
+{
+    /// <summary>
+    /// 浠诲姟DTO
+    /// </summary>
+    public class WMSTaskDTO
+    {
+        /// <summary>
+        /// WMS浠诲姟涓婚敭
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public int TaskNum { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏鍙�
+        /// </summary>
+        public string PalletCode { get; set; }
+
+        /// <summary>
+        /// 宸烽亾鍙�
+        /// </summary>
+        public string RoadWay { get; set; }
+
+        /// <summary>
+        /// 浠诲姟绫诲瀷
+        /// </summary>
+        public int TaskType { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鐘舵��
+        /// </summary>
+        public int TaskStatus { get; set; }
+
+        /// <summary>
+        /// 璧风偣
+        /// </summary>
+        public string SourceAddress { get; set; }
+
+        /// <summary>
+        /// 缁堢偣
+        /// </summary>
+        public string TargetAddress { get; set; }
+
+        /// <summary>
+        /// 浼樺厛绾�
+        /// </summary>
+        public int Grade { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string AGVArea { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public int PalletType { get; set; }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/WIDESEA_DTO.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/WIDESEA_DTO.csproj"
new file mode 100644
index 0000000..502ce7c
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/WIDESEA_DTO.csproj"
@@ -0,0 +1,14 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+	<PropertyGroup>
+		<TargetFramework>net6.0</TargetFramework>
+		<ImplicitUsings>enable</ImplicitUsings>
+		<Nullable>enable</Nullable>
+		<GenerateDocumentationFile>True</GenerateDocumentationFile>
+	</PropertyGroup>
+
+	<ItemGroup>
+		<ProjectReference Include="..\WIDESEA_Model\WIDESEA_Model.csproj" />
+	</ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IBasicService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IBasicService.cs"
new file mode 100644
index 0000000..b62017b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IBasicService.cs"
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IBasicService
+{
+    public interface IBasicService: IDependency
+    {
+        /// <summary>
+        /// 璐т綅涓氬姟灞�
+        /// </summary>
+        ILocationInfoService LocationInfoService { get; }
+
+        /// <summary>
+        /// 鐗╂枡涓氬姟灞�
+        /// </summary>
+        IMaterielInfoService MaterielInfoService { get; }
+
+        /// <summary>
+        /// 浠撳簱涓氬姟灞�
+        /// </summary>
+        IWarehouseService WarehouseService { get; }
+
+        IPalletCodeInfoService PalletCodeInfoService { get; }
+
+        IMaterielCodeInfoService MaterielCodeInfoService { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs"
new file mode 100644
index 0000000..e9f0459
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs"
@@ -0,0 +1,55 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Basic;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IBasicService
+{
+    public interface ILocationInfoService : IService<Dt_LocationInfo>
+    {
+        IRepository<Dt_LocationInfo> Repository { get; }
+
+        /// <summary>
+        /// 鎵归噺鍚敤璐т綅
+        /// </summary>
+        /// <param name="keys">璐т綅涓婚敭鏁扮粍</param>
+        /// <returns></returns>
+        WebResponseContent LocationEnableStatus(int[] keys);
+
+        /// <summary>
+        /// 鎵归噺绂佺敤璐т綅
+        /// </summary>
+        /// <param name="keys">璐т綅涓婚敭鏁扮粍</param>
+        /// <returns></returns>
+        WebResponseContent LocationDisableStatus(int[] keys);
+
+        /// <summary>
+        /// 鍗曚釜鍚敤璐т綅
+        /// </summary>
+        /// <param name="key">璐т綅涓婚敭</param>
+        /// <returns></returns>
+        WebResponseContent LocationEnableStatus(int key);
+
+        /// <summary>
+        /// 鍗曚釜绂佺敤璐т綅
+        /// </summary>
+        /// <param name="key">璐т綅涓婚敭</param>
+        /// <returns></returns>
+        WebResponseContent LocationDisableStatus(int key);
+
+        /// <summary>
+        /// 鍒濆鍖栬揣浣�
+        /// </summary>
+        /// <param name="initializationLocationDTO"></param>
+        /// <returns></returns>
+        WebResponseContent InitializationLocation(InitializationLocationDTO initializationLocationDTO);
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielCodeInfoService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielCodeInfoService.cs"
new file mode 100644
index 0000000..7db7943
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielCodeInfoService.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IBasicService
+{
+    public interface IMaterielCodeInfoService : IService<Dt_MaterielCodeInfo>
+    {
+        public IRepository<Dt_MaterielCodeInfo> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielInfoService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielInfoService.cs"
new file mode 100644
index 0000000..fc325d5
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielInfoService.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Basic;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IBasicService
+{
+    public interface IMaterielInfoService : IService<Dt_MaterielInfo>
+    {
+        IRepository<Dt_MaterielInfo> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IPalletCodeInfoService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IPalletCodeInfoService.cs"
new file mode 100644
index 0000000..ea6190a
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IPalletCodeInfoService.cs"
@@ -0,0 +1,17 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IBasicService
+{
+    public interface IPalletCodeInfoService : IService<Dt_PalletCodeInfo>
+    {
+        public IRepository<Dt_PalletCodeInfo> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IWarehouseService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IWarehouseService.cs"
new file mode 100644
index 0000000..2a49178
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/IWarehouseService.cs"
@@ -0,0 +1,17 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IBasicService
+{
+    public interface IWarehouseService : IService<Dt_Warehouse>
+    {
+        IRepository<Dt_Warehouse> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/WIDESEA_IBasicService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/WIDESEA_IBasicService.csproj"
new file mode 100644
index 0000000..a70161f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IBasicService/WIDESEA_IBasicService.csproj"
@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_DTO\WIDESEA_DTO.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderResultService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderResultService.cs"
new file mode 100644
index 0000000..8bb2659
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderResultService.cs"
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_ICheckService
+{
+    public interface ICheckOrderResultService : IService<Dt_CheckOrderResult>
+    {
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderService.cs"
new file mode 100644
index 0000000..4de5428
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderService.cs"
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_ICheckService
+{
+    public interface ICheckOrderService : IService<Dt_CheckOrder>
+    {
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ICheckService/WIDESEA_ICheckService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ICheckService/WIDESEA_ICheckService.csproj"
new file mode 100644
index 0000000..a70161f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ICheckService/WIDESEA_ICheckService.csproj"
@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_DTO\WIDESEA_DTO.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetailService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetailService.cs"
new file mode 100644
index 0000000..f87a463
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetailService.cs"
@@ -0,0 +1,17 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IInboundService
+{
+    public interface IInboundOrderDetailService : IService<Dt_InboundOrderDetail>
+    {
+        IRepository<Dt_InboundOrderDetail> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetail_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetail_HtyService.cs"
new file mode 100644
index 0000000..de22b2d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetail_HtyService.cs"
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IInboundService
+{
+    public interface IInboundOrderDetail_HtyService : IService<Dt_InboundOrderDetail_Hty>
+    {
+        
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
new file mode 100644
index 0000000..bd67259
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
@@ -0,0 +1,20 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IInboundService
+{
+    public interface IInboundOrderService : IService<Dt_InboundOrder>
+    {
+        IRepository<Dt_InboundOrder> Repository { get; }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrder_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrder_HtyService.cs"
new file mode 100644
index 0000000..785e4f7
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrder_HtyService.cs"
@@ -0,0 +1,17 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IInboundService
+{
+    public interface IInboundOrder_HtyService : IService<Dt_InboundOrder_Hty>
+    {
+        
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundService.cs"
new file mode 100644
index 0000000..15237d5
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundService.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IInboundService
+{
+    public interface IInboundService : IDependency
+    {
+        IInboundOrderDetailService InboundOrderDetailService { get; }
+
+        IInboundOrderService InbounOrderService { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/WIDESEA_IInboundService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/WIDESEA_IInboundService.csproj"
new file mode 100644
index 0000000..a70161f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/WIDESEA_IInboundService.csproj"
@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_DTO\WIDESEA_DTO.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs"
new file mode 100644
index 0000000..ea944e0
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs"
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.StockEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IOutboundService
+{
+    public interface IOutStockLockInfoService : IService<Dt_OutStockLockInfo>
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        IRepository<Dt_OutStockLockInfo> Repository { get; }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetailService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetailService.cs"
new file mode 100644
index 0000000..dcaeb06
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetailService.cs"
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_DTO.Stock;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IOutboundService
+{
+    public interface IOutboundOrderDetailService : IService<Dt_OutboundOrderDetail>
+    {
+        IRepository<Dt_OutboundOrderDetail> Repository { get; }
+       
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetail_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetail_HtyService.cs"
new file mode 100644
index 0000000..644c89e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetail_HtyService.cs"
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_DTO.Stock;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IOutboundService
+{
+    public interface IOutboundOrderDetail_HtyService : IService<Dt_OutboundOrderDetail_Hty>
+    {
+        
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs"
new file mode 100644
index 0000000..9d307c2
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs"
@@ -0,0 +1,20 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_DTO.Outbound;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IOutboundService
+{
+    public interface IOutboundOrderService : IService<Dt_OutboundOrder>
+    {
+        IRepository<Dt_OutboundOrder> Repository { get; }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrder_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrder_HtyService.cs"
new file mode 100644
index 0000000..355ced4
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrder_HtyService.cs"
@@ -0,0 +1,10 @@
+锘縰sing WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IOutboundService
+{
+    public interface IOutboundOrder_HtyService : IService<Dt_OutboundOrder_Hty>
+    {
+        
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs"
new file mode 100644
index 0000000..7e86e2f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IOutboundService
+{
+    public interface IOutboundService:IDependency
+    {
+        IOutboundOrderDetailService OutboundOrderDetailService { get; }
+
+        IOutboundOrderService OutboundOrderService { get; }
+
+        IOutStockLockInfoService OutboundStockLockInfoService { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/WIDESEA_IOutboundService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/WIDESEA_IOutboundService.csproj"
new file mode 100644
index 0000000..a70161f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/WIDESEA_IOutboundService.csproj"
@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_DTO\WIDESEA_DTO.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordService.cs"
new file mode 100644
index 0000000..ed24872
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordService.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IRecordService
+{
+    public interface ILocationStatusChangeRecordService : IService<Dt_LocationStatusChangeRecord>
+    {
+        IRepository<Dt_LocationStatusChangeRecord> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IRecordService/IRecordService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IRecordService/IRecordService.cs"
new file mode 100644
index 0000000..5c9e120
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IRecordService/IRecordService.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IRecordService
+{
+    public interface IRecordService : IDependency
+    {
+        ILocationStatusChangeRecordService LocationStatusChangeRecordSetvice { get; }
+
+        IStockQuantityChangeRecordService StockQuantityChangeRecordService { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IRecordService/IStockQuantityChangeRecordService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IRecordService/IStockQuantityChangeRecordService.cs"
new file mode 100644
index 0000000..b1221bb
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IRecordService/IStockQuantityChangeRecordService.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.StockEnum;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IRecordService
+{
+    public interface IStockQuantityChangeRecordService : IService<Dt_StockQuantityChangeRecord>
+    {
+        IRepository<Dt_StockQuantityChangeRecord> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IRecordService/WIDESEA_IRecordService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IRecordService/WIDESEA_IRecordService.csproj"
new file mode 100644
index 0000000..a70161f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IRecordService/WIDESEA_IRecordService.csproj"
@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_DTO\WIDESEA_DTO.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs"
new file mode 100644
index 0000000..92c9c04
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs"
@@ -0,0 +1,11 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IStockService
+{
+    public interface IStockInfoDetailService : IService<Dt_StockInfoDetail>
+    {
+        IRepository<Dt_StockInfoDetail> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetail_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetail_HtyService.cs"
new file mode 100644
index 0000000..fb266b6
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetail_HtyService.cs"
@@ -0,0 +1,11 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IStockService
+{
+    public interface IStockInfoDetail_HtyService : IService<Dt_StockInfoDetail_Hty>
+    {
+        IRepository<Dt_StockInfoDetail_Hty> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs"
new file mode 100644
index 0000000..102691d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs"
@@ -0,0 +1,11 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IStockService
+{
+    public interface IStockInfoService : IService<Dt_StockInfo>
+    {
+        IRepository<Dt_StockInfo> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfo_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfo_HtyService.cs"
new file mode 100644
index 0000000..5353c68
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfo_HtyService.cs"
@@ -0,0 +1,17 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Stock;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IStockService
+{
+    public interface IStockInfo_HtyService : IService<Dt_StockInfo_Hty>
+    {
+        IRepository<Dt_StockInfo_Hty> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs"
new file mode 100644
index 0000000..eb21726
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs"
@@ -0,0 +1,20 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IStockService
+{
+    public interface IStockService : IDependency
+    {
+        IStockInfoDetailService StockInfoDetailService { get; }
+
+        IStockInfoService StockInfoService { get; }
+
+        IStockInfoDetail_HtyService StockInfoDetail_HtyService { get; }
+
+        IStockInfo_HtyService StockInfo_HtyService { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockViewService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockViewService.cs"
new file mode 100644
index 0000000..4dbc93f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockViewService.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Stock;
+
+namespace WIDESEA_IStockService
+{
+    public interface IStockViewService : IDependency
+    {
+        PageGridData<StockViewDTO> GetPageData(PageDataOptions options);
+
+        object GetDetailPage(PageDataOptions pageData);
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/WIDESEA_IStockService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/WIDESEA_IStockService.csproj"
new file mode 100644
index 0000000..a70161f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/WIDESEA_IStockService.csproj"
@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_DTO\WIDESEA_DTO.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryListService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryListService.cs"
new file mode 100644
index 0000000..cd1edb7
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryListService.cs"
@@ -0,0 +1,11 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_ISystemService
+{
+    public interface ISys_DictionaryListService : IService<Sys_DictionaryList>
+    {
+        IRepository<Sys_DictionaryList> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryService.cs"
new file mode 100644
index 0000000..aa5aab0
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryService.cs"
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.System;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_ISystemService
+{
+    public interface ISys_DictionaryService : IService<Sys_Dictionary>
+    {
+        IRepository<Sys_Dictionary> Repository { get; }
+
+        List<VueDictionaryDTO> GetVueDictionary(string[] dicNos);
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_LogService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_LogService.cs"
new file mode 100644
index 0000000..27dcb29
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_LogService.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_ISystemService
+{
+    public interface ISys_LogService : IService<Sys_Log>
+    {
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_MenuService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_MenuService.cs"
new file mode 100644
index 0000000..8458ff9
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_MenuService.cs"
@@ -0,0 +1,39 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.System;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_ISystemService
+{
+    public interface ISys_MenuService : IService<Sys_Menu>
+    {
+        IRepository<Sys_Menu> Repository { get; }
+
+        object GetCurrentMenuActionList();
+
+        object GetMenuActionList(int roleId);
+
+        List<MenuDTO> GetUserMenuList(int roleId);
+        List<MenuDTO> GetUserMenuListPDA(int roleId);
+
+        List<ActionDTO> GetActions(int menuId, List<ActionDTO> menuActions, List<Permissions> permissions, int roleId);
+
+        object GetMenu();
+
+        object GetTreeItem(int menuId);
+
+        WebResponseContent Save(Sys_Menu menu);
+
+        WebResponseContent DelMenu(int menuId);
+
+        object? GetTreeMenuPDAStash(int ParentId);
+
+        List<Permissions> GetPermissions(int roleId);
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleAuthService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleAuthService.cs"
new file mode 100644
index 0000000..ea38971
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleAuthService.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_ISystemService
+{
+    public interface ISys_RoleAuthService : IService<Sys_RoleAuth>
+    {
+        IRepository<Sys_RoleAuth> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleService.cs"
new file mode 100644
index 0000000..493cfcd
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleService.cs"
@@ -0,0 +1,35 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_DTO.System;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.System;
+using WIDESEA_Core.BaseRepository;
+
+namespace WIDESEA_ISystemService
+{
+    public interface ISys_RoleService : IService<Sys_Role>
+    {
+        IRepository<Sys_Role> Repository { get; }
+
+        List<int> GetAllChildrenRoleId(int roleId);
+
+        List<RoleNodes> GetAllChildren(int roleId);
+
+        WebResponseContent GetCurrentTreePermission();
+
+        WebResponseContent GetUserTreePermission(int RoleId);
+
+        WebResponseContent GetCurrentTreePermissionPDA();
+
+        WebResponseContent GetUserTreePermissionPDA(int RoleId);
+
+        WebResponseContent SavePermission(List<UserPermissionDTO> userPermissions, int roleId);
+
+        WebResponseContent SavePermissionPDA(List<UserPermissionDTO> userPermissions, int roleId);
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_TenantService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_TenantService.cs"
new file mode 100644
index 0000000..c8de583
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_TenantService.cs"
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_ISystemService
+{
+    public interface ISys_TenantService : IService<Sys_Tenant>
+    {
+        IRepository<Sys_Tenant> Repository { get; }
+
+        WebResponseContent InitTenantInfo(string tenantName, int tenantType);
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_UserService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_UserService.cs"
new file mode 100644
index 0000000..0692b26
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_UserService.cs"
@@ -0,0 +1,26 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_ISystemService
+{
+    public interface ISys_UserService : IService<Sys_User>
+    {
+        IRepository<Sys_User> Repository { get; }
+
+        WebResponseContent Login(LoginInfo loginInfo);
+
+        WebResponseContent GetCurrentUserInfo();
+
+        WebResponseContent ModifyPwd(string oldPwd, string newPwd);
+        WebResponseContent ModifyUserPwd(string password, string userName);
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/WIDESEA_ISystemService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/WIDESEA_ISystemService.csproj"
new file mode 100644
index 0000000..8b9ba57
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ISystemService/WIDESEA_ISystemService.csproj"
@@ -0,0 +1,13 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_DTO\WIDESEA_DTO.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
new file mode 100644
index 0000000..82805a3
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
@@ -0,0 +1,41 @@
+锘�#region << 鐗� 鏈� 娉� 閲� >>
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEA_ITaskInfoService
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛�
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ * 
+ *----------------------------------------------------------------*/
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_DTO;
+using WIDESEA_DTO.Stock;
+using WIDESEA_DTO.Task;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_ITaskInfoService
+{
+    public interface ITaskService : IService<Dt_Task>
+    {
+        IRepository<Dt_Task> Repository { get; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITask_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITask_HtyService.cs"
new file mode 100644
index 0000000..8bd7243
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITask_HtyService.cs"
@@ -0,0 +1,18 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_DTO.Stock;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_ITaskInfoService;
+
+public interface ITask_HtyService : IService<Dt_Task_Hty>
+{
+}
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/WIDESEA_ITaskInfoService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/WIDESEA_ITaskInfoService.csproj"
new file mode 100644
index 0000000..a70161f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/WIDESEA_ITaskInfoService.csproj"
@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_DTO\WIDESEA_DTO.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetailService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetailService.cs"
new file mode 100644
index 0000000..0c7afc5
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetailService.cs"
@@ -0,0 +1,25 @@
+锘縰sing Org.BouncyCastle.Crypto;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_InboundService
+{
+    public class InboundOrderDetailService : ServiceBase<Dt_InboundOrderDetail, IRepository<Dt_InboundOrderDetail>>, IInboundOrderDetailService
+    {
+        public IRepository<Dt_InboundOrderDetail> Repository => BaseDal;
+
+        public InboundOrderDetailService(IRepository<Dt_InboundOrderDetail> BaseDal) : base(BaseDal)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetail_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetail_HtyService.cs"
new file mode 100644
index 0000000..919284a
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetail_HtyService.cs"
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_InboundService
+{
+    public class InboundOrderDetail_HtyService : ServiceBase<Dt_InboundOrderDetail_Hty, IRepository<Dt_InboundOrderDetail_Hty>>, IInboundOrderDetail_HtyService
+    {
+        public IRepository<Dt_InboundOrderDetail_Hty> Repository => BaseDal;
+
+        public InboundOrderDetail_HtyService(IRepository<Dt_InboundOrderDetail_Hty> BaseDal) : base(BaseDal)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
new file mode 100644
index 0000000..f3f6996
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
@@ -0,0 +1,25 @@
+锘縰sing AutoMapper;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IBasicService;
+using WIDESEA_IInboundService;
+using WIDESEA_IRecordService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_InboundService
+{
+    public class InboundOrderService : ServiceBase<Dt_InboundOrder, IRepository<Dt_InboundOrder>>, IInboundOrderService
+    {
+        private readonly IMapper _mapper;
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+
+        public IRepository<Dt_InboundOrder> Repository => BaseDal;
+
+        public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        {
+            _mapper = mapper;
+            _unitOfWorkManage = unitOfWorkManage;
+        }
+       
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrder_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrder_HtyService.cs"
new file mode 100644
index 0000000..bc3f32d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrder_HtyService.cs"
@@ -0,0 +1,30 @@
+锘縰sing AutoMapper;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection.Metadata;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Utilities;
+using WIDESEA_DTO;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_IBasicService;
+using WIDESEA_IInboundService;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_InboundService
+{
+    public class InboundOrder_HtyService : ServiceBase<Dt_InboundOrder_Hty, IRepository<Dt_InboundOrder_Hty>>, IInboundOrder_HtyService
+    {
+        public InboundOrder_HtyService(IRepository<Dt_InboundOrder_Hty> BaseDal) : base(BaseDal)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs"
new file mode 100644
index 0000000..97a2766
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs"
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_IInboundService;
+
+namespace WIDESEA_InboundService
+{
+    public class InboundService : IInboundService
+    {
+        public IInboundOrderDetailService InboundOrderDetailService { get; }
+
+        public IInboundOrderService InbounOrderService { get; }
+
+        public InboundService(IInboundOrderDetailService inboundOrderDetailService, IInboundOrderService inbounOrderService)
+        {
+            InboundOrderDetailService = inboundOrderDetailService;
+            InbounOrderService = inbounOrderService;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj"
new file mode 100644
index 0000000..2796822
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj"
@@ -0,0 +1,17 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_IBasicService\WIDESEA_IBasicService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IInboundService\WIDESEA_IInboundService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IStockService\WIDESEA_IStockService.csproj" />
+    <ProjectReference Include="..\WIDESEA_ITaskInfoService\WIDESEA_ITaskInfoService.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/LoginInfo.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/LoginInfo.cs"
new file mode 100644
index 0000000..678745b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/LoginInfo.cs"
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Model
+{
+    public class LoginInfo
+    {
+        public string UserName { get; set; }
+
+        public string Password { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_ApprovalFlow.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_ApprovalFlow.cs"
new file mode 100644
index 0000000..f63ed62
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_ApprovalFlow.cs"
@@ -0,0 +1,41 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 瀹℃壒娴佺▼琛�
+    /// </summary>
+    [SugarTable(nameof(Dt_ApprovalFlow), "瀹℃壒娴佺▼琛�")]
+    public class Dt_ApprovalFlow : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 瀹℃壒娴佺▼缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "瀹℃壒娴佺▼缂栧彿")]
+        public string FlowCode {  get; set; }
+
+        /// <summary>
+        /// 瀹℃壒娴佺▼鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "瀹℃壒娴佺▼鍚嶇О")]
+        public string FlowName { get; set; }
+
+        /// <summary>
+        /// 瀹℃壒娴佺▼鎻忚堪
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "瀹℃壒娴佺▼鎻忚堪")]
+        public string FlowDes { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_ApprovalNode.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_ApprovalNode.cs"
new file mode 100644
index 0000000..6381da3
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_ApprovalNode.cs"
@@ -0,0 +1,53 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 瀹℃壒鑺傜偣琛�
+    /// </summary>
+    [SugarTable(nameof(Dt_ApprovalNode), "瀹℃壒鑺傜偣琛�")]
+    public class Dt_ApprovalNode : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 瀹℃壒娴佺▼缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "瀹℃壒娴佺▼缂栧彿锛屽閿�")]
+        public int FlowId { get; set; }
+
+        /// <summary>
+        /// 瀹℃壒鑺傜偣鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "瀹℃壒鑺傜偣鍚嶇О")]
+        public string NodeName { get; set; }
+
+        /// <summary>
+        /// 鑺傜偣绫诲瀷锛堝鍗曚汉瀹℃壒銆佸浜哄鎵广�佷細绛剧瓑锛�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鑺傜偣绫诲瀷锛堝鍗曚汉瀹℃壒銆佸浜哄鎵广�佷細绛剧瓑锛�")]
+        public int NodeType { get; set; }
+
+        /// <summary>
+        /// 瀹℃壒浜鸿鑹诧紙濡傞儴闂ㄧ粡鐞嗐�佹�荤粡鐞嗙瓑锛�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "瀹℃壒浜鸿鑹诧紙濡傞儴闂ㄧ粡鐞嗐�佹�荤粡鐞嗙瓑锛�")]
+        public int ApproverRole { get; set; }
+
+        /// <summary>
+        /// 鑺傜偣椤哄簭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鑺傜偣椤哄簭")]
+        public int NodeSequence { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_ApprovalTask.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_ApprovalTask.cs"
new file mode 100644
index 0000000..c1126f5
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_ApprovalTask.cs"
@@ -0,0 +1,71 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 瀹℃壒浠诲姟琛�
+    /// </summary>
+    [SugarTable(nameof(Dt_ApprovalTask), "瀹℃壒浠诲姟琛�")]
+    public class Dt_ApprovalTask : BaseEntity
+    {
+        /// <summary>
+        /// 瀹℃壒浠诲姟缂栧彿锛屼富閿�
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "瀹℃壒浠诲姟缂栧彿锛屼富閿�")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 瀹℃壒娴佺▼缂栧彿锛屽閿�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "瀹℃壒娴佺▼缂栧彿锛屽閿�")]
+        public int FlowId { get; set; }
+
+        /// <summary>
+        /// 瀹℃壒鑺傜偣缂栧彿锛屽閿�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "瀹℃壒鑺傜偣缂栧彿锛屽閿�")]
+        public int NodeId { get; set; }
+
+        /// <summary>
+        /// 鐢宠浜虹敤鎴风紪鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐢宠浜虹敤鎴风紪鍙�")]
+        public int ApplicantUserId { get; set; }
+
+        /// <summary>
+        /// 鐢宠浜虹敤鎴峰悕绉�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐢宠浜虹敤鎴峰悕绉�")]
+        public string ApplicantUserName { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鐘舵�侊紙濡傚緟瀹℃壒銆佸凡瀹℃壒銆佸凡椹冲洖绛夛級
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟鐘舵�侊紙濡傚緟瀹℃壒銆佸凡瀹℃壒銆佸凡椹冲洖绛夛級")]
+        public int Status { get; set; }
+
+        /// <summary>
+        /// 瀹℃壒鎰忚鍐呭
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "瀹℃壒鎰忚鍐呭")]
+        public string OpinionContent { get; set; }
+
+        /// <summary>
+        /// 瀹℃壒浜�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "瀹℃壒浜�")]
+        public string AuditUser { get; set; }
+
+        /// <summary>
+        /// 鏉ユ簮涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏉ユ簮涓婚敭")]
+        public int SourceKey { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_NodeTransition.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_NodeTransition.cs"
new file mode 100644
index 0000000..7944396
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/ApprovalFlow/Dt_NodeTransition.cs"
@@ -0,0 +1,41 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鑺傜偣璺宠浆琛�
+    /// </summary>
+    [SugarTable(nameof(Dt_NodeTransition), "鑺傜偣璺宠浆琛�")]
+    public class Dt_NodeTransition : BaseEntity
+    {
+        /// <summary>
+        /// 璺宠浆缂栧彿
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "璺宠浆缂栧彿锛屼富閿�")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 璧峰鑺傜偣缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "璧峰鑺傜偣缂栧彿锛屽閿�")]
+        public int FromNodeId { get; set; }
+
+        /// <summary>
+        /// 鐩爣鑺傜偣缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐩爣鑺傜偣缂栧彿锛屽閿�")]
+        public int ToNodeId { get; set; }
+
+        /// <summary>
+        /// 璺宠浆鏉′欢锛堝鈥滃悓鎰忓垯璺宠浆鍒颁笅涓�鑺傜偣鈥濓紝鈥滄嫆缁濆垯缁撴潫娴佺▼鈥濈瓑锛�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "璺宠浆鏉′欢锛堝鈥滃悓鎰忓垯璺宠浆鍒颁笅涓�鑺傜偣鈥濓紝鈥滄嫆缁濆垯缁撴潫娴佺▼鈥濈瓑锛�")]
+        public string Condition { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_ApiInfo.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_ApiInfo.cs"
new file mode 100644
index 0000000..e0dc8f8
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_ApiInfo.cs"
@@ -0,0 +1,43 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鎺ュ彛淇℃伅
+    /// </summary>
+    [SugarTable(nameof(Dt_ApiInfo), "鎺ュ彛淇℃伅")]
+    public class Dt_ApiInfo : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+        /// <summary>
+        /// 鎺ュ彛缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎺ュ彛缂栧彿")]
+        public string ApiCode { get; set; }
+        /// <summary>
+        /// 鎺ュ彛鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鎺ュ彛鍚嶇О")]
+        public string ApiName { get; set; }
+        /// <summary>
+        /// 鎺ュ彛鍦板潃
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鎺ュ彛鍦板潃")]
+        public string ApiAddress { get; set; }
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_CustomerInfo.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_CustomerInfo.cs"
new file mode 100644
index 0000000..cbbddb4
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_CustomerInfo.cs"
@@ -0,0 +1,47 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 瀹㈡埛淇℃伅
+    /// </summary>
+    [SugarTable(nameof(Dt_CustomerInfo), "瀹㈡埛淇℃伅")]
+    public class Dt_CustomerInfo : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 瀹㈡埛缂栫爜
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "瀹㈡埛缂栫爜")]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 瀹㈡埛鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "瀹㈡埛鍚嶇О")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 瀹㈡埛鍏ㄧО
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "瀹㈡埛鍏ㄧО")]
+        public string NickName { get; set; }
+
+        /// <summary>
+        /// 瀹㈡埛鐘舵�� 0:绂佺敤 1:鍙敤
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐘舵��")]
+        public bool State { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_LocationInfo.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_LocationInfo.cs"
new file mode 100644
index 0000000..d47c6b7
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_LocationInfo.cs"
@@ -0,0 +1,95 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 璐т綅淇℃伅
+    /// </summary>
+    [SugarTable(nameof(Dt_LocationInfo), "璐т綅淇℃伅")]
+    public class Dt_LocationInfo : BaseEntity, BaseWarehouseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 浠撳簱缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱缂栧彿")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 璐т綅缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 30, ColumnDescription = "璐т綅缂栧彿")]
+        public string LocationCode {  get; set; }
+
+        /// <summary>
+        /// 璐т綅鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "璐т綅鍚嶇О")]
+        public string LocationName { get; set; }
+
+        /// <summary>
+        /// 宸烽亾缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "宸烽亾缂栧彿")]
+        public string RoadwayNo {  get; set; }
+
+        /// <summary>
+        /// 璐т綅琛�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "璐т綅琛�")]
+        public int Row {  get; set; }
+
+        /// <summary>
+        /// 璐т綅鍒�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "璐т綅鍒�")]
+        public int Column { get; set; }
+
+        /// <summary>
+        /// 璐т綅灞�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "璐т綅灞�")]
+        public int Layer {  get; set; }
+
+        /// <summary>
+        /// 璐т綅娣卞害
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "璐т綅娣卞害")]
+        public int Depth {  get; set; }
+
+        /// <summary>
+        /// 璐т綅绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "璐т綅绫诲瀷")]
+        public int LocationType {  get; set; }
+
+        /// <summary>
+        /// 璐т綅鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = true, DefaultValue = "0", ColumnDescription = "璐т綅鐘舵��")]
+        public int LocationStatus {  get; set; }
+
+        /// <summary>
+        /// 绂佺敤鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = true, DefaultValue = "0", ColumnDescription = "绂佺敤鐘舵��")]
+        public int EnableStatus { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")]
+        public string Remark {  get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielCodeInfo.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielCodeInfo.cs"
new file mode 100644
index 0000000..37610d3
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielCodeInfo.cs"
@@ -0,0 +1,70 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鐗╂枡鐮佷俊鎭�
+    /// </summary>
+    [SugarTable(nameof(Dt_MaterielCodeInfo), "鐗╂枡鐮佷俊鎭�")]
+    public class Dt_MaterielCodeInfo : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 浠撳簱涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱缂栧彿")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鎵规鍙�")]
+        public string LotNo { get; set; }
+
+        /// <summary>
+        /// 鐢熶骇鏃ユ湡
+        /// </summary>
+        [ImporterHeader(Name = "鐢熶骇鏃ユ湡")]
+        [ExporterHeader(DisplayName = "鐢熶骇鏃ユ湡")]
+        [SugarColumn(IsNullable = false, IsOnlyIgnoreUpdate = true, ColumnDescription = "鐢熶骇鏃ユ湡")]
+        public DateTime ProductionDate {  get; set; }
+
+        /// <summary>
+        /// 鏈夋晥鏈�
+        /// </summary>
+        [ImporterHeader(Name = "鏈夋晥鏈�")]
+        [ExporterHeader(DisplayName = "鏈夋晥鏈�")]
+        [SugarColumn(IsNullable = false, IsOnlyIgnoreUpdate = true, ColumnDescription = "鏈夋晥鏈�")]
+        public DateTime EffectiveDate { get; set; }
+
+        /// <summary>
+        /// 閲囪喘鍗曞彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "閲囪喘鍗曞彿")]
+        public string PurchaseOrderNo { get; set; }
+
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏁伴噺")]
+        public float Quantity { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs"
new file mode 100644
index 0000000..682c4fe
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs"
@@ -0,0 +1,128 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.MaterielEnum;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鐗╂枡淇℃伅
+    /// </summary>
+    [SugarTable(nameof(Dt_MaterielInfo), "鐗╂枡淇℃伅")]
+    [SugarIndex("unique_materielinfo_materielcode", nameof(MaterielCode), OrderByType.Asc, true)]
+    public class Dt_MaterielInfo : BaseEntity//, BaseWarehouseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 浠撳簱缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱缂栧彿")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
+        public string MaterielName { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡瑙勬牸
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鐗╂枡瑙勬牸")]
+        public string MaterielSpec { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍩烘湰鍒嗙被(1:鎴愬搧銆�2:鍗婃垚鍝併��3:鍘熸潗鏂欍��4:澶囦欢)
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐗╂枡鍩烘湰鍒嗙被(1:鎴愬搧銆�2:鍗婃垚鍝併��3:鍘熸潗鏂欍��4:澶囦欢)")]
+        public MaterielTypeEnum MaterielType { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡灞炴�у垎绫�(1:閲囪喘浠躲��2:鑷埗浠躲��3:閲囪喘&鑷埗浠�)
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐗╂枡灞炴�у垎绫�(1:閲囪喘浠躲��2:鑷埗浠躲��3:閲囪喘&鑷埗浠�)")]
+        public MaterielSourceTypeEnum MaterielSourceType { get; set; }
+
+        /// <summary>
+        /// 鍩烘湰鍗曚綅(buyUnitId/StockUnitId)
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍩烘湰鍗曚綅(buyUnitId/StockUnitId)")]
+        public string MaterielUnit { get; set; }
+
+        /// <summary>
+        /// 鐗堟湰鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗堟湰鍚嶇О")]
+        public string MaterielVersion { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡灏哄
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鐗╂枡灏哄")]
+        public float? MaterielSize { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡闀垮害
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鐗╂枡闀垮害")]
+        public float? MaterielLength { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍘氬害
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鐗╂枡鍘氬害")]
+        public float? MaterielThickness { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡瀹藉害
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鐗╂枡瀹藉害")]
+        public float? MaterielWide { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍨嬪彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鐗╂枡鍨嬪彿")]
+        public string MaterielModel { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鐘舵��(0:绂佺敤銆�1:鍙敤)
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐗╂枡鐘舵��(0:绂佺敤銆�1:鍙敤)")]
+        public EnableEnum MaterielState { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨缁勭粐(榛樿:娣畨鐗瑰垱浜屽巶)
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "搴撳瓨缁勭粐(榛樿:娣畨鐗瑰垱浜屽巶)")]
+        public string MaterielInvOrgId { get; set; }
+
+        /// <summary>
+        /// 鏄惁闇�瑕佽川妫�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏄惁闇�瑕佽川妫�")]
+        public WhetherEnum IsCheck { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_PalletCodeInfo.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_PalletCodeInfo.cs"
new file mode 100644
index 0000000..cfbc12e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_PalletCodeInfo.cs"
@@ -0,0 +1,41 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鎵樼洏缂栧彿淇℃伅
+    /// </summary>
+    [SugarTable(nameof(Dt_PalletCodeInfo), "鎵樼洏缂栧彿淇℃伅")]
+    public class Dt_PalletCodeInfo : BaseEntity
+    {
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱涓婚敭")]
+        public int WarehouseId { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鎵樼洏绫诲瀷")]
+        public int PalletType { get; set; }
+
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鎵樼洏缂栧彿")]
+        public string PalletCode { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "娴佹按鍙�")]
+        public int SerialNo { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鎵撳嵃鐘舵��")]
+        public int Status { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "灏哄")]
+        public int Size { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鎵樼洏绫诲瀷涓婚敭")]
+        public int PalletTypeId { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_PalletTypeInfo.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_PalletTypeInfo.cs"
new file mode 100644
index 0000000..5e15a8c
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_PalletTypeInfo.cs"
@@ -0,0 +1,89 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鎵樼洏绫诲瀷
+    /// </summary>
+    [SugarTable(nameof(Dt_PalletTypeInfo), "鎵樼洏绫诲瀷")]
+    public class Dt_PalletTypeInfo : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鎵樼洏绫诲瀷")]
+        public int PalletType { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏鍙疯捣濮嬪瓧绗︿覆
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵樼洏鍙疯捣濮嬪瓧绗︿覆")]
+        public string CodeStartStr { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏绫诲瀷鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵樼洏绫诲瀷鍚嶇О")]
+        public string TypeName { get; set; }
+
+        /// <summary>
+        /// 闀垮害
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "闀垮害")]
+        public int Length { get; set; }
+
+        /// <summary>
+        /// 瀹藉害
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "瀹藉害")]
+        public int Width { get; set; }
+
+        /// <summary>
+        /// 楂樺害
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "楂樺害")]
+        public int Height { get; set; }
+
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐘舵��")]
+        public int Enbale { get; set; }
+
+        /// <summary>
+        /// 浠撳簱缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱缂栧彿")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 鎵�灞炲眰
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵�灞炲眰")]
+        public string SortNum { get; set; }
+
+        /// <summary>
+        /// 鍗犵敤璐т綅鏁�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗犵敤璐т綅鏁�")]
+        public int LocaitonCount { get; set; }
+
+        /// <summary>
+        /// 澶ф墭鐩樻槸鍚︽斁濂囨暟鍒�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "澶ф墭鐩樻槸鍚︽斁濂囨暟鍒�")]
+        public bool IsOdd {  get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_SupplierInfo.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_SupplierInfo.cs"
new file mode 100644
index 0000000..557e906
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_SupplierInfo.cs"
@@ -0,0 +1,83 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 渚涘簲鍟嗕俊鎭�
+    /// </summary>
+    [SugarTable(nameof(Dt_SupplierInfo), "渚涘簲鍟嗕俊鎭�")]
+    public class Dt_SupplierInfo : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 渚涘簲鍟嗙紪鐮�
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "渚涘簲鍟嗙紪鐮�")]
+        public string SupplierCode { get; set; }
+
+        /// <summary>
+        /// 渚涘簲鍟嗗悕绉�
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "渚涘簲鍟嗗悕绉�")]
+        public string SupplierName { get; set; }
+
+        /// <summary>
+        /// 渚涘簲鍟嗙畝绉�
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "渚涘簲鍟嗙畝绉�")]
+        public string SupplierShortName { get; set; }
+
+        /// <summary>
+        /// 鑱旂郴浜�
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鑱旂郴浜�")]
+        public string Contacts { get; set; }
+
+        /// <summary>
+        /// 鑱旂郴鐢佃瘽
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鑱旂郴鐢佃瘽")]
+        public string ContactNumber { get; set; }
+
+        /// <summary>
+        /// 鑱旂郴鍦板潃
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鑱旂郴鍦板潃")]
+        public string ContactAddress { get; set; }
+
+        /// <summary>
+        /// 鐢靛瓙閭
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鐢靛瓙閭")]
+        public string Email { get; set; }
+
+        /// <summary>
+        /// 鎻忚堪
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鎻忚堪")]
+        public string Description { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨缁勭粐
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "搴撳瓨缁勭粐")]
+        public string InvOrgId { get; set; }
+
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐘舵��")]
+        public int Status { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_UserInfo.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_UserInfo.cs"
new file mode 100644
index 0000000..5e5066e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_UserInfo.cs"
@@ -0,0 +1,61 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鍛樺伐淇℃伅
+    /// </summary>
+    [SugarTable(nameof(Dt_UserInfo), "鍛樺伐淇℃伅")]
+    public class Dt_UserInfo : BaseEntity
+    {
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 鍛樺伐鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍛樺伐鍙�")]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 閮ㄩ棬缂栫爜
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "閮ㄩ棬缂栫爜")]
+        public string DeptNo { get; set; }
+        /// <summary>
+        /// 閮ㄩ棬鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "閮ㄩ棬鍚嶇О")]
+        public string DeptName { get; set; }
+
+        /// <summary>
+        /// 鍛樺伐鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍛樺伐鍚嶇О")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 鐘舵�� 0:绂佺敤銆�1:鍙敤锛涢粯璁や负1
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐘舵��")]
+        public int State { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨缁勭粐
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "搴撳瓨缁勭粐")]
+        public string InvOrgId { get; set; }
+
+        /// <summary>
+        /// 绫诲瀷 1=浠撶鍛橈紝2=璐ㄦ鍛�
+        /// </summary>
+        //[SugarColumn(IsNullable = false, ColumnDescription = "绫诲瀷")]
+        //public int Type { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_Warehouse.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_Warehouse.cs"
new file mode 100644
index 0000000..fa11459
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_Warehouse.cs"
@@ -0,0 +1,59 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 浠撳簱淇℃伅
+    /// </summary>
+    [SugarTable(nameof(Dt_Warehouse), "浠撳簱淇℃伅")]
+    public class Dt_Warehouse : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 浠撳簱缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "浠撳簱缂栧彿")]
+        public string WarehouseCode { get; set; }
+
+        /// <summary>
+        /// 浠撳簱鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "浠撳簱鍚嶇О")]
+        public string WarehouseName { get; set; }
+
+        /// <summary>
+        /// 浠撳簱绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "浠撳簱绫诲瀷")]
+        public string WarehouseType { get; set; }
+
+        /// <summary>
+        /// 浠撳簱鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "浠撳簱鐘舵��")]
+        public int WarehouseStatus { get; set; }
+
+        /// <summary>
+        /// 浠撳簱鎻忚堪
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "浠撳簱鎻忚堪")]
+        public string WarehouseDes { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrder.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrder.cs"
new file mode 100644
index 0000000..6c4bd35
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrder.cs"
@@ -0,0 +1,120 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 璐ㄦ鍗�
+    /// </summary>
+    [SugarTable(nameof(Dt_CheckOrder), "璐ㄦ鍗�")]
+    public class Dt_CheckOrder : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int CheckOrderId { get; set; }
+
+        /// <summary>
+        /// 妫�楠屽崟鍙�
+        /// </summary>
+        [CodeRule(RuleCodeEnum.CheckOrderRule)]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "妫�楠屽崟鍙�")]
+        public string CheckOrderNo { get; set; }
+
+        /// <summary>
+        /// 鏀惰揣鍗曞彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鏀惰揣鍗曞彿")]
+        public string ReceiveOrderNo { get; set; }
+
+        /// <summary>
+        /// 璐ㄦ鍗曠姸鎬�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "璐ㄦ鍗曠姸鎬�")]
+        public int CheckOrderStatus { get; set; }
+
+        /// <summary>
+        /// 瀹℃壒鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "瀹℃壒鐘舵��")]
+        public int AuditStatus { get; set; }
+
+        /// <summary>
+        /// 鏀惰揣鍗曟槑缁嗚鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏀惰揣鍗曟槑缁嗚鍙�")]
+        public int ReceiveDetailRowNo { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鍚堟牸鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍚堟牸鏁伴噺")]
+        public float? QualifiedQuantity { get; set; }
+
+        /// <summary>
+        /// 鐗归噰鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鐗归噰鏁伴噺")]
+        public float? DefectedQuantity { get; set; }
+
+        /// <summary>
+        /// 閫�璐ф暟閲�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "閫�璐ф暟閲�")]
+        public float? ReturnQuantity { get; set; }
+
+        /// <summary>
+        /// 鎶ュ簾鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鎶ュ簾鏁伴噺")]
+        public float? ScrappedQuantity { get; set; }
+
+        /// <summary>
+        /// 妫�楠屾�绘暟(鏀惰揣鏁伴噺)
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "妫�楠屾�绘暟")]
+        public float ReceivedQuantity { get; set; }
+
+        /// <summary>
+        /// 妫�楠岀粨鏋�
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "妫�楠岀粨鏋�")]
+        public string Result { get; set; }
+
+        /// <summary>
+        /// 鐗归噰璇存槑
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鐗归噰璇存槑")]
+        public string DefectedNote { get; set; }
+
+        /// <summary>
+        /// 妫�楠屼汉
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "妫�楠屼汉")]
+        public string CheckUserName { get; set; }
+        /// <summary>
+        /// 妫�楠屼笂浼犵姸鎬�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "妫�楠屼笂浼犵姸鎬�")]
+        public int UploadStatus { get; set; }
+        /// <summary>
+        /// 璐ㄦ缁撴灉
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(Dt_CheckOrderResult.CheckOrderId), nameof(CheckOrderId))]
+        public List<Dt_CheckOrderResult> Details { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrderResult.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrderResult.cs"
new file mode 100644
index 0000000..12bbcc7
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrderResult.cs"
@@ -0,0 +1,53 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 妫�楠岀粨鏋�
+    /// </summary>
+    [SugarTable(nameof(Dt_CheckOrderResult), "妫�楠岀粨鏋�")]
+    public class Dt_CheckOrderResult : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 妫�楠屽崟涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "妫�楠屽崟涓婚敭")]
+        public int CheckOrderId { get; set; }
+
+        /// <summary>
+        /// 缂洪櫡浠g爜
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "缂洪櫡浠g爜")]
+        public string DefectCode { get; set; }
+
+        /// <summary>
+        /// 妫�楠岀粨鏋�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "妫�楠岀粨鏋�")]
+        public string Result { get; set; }
+
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鏁伴噺")]
+        public float Quantity { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "澶囨敞")]
+        public string Note { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_AnalysisRuleConfig.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_AnalysisRuleConfig.cs"
new file mode 100644
index 0000000..7813561
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_AnalysisRuleConfig.cs"
@@ -0,0 +1,65 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 缂栫爜瑙f瀽瑙勫垯閰嶇疆
+    /// </summary>
+    [SugarTable(nameof(Dt_AnalysisRuleConfig),"缂栫爜瑙f瀽瑙勫垯閰嶇疆")]
+    public class Dt_AnalysisRuleConfig : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 瑙勫垯缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "瑙勫垯缂栧彿")]
+        public string AnalysisCode { get; set; }
+
+        /// <summary>
+        /// 瑙勫垯鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "瑙勫垯鍚嶇О")]
+        public string AnalysisName { get; set; }
+
+        /// <summary>
+        /// 鍓嶇紑瀛楃涓�
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "鍓嶇紑瀛楃涓�")]
+        public string StartStr { get; set; }
+
+        /// <summary>
+        /// 缁撴潫瀛楃涓�
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "缁撴潫瀛楃涓�")]
+        public string EndStr { get; set; }
+
+        /// <summary>
+        /// 鍒嗗壊瀛楃涓�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鍒嗗壊瀛楃涓�")]
+        public string SplitStr { get; set; }
+
+        /// <summary>
+        /// 缂栫爜瑙勫垯
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 100, ColumnDescription = "缂栫爜瑙勫垯")]
+        public string Format { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_CodeRuleConfig.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_CodeRuleConfig.cs"
new file mode 100644
index 0000000..e25fc30
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_CodeRuleConfig.cs"
@@ -0,0 +1,71 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 缂栫爜鐢熸垚瑙勫垯閰嶇疆
+    /// </summary>
+    [SugarTable(nameof(Dt_CodeRuleConfig), "缂栫爜鐢熸垚瑙勫垯閰嶇疆")]
+    public class Dt_CodeRuleConfig : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 瑙勫垯缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "瑙勫垯缂栧彿")]
+        public string RuleCode { get; set; }
+
+        /// <summary>
+        /// 瑙勫垯鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "瑙勫垯鍚嶇О")]
+        public string RuleName { get; set; }
+
+        /// <summary>
+        /// 娴佹按鍙疯捣濮嬪��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "娴佹按鍙疯捣濮嬪��")]
+        public int StartVal { get; set; }
+
+        /// <summary>
+        /// 鍓嶇紑瀛楃涓�
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 2, ColumnDescription = "鍓嶇紑瀛楃涓�")]
+        public string StartStr { get; set; }
+
+        /// <summary>
+        /// 缂栫爜瑙勫垯
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "缂栫爜瑙勫垯")]
+        public string Format { get; set; }
+
+        /// <summary>
+        /// 娴佹按鍙烽暱搴�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "娴佹按鍙烽暱搴�")]
+        public int Length { get; set; }
+
+        /// <summary>
+        /// 娴佹按鍙峰綋鍓嶅��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "娴佹按鍙峰綋鍓嶅��")]
+        public int CurrentVal { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs"
new file mode 100644
index 0000000..63042a0
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs"
@@ -0,0 +1,80 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鍏ュ簱鍗�
+    /// </summary>
+    [SugarTable(nameof(Dt_InboundOrder), "鍏ュ簱鍗�")]
+    public class Dt_InboundOrder : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 浠撳簱涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱涓婚敭")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁缂栧彿
+        /// </summary>
+        [CodeRule(RuleCodeEnum.InboundOrderRule)]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿")]
+        public string InboundOrderNo { get; set; }
+
+        /// <summary>
+        /// 涓婃父鍗曟嵁缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "涓婃父鍗曟嵁缂栧彿")]
+        public string UpperOrderNo { get; set; }
+
+        /// <summary>
+        /// 渚涘簲鍟嗙紪鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "渚涘簲鍟嗙紪鍙�")]
+        public string SupplierId { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁绫诲瀷")]
+        public int OrderType { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鐘舵��")]
+        public int OrderStatus { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏂瑰紡
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍒涘缓鏂瑰紡")]
+        public int CreateType { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 鍏ュ簱鍗曟槑缁�
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(Dt_InboundOrderDetail.OrderId), nameof(Id))]
+        public List<Dt_InboundOrderDetail> Details { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs"
new file mode 100644
index 0000000..1238647
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs"
@@ -0,0 +1,89 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鍏ュ簱鍗曟槑缁�
+    /// </summary>
+    [SugarTable(nameof(Dt_InboundOrderDetail), "鍏ュ簱鍗曟槑缁�")]
+    public class Dt_InboundOrderDetail : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 鍏ュ簱鍗曚富閿�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍏ュ簱鍗曚富閿�")]
+        public int OrderId { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡鍚嶇О")]
+        public string MaterielName { get; set; }
+
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵规鍙�")]
+        public string BatchNo { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鏁伴噺")]
+        public float OrderQuantity { get; set; }
+
+        /// <summary>
+        /// 缁勭洏鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "缁勭洏鏁伴噺", DefaultValue = "0")]
+        public float ReceiptQuantity { get; set; }
+
+        /// <summary>
+        /// 涓婃灦鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "涓婃灦鏁伴噺", DefaultValue = "0")]
+        public float OverInQuantity { get; set; }
+
+        /// <summary>
+        /// 璁㈠崟鏄庣粏鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "璁㈠崟鏄庣粏鐘舵��")]
+        public int OrderDetailStatus { get; set; }
+
+        /// <summary>
+        /// 鍗曚綅
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鍗曚綅")]
+        public string Unit { get; set; }
+
+        /// <summary>
+        /// 鏀惰揣鍗曟槑缁嗚鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏀惰揣鍗曟槑缁嗚鍙�")]
+        public int RowNo { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail_Hty.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail_Hty.cs"
new file mode 100644
index 0000000..34e13aa
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail_Hty.cs"
@@ -0,0 +1,42 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鍏ュ簱鍗曟槑缁�
+    /// </summary>
+    [SugarTable(nameof(Dt_InboundOrderDetail_Hty), "鍏ュ簱鍗曟槑缁�")]
+    public class Dt_InboundOrderDetail_Hty : Dt_InboundOrderDetail, IBaseHistoryEntity
+    {
+        /// <summary>
+        /// 鍘熻〃涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+        [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+        public int SourceId { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+        [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+        public string OperateType { get; set; }
+
+        /// <summary>
+        /// 绉诲叆鍘嗗彶鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+        [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+        public DateTime InsertTime { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder_Hty.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder_Hty.cs"
new file mode 100644
index 0000000..2442f67
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder_Hty.cs"
@@ -0,0 +1,44 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鍏ュ簱鍗曞巻鍙�
+    /// </summary>
+    [SugarTable(nameof(Dt_InboundOrder_Hty), "鍏ュ簱鍗曞巻鍙�")]
+    public class Dt_InboundOrder_Hty : Dt_InboundOrder, IBaseHistoryEntity
+    {
+        /// <summary>
+        /// 鍘熻〃涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+        [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+        public int SourceId { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+        [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+        public string OperateType { get; set; }
+
+        /// <summary>
+        /// 绉诲叆鍘嗗彶鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+        [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+        public DateTime InsertTime { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrder.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrder.cs"
new file mode 100644
index 0000000..52c9f66
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrder.cs"
@@ -0,0 +1,77 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 閲囪喘鍗�
+    /// </summary>
+    [SugarTable(nameof(Dt_PurchaseOrder), "閲囪喘鍗�"), ModelValidate]
+    public class Dt_PurchaseOrder : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 閲囪喘鍗曞彿
+        /// </summary>
+        [PropertyValidate("閲囪喘鍗曞彿", NotNullAndEmpty = true)]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "閲囪喘鍗曞彿")]
+        public string PurchaseOrderNo { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁绫诲瀷(S:鏍囧噯鍏ュ簱銆乂:瀵勫敭琛ョ粰鍏ュ簱)
+        /// </summary>
+        [PropertyValidate("鍗曟嵁绫诲瀷", NotNullAndEmpty = true, Check = new[] { "S", "V" })]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍗曟嵁绫诲瀷")]
+        public string PurchaseOrderType { get; set; }
+
+        /// <summary>
+        /// 渚涘簲鍟嗙紪鍙�
+        /// </summary>
+        [PropertyValidate("渚涘簲鍟嗙紪鍙�", NotNullAndEmpty = true)]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "渚涘簲鍟嗙紪鍙�")]
+        public string SupplierCode { get; set; }
+
+        /// <summary>
+        /// 閲囪喘鏁伴噺
+        /// </summary>
+        [PropertyValidate("閲囪喘鏁伴噺", MinValue = 0, IsContainMinValue = false)]
+        [SugarColumn(IsNullable = false, ColumnDescription = "閲囪喘鏁伴噺")]
+        public float OrderQuantity { get; set; }
+
+        /// <summary>
+        /// 閲囪喘鍗曠姸鎬�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "閲囪喘鍗曠姸鎬�")]
+        public int PurchaseOrderStatus { get; set; }
+
+        /// <summary>
+        /// 涓嬪崟鏃ユ湡
+        /// </summary>
+        [PropertyValidate("涓嬪崟鏃ユ湡", NotNullAndEmpty = true)]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "涓嬪崟鏃ユ湡")]
+        public string OrderDate { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍒楄〃
+        /// </summary>
+        [PropertyValidate("鐗╂枡鍒楄〃", NotNullAndEmpty = true), Navigate(NavigateType.OneToMany, nameof(Dt_PurchaseOrderDetail.PurchaseOrderId), nameof(Id))]
+        public List<Dt_PurchaseOrderDetail> Details { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs"
new file mode 100644
index 0000000..70e71fc
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs"
@@ -0,0 +1,71 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 閲囪喘鍗曟槑缁�
+    /// </summary>
+    [SugarTable(nameof(Dt_PurchaseOrderDetail), "閲囪喘鍗曟槑缁�"), ModelValidate]
+    public class Dt_PurchaseOrderDetail : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 澶磋〃涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "澶磋〃涓婚敭")]
+        public int PurchaseOrderId { get; set; }
+
+        /// <summary>
+        /// 琛屽彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "琛屽彿")]
+        public int RowNo { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 閲囪喘鍗曟槑缁嗙姸鎬�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "閲囪喘鍗曟槑缁嗙姸鎬�")]
+        public int PurchaseDetailStatus { get; set; }
+
+        /// <summary>
+        /// 浠撳簱缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnName = "WarehouseId", ColumnDescription = "浠撳簱缂栧彿")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏁伴噺")]
+        public float PurchaseDetailQuantity { get; set; }
+        /// <summary>
+        /// 宸叉敹璐ф暟閲�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "宸叉敹璐ф暟閲�")]
+        public float PurchaseDetailReceiveQty { get; set; }
+
+        /// <summary>
+        /// 鍗曚綅
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鍗曚綅")]
+        public string Unit { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs"
new file mode 100644
index 0000000..c48f4f8
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs"
@@ -0,0 +1,92 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鏀惰揣鍗�
+    /// </summary>
+    [SugarTable(nameof(Dt_ReceiveOrder), "鏀惰揣鍗�")]
+    public class Dt_ReceiveOrder : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int ReceiveOrderId { get; set; }
+
+        /// <summary>
+        /// 鏀惰揣鍗曞彿
+        /// </summary>
+        [CodeRule(RuleCodeEnum.ReceiveOrderRule)]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鏀惰揣鍗曞彿")]
+        public string ReceiveOrderNo { get; set; }
+
+        /// <summary>
+        /// 璁㈠崟绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "璁㈠崟绫诲瀷")]
+        public int ReceiveOrderType { get; set; }
+
+        /// <summary>
+        /// 璁㈠崟鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "璁㈠崟鐘舵��")]
+        public int ReceiveOrderStatus { get; set; }
+
+        /// <summary>
+        /// 涓婁紶鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "涓婁紶鐘舵��")]
+        public int UploadStatus { get; set; }
+
+        /// <summary>
+        /// 瀹㈡埛浠e彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "瀹㈡埛浠e彿")]
+        public string CustomerId { get; set; }
+
+        /// <summary>
+        /// 渚涘簲鍟嗕唬鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "渚涘簲鍟嗕唬鍙�")]
+        public string SuppliersId { get; set; }
+
+        /// <summary>
+        /// 浠撳簱涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱涓婚敭")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 鏀惰揣鏃ユ湡
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鏀惰揣鏃ユ湡")]
+        public DateTime ReceiveDate { get; set; }
+
+        /// <summary>
+        /// 閫佽揣鍗曞彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "閫佽揣鍗曞彿")]
+        public string DeliveryCode { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 鏀惰揣鍗曟槑缁�
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(Dt_ReceiveOrderDetail.ReceiveOrderId), nameof(ReceiveOrderId))]
+        public List<Dt_ReceiveOrderDetail> Details { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs"
new file mode 100644
index 0000000..36534f9
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs"
@@ -0,0 +1,101 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鏀惰揣鍗曟槑缁�
+    /// </summary>
+    [SugarTable(nameof(Dt_ReceiveOrderDetail), "鏀惰揣鍗曟槑缁�")]
+    public class Dt_ReceiveOrderDetail : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 鏀惰揣鍗曚富閿�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏀惰揣鍗曚富閿�")]
+        public int ReceiveOrderId { get; set; }
+
+        /// <summary>
+        /// 閲囪喘鍗曞彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "閲囪喘鍗曞彿")]
+        public string PurchaseOrderNo { get; set; }
+
+        /// <summary>
+        /// 閲囪喘鍗曟槑缁嗚鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "閲囪喘鍗曟槑缁嗚鍙�")]
+        public int PurchaseOrderDetailRowNo { get; set; }
+
+        /// <summary>
+        /// 琛屽彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "琛屽彿")]
+        public int RowNo { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵规鍙�")]
+        public string LotNo { get; set; }
+
+        /// <summary>
+        /// 鏀惰揣鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏀惰揣鏁伴噺")]
+        public float ReceivedQuantity { get; set; }
+
+        /// <summary>
+        /// 鏄惁瑕佹楠�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏄惁瑕佹楠�")]
+        public int IfInspection { get; set; }
+
+        /// <summary>
+        /// 鍚◣浠锋牸
+        /// </summary>
+        [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "鍚◣浠锋牸")]
+        public decimal PriceInTax { get; set; }
+
+        /// <summary>
+        /// 绋庣巼
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "绋庣巼")]
+        public string TaxRate { get; set; }
+
+        /// <summary>
+        /// 甯佸埆缂栫爜
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "甯佸埆缂栫爜")]
+        public string CurrCode { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 鍗曚綅
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "")]
+        public string Unit { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_MesOutboundOrder.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_MesOutboundOrder.cs"
new file mode 100644
index 0000000..235c50e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_MesOutboundOrder.cs"
@@ -0,0 +1,116 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    [SugarTable(nameof(Dt_MesOutboundOrder))]
+    public class Dt_MesOutboundOrder : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 浠撳簱涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱涓婚敭")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁缂栧彿
+        /// </summary>
+        [CodeRule(RuleCodeEnum.OutboundOrderRule)]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿", IsOnlyIgnoreUpdate = true)]
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍗曞彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "浠诲姟鍗曞彿")]
+        public string TaskNo { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁绫诲瀷", IsOnlyIgnoreUpdate = true)]
+        public int OrderType { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鐘舵��")]
+        public int OrderStatus { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏂瑰紡
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍒涘缓鏂瑰紡", IsOnlyIgnoreUpdate = true)]
+        public int CreateType { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterialCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
+        public string MaterialName { get; set; }
+
+        /// <summary>
+        /// 鍗曚綅
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍗曚綅")]
+        public string Unit { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鏁伴噺")]
+        public float OrderQuantity { get; set; }
+
+        /// <summary>
+        /// 閿佸畾鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "閿佸畾鏁伴噺", DefaultValue = "0")]
+        public float LockQuantity { get; set; }
+
+        /// <summary>
+        /// 宸插嚭鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "宸插嚭鏁伴噺", DefaultValue = "0")]
+        public float OverOutQuantity { get; set; }
+
+        /// <summary>
+        /// 绾夸綋
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "绾夸綋")]
+        public string Line { get; set; }
+
+        /// <summary>
+        /// 绾胯竟浠撳湴鍧�鐮�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "绾胯竟浠撳湴鍧�鐮�")]
+        public string TargetAddressCode { get; set; }
+
+        /// <summary>
+        /// 瑁佸垏瀹�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "瑁佸垏瀹�")]
+        public float Width { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundLockInfo.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundLockInfo.cs"
new file mode 100644
index 0000000..190c8ae
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundLockInfo.cs"
@@ -0,0 +1,112 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鍑哄簱璇︽儏
+    /// </summary>
+    [SugarTable(nameof(Dt_OutStockLockInfo), "鍑哄簱璇︽儏")]
+    public class Dt_OutStockLockInfo : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿")]
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁鏄庣粏涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鏄庣粏涓婚敭")]
+        public int OrderDetailId { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁绫诲瀷")]
+        public int OrderType { get; set; }
+
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵规鍙�")]
+        public string BatchNo { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
+        public string MaterielName { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "搴撳瓨涓婚敭")]
+        public int StockId { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鏁伴噺")]
+        public float OrderQuantity { get; set; }
+
+        /// <summary>
+        /// 鍘熷搴撳瓨閲�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍘熷搴撳瓨閲�")]
+        public float OriginalQuantity {  get; set; }
+
+        /// <summary>
+        /// 鍒嗛厤鍑哄簱閲�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍒嗛厤鍑哄簱閲�")]
+        public float AssignQuantity {  get; set; }
+
+        /// <summary>
+        /// 璐т綅缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "璐т綅缂栧彿")]
+        public string LocationCode { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵樼洏缂栧彿")]
+        public string PalletCode { get; set; }
+        /// <summary>
+        /// 鍗曚綅
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍗曚綅")]
+        public string Unit { get; set; }
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "浠诲姟鍙�")]
+        public int? TaskNum { get; set; }
+
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐘舵��")]
+        public int Status { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs"
new file mode 100644
index 0000000..c5aff01
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs"
@@ -0,0 +1,86 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鍑哄簱鍗�
+    /// </summary>
+    [SugarTable(nameof(Dt_OutboundOrder), "鍑哄簱鍗�")]
+    public class Dt_OutboundOrder : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 浠撳簱涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱涓婚敭")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁缂栧彿
+        /// </summary>
+        [CodeRule(RuleCodeEnum.OutboundOrderRule)]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿", IsOnlyIgnoreUpdate = true)]
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 涓婃父鍗曟嵁缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "涓婃父鍗曟嵁缂栧彿", IsOnlyIgnoreUpdate = true)]
+        public string UpperOrderNo { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁绫诲瀷", IsOnlyIgnoreUpdate = true)]
+        public int OrderType { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鐘舵��")]
+        public int OrderStatus { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏂瑰紡
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍒涘缓鏂瑰紡", IsOnlyIgnoreUpdate = true)]
+        public int CreateType { get; set; }
+
+        /// <summary>
+        /// 閮ㄩ棬缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "閮ㄩ棬缂栧彿")]
+        public string DepartmentCode { get; set; }
+
+        /// <summary>
+        /// 閮ㄩ棬鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "閮ㄩ棬鍚嶇О")]
+        public string DepartmentName { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 鍑哄簱鍗曟槑缁�
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(Dt_OutboundOrderDetail.OrderId), nameof(Id))]
+        public List<Dt_OutboundOrderDetail> Details { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail.cs"
new file mode 100644
index 0000000..78a2c67
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail.cs"
@@ -0,0 +1,87 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鍑哄簱鍗曟槑缁�
+    /// </summary>
+    [SugarTable(nameof(Dt_OutboundOrderDetail), "鍑哄簱鍗曟槑缁�")]
+    public class Dt_OutboundOrderDetail : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 鍑哄簱鍗曚富閿�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍑哄簱鍗曚富閿�")]
+        public int OrderId { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
+        public string MaterielName { get; set; }
+
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鎵规鍙�")]
+        public string BatchNo { get; set; }
+
+        /// <summary>
+        /// 琛屽彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "琛屽彿")]
+        public int RowNo {  get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false,  ColumnDescription = "鍗曟嵁鏁伴噺")]
+        public float OrderQuantity { get; set; }
+
+        /// <summary>
+        /// 閿佸畾鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false,  ColumnDescription = "閿佸畾鏁伴噺", DefaultValue = "0")]
+        public float LockQuantity { get; set; }
+
+        /// <summary>
+        /// 宸插嚭鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false,  ColumnDescription = "宸插嚭鏁伴噺", DefaultValue = "0")]
+        public float OverOutQuantity { get; set; }
+
+        /// <summary>
+        /// 璁㈠崟鏄庣粏鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "璁㈠崟鏄庣粏鐘舵��")]
+        public int OrderDetailStatus { get; set; }
+        /// <summary>
+        /// 鍗曚綅
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍗曚綅")]
+        public string Unit { get; set; }
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail_Hty.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail_Hty.cs"
new file mode 100644
index 0000000..01d46d6
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail_Hty.cs"
@@ -0,0 +1,42 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    [SugarTable(nameof(Dt_OutboundOrderDetail_Hty), "鍑哄簱鍗曟槑缁�")]
+    public class Dt_OutboundOrderDetail_Hty : Dt_OutboundOrderDetail, IBaseHistoryEntity
+    {
+        /// <summary>
+        /// 鍘熻〃涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+        [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+        public int SourceId { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+        [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+        public string OperateType { get; set; }
+
+        /// <summary>
+        /// 绉诲叆鍘嗗彶鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+        [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+        public DateTime InsertTime { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder_Hty.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder_Hty.cs"
new file mode 100644
index 0000000..c53b331
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder_Hty.cs"
@@ -0,0 +1,44 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    [SugarTable(nameof(Dt_OutboundOrder_Hty), "鍑哄簱鍗�")]
+    public class Dt_OutboundOrder_Hty : Dt_OutboundOrder, IBaseHistoryEntity
+    {
+        /// <summary>
+        /// 鍘熻〃涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+        [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+        public int SourceId { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+        [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+        public string OperateType { get; set; }
+
+        /// <summary>
+        /// 绉诲叆鍘嗗彶鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+        [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+        public DateTime InsertTime { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_LocationStatusChangeRecord.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_LocationStatusChangeRecord.cs"
new file mode 100644
index 0000000..357b358
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_LocationStatusChangeRecord.cs"
@@ -0,0 +1,77 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 璐т綅鐘舵�佸彉鍔ㄨ褰�
+    /// </summary>
+    [SugarTable(nameof(Dt_LocationStatusChangeRecord), "璐т綅鐘舵�佸彉鍔ㄨ褰�")]
+    public class Dt_LocationStatusChangeRecord : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 璐т綅涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "璐т綅涓婚敭")]
+        public int LocationId { get; set; }
+
+        /// <summary>
+        /// 璐т綅缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 30, ColumnDescription = "璐т綅缂栧彿")]
+        public string LocationCode { get; set; }
+
+        /// <summary>
+        /// 鍙樺姩鍓嶈揣浣嶇姸鎬�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍙樺姩鍓嶈揣浣嶇姸鎬�")]
+        public int BeforeStatus { get; set; }
+
+        /// <summary>
+        /// 鍙樺姩鍚庤揣浣嶇姸鎬�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍙樺姩鍚庤揣浣嶇姸鎬�")]
+        public int AfterStatus { get; set; }
+
+        /// <summary>
+        /// 鍙樺姩绫诲瀷锛堝嚭搴撱�佸叆搴撱�佹墜鍔ㄨ皟鏁�...锛�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍙樺姩绫诲瀷锛堝嚭搴撱�佸叆搴撱�佹墜鍔ㄨ皟鏁�...锛�")]
+        public int ChangeType { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍗曟嵁涓婚敭")]
+        public int? OrderId { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿")]
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "浠诲姟鍙�")]
+        public int? TaskNum { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_StockQuantityChangeRecord.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_StockQuantityChangeRecord.cs"
new file mode 100644
index 0000000..269dbae
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_StockQuantityChangeRecord.cs"
@@ -0,0 +1,101 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 搴撳瓨鍙樺姩淇℃伅璁板綍
+    /// </summary>
+    [SugarTable(nameof(Dt_StockQuantityChangeRecord), "搴撳瓨鍙樺姩淇℃伅璁板綍")]
+    public class Dt_StockQuantityChangeRecord : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨鏄庣粏涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "搴撳瓨鏄庣粏涓婚敭")]
+        public int StockDetailId { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵樼洏缂栧彿")]
+        public string PalleCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
+        public string MaterielName { get; set; }
+
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵规鍙�")]
+        public string BatchNo { get; set; }
+
+        /// <summary>
+        /// 搴忓垪鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 100, ColumnDescription = "搴忓垪鍙�")]
+        public string SerilNumber { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿")]
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "浠诲姟鍙�")]
+        public int? TaskNum { get; set; }
+
+        /// <summary>
+        /// 鍙樺姩绫诲瀷锛堝嚭搴撱�佸叆搴撱�佹墜鍔ㄨ皟鏁�...锛�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍙樺姩绫诲瀷锛堝嚭搴撱�佸叆搴撱�佹墜鍔ㄨ皟鏁�...锛�")]
+        public int ChangeType { get; set; }
+
+        /// <summary>
+        /// 鍙樺姩鏁伴噺锛堟鏁拌〃绀哄鍔狅紝璐熸暟琛ㄧず鍑忓皯锛�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍙樺姩鏁伴噺锛堟鏁拌〃绀哄鍔狅紝璐熸暟琛ㄧず鍑忓皯锛�")]
+        public float ChangeQuantity { get; set; }
+
+        /// <summary>
+        /// 鍙樺姩鍓嶅簱瀛橀噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍙樺姩鍓嶅簱瀛橀噺", DefaultValue = "0")]
+        public float BeforeQuantity { get; set; }
+
+        /// <summary>
+        /// 鍙樺姩鍚庡簱瀛橀噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍙樺姩鍚庡簱瀛橀噺", DefaultValue = "0")]
+        public float AfterQuantity { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfo.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfo.cs"
new file mode 100644
index 0000000..85fea92
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfo.cs"
@@ -0,0 +1,65 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 搴撳瓨淇℃伅
+    /// </summary>
+    [SugarTable(nameof(Dt_StockInfo), "搴撳瓨淇℃伅")]
+    public class Dt_StockInfo : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵樼洏缂栧彿")]
+        public string PalletCode { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鎵樼洏绫诲瀷")]
+        public int PalletType { get; set; }
+
+        /// <summary>
+        /// 璐т綅缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 30, ColumnDescription = "璐т綅缂栧彿")]
+        public string LocationCode { get; set; }
+
+        /// <summary>
+        /// 浠撳簱涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱涓婚敭")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "搴撳瓨鐘舵��")]
+        public int StockStatus { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨鏄庣粏
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(Dt_StockInfoDetail.StockId), nameof(Id))]
+        public List<Dt_StockInfoDetail> Details { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetail.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetail.cs"
new file mode 100644
index 0000000..8e69b63
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetail.cs"
@@ -0,0 +1,106 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    [SugarTable(nameof(Dt_StockInfoDetail), "搴撳瓨淇℃伅鏄庣粏")]
+    public class Dt_StockInfoDetail : BaseEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨淇℃伅涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "搴撳瓨淇℃伅涓婚敭")]
+        public int StockId { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
+        public string MaterielName { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿")]
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "鎵规鍙�")]
+        public string BatchNo { get; set; }
+
+        /// <summary>
+        /// 鐢熶骇鏃ユ湡
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鐢熶骇鏃ユ湡")]
+        public string ProductionDate { get; set; }
+
+        /// <summary>
+        /// 鏈夋晥鏈�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鏈夋晥鏈�")]
+        public string EffectiveDate { get; set; }
+
+        /// <summary>
+        /// 搴忓垪鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 100, ColumnDescription = "搴忓垪鍙�")]
+        public string SerialNumber { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "搴撳瓨鏁伴噺")]
+        public float StockQuantity { get; set; }
+
+        /// <summary>
+        /// 鍑哄簱鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍑哄簱鏁伴噺", DefaultValue = "0")]
+        public float OutboundQuantity { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨鏄庣粏鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "搴撳瓨鏄庣粏鐘舵��")]
+        public int Status { get; set; }
+
+        /// <summary>
+        /// 鍗曚綅
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍗曚綅")]
+        public string Unit { get; set; }
+        /// <summary>
+        /// 鍏ュ簱鍗曟槑缁嗚鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍏ュ簱鍗曟槑缁嗚鍙�")]
+        public int InboundOrderRowNo { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetail_Hty.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetail_Hty.cs"
new file mode 100644
index 0000000..82096fc
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetail_Hty.cs"
@@ -0,0 +1,42 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 搴撳瓨淇℃伅鏄庣粏鍘嗗彶
+    /// </summary>
+    [SugarTable(nameof(Dt_StockInfoDetail_Hty), "搴撳瓨淇℃伅鏄庣粏鍘嗗彶")]
+    public class Dt_StockInfoDetail_Hty : Dt_StockInfoDetail, IBaseHistoryEntity
+    {
+        /// <summary>
+        /// 鍘熻〃涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+        [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+        public int SourceId { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+        [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+        public string OperateType { get; set; }
+
+        /// <summary>
+        /// 绉诲叆鍘嗗彶鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+        [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+        public DateTime InsertTime { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfo_Hty.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfo_Hty.cs"
new file mode 100644
index 0000000..00a0f08
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfo_Hty.cs"
@@ -0,0 +1,42 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 搴撳瓨淇℃伅鍘嗗彶
+    /// </summary>
+    [SugarTable(nameof(Dt_StockInfo_Hty), "搴撳瓨淇℃伅")]
+    public class Dt_StockInfo_Hty : Dt_StockInfo, IBaseHistoryEntity
+    {
+        /// <summary>
+        /// 鍘熻〃涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+        [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+        public int SourceId { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+        [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+        public string OperateType { get; set; }
+
+        /// <summary>
+        /// 绉诲叆鍘嗗彶鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+        [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+        public DateTime InsertTime { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/RoleAuthor.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/RoleAuthor.cs"
new file mode 100644
index 0000000..4cd4407
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/RoleAuthor.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Model
+{
+    public class RoleAuthor
+    {
+        public int menuId { get; set; }
+        public string actions { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/RoleNodes.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/RoleNodes.cs"
new file mode 100644
index 0000000..25b6b51
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/RoleNodes.cs"
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Model.Models.System
+{
+    public class RoleNodes
+    {
+        public int Id { get; set; }
+        public int ParentId { get; set; }
+        public string RoleName { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Dictionary.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Dictionary.cs"
new file mode 100644
index 0000000..fb358b0
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Dictionary.cs"
@@ -0,0 +1,81 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Filter;
+using WIDESEA_Core.Tenants;
+
+namespace WIDESEA_Model.Models
+{
+    [MultiTenant]
+    [Exporter(ExporterHeaderFilter = typeof(ExporterHeaderFilter))]
+    [SugarTable("Sys_Dictionary", "瀛楀吀鏁版嵁")]
+    public class Sys_Dictionary : BaseEntity
+    {
+        /// <summary>
+        /// 瀛楀吀ID
+        /// </summary>
+        [ExporterHeader(DisplayName = "瀛楀吀ID")]
+        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "瀛楀吀ID")]
+        public int DicId { get; set; }
+
+        /// <summary>
+        /// 閰嶇疆椤�
+        /// </summary>
+        [ExporterHeader(DisplayName = "閰嶇疆椤�")]
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "閰嶇疆椤�")]
+        public string Config { get; set; }
+
+        /// <summary>
+        /// Sql璇彞
+        /// </summary>
+        [ExporterHeader(DisplayName = "Sql璇彞")]
+        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "Sql璇彞")]
+        public string Sql { get; set; }
+
+        /// <summary>
+        /// 瀛楀吀鍚嶇О
+        /// </summary>
+        [ExporterHeader(DisplayName = "瀛楀吀鍚嶇О")]
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "瀛楀吀鍚嶇О")]
+        public string DicName { get; set; }
+
+        /// <summary>
+        /// 瀛楀吀缂栧彿
+        /// </summary>
+        [ExporterHeader(DisplayName = "瀛楀吀缂栧彿")]
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "瀛楀吀缂栧彿")]
+        public string DicNo { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍚敤
+        /// </summary>
+        [ExporterHeader(DisplayName = "鏄惁鍚敤")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "鏄惁鍚敤")]
+        public byte? Enable { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭鍙�
+        /// </summary>
+        [ExporterHeader(DisplayName = "鎺掑簭鍙�")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "鎺掑簭鍙�")]
+        public int? OrderNo { get; set; }
+
+        /// <summary>
+        /// 鐖剁骇ID
+        /// </summary>
+        [ExporterHeader(DisplayName = "鐖剁骇ID")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "鐖剁骇ID")]
+        public int ParentId { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [ExporterHeader(DisplayName = "澶囨敞")]
+        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        [ExporterHeader(IsIgnore = true)]
+        [Navigate(NavigateType.OneToMany, nameof(DicId),nameof(DicId)), SugarColumn(IsIgnore = true, IsNullable = true)]
+        public List<Sys_DictionaryList> DicList { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_DictionaryList.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_DictionaryList.cs"
new file mode 100644
index 0000000..e29f6fc
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_DictionaryList.cs"
@@ -0,0 +1,57 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+using SqlSugar;
+using WIDESEA_Core.Tenants;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable("Sys_DictionaryList", "瀛楀吀鏄庣粏"), MultiTenant]
+    public class Sys_DictionaryList : BaseEntity
+    {
+        /// <summary>
+        /// 瀛楀吀鍒楄〃ID
+        /// </summary>
+        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "瀛楀吀鍒楄〃ID")]
+        public int DicListId { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁婧怲ext
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鏁版嵁婧怲ext")]
+        public string DicName { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁婧怴alue
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鏁版嵁婧怴alue")]
+        public string DicValue { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁婧怚D
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏁版嵁婧怚D")]
+        public int DicId { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍙敤
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鏄惁鍙敤")]
+        public byte? Enable { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鎺掑簭鍙�")]
+        public int? OrderNo { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Log.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Log.cs"
new file mode 100644
index 0000000..a2d31ba
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Log.cs"
@@ -0,0 +1,83 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using SqlSugar;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Tenants;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鎺ュ彛鏃ュ織
+    /// </summary>
+    [SugarTable(nameof(Sys_Log), "鎺ュ彛鏃ュ織")]
+    public class Sys_Log
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 寮�濮嬫椂闂�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "寮�濮嬫椂闂�")]
+        public DateTime? BeginDate { get; set; }
+
+        /// <summary>
+        /// 鏃堕暱
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鏃堕暱")]
+        public int? ElapsedTime { get; set; }
+
+        /// <summary>
+        /// 缁撴潫鏃堕棿
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "缁撴潫鏃堕棿")]
+        public DateTime EndDate { get; set; }
+
+        /// <summary>
+        /// 璇锋眰鍙傛暟
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = int.MaxValue, ColumnDescription = "璇锋眰鍙傛暟")]
+        public string RequestParam { get; set; }
+
+        /// <summary>
+        /// 鍝嶅簲鍙傛暟
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = int.MaxValue, ColumnDescription = "鍝嶅簲鍙傛暟")]
+        public string ResponseParam { get; set; }
+
+        /// <summary>
+        /// 鍝嶅簲鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍝嶅簲鐘舵��")]
+        public int? Success { get; set; }
+
+        /// <summary>
+        /// 璇锋眰鍦板潃
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "璇锋眰鍦板潃")]
+        public string Url { get; set; }
+
+        /// <summary>
+        /// 鐢ㄦ埛IP
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "鐢ㄦ埛IP")]
+        public string UserIP { get; set; }
+
+        /// <summary>
+        /// 鐢ㄦ埛鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鐢ㄦ埛鍚嶇О")]
+        public string? UserName { get; set; }
+
+        /// <summary>
+        /// 鐢ㄦ埛涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鐢ㄦ埛涓婚敭")]
+        public int? UserId { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Menu.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Menu.cs"
new file mode 100644
index 0000000..b2e79be
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Menu.cs"
@@ -0,0 +1,81 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SqlSugar;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Tenants;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable("Sys_Menu", "鑿滃崟閰嶇疆"), MultiTenant]
+    public class Sys_Menu : BaseEntity
+    {
+        /// <summary>
+        /// 鑿滃崟ID
+        /// </summary>
+        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "鑿滃崟ID")]
+        public int MenuId { get; set; }
+
+        /// <summary>
+        /// 鑿滃崟鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鑿滃崟鍚嶇О")]
+        public string MenuName { get; set; }
+
+        /// <summary>
+        /// 鏉冮檺
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "鏉冮檺")]
+        public string Auth { get; set; }
+
+        /// <summary>
+        /// 鍥炬爣
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鍥炬爣")]
+        public string Icon { get; set; }
+
+        /// <summary>
+        /// 鎻忚堪
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "鎻忚堪")]
+        public string Description { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍚敤
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鏄惁鍚敤")]
+        public byte? Enable { get; set; }
+
+        /// <summary>
+        /// 琛ㄥ悕
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "琛ㄥ悕")]
+        public string TableName { get; set; }
+
+        /// <summary>
+        /// 鐖剁骇ID
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐖剁骇ID")]
+        public int ParentId { get; set; }
+
+        /// <summary>
+        /// 璺緞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "璺緞")]
+        public string Url { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = true,ColumnDescription ="鎺掑簭鍙�")]
+        public int? OrderNo { get; set; }
+
+        /// <summary>
+        /// 鑿滃崟绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鑿滃崟绫诲瀷")]
+        public int MenuType { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Role.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Role.cs"
new file mode 100644
index 0000000..00dcd63
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Role.cs"
@@ -0,0 +1,54 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SqlSugar;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Tenants;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable("Sys_Role", "瑙掕壊琛�"), MultiTenant]
+    public class Sys_Role : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "涓婚敭")]
+        public int RoleId { get; set; }
+
+        /// <summary>
+        /// 閮ㄩ棬鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, IsIgnore = true, Length = 50, ColumnDescription = "閮ㄩ棬鍚嶇О")]
+        public string DeptName { get; set; }
+
+        /// <summary>
+        /// 閮ㄩ棬涓婚敭
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "閮ㄩ棬涓婚敭")]
+        public int? DeptId { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍚敤
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏄惁鍚敤")]
+        public byte Enable { get; set; }
+
+        /// <summary>
+        /// 鐖禝D
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐖禝D")]
+        public int ParentId { get; set; }
+
+        /// <summary>
+        /// 瑙掕壊鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "瑙掕壊鍚嶇О")]
+        public string RoleName { get; set; }
+
+        [Navigate(NavigateType.OneToMany, nameof(ParentId), nameof(RoleId)), SugarColumn(IsIgnore = true, IsNullable = true)]
+        public List<Sys_Role> Roles { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_RoleAuth.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_RoleAuth.cs"
new file mode 100644
index 0000000..1d9c5ff
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_RoleAuth.cs"
@@ -0,0 +1,48 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SqlSugar;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Tenants;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 瑙掕壊韬唤楠岃瘉绠$悊琛�
+    /// </summary>
+    [SugarTable("Sys_RoleAuth", "瑙掕壊韬唤楠岃瘉绠$悊"), MultiTenant]
+    public class Sys_RoleAuth : BaseEntity
+    {
+        /// <summary>
+        /// 瑙掕壊韬唤楠岃瘉ID
+        /// </summary>
+        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "瑙掕壊韬唤楠岃瘉ID")]
+        public int AuthId { get; set; }
+
+        /// <summary>
+        /// 鐢ㄦ埛鏉冮檺
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "鐢ㄦ埛鏉冮檺")]
+        public string AuthValue { get; set; }
+
+        /// <summary>
+        /// 鑿滃崟ID
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鑿滃崟ID")]
+        public int MenuId { get; set; }
+
+        /// <summary>
+        /// 瑙掕壊ID
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "瑙掕壊ID")]
+        public int? RoleId { get; set; }
+
+        /// <summary>
+        /// 鐢ㄦ埛ID
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鐢ㄦ埛ID")]
+        public int? UserId { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_RoleDataPermission.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_RoleDataPermission.cs"
new file mode 100644
index 0000000..b1d50cf
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_RoleDataPermission.cs"
@@ -0,0 +1,27 @@
+锘�//using SqlSugar;
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+//using WIDESEA_Core.DB.Models;
+
+//namespace WIDESEA_Model.Models
+//{
+//    [SugarTable(nameof(Sys_RoleDataPermission))]
+//    public class Sys_RoleDataPermission : BaseEntity
+//    {
+//        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+//        public int Id { get; set; }
+
+//        public int RoleId { get; set; }
+
+//        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "瑙掕壊鍚嶇О")]
+//        public string RoleName { get; set; }
+
+//        public int WarehouseId { get; set; }
+
+//        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "")]
+//        public string WarehouseName { get; set; }
+//    }
+//}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Tenant.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Tenant.cs"
new file mode 100644
index 0000000..33836b0
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Tenant.cs"
@@ -0,0 +1,57 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Tenants;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable("Sys_Tenant", "绉熸埛")]
+    public class Sys_Tenant : BaseEntity
+    {
+        /// <summary>
+        /// 绉熸埛ID
+        /// </summary>
+        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "绉熸埛ID")]
+        public int TenantId { get; set; }
+
+        /// <summary>
+        /// 绉熸埛鍚嶇О
+        /// </summary>
+        [SugarColumn(Length = 200, IsNullable = false, ColumnDescription = "绉熸埛鍚嶇О")]
+        public string TenantName { get; set; }
+
+        /// <summary>
+        /// 绉熸埛绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉熸埛绫诲瀷")]
+        public int TenantType { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁搴撶被鍨�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏁版嵁搴撶被鍨�")]
+        public int DbType { get; set; }
+
+        /// <summary>
+        /// 杩炴帴瀛楃涓�
+        /// </summary>
+        [SugarColumn(Length = 1000, IsNullable = false, ColumnDescription = "杩炴帴瀛楃涓�")]
+        public string ConnectionString { get; set; }
+
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐘舵��")]
+        public int Status { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(Length = 2000, IsNullable = true, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_User.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_User.cs"
new file mode 100644
index 0000000..99c6a1e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_User.cs"
@@ -0,0 +1,127 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Tenants;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 鐢ㄦ埛淇℃伅琛�
+    /// </summary>
+    //[SugarTable("SysUserInfo")]
+    [SugarTable("Sys_User", "鐢ㄦ埛琛�")] //('鏁版嵁搴撹〃鍚�'锛�'鏁版嵁搴撹〃澶囨敞')
+    public class Sys_User : BaseEntity
+    {
+        /// <summary>
+        /// 鐢ㄦ埛ID
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "鐢ㄦ埛ID")]
+        public int UserId { get; set; }
+
+        /// <summary>
+        ///甯愬彿
+        /// </summary>
+        [SugarColumn(Length = 100, IsNullable = false, ColumnDescription = "甯愬彿")]
+        public string UserName { get; set; }
+
+        /// <summary>
+        /// 瑙掕壊ID
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "瑙掕壊ID")]
+        public int RoleId { get; set; }
+
+        /// <summary>
+        /// 瑙掕壊鍚嶇О
+        /// </summary>
+        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "瑙掕壊鍚嶇О")]
+        public string RoleName { get; set; }
+
+        /// <summary>
+        /// 鐢佃瘽
+        /// </summary>
+        [SugarColumn(Length = 11, IsNullable = true, ColumnDescription = "鐢佃瘽")]
+        public string PhoneNo { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(Length = 200, IsNullable = true, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 瀵嗙爜
+        /// </summary>
+        [SugarColumn(Length = 200, IsNullable = false, ColumnDescription = "瀵嗙爜")]
+        public string UserPwd { get; set; }
+
+        /// <summary>
+        /// 鐪熷疄濮撳悕
+        /// </summary>
+        [SugarColumn(Length = 100, IsNullable = false, ColumnDescription = "鐪熷疄濮撳悕")]
+        public string UserTrueName { get; set; }
+
+        /// <summary>
+        /// 閮ㄩ棬
+        /// </summary>
+        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "閮ㄩ棬")]
+        public string DeptName { get; set; }
+
+        /// <summary>
+        /// 閮ㄩ棬ID
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "閮ㄩ棬ID")]
+        public int? DeptId { get; set; }
+
+        /// <summary>
+        /// 閭
+        /// </summary>
+        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "閭")]
+        public string Email { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍙敤
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏄惁鍙敤")]
+        public byte Enable { get; set; }
+
+        /// <summary>
+        /// 鎬у埆
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鎬у埆")]
+        public int? Gender { get; set; }
+
+        /// <summary>
+        /// 澶村儚
+        /// </summary>
+        [SugarColumn(Length = 500, IsNullable = true, ColumnDescription = "澶村儚")]
+        public string HeadImageUrl { get; set; }
+
+        /// <summary>
+        /// 鏈�鍚庡瘑鐮佷慨鏀规椂闂�
+        /// </summary>
+        [SugarColumn(IsNullable = true, IsOnlyIgnoreInsert = true, ColumnDescription = "鏈�鍚庡瘑鐮佷慨鏀规椂闂�")]
+        public DateTime? LastModifyPwdDate { get; set; }
+
+        /// <summary>
+        /// 鍦板潃
+        /// </summary>
+        [SugarColumn(Length = 200, IsNullable = true, ColumnDescription = "鍦板潃")]
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 浠ょ墝
+        /// </summary>
+        [SugarColumn(Length = 500, IsNullable = true, ColumnDescription = "浠ょ墝")]
+        public string Token { get; set; }
+
+        /// <summary>
+        /// 绉熸埛ID
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉熸埛ID", DefaultValue = "0")]
+        public long TenantId { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs"
new file mode 100644
index 0000000..4744830
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs"
@@ -0,0 +1,146 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.OtherEnum;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 浠诲姟淇℃伅
+    /// </summary>
+    [SugarTable(nameof(Dt_Task), "浠诲姟淇℃伅"), SugarIndex("unique_task_taskNum", nameof(TaskNum), OrderByType.Asc, true)]
+    public class Dt_Task : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "涓婚敭")]
+        [ExporterHeader(DisplayName = "涓婚敭")]
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int TaskId { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        [ImporterHeader(Name = "浠诲姟鍙�")]
+        [ExporterHeader(DisplayName = "浠诲姟鍙�")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟鍙�"), Sequence(nameof(SequenceEnum.SeqTaskNum), 100000000)]
+        public int TaskNum { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏缂栧彿
+        /// </summary>
+        [ImporterHeader(Name = "鎵樼洏缂栧彿")]
+        [ExporterHeader(DisplayName = "鎵樼洏缂栧彿")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵樼洏缂栧彿")]
+        public string PalletCode { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鎵樼洏绫诲瀷")]
+        public int PalletType { get; set; }
+
+        /// <summary>
+        /// 宸烽亾鍙�
+        /// </summary>
+        [ImporterHeader(Name = "宸烽亾鍙�")]
+        [ExporterHeader(DisplayName = "宸烽亾鍙�")]
+        [SugarColumn(IsNullable = false, Length = 10, ColumnDescription = "宸烽亾鍙�")]
+        public string Roadway { get; set; }
+
+        /// <summary>
+        /// 浠诲姟绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "浠诲姟绫诲瀷")]
+        [ExporterHeader(DisplayName = "浠诲姟绫诲瀷")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟绫诲瀷")]
+        public int TaskType { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鐘舵��
+        /// </summary>
+        [ImporterHeader(Name = "浠诲姟鐘舵��")]
+        [ExporterHeader(DisplayName = "浠诲姟鐘舵��")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟鐘舵��")]
+        public int TaskStatus { get; set; }
+
+        /// <summary>
+        /// 璧峰鍦板潃
+        /// </summary>
+        [ImporterHeader(Name = "璧峰鍦板潃")]
+        [ExporterHeader(DisplayName = "璧峰鍦板潃")]
+        [SugarColumn(IsNullable = false, Length = 30, ColumnDescription = "璧峰鍦板潃")]
+        public string SourceAddress { get; set; }
+
+        /// <summary>
+        /// 鐩爣鍦板潃
+        /// </summary>
+        [ImporterHeader(Name = "鐩爣鍦板潃")]
+        [ExporterHeader(DisplayName = "鐩爣鍦板潃")]
+        [SugarColumn(IsNullable = false, Length = 30, ColumnDescription = "鐩爣鍦板潃")]
+        public string TargetAddress { get; set; }
+
+        /// <summary>
+        /// 褰撳墠浣嶇疆
+        /// </summary>
+        [ImporterHeader(Name = "褰撳墠浣嶇疆")]
+        [ExporterHeader(DisplayName = "褰撳墠浣嶇疆")]
+        [SugarColumn(IsNullable = false, Length = 30, ColumnDescription = "褰撳墠浣嶇疆")]
+        public string CurrentAddress { get; set; }
+
+        /// <summary>
+        /// 涓嬩竴鍦板潃
+        /// </summary>
+        [ImporterHeader(Name = "涓嬩竴鍦板潃")]
+        [ExporterHeader(DisplayName = "涓嬩竴鍦板潃")]
+        [SugarColumn(IsNullable = false, Length = 30, ColumnDescription = "涓嬩竴鍦板潃")]
+        public string NextAddress { get; set; }
+
+        /// <summary>
+        /// 浠撳簱涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "浠撳簱涓婚敭")]
+        [ExporterHeader(DisplayName = "浠撳簱涓婚敭")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱涓婚敭")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁缂栧彿
+        /// </summary>
+        [ImporterHeader(Name = "鍗曟嵁缂栧彿")]
+        [ExporterHeader(DisplayName = "鍗曟嵁缂栧彿")]
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿")]
+        public string? OrderNo { get; set; }
+
+        /// <summary>
+        /// 浼樺厛绾�
+        /// </summary>
+        [ImporterHeader(Name = "浼樺厛绾�")]
+        [ExporterHeader(DisplayName = "浼樺厛绾�")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "浼樺厛绾�")]
+        public int Grade { get; set; }
+
+        /// <summary>
+        /// 浠诲姟涓嬪彂鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "浠诲姟涓嬪彂鏃堕棿")]
+        [ExporterHeader(DisplayName = "浠诲姟涓嬪彂鏃堕棿")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "浠诲姟涓嬪彂鏃堕棿")]
+        public DateTime? Dispatchertime { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [ImporterHeader(Name = "澶囨敞")]
+        [ExporterHeader(DisplayName = "澶囨敞")]
+        [SugarColumn(IsNullable = true, Length = 255, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task_Hty.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task_Hty.cs"
new file mode 100644
index 0000000..f903756
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task_Hty.cs"
@@ -0,0 +1,44 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.OtherEnum;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    /// <summary>
+    /// 浠诲姟淇℃伅鍘嗗彶
+    /// </summary>
+    [SugarTable(nameof(Dt_Task_Hty), "浠诲姟淇℃伅鍘嗗彶")]
+    public class Dt_Task_Hty : Dt_Task, IBaseHistoryEntity
+    {
+        /// <summary>
+        /// 鍘熻〃涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+        [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+        public int SourceId { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+        [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+        public string OperateType { get; set; }
+
+        /// <summary>
+        /// 绉诲叆鍘嗗彶鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+        [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+        public DateTime InsertTime { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/WIDESEA_Model.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/WIDESEA_Model.csproj"
new file mode 100644
index 0000000..efb20bf
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/WIDESEA_Model.csproj"
@@ -0,0 +1,19 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+	<PropertyGroup>
+		<TargetFramework>net6.0</TargetFramework>
+		<ImplicitUsings>enable</ImplicitUsings>
+		<Nullable>enable</Nullable>
+		<GenerateDocumentationFile>True</GenerateDocumentationFile>
+	</PropertyGroup>
+
+	<ItemGroup>
+		<PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" />
+	</ItemGroup>
+
+	<ItemGroup>
+		<ProjectReference Include="..\WIDESEA_Common\WIDESEA_Common.csproj" />
+		<ProjectReference Include="..\WIDESEA_Core\WIDESEA_Core.csproj" />
+	</ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs"
new file mode 100644
index 0000000..96bdd97
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs"
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.StockEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_IRecordService;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IOutboundService
+{
+    public partial class OutStockLockInfoService : ServiceBase<Dt_OutStockLockInfo, IRepository<Dt_OutStockLockInfo>>, IOutStockLockInfoService
+    {
+        public IRepository<Dt_OutStockLockInfo> Repository => BaseDal;
+        public IUnitOfWorkManage _unitOfWorkManage;
+
+        public OutStockLockInfoService(IRepository<Dt_OutStockLockInfo> BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs"
new file mode 100644
index 0000000..45c6d75
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs"
@@ -0,0 +1,20 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IOutboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_OutboundService
+{
+    public partial class OutboundOrderDetailService : ServiceBase<Dt_OutboundOrderDetail, IRepository<Dt_OutboundOrderDetail>>, IOutboundOrderDetailService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+
+        public IRepository<Dt_OutboundOrderDetail> Repository => BaseDal;
+
+        public OutboundOrderDetailService(IRepository<Dt_OutboundOrderDetail> BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+        }
+       
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetail_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetail_HtyService.cs"
new file mode 100644
index 0000000..084c166
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetail_HtyService.cs"
@@ -0,0 +1,19 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IOutboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_OutboundService
+{
+    public partial class OutboundOrderDetail_HtyService : ServiceBase<Dt_OutboundOrderDetail_Hty, IRepository<Dt_OutboundOrderDetail_Hty>>, IOutboundOrderDetail_HtyService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+
+        public IRepository<Dt_OutboundOrderDetail_Hty> Repository => BaseDal;
+
+        public OutboundOrderDetail_HtyService(IRepository<Dt_OutboundOrderDetail_Hty> BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs"
new file mode 100644
index 0000000..eac2e66
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs"
@@ -0,0 +1,22 @@
+锘縰sing AutoMapper;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IOutboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_OutboundService
+{
+    public class OutboundOrderService : ServiceBase<Dt_OutboundOrder, IRepository<Dt_OutboundOrder>>, IOutboundOrderService
+    {
+        private readonly IMapper _mapper;
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        public IRepository<Dt_OutboundOrder> Repository => BaseDal;
+
+        public OutboundOrderService(IRepository<Dt_OutboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        {
+            _mapper = mapper;
+            _unitOfWorkManage = unitOfWorkManage;
+        }
+        
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrder_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrder_HtyService.cs"
new file mode 100644
index 0000000..2b1c783
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrder_HtyService.cs"
@@ -0,0 +1,19 @@
+锘縰sing AutoMapper;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IOutboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_OutboundService
+{
+    public partial class OutboundOrder_HtyService : ServiceBase<Dt_OutboundOrder_Hty, IRepository<Dt_OutboundOrder_Hty>>, IOutboundOrder_HtyService
+    {
+        private readonly IMapper _mapper;
+        public IRepository<Dt_OutboundOrder_Hty> Repository => BaseDal;
+
+        public OutboundOrder_HtyService(IRepository<Dt_OutboundOrder_Hty> BaseDal, IMapper mapper) : base(BaseDal)
+        {
+            _mapper = mapper;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs"
new file mode 100644
index 0000000..0b2aae4
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs"
@@ -0,0 +1,21 @@
+锘縰sing WIDESEA_IOutboundService;
+
+namespace WIDESEA_OutboundService
+{
+    public class OutboundService : IOutboundService
+    {
+
+        public IOutboundOrderDetailService OutboundOrderDetailService { get; }
+
+        public IOutboundOrderService OutboundOrderService { get; }
+
+        public IOutStockLockInfoService OutboundStockLockInfoService { get; }
+
+        public OutboundService(IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService)
+        {
+            OutboundOrderDetailService = outboundOrderDetailService;
+            OutboundOrderService = outboundOrderService;
+            OutboundStockLockInfoService = outboundStockLockInfoService;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/WIDESEA_OutboundService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/WIDESEA_OutboundService.csproj"
new file mode 100644
index 0000000..b11d170
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/WIDESEA_OutboundService.csproj"
@@ -0,0 +1,16 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_IBasicService\WIDESEA_IBasicService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IOutboundService\WIDESEA_IOutboundService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IStockService\WIDESEA_IStockService.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_RecordService/LocationStatusChangeRecordService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_RecordService/LocationStatusChangeRecordService.cs"
new file mode 100644
index 0000000..d159a29
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_RecordService/LocationStatusChangeRecordService.cs"
@@ -0,0 +1,16 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IRecordService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_RecordService
+{
+    public partial class LocationStatusChangeRecordService : ServiceBase<Dt_LocationStatusChangeRecord, IRepository<Dt_LocationStatusChangeRecord>>, ILocationStatusChangeRecordService
+    {
+        public LocationStatusChangeRecordService(IRepository<Dt_LocationStatusChangeRecord> BaseDal) : base(BaseDal)
+        {
+        }
+
+        public IRepository<Dt_LocationStatusChangeRecord> Repository => BaseDal;
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_RecordService/RecordService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_RecordService/RecordService.cs"
new file mode 100644
index 0000000..5b98765
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_RecordService/RecordService.cs"
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_IRecordService;
+
+namespace WIDESEA_RecordService
+{
+    public class RecordService : IRecordService
+    {
+        public ILocationStatusChangeRecordService LocationStatusChangeRecordSetvice { get; }
+
+        public IStockQuantityChangeRecordService StockQuantityChangeRecordService { get; }
+
+        public RecordService(ILocationStatusChangeRecordService locationStatusChangeRecordSetvice, IStockQuantityChangeRecordService stockQuantityChangeRecordService)
+        {
+            LocationStatusChangeRecordSetvice = locationStatusChangeRecordSetvice;
+            StockQuantityChangeRecordService = stockQuantityChangeRecordService;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_RecordService/StockQuantityChangeRecordService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_RecordService/StockQuantityChangeRecordService.cs"
new file mode 100644
index 0000000..db3e38b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_RecordService/StockQuantityChangeRecordService.cs"
@@ -0,0 +1,19 @@
+锘縰sing AutoMapper;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IRecordService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_RecordService
+{
+    public partial class StockQuantityChangeRecordService : ServiceBase<Dt_StockQuantityChangeRecord, IRepository<Dt_StockQuantityChangeRecord>>, IStockQuantityChangeRecordService
+    {
+        private readonly IMapper _mapper;
+        public StockQuantityChangeRecordService(IRepository<Dt_StockQuantityChangeRecord> BaseDal, IMapper mapper) : base(BaseDal)
+        {
+            _mapper = mapper;
+        }
+
+        public IRepository<Dt_StockQuantityChangeRecord> Repository => BaseDal;
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_RecordService/WIDESEA_RecordService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_RecordService/WIDESEA_RecordService.csproj"
new file mode 100644
index 0000000..91486e2
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_RecordService/WIDESEA_RecordService.csproj"
@@ -0,0 +1,13 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs"
new file mode 100644
index 0000000..47ccfdf
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs"
@@ -0,0 +1,26 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_StockService
+{
+    public partial class StockInfoDetailService : ServiceBase<Dt_StockInfoDetail, IRepository<Dt_StockInfoDetail>>, IStockInfoDetailService
+    {
+        public StockInfoDetailService(IRepository<Dt_StockInfoDetail> BaseDal) : base(BaseDal)
+        {
+        }
+
+        public IRepository<Dt_StockInfoDetail> Repository => BaseDal;
+
+        public bool ExistSerialNumber(string SerialNumber)
+        {
+            return BaseDal.QueryFirst(x => x.SerialNumber == SerialNumber) != null;
+        }
+
+        public bool ExistSerialNumbers(List<string> SerialNumbers)
+        {
+            return BaseDal.QueryFirst(x => SerialNumbers.Contains(x.SerialNumber)) != null;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetail_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetail_HtyService.cs"
new file mode 100644
index 0000000..d637998
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetail_HtyService.cs"
@@ -0,0 +1,15 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_StockService
+{
+    public partial class StockInfoDetail_HtyService : ServiceBase<Dt_StockInfoDetail_Hty, IRepository<Dt_StockInfoDetail_Hty>>, IStockInfoDetail_HtyService
+    {
+        public StockInfoDetail_HtyService(IRepository<Dt_StockInfoDetail_Hty> BaseDal) : base(BaseDal)
+        {
+        }
+        public IRepository<Dt_StockInfoDetail_Hty> Repository => BaseDal;
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
new file mode 100644
index 0000000..339d933
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
@@ -0,0 +1,21 @@
+锘縰sing AutoMapper;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_StockService
+{
+    public partial class StockInfoService : ServiceBase<Dt_StockInfo, IRepository<Dt_StockInfo>>, IStockInfoService
+    {
+        private readonly IMapper _mapper;
+
+        public IRepository<Dt_StockInfo> Repository => BaseDal;
+
+        public StockInfoService(IRepository<Dt_StockInfo> BaseDal, IMapper mapper) : base(BaseDal)
+        {
+            _mapper = mapper;
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfo_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfo_HtyService.cs"
new file mode 100644
index 0000000..6552a65
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfo_HtyService.cs"
@@ -0,0 +1,20 @@
+锘縰sing AutoMapper;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_StockService
+{
+    public partial class StockInfo_HtyService : ServiceBase<Dt_StockInfo_Hty, IRepository<Dt_StockInfo_Hty>>, IStockInfo_HtyService
+    {
+        private readonly IMapper _mapper;
+
+        public IRepository<Dt_StockInfo_Hty> Repository => BaseDal;
+
+        public StockInfo_HtyService(IRepository<Dt_StockInfo_Hty> BaseDal, IMapper mapper) : base(BaseDal)
+        {
+            _mapper = mapper;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs"
new file mode 100644
index 0000000..5747dac
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs"
@@ -0,0 +1,27 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_IStockService;
+
+namespace WIDESEA_StockService
+{
+    public class StockSerivce:IStockService
+    {
+        public IStockInfoDetailService StockInfoDetailService { get; }
+
+        public IStockInfoService StockInfoService { get; }
+        public IStockInfoDetail_HtyService StockInfoDetail_HtyService { get; }
+
+        public IStockInfo_HtyService StockInfo_HtyService { get; }
+
+        public StockSerivce(IStockInfoDetailService stockInfoDetailService, IStockInfoService stockInfoService, IStockInfoDetail_HtyService stockInfoDetail_HtyService, IStockInfo_HtyService stockInfo_HtyService)
+        {
+            StockInfoDetailService = stockInfoDetailService;
+            StockInfoService = stockInfoService;
+            StockInfoDetail_HtyService = stockInfoDetail_HtyService;
+            StockInfo_HtyService = stockInfo_HtyService;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs"
new file mode 100644
index 0000000..7f7fcea
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs"
@@ -0,0 +1,101 @@
+锘縰sing SqlSugar;
+using System.Dynamic;
+using System.Reflection;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Helper;
+//using WIDESEA_Core.HostedService;
+using WIDESEA_Core.Utilities;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_StockService
+{
+    public partial class StockViewService : IStockViewService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly SqlSugarClient _dbBase;
+
+        public StockViewService(IUnitOfWorkManage unitOfWorkManage)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+            _dbBase = unitOfWorkManage.GetDbClient();
+        }
+
+        public virtual PageGridData<StockViewDTO> GetPageData(PageDataOptions options)
+        {
+            string where = options.ValidatePageOptions(typeof(StockViewDTO).GetProperties());
+            //鑾峰彇鎺掑簭瀛楁
+            //Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(typeof(StockViewDTO).GetProperties());
+            //List<OrderByModel> orderByModels = new List<OrderByModel>();
+            //foreach (var item in orderbyDic)
+            //{
+            //    OrderByModel orderByModel = new OrderByModel()
+            //    {
+            //        FieldName = item.Key,
+            //        OrderByType = item.Value
+            //    };
+            //    orderByModels.Add(orderByModel);
+            //}
+            int totalCount = 0;
+
+            ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>();
+            ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>();
+            ISugarQueryable<Dt_StockInfoDetail> sugarQueryable2 = _dbBase.Queryable<Dt_StockInfoDetail>();
+
+
+            List<StockViewDTO> list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).WhereIF(!string.IsNullOrEmpty(where), where).Select((b, a) => new StockViewDTO
+            {
+                LocationCode = b.LocationCode,
+                Column = a.Column,
+                CreateDate = b.CreateDate,
+                Creater = b.Creater,
+                Depth = a.Depth,
+                EnalbeStatus = a.EnableStatus,
+                Layer = a.Layer,
+                LocationName = a.LocationName,
+                LocationStatus = a.LocationStatus,
+                LocationType = a.LocationType,
+                Modifier = b.Modifier,
+                ModifyDate = b.ModifyDate,
+                PalletCode = b.PalletCode,
+                StockRemark = b.Remark,
+                RoadwayNo = a.RoadwayNo,
+                Row = a.Row,
+                StockId = b.Id,
+                StockStatus = b.StockStatus,
+                Details = b.Details,
+            }).ToPageList(options.Page, options.Rows, ref totalCount);
+
+
+            return new PageGridData<StockViewDTO>(totalCount, list);
+
+        }
+
+        public virtual object GetDetailPage(PageDataOptions pageData)
+        {
+            Type t = typeof(StockViewDTO);
+
+            if (pageData.Value == null) return new PageGridData<object>(total: 0, null);
+            string keyName = t.GetKeyName();
+            ////鐢熸垚鏌ヨ鏉′欢
+            //Expression<Func<TEntity, bool>> whereExpression = keyName.CreateExpression<TEntity>(pageData.Value, LinqExpressionType.Equal);
+            int totalCount = 0;
+            PropertyInfo? propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute<Navigate>() != null);
+            if (propertyInfo != null)
+            {
+                Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
+                Navigate? navigate = propertyInfo.GetCustomAttribute<Navigate>();
+                if (navigate != null)
+                {
+                    List<ExpandoObject> list = _dbBase.Queryable(detailType.Name, "detail").Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount);
+                    return new PageGridData<ExpandoObject>(totalCount, list);
+                }
+            }
+            return new PageGridData<object>(total: 0, null);
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/WIDESEA_StockService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/WIDESEA_StockService.csproj"
new file mode 100644
index 0000000..aa7acf1
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/WIDESEA_StockService.csproj"
@@ -0,0 +1,14 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IStockService\WIDESEA_IStockService.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryListService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryListService.cs"
new file mode 100644
index 0000000..5f574a4
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryListService.cs"
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_ISystemService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_SystemService
+{
+    public class Sys_DictionaryListService : ServiceBase<Sys_DictionaryList, IRepository<Sys_DictionaryList>>, ISys_DictionaryListService
+    {
+        public Sys_DictionaryListService(IRepository<Sys_DictionaryList> BaseDal) : base(BaseDal)
+        {
+        }
+
+        public IRepository<Sys_DictionaryList> Repository => BaseDal;
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs"
new file mode 100644
index 0000000..4e2449d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs"
@@ -0,0 +1,224 @@
+锘縰sing Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.OrderEnum;
+using WIDESEA_Common.StockEnum;
+using WIDESEA_Common.TaskEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Caches;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Utilities;
+using WIDESEA_DTO.System;
+using WIDESEA_ISystemService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_SystemService
+{
+    public class Sys_DictionaryService : ServiceBase<Sys_Dictionary, IRepository<Sys_Dictionary>>, ISys_DictionaryService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly ICacheService _cacheService;
+
+        public Sys_DictionaryService(IRepository<Sys_Dictionary> BaseDal, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+            _cacheService = cacheService;
+        }
+
+        public IRepository<Sys_Dictionary> Repository => BaseDal;
+
+        public override WebResponseContent AddData(SaveModel saveModel)
+        {
+            string validResult = typeof(Sys_Dictionary).ValidateDicInEntity(saveModel.MainData, true, TProperties);
+
+            if (!string.IsNullOrEmpty(validResult))
+            {
+                return WebResponseContent.Instance.Error(validResult);
+            }
+
+            Sys_Dictionary dictionary = saveModel.MainData.DicToModel<Sys_Dictionary>();
+            if (!string.IsNullOrEmpty(_cacheService.Get(dictionary.DicNo)))
+                _cacheService.Remove(dictionary.DicNo);
+            return base.AddData(saveModel);
+        }
+
+        public override WebResponseContent UpdateData(SaveModel saveModel)
+        {
+            Sys_Dictionary dictionary = saveModel.MainData.DicToModel<Sys_Dictionary>();
+            _cacheService.Remove(dictionary.DicNo);
+            return base.UpdateData(saveModel);
+        }
+
+        public IEnumerable<Sys_Dictionary> GetDictionaries(IEnumerable<string> dicNos, bool executeSql = true)
+        {
+            List<Sys_Dictionary> Dictionaries = GetDictionaries(dicNos.ToList());
+
+            foreach (var item in Dictionaries)
+            {
+                if (executeSql)
+                {
+                    //  2020.05.01澧炲姞鏍规嵁鐢ㄦ埛淇℃伅鍔犺浇瀛楀吀鏁版嵁婧恠ql
+                    string sql = item.Sql;
+                    if (!string.IsNullOrEmpty(sql))
+                    {
+                        item.DicList = Query(sql);
+                    }
+                }
+            }
+
+            return Dictionaries;
+        }
+
+        List<Sys_DictionaryList> Query(string sql)
+        {
+            try
+            {
+                return BaseDal.QueryDynamicDataBySql(sql, null).Select(s => new Sys_DictionaryList()
+                {
+                    DicName = s.value,
+                    DicValue = s.key.ToString()
+                }).ToList();
+            }
+            catch (Exception ex)
+            {
+                return new List<Sys_DictionaryList>();
+            }
+        }
+
+        private List<Sys_Dictionary> GetDictionaries(List<string> dicNos)
+        {
+            //base.QueryData().ToList();
+            List<Sys_Dictionary> _dictionaries = Db.Queryable<Sys_Dictionary>().Where(x => x.Enable == 1 && dicNos.Contains(x.DicNo)).Includes(x => x.DicList).ToList();
+            return _dictionaries;
+        }
+
+        public List<VueDictionaryDTO> GetVueDictionary(string[] dicNos)
+        {
+            if (dicNos == null || dicNos.Count() == 0) return new List<VueDictionaryDTO>();
+            List<VueDictionaryDTO> vueDictionaryDTOs = new List<VueDictionaryDTO>();
+
+            List<string> cacheDicNos = new List<string>();
+            foreach (string n in dicNos)
+            {
+                string str = _cacheService.Get(n);
+                if (!string.IsNullOrEmpty(str))
+                {
+                    VueDictionaryDTO? vueDictionary = JsonConvert.DeserializeObject<VueDictionaryDTO>(str);
+
+                    if (vueDictionary != null)
+                    {
+                        vueDictionaryDTOs.Add(vueDictionary);
+                        cacheDicNos.Add(n);
+                    }
+                }
+            }
+            if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0)
+            {
+                List<VueDictionaryDTO> selectDics = GetDictionaries(dicNos.Where(x => !cacheDicNos.Contains(x))).Select(s => new VueDictionaryDTO
+                {
+                    DicNo = s.DicNo,
+                    Config = s.Config,
+                    //dbSql = s.Sql,
+                    Data = s.DicList.OrderByDescending(o => o.OrderNo).Select(list => new { key = list.DicValue, value = list.DicName }),
+                    SaveCache = false
+                }).ToList();
+
+                foreach (var item in selectDics)
+                {
+                    if (!_cacheService.Exists(item.DicNo) && item.SaveCache)
+                    {
+                        _cacheService.Add(item.DicNo, item.Serialize());
+                    }
+                }
+                vueDictionaryDTOs.AddRange(selectDics);
+            }
+
+            //object GetSourceData(string dicNo, string dbSql, object data)
+            //{
+            //    if (string.IsNullOrEmpty(dbSql))
+            //    {
+            //        return data;
+            //    }
+            //    return BaseDal.QueryObjectDataBySql(dbSql, null);
+            //}
+            //List<VueDictionaryDTO> vueDictionaryDTOs = dicConfig.Select(item => new VueDictionaryDTO
+            //{
+            //    DicNo = item.dicNo,
+            //    Config = item.config,
+            //    Data = GetSourceData(item.dicNo, item.dbSql, item.list)
+            //}).ToList();
+
+            try
+            {
+                List<string> dicList = dicNos.ToList();
+                if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0)
+                {
+                    string str = AppSettings.Configuration["dics"];
+                    if (!string.IsNullOrEmpty(str))
+                    {
+                        List<string> cusDics = new List<string>();
+
+                        List<string> dics = str.Split(",").ToList();
+
+                        foreach (var item in dics)
+                        {
+                            if (dicNos.Contains(item) && !cacheDicNos.Contains(item))
+                            {
+                                dicList.Remove(item);
+                                cusDics.Add(item);
+                            }
+                        }
+
+                        foreach (var item in cusDics)
+                        {
+                            VueDictionaryDTO vueDictionaryDTO = GetVueDictionary(item.Trim());
+                            if (vueDictionaryDTO != null)
+                            {
+                                vueDictionaryDTOs.Add(vueDictionaryDTO);
+                                if (!_cacheService.Exists(item) && vueDictionaryDTO.SaveCache)
+                                {
+                                    _cacheService.Add(item, vueDictionaryDTO.Serialize());
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            catch
+            {
+
+            }
+            return vueDictionaryDTOs;
+        }
+
+        private VueDictionaryDTO GetVueDictionary(string key)
+        {
+            VueDictionaryDTO result = null;
+            try
+            {
+                switch (key)
+                {
+                    default:
+                        return result;
+                }
+            }
+            catch (Exception ex)
+            {
+                return null;
+            }
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_LogService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_LogService.cs"
new file mode 100644
index 0000000..6b8859f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_LogService.cs"
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_ISystemService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_SystemService
+{
+    public class Sys_LogService : ServiceBase<Sys_Log, IRepository<Sys_Log>>, ISys_LogService
+    {
+        public Sys_LogService(IRepository<Sys_Log> BaseDal) : base(BaseDal)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_MenuService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_MenuService.cs"
new file mode 100644
index 0000000..e98d2e1
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_MenuService.cs"
@@ -0,0 +1,396 @@
+锘縰sing AutoMapper;
+using SqlSugar;
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO.System;
+using WIDESEA_ISystemService;
+using WIDESEA_Model;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_SystemService
+{
+    public class Sys_MenuService : ServiceBase<Sys_Menu, IRepository<Sys_Menu>>, ISys_MenuService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly IMapper _mapper;
+
+        public IRepository<Sys_Menu> Repository => BaseDal;
+
+        public Sys_MenuService(IRepository<Sys_Menu> BaseDal, IUnitOfWorkManage unitOfWorkManage, IMapper mapper) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+            _mapper = mapper;
+        }
+
+        /// <summary>
+        /// 鑾峰彇褰撳墠鐢ㄦ埛鎵�鏈夎彍鍗曚笌鏉冮檺
+        /// </summary>
+        /// <returns></returns>
+        public object GetCurrentMenuActionList()
+        {
+            object obj = GetMenuActionList(App.User.RoleId);
+            if (obj is IEnumerable<object> list)
+            {
+                if (list.Any())
+                {
+                    return obj;
+                }
+                else
+                {
+                    return WebResponseContent.Instance.Error("鏈幏鍙栧埌鑿滃崟淇℃伅");
+                }
+            }
+            return obj;
+        }
+
+        public List<MenuDTO> GetAllPDAMenu()
+        {
+            List<Sys_Menu> menus = BaseDal.QueryData(x => (x.Enable == 1 || x.Enable == 2) && x.MenuType == 1).OrderByDescending(a => a.OrderNo).ThenByDescending(q => q.ParentId).ToList();
+            List<MenuDTO> _menus = _mapper.Map<List<MenuDTO>>(menus);
+            _menus.ForEach(x =>
+            {
+                if (!string.IsNullOrEmpty(x.Auth) && x.Auth.Length > 10)
+                {
+                    try
+                    {
+                        x.Actions = x.Auth.DeserializeObject<List<ActionDTO>>();
+                    }
+                    catch { }
+                }
+                x.Actions ??= new List<ActionDTO>();
+            });
+            string test = _menus.Serialize();
+            return _menus;
+        }
+
+        private List<Permissions> MenuActionToArray(List<Permissions> permissions)
+        {
+            permissions.ForEach(x =>
+            {
+                try
+                {
+                    x.UserAuthArr = string.IsNullOrEmpty(x.UserAuth)
+                    ? new string[0]
+                    : x.UserAuth.DeserializeObject<List<ActionDTO>>().Select(s => s.Value).ToArray();
+                }
+                catch { }
+                finally
+                {
+                    if (x.UserAuthArr == null)
+                    {
+                        x.UserAuthArr = new string[0];
+                    }
+                }
+            });
+            return permissions;
+        }
+
+        private List<Permissions> ActionToArray(List<Permissions> permissions)
+        {
+            permissions.ForEach(x =>
+            {
+                try
+                {
+                    var menuAuthArr = x.MenuAuth.DeserializeObject<List<ActionDTO>>();
+                    x.UserAuthArr = string.IsNullOrEmpty(x.UserAuth)
+                    ? new string[0]
+                    : x.UserAuth.Split(",").Where(c => menuAuthArr.Any(m => m.Value == c)).ToArray();
+
+                }
+                catch { }
+                finally
+                {
+                    if (x.UserAuthArr == null)
+                    {
+                        x.UserAuthArr = new string[0];
+                    }
+                }
+            });
+            return permissions;
+        }
+
+        /// <summary>
+        /// 鑾峰彇瑙掕壊鏉冮檺鏃堕�氳繃瀹夊叏瀛楀吀閿佸畾鐨勮鑹瞚d
+        /// </summary>
+        private static ConcurrentDictionary<string, object> objKeyValue = new ConcurrentDictionary<string, object>();
+        public List<Permissions> GetPermissions(int roleId)
+        {
+            if (App.User.IsRoleIdSuperAdmin(roleId))
+            {
+                //2020.12.27澧炲姞鑿滃崟鐣岄潰涓婁笉鏄剧ず锛屼絾鍙互鍒嗛厤鏉冮檺
+                var permissions = BaseDal.QueryData(x => x.Enable == 1 || x.Enable == 2)
+                    .Select(a => new Permissions
+                    {
+                        MenuId = a.MenuId,
+                        ParentId = a.ParentId,
+                        TableName = (a.TableName ?? "").ToLower(),
+                        UserAuth = a.Auth,
+                        MenuType = a.MenuType
+                    }).ToList();
+                return MenuActionToArray(permissions);
+            }
+
+            //閿佸畾姣忎釜瑙掕壊锛岄�氳繃瀹夊叏瀛楀吀鍑忓皯閿佺矑搴︼紝鍚﹀垯澶氫釜鍚屾椂瑙掕壊鑾峰彇缂撳瓨浼氬鑷撮樆濉�
+            object objId = objKeyValue.GetOrAdd(roleId.ToString(), new object());
+            //閿佸畾姣忎釜瑙掕壊
+            lock (objId)
+            {
+                //娌℃湁redis/memory缂撳瓨瑙掕壊鐨勭増鏈彿鎴栦笌褰撳墠鏈嶅姟鍣ㄧ殑瑙掕壊鐗堟湰鍙蜂笉鍚屾椂锛屽埛鏂扮紦瀛�
+
+                List<Permissions> _permissions = BaseDal.QueryTabs<Sys_Menu, Sys_RoleAuth, Permissions>((a, b) => new object[] { JoinType.Inner, a.MenuId == b.MenuId }, (a, b) => new Permissions { MenuId = a.MenuId, ParentId = a.ParentId, TableName = (a.TableName ?? "").ToLower(), MenuAuth = a.Auth, UserAuth = b.AuthValue ?? "", MenuType = a.MenuType }, (a, b) => b.RoleId == roleId, x => true);
+
+                ActionToArray(_permissions);
+
+                return _permissions;
+            }
+        }
+
+        public List<MenuDTO> GetAllMenuPDA()
+        {
+            if (App.User.IsRoleIdSuperAdmin(App.User.RoleId))
+            {
+                return GetAllPDAMenu();
+            }
+            List<int> menuIds = GetPermissions(App.User.RoleId).Select(x => x.MenuId).ToList();
+            return GetAllPDAMenu().Where(x => menuIds.Contains(x.MenuId)).ToList();
+        }
+
+        /// <summary>
+        /// 鑾峰彇PDA棣栭〉浠撳簱鏉冮檺
+        /// </summary>
+        /// <returns></returns>
+        public object GetTreeMenuPDAStash(int ParentId)
+        {
+            List<MenuDTO> _menus = GetAllMenuPDA().Where(x => x.ParentId == ParentId).ToList();
+            return _menus;
+        }
+
+        public List<MenuDTO> GetAllMenu()
+        {
+            List<Sys_Menu> menus = BaseDal.QueryData(x => (x.Enable == 1 || x.Enable == 2) && x.MenuType == App.User.MenuType).OrderByDescending(a => a.OrderNo).ThenByDescending(q => q.ParentId).ToList();
+            List<MenuDTO> _menus = _mapper.Map<List<MenuDTO>>(menus);
+            _menus.ForEach(x =>
+            {
+                if (!string.IsNullOrEmpty(x.Auth) && x.Auth.Length > 10)
+                {
+                    try
+                    {
+                        x.Actions = x.Auth.DeserializeObject<List<ActionDTO>>();
+                    }
+                    catch { }
+                }
+                x.Actions ??= new List<ActionDTO>();
+            });
+            string test = _menus.Serialize();
+            return _menus;
+        }
+
+        public object GetSuperAdminMenu()
+        {
+            return GetAllMenu().Select(x =>
+                  new
+                  {
+                      id = x.MenuId,
+                      name = x.MenuName,
+                      url = x.Url,
+                      parentId = x.ParentId,
+                      icon = x.Icon,
+                      x.Enable,
+                      x.TableName, // 2022.03.26澧炵Щ鍔ㄧ鍔犺彍鍗曠被鍨�
+                      permission = x.Actions.Select(s => s.Value).ToArray()
+                  }).ToList();
+        }
+
+        public object GetMenuByRoleId(int roleId)
+        {
+            var menu = from a in GetPermissions(roleId)
+                       join b in GetAllMenu()
+                       on a.MenuId equals b.MenuId
+                       orderby b.OrderNo descending
+                       select new
+                       {
+                           id = a.MenuId,
+                           name = b.MenuName,
+                           url = b.Url,
+                           parentId = b.ParentId,
+                           icon = b.Icon,
+                           b.Enable,
+                           b.TableName,
+                           permission = a.UserAuthArr
+                       };
+            return menu.ToList();
+        }
+
+        /// <summary>
+        /// 鏍规嵁瑙掕壊ID鑾峰彇鑿滃崟涓庢潈闄�
+        /// </summary>
+        /// <param name="roleId"></param>
+        /// <returns></returns>
+        public object GetMenuActionList(int roleId)
+        {
+            if (App.User.IsRoleIdSuperAdmin(roleId))
+            {
+                return GetSuperAdminMenu();
+            }
+            return GetMenuByRoleId(roleId);
+        }
+
+
+        public List<MenuDTO> GetUserMenuList(int roleId)
+        {
+            if (App.User.IsRoleIdSuperAdmin(roleId))
+            {
+                return GetAllMenu();
+            }
+            List<int> menuIds = GetPermissions(roleId).Select(x => x.MenuId).ToList();
+            return GetAllMenu().Where(x => menuIds.Contains(x.MenuId)).ToList();
+        }
+
+        public List<MenuDTO> GetUserMenuListPDA(int roleId)
+        {
+            if (App.User.IsRoleIdSuperAdmin(roleId))
+            {
+                return GetAllMenuPDA();
+            }
+            List<int> menuIds = GetPermissions(roleId).Select(x => x.MenuId).ToList();
+            return GetAllMenuPDA().Where(x => menuIds.Contains(x.MenuId)).ToList();
+        }
+
+        public List<ActionDTO> GetActions(int menuId, List<ActionDTO> menuActions, List<Permissions> permissions, int roleId)
+        {
+            if (App.User.IsRoleIdSuperAdmin(roleId))
+            {
+                return menuActions;
+            }
+
+            return menuActions.Where(p => permissions
+                 .Exists(w => menuId == w.MenuId
+                 && w.UserAuthArr.Contains(p.Value)))
+                  .ToList();
+        }
+
+        public object GetMenu(List<int> menuIds)
+        {
+            return BaseDal.QueryData(x => menuIds.Contains(x.MenuId)).Select(a =>
+             new
+             {
+                 id = a.MenuId,
+                 parentId = a.ParentId,
+                 name = a.MenuName,
+                 a.MenuType,
+                 a.OrderNo
+             }).OrderByDescending(a => a.OrderNo)
+                .ThenByDescending(q => q.parentId).ToList();
+        }
+
+        /// <summary>
+        /// 缂栬緫淇敼鑿滃崟鏃�,鑾峰彇鎵�鏈夎彍鍗�
+        /// </summary>
+        /// <returns></returns>
+        public object GetMenu()
+        {
+            if (App.User.IsRoleIdSuperAdmin(App.User.RoleId))
+            {
+                List<int> menuIds = BaseDal.QueryData().Select(x => x.MenuId).ToList();
+                return GetMenu(menuIds);
+            }
+            else
+            {
+                List<int> menuIds = GetPermissions(App.User.RoleId).Select(x => x.MenuId).ToList();
+                return GetMenu(menuIds);
+            }
+        }
+
+        /// <summary>
+        /// 缂栬緫鑿滃崟鏃讹紝鑾峰彇鑿滃崟淇℃伅
+        /// </summary>
+        /// <param name="menuId"></param>
+        /// <returns></returns>
+        public object GetTreeItem(int menuId)
+        {
+            return GetTreeItem(menuId);
+        }
+
+        /// <summary>
+        /// 鏂板缓鎴栫紪杈戣彍鍗�
+        /// </summary>
+        /// <param name="menu"></param>
+        /// <returns></returns>
+        public WebResponseContent Save(Sys_Menu menu)
+        {
+            WebResponseContent webResponse = new WebResponseContent();
+            if (menu == null) return webResponse.Error("娌℃湁鑾峰彇鍒版彁浜ょ殑鍙傛暟");
+            if (menu.MenuId > 0 && menu.MenuId == menu.ParentId) return webResponse.Error("鐖剁骇ID涓嶈兘鏄綋鍓嶈彍鍗曠殑ID");
+            try
+            {
+                //webResponse = menu.ValidationEntity(x => new { x.MenuName, x.TableName });
+                //if (!webResponse.Status) return webResponse;
+                if (menu.TableName != "/" && menu.TableName != ".")
+                {
+                    // 2022.03.26澧炵Щ鍔ㄧ鍔犺彍鍗曠被鍨嬪垽鏂�
+                    Sys_Menu sysMenu = BaseDal.QueryFirst(x => x.TableName == menu.TableName);
+                    if (sysMenu != null)
+                    {
+                        if (sysMenu.MenuType == menu.MenuType)
+                        {
+                            if ((menu.MenuId > 0 && sysMenu.MenuId != menu.MenuId)
+                            || menu.MenuId <= 0)
+                            {
+                                return webResponse.Error($"瑙嗗浘/琛ㄥ悕銆恵menu.TableName}銆戝凡琚叾浠栬彍鍗曚娇鐢�");
+                            }
+                        }
+                    }
+                }
+                bool _changed = false;
+                if (menu.MenuId <= 0)
+                {
+                    int id = BaseDal.AddData(menu);
+                    menu.MenuId = id;
+                }
+                else
+                {
+                    //2020.05.07鏂板绂佹閫夋嫨涓婄骇瑙掕壊涓鸿嚜宸�
+                    if (menu.MenuId == menu.ParentId)
+                    {
+                        return webResponse.Error($"鐖剁骇id涓嶈兘涓鸿嚜宸�");
+                    }
+                    if (BaseDal.QueryFirst(x => x.ParentId == menu.MenuId && menu.ParentId == x.MenuId) != null)
+                    {
+                        return webResponse.Error($"涓嶈兘閫夋嫨姝ょ埗绾d锛岄�夋嫨鐨勭埗绾d涓庡綋鍓嶈彍鍗曞舰鎴愪緷璧栧叧绯�");
+                    }
+
+                    _changed = BaseDal.QueryData(c => c.MenuId == menu.MenuId).Select(s => s.Auth).FirstOrDefault() != menu.Auth;
+
+                    BaseDal.UpdateData(menu);
+                }
+                webResponse.OK("淇濆瓨鎴愬姛", menu);
+            }
+            catch (Exception ex)
+            {
+                webResponse.Error(ex.Message);
+            }
+            return webResponse;
+
+        }
+
+        public WebResponseContent DelMenu(int menuId)
+        {
+            WebResponseContent webResponse = new WebResponseContent();
+            if (BaseDal.QueryFirst(x => x.ParentId == menuId) != null)
+            {
+                return webResponse = WebResponseContent.Instance.Error("褰撳墠鑿滃崟瀛樺湪瀛愯彍鍗�,璇峰厛鍒犻櫎瀛愯彍鍗�!");
+            }
+            BaseDal.DeleteDataById(menuId);
+
+            return webResponse = WebResponseContent.Instance.OK("鍒犻櫎鎴愬姛");
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleAuthService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleAuthService.cs"
new file mode 100644
index 0000000..4c64284
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleAuthService.cs"
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_ISystemService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_SystemService
+{
+    public class Sys_RoleAuthService : ServiceBase<Sys_RoleAuth, IRepository<Sys_RoleAuth>>, ISys_RoleAuthService
+    {
+        public Sys_RoleAuthService(IRepository<Sys_RoleAuth> BaseDal) : base(BaseDal)
+        {
+        }
+
+        public IRepository<Sys_RoleAuth> Repository => BaseDal;
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleService.cs"
new file mode 100644
index 0000000..fb668b1
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleService.cs"
@@ -0,0 +1,358 @@
+锘縰sing Microsoft.AspNetCore.DataProtection.KeyManagement;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_DTO.System;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.HttpContextUser;
+using WIDESEA_ISystemService;
+using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.System;
+using WIDESEA_Core.Helper;
+//using WIDESEA_Core.HostedService;
+
+namespace WIDESEA_SystemService
+{
+    public class Sys_RoleService : ServiceBase<Sys_Role, IRepository<Sys_Role>>, ISys_RoleService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly ISys_MenuService _MenuService;
+        private readonly ISys_RoleAuthService _RoleAuthService;
+
+        public IRepository<Sys_Role> Repository => BaseDal;
+
+        public Sys_RoleService(IRepository<Sys_Role> BaseDal, ISys_MenuService MenuService,  IUnitOfWorkManage unitOfWorkManage, ISys_RoleAuthService roleAuthService) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+            _MenuService = MenuService;
+            _RoleAuthService = roleAuthService;
+        }
+
+        public List<int> GetAllChildrenRoleId(int roleId)
+        {
+            return GetAllChildren(roleId).Select(x => x.Id).ToList();
+        }
+
+        public List<RoleNodes> GetAllChildren(int roleId)
+        {
+            if (roleId <= 0) return new List<RoleNodes>() { };
+            var roles = GetAllRoleId();
+            if (App.User.IsRoleIdSuperAdmin(roleId)) return roles;
+
+            var list = GetChildren(roles, roleId);
+            return list;
+        }
+
+        public List<RoleNodes> GetAllRoleId()
+        {
+            List<RoleNodes> roles = BaseDal.QueryData().Select(s => new RoleNodes() { Id = s.RoleId, ParentId = s.ParentId, RoleName = s.RoleName }).ToList();
+
+            return roles;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎵�鏈夊瓙鑺傜偣
+        /// </summary>
+        /// <param name="roleId"></param>
+        private List<RoleNodes> GetChildren(List<RoleNodes> roles, int roleId)
+        {
+            List<RoleNodes> rolesChildren = roles.Where(x => x.Id == roleId).Distinct().ToList();
+
+            for (int i = 0; i < rolesChildren.Count; i++)
+            {
+                RoleNodes node = rolesChildren[i];
+                var children = roles.Where(x => x.ParentId == node.Id && !rolesChildren.Any(c => c.Id == x.Id)).Distinct().ToList();
+                rolesChildren.AddRange(children);
+            }
+            return rolesChildren;
+        }
+
+        /// <summary>
+        /// 缂栬緫鏉冮檺鏃惰幏鍙栧綋鍓嶇敤鎴蜂笅鐨勬墍鏈夎鑹蹭笌褰撳墠鐢ㄦ埛鐨勮彍鍗曟潈闄�
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent GetCurrentTreePermission()
+        {
+            WebResponseContent content = GetCurrentUserTreePermission();
+            int roleId = App.User.RoleId;
+            return WebResponseContent.Instance.OK(null, new
+            {
+                tree = content.Data,
+                roles = GetAllChildren(roleId)
+            });
+        }
+
+        /// <summary>
+        /// 缂栬緫鏉冮檺鏃讹紝鑾峰彇褰撳墠鐢ㄦ埛鐨勬墍鏈夎彍鍗曟潈闄�
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent GetCurrentUserTreePermission()
+        {
+            return GetUserTreePermission(App.User.RoleId);
+        }
+
+        /// <summary>
+        /// 缂栬緫鏉冮檺鏃讹紝鑾峰彇鎸囧畾瑙掕壊鐨勬墍鏈夎彍鍗曟潈闄�
+        /// </summary>
+        /// <param name="roleId"></param>
+        /// <returns></returns>
+        public WebResponseContent GetUserTreePermission(int roleId)
+        {
+            if (!App.User.IsRoleIdSuperAdmin(roleId) && App.User.RoleId != roleId)
+            {
+                if (!(GetAllChildren(App.User.RoleId)).Exists(x => x.Id == roleId))
+                {
+                    return WebResponseContent.Instance.Error("娌℃湁鏉冮檺鑾峰彇姝よ鑹茬殑鏉冮檺淇℃伅");
+                }
+            }
+            //鑾峰彇鐢ㄦ埛鏉冮檺
+            List<Permissions> permissions = _MenuService.GetPermissions(roleId);
+            //鏉冮檺鐢ㄦ埛鏉冮檺鏌ヨ鎵�鏈夌殑鑿滃崟淇℃伅
+            List<MenuDTO> menus = _MenuService.GetUserMenuList(roleId);
+            //鑾峰彇褰撳墠鐢ㄦ埛鏉冮檺濡�:(Add,Search)瀵瑰簲鐨勬樉绀烘枃鏈俊鎭:Add锛氭坊鍔狅紝Search:鏌ヨ
+            var data = menus.Select(x => new
+            {
+                Id = x.MenuId,
+                Pid = x.ParentId,
+                Text = x.MenuName,
+                IsApp = x.MenuType == 1,
+                Actions = _MenuService.GetActions(x.MenuId, x.Actions, permissions, roleId)
+            });
+            return WebResponseContent.Instance.OK(null, data);
+        }
+        public WebResponseContent GetCurrentTreePermissionPDA()
+        {
+            WebResponseContent content = GetCurrentUserTreePermissionPDA();
+            int roleId = App.User.RoleId;
+            return WebResponseContent.Instance.OK(null, new
+            {
+                tree = content.Data,
+                roles = GetAllChildren(roleId)
+            });
+        }
+
+        /// <summary>
+        /// 缂栬緫鏉冮檺鏃讹紝鑾峰彇褰撳墠鐢ㄦ埛鐨勬墍鏈夎彍鍗曟潈闄�
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent GetCurrentUserTreePermissionPDA()
+        {
+            return GetUserTreePermissionPDA(App.User.RoleId);
+        }
+        public WebResponseContent GetUserTreePermissionPDA(int roleId)
+        {
+            if (!App.User.IsRoleIdSuperAdmin(roleId) && App.User.RoleId != roleId)
+            {
+                if (!(GetAllChildren(App.User.RoleId)).Exists(x => x.Id == roleId))
+                {
+                    return WebResponseContent.Instance.Error("娌℃湁鏉冮檺鑾峰彇姝よ鑹茬殑鏉冮檺淇℃伅");
+                }
+            }
+            //鑾峰彇鐢ㄦ埛鏉冮檺
+            List<Permissions> permissions = _MenuService.GetPermissions(roleId);
+            //鏉冮檺鐢ㄦ埛鏉冮檺鏌ヨ鎵�鏈夌殑鑿滃崟淇℃伅
+            List<MenuDTO> menus = _MenuService.GetUserMenuListPDA(roleId);
+
+            //鑾峰彇褰撳墠鐢ㄦ埛鏉冮檺濡�:(Add,Search)瀵瑰簲鐨勬樉绀烘枃鏈俊鎭:Add锛氭坊鍔狅紝Search:鏌ヨ
+            var data = menus.Where(x => x.MenuType == 1).Select(x => new
+            {
+                Id = x.MenuId,
+                Pid = x.ParentId,
+                Text = x.MenuName,
+                IsApp = x.MenuType == 1,
+                Actions = _MenuService.GetActions(x.MenuId, x.Actions, permissions, roleId)
+            });
+            return WebResponseContent.Instance.OK(null, data);
+        }
+
+        /// <summary>
+        /// 淇濆瓨瑙掕壊鏉冮檺
+        /// </summary>
+        /// <param name="userPermissions"></param>
+        /// <param name="roleId"></param>
+        /// <returns></returns>
+        public WebResponseContent SavePermission(List<UserPermissionDTO> userPermissions, int roleId)
+        {
+            WebResponseContent content = new WebResponseContent();
+            string message = "";
+            try
+            {
+                if (!GetAllChildren(App.User.RoleId).Exists(x => x.Id == roleId))
+                    return WebResponseContent.Instance.Error("娌℃湁鏉冮檺淇敼姝よ鑹茬殑鏉冮檺淇℃伅");
+                //褰撳墠鐢ㄦ埛鐨勬潈闄�
+                List<Permissions> permissions = _MenuService.GetPermissions(App.User.RoleId);
+
+                List<int> menuIds = _MenuService.Repository.QueryData(x => x.MenuId, x => x.MenuType == 1);
+
+                List<int> originalMeunIds = new List<int>();
+                //琚垎閰嶈鑹茬殑鏉冮檺
+                List<Sys_RoleAuth> roleAuths = _RoleAuthService.Repository.QueryData(x => x.RoleId == roleId && menuIds.Contains(x.MenuId));
+                List<Sys_RoleAuth> updateAuths = new List<Sys_RoleAuth>();
+                foreach (UserPermissionDTO x in userPermissions)
+                {
+                    Permissions per = permissions.FirstOrDefault(p => p.MenuId == x.Id);
+                    //涓嶈兘鍒嗛厤瓒呰繃褰撳墠鐢ㄦ埛鐨勬潈闄�
+                    if (per == null) continue;
+                    //per.UserAuthArr.Contains(a.Value)鏍¢獙鏉冮檺鑼冨洿
+                    string[] arr = x.Actions == null || x.Actions.Count == 0
+                      ? new string[0]
+                      : x.Actions.Where(a => per.UserAuthArr.Contains(a.Value))
+                      .Select(s => s.Value).ToArray();
+
+                    //濡傛灉褰撳墠鏉冮檺娌℃湁鍒嗛厤杩囷紝璁剧疆Auth_Id榛樿涓�0锛岃〃绀烘柊澧炵殑鏉冮檺
+                    var auth = roleAuths.Where(r => r.MenuId == x.Id).Select(s => new { s.AuthId, s.AuthValue, s.MenuId }).FirstOrDefault();
+                    string newAuthValue = string.Join(",", arr);
+                    //鏉冮檺娌℃湁鍙戠敓鍙樺寲鍒欎笉澶勭悊
+                    if (auth == null || auth.AuthValue != newAuthValue)
+                    {
+                        updateAuths.Add(new Sys_RoleAuth()
+                        {
+                            RoleId = roleId,
+                            MenuId = x.Id,
+                            AuthValue = string.Join(",", arr),
+                            AuthId = auth == null ? 0 : auth.AuthId,
+                            ModifyDate = DateTime.Now,
+                            Modifier = App.User.UserName,
+                            CreateDate = DateTime.Now,
+                            Creater = App.User.UserName
+                        });
+                    }
+                    else
+                    {
+                        originalMeunIds.Add(auth.MenuId);
+                    }
+
+                }
+                //鏇存柊鏉冮檺
+                _RoleAuthService.Repository.UpdateData(updateAuths);
+                //鏂板鐨勬潈闄�
+                _RoleAuthService.Repository.AddData(updateAuths);
+
+                //鑾峰彇鏉冮檺鍙栨秷鐨勬潈闄�
+                int[] authIds = roleAuths.Where(x => userPermissions.Select(u => u.Id)
+                 .ToList().Contains(x.MenuId) || originalMeunIds.Contains(x.MenuId))
+                .Select(s => s.AuthId)
+                .ToArray();
+                List<Sys_RoleAuth> delAuths = roleAuths.Where(x => x.AuthValue != "" && !authIds.Contains(x.AuthId)).ToList();
+                delAuths.ForEach(x =>
+                {
+                    x.AuthValue = "";
+                });
+                //灏嗗彇娑堢殑鏉冮檺璁剧疆涓�""
+                _RoleAuthService.Repository.DeleteData(delAuths);
+
+                int addCount = updateAuths.Where(x => x.AuthId <= 0).Count();
+                int updateCount = updateAuths.Where(x => x.AuthId > 0).Count();
+
+                string _version = DateTime.Now.ToString("yyyyMMddHHMMssfff");
+
+
+                content.OK($"淇濆瓨鎴愬姛锛氭柊澧炲姞閰嶈彍鍗曟潈闄恵addCount}鏉�,鏇存柊鑿滃崟{updateCount}鏉�,鍒犻櫎鏉冮檺{delAuths.Count}鏉�");
+            }
+            catch (Exception ex)
+            {
+                message = "寮傚父淇℃伅锛�" + ex.Message + ex.StackTrace + ",";
+            }
+
+            return content;
+        }
+
+        /// <summary>
+        /// 淇濆瓨瑙掕壊鏉冮檺
+        /// </summary>
+        /// <param name="userPermissions"></param>
+        /// <param name="roleId"></param>
+        /// <returns></returns>
+        public WebResponseContent SavePermissionPDA(List<UserPermissionDTO> userPermissions, int roleId)
+        {
+            WebResponseContent content = new WebResponseContent();
+            string message = "";
+            try
+            {
+                if (!GetAllChildren(App.User.RoleId).Exists(x => x.Id == roleId))
+                    return WebResponseContent.Instance.Error("娌℃湁鏉冮檺淇敼姝よ鑹茬殑鏉冮檺淇℃伅");
+                //褰撳墠鐢ㄦ埛鐨勬潈闄�
+                List<Permissions> permissions = _MenuService.GetPermissions(App.User.RoleId);
+
+                List<int> originalMeunIds = new List<int>();
+
+                List<int> menuIds = _MenuService.Repository.QueryData(x => x.MenuId, x => x.MenuType == 1);
+
+                //琚垎閰嶈鑹茬殑鏉冮檺
+                List<Sys_RoleAuth> roleAuths = _RoleAuthService.Repository.QueryData(x => x.RoleId == roleId && menuIds.Contains(x.MenuId));
+                List<Sys_RoleAuth> updateAuths = new List<Sys_RoleAuth>();
+                foreach (UserPermissionDTO x in userPermissions)
+                {
+                    Permissions per = permissions.FirstOrDefault(p => p.MenuId == x.Id);
+                    //涓嶈兘鍒嗛厤瓒呰繃褰撳墠鐢ㄦ埛鐨勬潈闄�
+                    if (per == null) continue;
+                    //per.UserAuthArr.Contains(a.Value)鏍¢獙鏉冮檺鑼冨洿
+                    string[] arr = x.Actions == null || x.Actions.Count == 0
+                      ? new string[0]
+                      : x.Actions.Where(a => per.UserAuthArr.Contains(a.Value))
+                      .Select(s => s.Value).ToArray();
+
+                    //濡傛灉褰撳墠鏉冮檺娌℃湁鍒嗛厤杩囷紝璁剧疆Auth_Id榛樿涓�0锛岃〃绀烘柊澧炵殑鏉冮檺
+                    var auth = roleAuths.Where(r => r.MenuId == x.Id).Select(s => new { s.AuthId, s.AuthValue, s.MenuId }).FirstOrDefault();
+                    string newAuthValue = string.Join(",", arr);
+                    //鏉冮檺娌℃湁鍙戠敓鍙樺寲鍒欎笉澶勭悊
+                    if (auth == null || auth.AuthValue != newAuthValue)
+                    {
+                        updateAuths.Add(new Sys_RoleAuth()
+                        {
+                            RoleId = roleId,
+                            MenuId = x.Id,
+                            AuthValue = string.Join(",", arr),
+                            AuthId = auth == null ? 0 : auth.AuthId,
+                            ModifyDate = DateTime.Now,
+                            Modifier = App.User.UserName,
+                            CreateDate = DateTime.Now,
+                            Creater = App.User.UserName
+                        });
+                    }
+                    else
+                    {
+                        originalMeunIds.Add(auth.MenuId);
+                    }
+
+                }
+                //鏇存柊鏉冮檺
+                _RoleAuthService.Repository.UpdateData(updateAuths);
+                //鏂板鐨勬潈闄�
+                _RoleAuthService.Repository.AddData(updateAuths);
+
+                //鑾峰彇鏉冮檺鍙栨秷鐨勬潈闄�
+                int[] authIds = roleAuths.Where(x => userPermissions.Select(u => u.Id)
+                 .ToList().Contains(x.MenuId) || originalMeunIds.Contains(x.MenuId))
+                .Select(s => s.AuthId)
+                .ToArray();
+                List<Sys_RoleAuth> delAuths = roleAuths.Where(x => x.AuthValue != "" && !authIds.Contains(x.AuthId)).ToList();
+                delAuths.ForEach(x =>
+                {
+                    x.AuthValue = "";
+                });
+                //灏嗗彇娑堢殑鏉冮檺璁剧疆涓�""
+                _RoleAuthService.Repository.DeleteData(delAuths);
+
+                int addCount = updateAuths.Where(x => x.AuthId <= 0).Count();
+                int updateCount = updateAuths.Where(x => x.AuthId > 0).Count();
+
+                string _version = DateTime.Now.ToString("yyyyMMddHHMMssfff");
+
+
+                content.OK($"淇濆瓨鎴愬姛锛氭柊澧炲姞閰嶈彍鍗曟潈闄恵addCount}鏉�,鏇存柊鑿滃崟{updateCount}鏉�,鍒犻櫎鏉冮檺{delAuths.Count}鏉�");
+            }
+            catch (Exception ex)
+            {
+                message = "寮傚父淇℃伅锛�" + ex.Message + ex.StackTrace + ",";
+            }
+
+            return content;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_TenantService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_TenantService.cs"
new file mode 100644
index 0000000..9a7f4d9
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_TenantService.cs"
@@ -0,0 +1,82 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.AOP;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Seed;
+using WIDESEA_ISystemService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_SystemService
+{
+    public class Sys_TenantService : ServiceBase<Sys_Tenant, IRepository<Sys_Tenant>>, ISys_TenantService
+    {
+        private IUnitOfWorkManage _unitOfWorkManage;
+
+        public IRepository<Sys_Tenant> Repository => BaseDal;
+
+        public Sys_TenantService(IRepository<Sys_Tenant> BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+        }
+
+        public WebResponseContent InitTenantInfo(string tenantName, int tenantType)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Sys_Tenant tenant = new Sys_Tenant()
+                {
+                    ConnectionString = TenantConst.DBConStr,
+                    DbType = 1,
+                    Status = 1,
+                    TenantName = tenantName,
+                    TenantType = tenantType,
+                    CreateDate = DateTime.Now,
+                    Creater = "1111"
+                };
+
+                int tenantId = BaseDal.Db.Insertable(tenant).ExecuteReturnIdentity();
+
+                tenant = BaseDal.QueryFirst(x => x.TenantId == tenantId);
+
+                tenant.ConnectionString = string.Format(TenantConst.DBConStr, ".", "Tenant_WMSDB_" + tenantId, "sa", "P@ssw0rd").EncryptDES(AppSecret.DB);
+
+                BaseDal.UpdateData(tenant);
+
+                InitTenantDb(tenant);
+                content = WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+
+        public void InitTenantDb(Sys_Tenant tenant)
+        {
+            string conStr = tenant.ConnectionString.DecryptDES(AppSecret.DB);
+
+            ConnectionConfig connectionConfig = new ConnectionConfig()
+            {
+                ConfigId = tenant.TenantId,
+                ConnectionString = conStr,
+                DbType = (DbType)tenant.DbType,
+                IsAutoCloseConnection = true,
+                AopEvents = new AopEvents()
+                {
+                    DataExecuting = SqlSugarAop.DataExecuting
+                }
+            };
+            DBSeed.InitTenantSeedAsync(Db.AsTenant(), connectionConfig);
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_UserService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_UserService.cs"
new file mode 100644
index 0000000..cea2a5f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_UserService.cs"
@@ -0,0 +1,269 @@
+锘縰sing WIDESEA_Core.Authorization;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.HttpContextUser;
+using WIDESEA_ISystemService;
+using WIDESEA_Model;
+using WIDESEA_Model.Models;
+using WIDESEA_Core.BaseRepository;
+using System.Net;
+using WIDESEA_Core.Caches;
+using SqlSugar;
+using ICacheService = WIDESEA_Core.Caches.ICacheService;
+using HslCommunication.WebSocket;
+using System.Drawing.Drawing2D;
+using System.Linq;
+using MailKit.Search;
+using OrderByType = SqlSugar.OrderByType;
+using System.Drawing.Printing;
+//using WIDESEA_Core.HostedService;
+
+namespace WIDESEA_SystemService
+{
+    public class Sys_UserService : ServiceBase<Sys_User, IRepository<Sys_User>>, ISys_UserService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly ICacheService _cacheService;
+        private readonly ISys_MenuService _menuService;
+        private readonly ISys_RoleService _roleService;
+
+        public IRepository<Sys_User> Repository => BaseDal;
+
+        public Sys_UserService(IRepository<Sys_User> repository, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService, ISys_MenuService menuService, ISys_RoleService roleService) : base(repository)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+            _cacheService = cacheService;
+            _menuService = menuService;
+            _roleService = roleService;
+        }
+
+        public WebResponseContent Login(LoginInfo loginInfo)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                //BaseDal.QueryFirst(x => x.UserName == loginInfo.UserName);
+
+                string msg = string.Empty;
+
+                #region 涓存椂浣跨敤
+                try
+                {
+                    loginInfo.Password = loginInfo.Password.EncryptDES(AppSecret.User);
+                }
+                catch
+                {
+
+                }
+                #endregion
+
+                UserInfo user = BaseDal.QueryFirst(x => x.UserName == loginInfo.UserName && x.UserPwd == loginInfo.Password, x => new UserInfo { HeadImageUrl = x.HeadImageUrl, RoleId = x.RoleId, TenantId = x.TenantId, UserId = x.UserId, UserName = x.UserName, UserTrueName = x.UserTrueName });
+                if (user != null)
+                {
+                    object obj = _menuService.GetMenuActionList(user.RoleId);
+                    if (obj is not IEnumerable<object> list)
+                    {
+                        return WebResponseContent.Instance.Error("鏃犵櫥褰曟潈闄�");
+                    }
+                    if (!list.Any())
+                    {
+                        return WebResponseContent.Instance.Error("鏃犵櫥褰曟潈闄�");
+                    }
+
+                    string token = JwtHelper.IssueJwt(new TokenModelJwt()
+                    {
+                        UserId = user.UserId,
+                        RoleId = user.RoleId,
+                        UserName = user.UserName,
+                        TenantId = user.TenantId,
+                    });
+                    App.User.UpdateToke(token, user.UserId);
+
+                    //if (PermissionDataHostService.UserRoles.FirstOrDefault(x => x.UserId == user.UserId) == null)
+                    //    PermissionDataHostService.UserRoles.AddRange(PermissionDataHostService.GetUserRoles(Db, user.UserId));
+
+                    content = WebResponseContent.Instance.OK(data: new { token, userName = user.UserName, img = user.HeadImageUrl, user.UserTrueName });
+                }
+                else
+                {
+                    content = WebResponseContent.Instance.Error("璐﹀彿鎴栧瘑鐮侀敊璇�");
+                }
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+
+            return content;
+        }
+
+        public override WebResponseContent UpdateData(SaveModel saveModel)
+        {
+            UpdateIgnoreColOnExecute = x =>
+            {
+                return new List<string>
+                {
+                    nameof(Sys_User.UserPwd),
+                    nameof(Sys_User.TenantId)
+                };
+            };
+            return base.UpdateData(saveModel);
+        }
+
+        public override PageGridData<Sys_User> GetPageData(PageDataOptions options)
+        {
+            int roleId = -1;
+            //鏍戝舰鑿滃崟浼犳煡璇㈣鑹蹭笅鎵�鏈夌敤鎴�
+            if (options.Value != null)
+            {
+                roleId = options.Value.ObjToInt();
+            }
+
+            if (roleId <= 0)
+            {
+                if (App.User.IsHighestRole) return base.GetPageData(options);
+                roleId = App.User.RoleId;
+            }
+            int totalCount = 0;
+            List<int> roleIds = _roleService.GetAllChildrenRoleId(roleId).Where(x => x != roleId).ToList();
+            ISugarQueryable<Sys_User> sugarQueryable = Db.Queryable<Sys_User>();
+            ValidatePageOptions(options, ref sugarQueryable);
+
+            Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(TProperties);
+            List<OrderByModel> orderByModels = new List<OrderByModel>();
+            foreach (var item in orderbyDic)
+            {
+                OrderByModel orderByModel = new OrderByModel()
+                {
+                    FieldName = item.Key,
+                    OrderByType = item.Value
+                };
+                orderByModels.Add(orderByModel);
+            }
+            List<Sys_User> users = sugarQueryable.Where(x => roleIds.Contains(x.RoleId) || x.UserId == App.User.UserId).OrderBy(orderByModels).ToPageList(options.Page, options.Rows, ref totalCount);
+            return new PageGridData<Sys_User> { Rows = users, Total = totalCount };
+        }
+
+        public override WebResponseContent AddData(SaveModel saveModel)
+        {
+            string pwd = "123456";
+            string uesrName = saveModel.MainData[nameof(Sys_User.UserName).FirstLetterToLower()].ToString();
+            saveModel.MainData[nameof(Sys_User.UserPwd).FirstLetterToLower()] = pwd.EncryptDES(AppSecret.User);
+
+            WebResponseContent content = base.AddData(saveModel);
+            if (content.Status)
+            {
+                return WebResponseContent.Instance.OK($"鐢ㄦ埛鏂板缓鎴愬姛.甯愬彿{uesrName}瀵嗙爜{pwd}");
+            }
+            else
+            {
+                return content;
+            }
+        }
+
+        /// <summary>
+        /// 涓汉涓績鑾峰彇褰撳墠鐢ㄦ埛淇℃伅
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent GetCurrentUserInfo()
+        {
+            var data = BaseDal.QueryFirst(x => x.UserId == App.User.UserId, s => new
+            {
+                s.UserName,
+                s.UserTrueName,
+                s.Address,
+                s.PhoneNo,
+                s.Email,
+                s.Remark,
+                s.Gender,
+                s.RoleName,
+                s.HeadImageUrl,
+                s.CreateDate
+            });
+            return WebResponseContent.Instance.OK(null, data);
+        }
+
+        /// <summary>
+        /// 淇敼瀵嗙爜
+        /// </summary>
+        /// <param name="parameters"></param>
+        /// <returns></returns>
+        public WebResponseContent ModifyPwd(string oldPwd, string newPwd)
+        {
+            WebResponseContent content = WebResponseContent.Instance;
+            oldPwd = oldPwd?.Trim();
+            newPwd = newPwd?.Trim();
+            string message = "";
+            try
+            {
+                if (string.IsNullOrEmpty(oldPwd)) return WebResponseContent.Instance.Error("鏃у瘑鐮佷笉鑳戒负绌�");
+                if (string.IsNullOrEmpty(newPwd)) return WebResponseContent.Instance.Error("鏂板瘑鐮佷笉鑳戒负绌�");
+                if (newPwd.Length < 6) return WebResponseContent.Instance.Error("瀵嗙爜涓嶈兘灏戜簬6浣�");
+
+                int userId = App.User.UserId;
+                string userCurrentPwd = BaseDal.QueryFirst(x => x.UserId == userId, s => s.UserPwd);
+
+                string _oldPwd = oldPwd.EncryptDES(AppSecret.User);
+                if (_oldPwd != userCurrentPwd) return WebResponseContent.Instance.Error("鏃у瘑鐮佷笉姝g‘");
+
+                string _newPwd = newPwd.EncryptDES(AppSecret.User);
+                if (userCurrentPwd == _newPwd) return WebResponseContent.Instance.Error("鏂板瘑鐮佷笉鑳戒笌鏃у瘑鐮佺浉鍚�");
+
+
+                BaseDal.UpdateData(new Sys_User
+                {
+                    UserId = userId,
+                    UserPwd = _newPwd,
+                    LastModifyPwdDate = DateTime.Now
+                }, new List<string>
+                {
+                    nameof(Sys_User.LastModifyPwdDate),
+                    nameof(Sys_User.UserPwd)
+                });
+
+                content = WebResponseContent.Instance.OK("瀵嗙爜淇敼鎴愬姛");
+            }
+            catch (Exception ex)
+            {
+                message = ex.Message;
+                content = WebResponseContent.Instance.Error("鏈嶅姟鍣ㄤ簡鐐归棶棰�,璇风◢鍚庡啀璇�");
+            }
+            return content;
+        }
+        public WebResponseContent ModifyUserPwd(string password, string userName)
+        {
+            WebResponseContent content = new WebResponseContent();
+            string message = "";
+            password = password?.Trim();
+            try
+            {
+                if (string.IsNullOrEmpty(password)) return WebResponseContent.Instance.Error("瀵嗙爜涓嶈兘涓虹┖");
+                //鑾峰彇鐢ㄦ埛
+                Sys_User user = BaseDal.QueryFirst(x => x.UserName == userName);
+                if (user == null) return WebResponseContent.Instance.Error("鐢ㄦ埛涓嶅瓨鍦�");
+                user.UserPwd = password.EncryptDES(AppSecret.User);
+                BaseDal.UpdateData(user);
+                if (App.User.UserId == user.UserId)
+                {
+                    string token = JwtHelper.IssueJwt(new TokenModelJwt()
+                    {
+                        UserId = user.UserId,
+                        RoleId = user.RoleId,
+                        UserName = user.UserName,
+                        TenantId = user.TenantId,
+                    });
+                    _cacheService.AddOrUpdate(user.UserId.ToString(), token);
+                }
+                return content.OK("鏇存敼鎴愬姛");
+            }
+            catch (Exception ex)
+            {
+                message = ex.Message;
+                content.Error("鏈嶅姟鍣ㄤ簡鐐归棶棰�,璇风◢鍚庡啀璇�");
+            }
+            return content;
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/WIDESEA_SystemService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/WIDESEA_SystemService.csproj"
new file mode 100644
index 0000000..37aa4de
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_SystemService/WIDESEA_SystemService.csproj"
@@ -0,0 +1,13 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_ISystemService\WIDESEA_ISystemService.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
new file mode 100644
index 0000000..408a9cb
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -0,0 +1,57 @@
+锘�#region << 鐗� 鏈� 娉� 閲� >>
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEA_TaskInfoService
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛�
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ * 
+ *----------------------------------------------------------------*/
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using AutoMapper;
+using SqlSugar;
+using WIDESEA_Common.TaskEnum;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IBasicService;
+using WIDESEA_IInboundService;
+using WIDESEA_IOutboundService;
+using WIDESEA_IRecordService;
+using WIDESEA_IStockService;
+using WIDESEA_ITaskInfoService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_TaskInfoService
+{
+    public partial class TaskService : ServiceBase<Dt_Task, IRepository<Dt_Task>>, ITaskService
+    {
+        private readonly IMapper _mapper;
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+
+        public IRepository<Dt_Task> Repository => BaseDal;
+
+        private Dictionary<string, OrderByType> _taskOrderBy = new()
+            {
+                {nameof(Dt_Task.Grade),OrderByType.Desc },
+                {nameof(Dt_Task.CreateDate),OrderByType.Asc},
+            };
+
+        public List<int> TaskTypes => typeof(TaskTypeEnum).GetEnumIndexList();
+
+        public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
+
+        public TaskService(IRepository<Dt_Task> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        {
+            _mapper = mapper;
+            _unitOfWorkManage = unitOfWorkManage;
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs"
new file mode 100644
index 0000000..73bd716
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs"
@@ -0,0 +1,13 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_ITaskInfoService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_TaskInfoService;
+
+public class Task_HtyService : ServiceBase<Dt_Task_Hty, IRepository<Dt_Task_Hty>>, ITask_HtyService
+{
+    public Task_HtyService(IRepository<Dt_Task_Hty> BaseDal) : base(BaseDal)
+    {
+    }
+}
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj"
new file mode 100644
index 0000000..5272e9b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj"
@@ -0,0 +1,18 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\WIDESEA_IBasicService\WIDESEA_IBasicService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IInboundService\WIDESEA_IInboundService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IOutboundService\WIDESEA_IOutboundService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IStockService\WIDESEA_IStockService.csproj" />
+    <ProjectReference Include="..\WIDESEA_ITaskInfoService\WIDESEA_ITaskInfoService.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer.sln" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer.sln"
new file mode 100644
index 0000000..f86f859
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer.sln"
@@ -0,0 +1,366 @@
+锘�
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.9.34701.34
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_WMSServer", "WIDESEA_WMSServer\WIDESEA_WMSServer.csproj", "{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_Core", "WIDESEA_Core\WIDESEA_Core.csproj", "{111BD7AA-9749-4506-9772-79F9EF14754C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_Common", "WIDESEA_Common\WIDESEA_Common.csproj", "{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_Model", "WIDESEA_Model\WIDESEA_Model.csproj", "{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Service", "Service", "{60DE2920-37C6-4C2B-A053-6B1B2DAF047A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_DTO", "WIDESEA_DTO\WIDESEA_DTO.csproj", "{929DF936-042C-4EEC-8722-A831FC2F0AEA}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "System", "System", "{F40FDE85-110F-4B31-AA62-E2BD432028E0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_ISystemService", "WIDESEA_ISystemService\WIDESEA_ISystemService.csproj", "{00A5A08A-8A36-4972-8863-7DCF8DBC7978}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_SystemService", "WIDESEA_SystemService\WIDESEA_SystemService.csproj", "{D8C9593B-B31C-4650-8F44-962E9096A0CF}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TaskInfo", "TaskInfo", "{65441FA0-9B61-45F6-AC6F-76E4468617BA}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Stock", "Stock", "{9F5EEC4F-B525-4527-AA48-404EA6E46FFC}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Outbound", "Outbound", "{839D91F1-D8B5-4FA0-8980-DD2ED1012D87}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Inbound", "Inbound", "{A8175EEC-87F8-4560-8D95-1027B33B6301}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Basic", "Basic", "{2228B322-FB4C-49C0-8C1C-0264ED6787FB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{99C8A9CA-A406-4889-BEE1-8865179376B9}"
+	ProjectSection(SolutionItems) = preProject
+		.editorconfig = .editorconfig
+	EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_IBasicService", "WIDESEA_IBasicService\WIDESEA_IBasicService.csproj", "{5F260E03-095A-4870-8419-5B72CB62929E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_BasicService", "WIDESEA_BasicService\WIDESEA_BasicService.csproj", "{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_IInboundService", "WIDESEA_IInboundService\WIDESEA_IInboundService.csproj", "{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_InboundService", "WIDESEA_InboundService\WIDESEA_InboundService.csproj", "{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_IOutboundService", "WIDESEA_IOutboundService\WIDESEA_IOutboundService.csproj", "{69C05DDB-1AA6-4090-9916-029CD0E95B10}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_OutboundService", "WIDESEA_OutboundService\WIDESEA_OutboundService.csproj", "{1B884AD3-7E67-44CD-B182-DEECDD671DD2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_IStockService", "WIDESEA_IStockService\WIDESEA_IStockService.csproj", "{49716D78-720D-475D-948C-0FC6C5F079E5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_StockService", "WIDESEA_StockService\WIDESEA_StockService.csproj", "{7DC26D42-D8EE-46F0-BA66-A13457086885}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_ITaskInfoService", "WIDESEA_ITaskInfoService\WIDESEA_ITaskInfoService.csproj", "{CE0DB91F-5A68-448E-A419-4C26B5039F51}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_TaskInfoService", "WIDESEA_TaskInfoService\WIDESEA_TaskInfoService.csproj", "{7D7534D4-51D9-46DC-A6B7-6430042F4E12}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Record", "Record", "{551C56D1-8642-4391-B478-A1BC51D63F98}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_IRecordService", "WIDESEA_IRecordService\WIDESEA_IRecordService.csproj", "{6E0E5856-A399-4791-9EAD-84ABC43F35AA}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_RecordService", "WIDESEA_RecordService\WIDESEA_RecordService.csproj", "{A343A2C5-995D-45F1-A3E5-20495DD3F615}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Check", "Check", "{294A53A4-1311-4B71-A812-378A2BCB8346}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WIDESEA_ICheckService", "WIDESEA_ICheckService\WIDESEA_ICheckService.csproj", "{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WIDESEA_CheckService", "WIDESEA_CheckService\WIDESEA_CheckService.csproj", "{C57C16CE-88A7-499A-8CE1-855D55482891}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|x86 = Debug|x86
+		Dev|Any CPU = Dev|Any CPU
+		Dev|x86 = Dev|x86
+		Release|Any CPU = Release|Any CPU
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}.Debug|x86.Build.0 = Debug|Any CPU
+		{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}.Dev|x86.Build.0 = Debug|Any CPU
+		{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}.Release|x86.ActiveCfg = Release|Any CPU
+		{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}.Release|x86.Build.0 = Release|Any CPU
+		{111BD7AA-9749-4506-9772-79F9EF14754C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{111BD7AA-9749-4506-9772-79F9EF14754C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{111BD7AA-9749-4506-9772-79F9EF14754C}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{111BD7AA-9749-4506-9772-79F9EF14754C}.Debug|x86.Build.0 = Debug|Any CPU
+		{111BD7AA-9749-4506-9772-79F9EF14754C}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{111BD7AA-9749-4506-9772-79F9EF14754C}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{111BD7AA-9749-4506-9772-79F9EF14754C}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{111BD7AA-9749-4506-9772-79F9EF14754C}.Dev|x86.Build.0 = Debug|Any CPU
+		{111BD7AA-9749-4506-9772-79F9EF14754C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{111BD7AA-9749-4506-9772-79F9EF14754C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{111BD7AA-9749-4506-9772-79F9EF14754C}.Release|x86.ActiveCfg = Release|Any CPU
+		{111BD7AA-9749-4506-9772-79F9EF14754C}.Release|x86.Build.0 = Release|Any CPU
+		{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}.Debug|x86.Build.0 = Debug|Any CPU
+		{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}.Dev|x86.Build.0 = Debug|Any CPU
+		{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}.Release|x86.ActiveCfg = Release|Any CPU
+		{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}.Release|x86.Build.0 = Release|Any CPU
+		{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}.Debug|x86.Build.0 = Debug|Any CPU
+		{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}.Dev|x86.Build.0 = Debug|Any CPU
+		{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}.Release|Any CPU.Build.0 = Release|Any CPU
+		{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}.Release|x86.ActiveCfg = Release|Any CPU
+		{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}.Release|x86.Build.0 = Release|Any CPU
+		{929DF936-042C-4EEC-8722-A831FC2F0AEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{929DF936-042C-4EEC-8722-A831FC2F0AEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{929DF936-042C-4EEC-8722-A831FC2F0AEA}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{929DF936-042C-4EEC-8722-A831FC2F0AEA}.Debug|x86.Build.0 = Debug|Any CPU
+		{929DF936-042C-4EEC-8722-A831FC2F0AEA}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{929DF936-042C-4EEC-8722-A831FC2F0AEA}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{929DF936-042C-4EEC-8722-A831FC2F0AEA}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{929DF936-042C-4EEC-8722-A831FC2F0AEA}.Dev|x86.Build.0 = Debug|Any CPU
+		{929DF936-042C-4EEC-8722-A831FC2F0AEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{929DF936-042C-4EEC-8722-A831FC2F0AEA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{929DF936-042C-4EEC-8722-A831FC2F0AEA}.Release|x86.ActiveCfg = Release|Any CPU
+		{929DF936-042C-4EEC-8722-A831FC2F0AEA}.Release|x86.Build.0 = Release|Any CPU
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978}.Debug|x86.Build.0 = Debug|Any CPU
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978}.Dev|x86.Build.0 = Debug|Any CPU
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978}.Release|Any CPU.Build.0 = Release|Any CPU
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978}.Release|x86.ActiveCfg = Release|Any CPU
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978}.Release|x86.Build.0 = Release|Any CPU
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF}.Debug|x86.Build.0 = Debug|Any CPU
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF}.Dev|x86.Build.0 = Debug|Any CPU
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF}.Release|x86.ActiveCfg = Release|Any CPU
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF}.Release|x86.Build.0 = Release|Any CPU
+		{5F260E03-095A-4870-8419-5B72CB62929E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5F260E03-095A-4870-8419-5B72CB62929E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5F260E03-095A-4870-8419-5B72CB62929E}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{5F260E03-095A-4870-8419-5B72CB62929E}.Debug|x86.Build.0 = Debug|Any CPU
+		{5F260E03-095A-4870-8419-5B72CB62929E}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{5F260E03-095A-4870-8419-5B72CB62929E}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{5F260E03-095A-4870-8419-5B72CB62929E}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{5F260E03-095A-4870-8419-5B72CB62929E}.Dev|x86.Build.0 = Debug|Any CPU
+		{5F260E03-095A-4870-8419-5B72CB62929E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{5F260E03-095A-4870-8419-5B72CB62929E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{5F260E03-095A-4870-8419-5B72CB62929E}.Release|x86.ActiveCfg = Release|Any CPU
+		{5F260E03-095A-4870-8419-5B72CB62929E}.Release|x86.Build.0 = Release|Any CPU
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}.Debug|x86.Build.0 = Debug|Any CPU
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}.Dev|x86.Build.0 = Debug|Any CPU
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}.Release|x86.ActiveCfg = Release|Any CPU
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}.Release|x86.Build.0 = Release|Any CPU
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}.Debug|x86.Build.0 = Debug|Any CPU
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}.Dev|x86.Build.0 = Debug|Any CPU
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}.Release|x86.ActiveCfg = Release|Any CPU
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26}.Release|x86.Build.0 = Release|Any CPU
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}.Debug|x86.Build.0 = Debug|Any CPU
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}.Dev|x86.Build.0 = Debug|Any CPU
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}.Release|x86.ActiveCfg = Release|Any CPU
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}.Release|x86.Build.0 = Release|Any CPU
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10}.Debug|x86.Build.0 = Debug|Any CPU
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10}.Dev|x86.Build.0 = Debug|Any CPU
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10}.Release|Any CPU.Build.0 = Release|Any CPU
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10}.Release|x86.ActiveCfg = Release|Any CPU
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10}.Release|x86.Build.0 = Release|Any CPU
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2}.Debug|x86.Build.0 = Debug|Any CPU
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2}.Dev|x86.Build.0 = Debug|Any CPU
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2}.Release|x86.ActiveCfg = Release|Any CPU
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2}.Release|x86.Build.0 = Release|Any CPU
+		{49716D78-720D-475D-948C-0FC6C5F079E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{49716D78-720D-475D-948C-0FC6C5F079E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{49716D78-720D-475D-948C-0FC6C5F079E5}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{49716D78-720D-475D-948C-0FC6C5F079E5}.Debug|x86.Build.0 = Debug|Any CPU
+		{49716D78-720D-475D-948C-0FC6C5F079E5}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{49716D78-720D-475D-948C-0FC6C5F079E5}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{49716D78-720D-475D-948C-0FC6C5F079E5}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{49716D78-720D-475D-948C-0FC6C5F079E5}.Dev|x86.Build.0 = Debug|Any CPU
+		{49716D78-720D-475D-948C-0FC6C5F079E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{49716D78-720D-475D-948C-0FC6C5F079E5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{49716D78-720D-475D-948C-0FC6C5F079E5}.Release|x86.ActiveCfg = Release|Any CPU
+		{49716D78-720D-475D-948C-0FC6C5F079E5}.Release|x86.Build.0 = Release|Any CPU
+		{7DC26D42-D8EE-46F0-BA66-A13457086885}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7DC26D42-D8EE-46F0-BA66-A13457086885}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7DC26D42-D8EE-46F0-BA66-A13457086885}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{7DC26D42-D8EE-46F0-BA66-A13457086885}.Debug|x86.Build.0 = Debug|Any CPU
+		{7DC26D42-D8EE-46F0-BA66-A13457086885}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{7DC26D42-D8EE-46F0-BA66-A13457086885}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{7DC26D42-D8EE-46F0-BA66-A13457086885}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{7DC26D42-D8EE-46F0-BA66-A13457086885}.Dev|x86.Build.0 = Debug|Any CPU
+		{7DC26D42-D8EE-46F0-BA66-A13457086885}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7DC26D42-D8EE-46F0-BA66-A13457086885}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7DC26D42-D8EE-46F0-BA66-A13457086885}.Release|x86.ActiveCfg = Release|Any CPU
+		{7DC26D42-D8EE-46F0-BA66-A13457086885}.Release|x86.Build.0 = Release|Any CPU
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51}.Debug|x86.Build.0 = Debug|Any CPU
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51}.Dev|x86.Build.0 = Debug|Any CPU
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51}.Release|x86.ActiveCfg = Release|Any CPU
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51}.Release|x86.Build.0 = Release|Any CPU
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12}.Debug|x86.Build.0 = Debug|Any CPU
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12}.Dev|x86.Build.0 = Debug|Any CPU
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12}.Release|x86.ActiveCfg = Release|Any CPU
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12}.Release|x86.Build.0 = Release|Any CPU
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA}.Debug|x86.Build.0 = Debug|Any CPU
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA}.Dev|x86.Build.0 = Debug|Any CPU
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA}.Release|x86.ActiveCfg = Release|Any CPU
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA}.Release|x86.Build.0 = Release|Any CPU
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615}.Debug|x86.Build.0 = Debug|Any CPU
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615}.Dev|x86.Build.0 = Debug|Any CPU
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615}.Release|x86.ActiveCfg = Release|Any CPU
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615}.Release|x86.Build.0 = Release|Any CPU
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}.Debug|x86.Build.0 = Debug|Any CPU
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}.Dev|x86.Build.0 = Debug|Any CPU
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}.Release|x86.ActiveCfg = Release|Any CPU
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C}.Release|x86.Build.0 = Release|Any CPU
+		{C57C16CE-88A7-499A-8CE1-855D55482891}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C57C16CE-88A7-499A-8CE1-855D55482891}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C57C16CE-88A7-499A-8CE1-855D55482891}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{C57C16CE-88A7-499A-8CE1-855D55482891}.Debug|x86.Build.0 = Debug|Any CPU
+		{C57C16CE-88A7-499A-8CE1-855D55482891}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
+		{C57C16CE-88A7-499A-8CE1-855D55482891}.Dev|Any CPU.Build.0 = Debug|Any CPU
+		{C57C16CE-88A7-499A-8CE1-855D55482891}.Dev|x86.ActiveCfg = Debug|Any CPU
+		{C57C16CE-88A7-499A-8CE1-855D55482891}.Dev|x86.Build.0 = Debug|Any CPU
+		{C57C16CE-88A7-499A-8CE1-855D55482891}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C57C16CE-88A7-499A-8CE1-855D55482891}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C57C16CE-88A7-499A-8CE1-855D55482891}.Release|x86.ActiveCfg = Release|Any CPU
+		{C57C16CE-88A7-499A-8CE1-855D55482891}.Release|x86.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{F40FDE85-110F-4B31-AA62-E2BD432028E0} = {60DE2920-37C6-4C2B-A053-6B1B2DAF047A}
+		{00A5A08A-8A36-4972-8863-7DCF8DBC7978} = {F40FDE85-110F-4B31-AA62-E2BD432028E0}
+		{D8C9593B-B31C-4650-8F44-962E9096A0CF} = {F40FDE85-110F-4B31-AA62-E2BD432028E0}
+		{65441FA0-9B61-45F6-AC6F-76E4468617BA} = {60DE2920-37C6-4C2B-A053-6B1B2DAF047A}
+		{9F5EEC4F-B525-4527-AA48-404EA6E46FFC} = {60DE2920-37C6-4C2B-A053-6B1B2DAF047A}
+		{839D91F1-D8B5-4FA0-8980-DD2ED1012D87} = {60DE2920-37C6-4C2B-A053-6B1B2DAF047A}
+		{A8175EEC-87F8-4560-8D95-1027B33B6301} = {60DE2920-37C6-4C2B-A053-6B1B2DAF047A}
+		{2228B322-FB4C-49C0-8C1C-0264ED6787FB} = {60DE2920-37C6-4C2B-A053-6B1B2DAF047A}
+		{5F260E03-095A-4870-8419-5B72CB62929E} = {2228B322-FB4C-49C0-8C1C-0264ED6787FB}
+		{D11C804C-2FF4-4C18-A3EE-2F0574427BB3} = {2228B322-FB4C-49C0-8C1C-0264ED6787FB}
+		{3E1C6F64-6E74-4E76-9E5D-7EE6A7AA1F26} = {A8175EEC-87F8-4560-8D95-1027B33B6301}
+		{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258} = {A8175EEC-87F8-4560-8D95-1027B33B6301}
+		{69C05DDB-1AA6-4090-9916-029CD0E95B10} = {839D91F1-D8B5-4FA0-8980-DD2ED1012D87}
+		{1B884AD3-7E67-44CD-B182-DEECDD671DD2} = {839D91F1-D8B5-4FA0-8980-DD2ED1012D87}
+		{49716D78-720D-475D-948C-0FC6C5F079E5} = {9F5EEC4F-B525-4527-AA48-404EA6E46FFC}
+		{7DC26D42-D8EE-46F0-BA66-A13457086885} = {9F5EEC4F-B525-4527-AA48-404EA6E46FFC}
+		{CE0DB91F-5A68-448E-A419-4C26B5039F51} = {65441FA0-9B61-45F6-AC6F-76E4468617BA}
+		{7D7534D4-51D9-46DC-A6B7-6430042F4E12} = {65441FA0-9B61-45F6-AC6F-76E4468617BA}
+		{551C56D1-8642-4391-B478-A1BC51D63F98} = {60DE2920-37C6-4C2B-A053-6B1B2DAF047A}
+		{6E0E5856-A399-4791-9EAD-84ABC43F35AA} = {551C56D1-8642-4391-B478-A1BC51D63F98}
+		{A343A2C5-995D-45F1-A3E5-20495DD3F615} = {551C56D1-8642-4391-B478-A1BC51D63F98}
+		{294A53A4-1311-4B71-A812-378A2BCB8346} = {60DE2920-37C6-4C2B-A053-6B1B2DAF047A}
+		{82EBBC95-FD6E-4E30-9F21-625DE1991C2C} = {294A53A4-1311-4B71-A812-378A2BCB8346}
+		{C57C16CE-88A7-499A-8CE1-855D55482891} = {294A53A4-1311-4B71-A812-378A2BCB8346}
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {599A7267-7402-4143-84AE-9B407FC2BB69}
+	EndGlobalSection
+EndGlobal
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/.config/dotnet-tools.json" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/.config/dotnet-tools.json"
new file mode 100644
index 0000000..b99844e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/.config/dotnet-tools.json"
@@ -0,0 +1,12 @@
+{
+  "version": 1,
+  "isRoot": true,
+  "tools": {
+    "dotnet-ef": {
+      "version": "8.0.6",
+      "commands": [
+        "dotnet-ef"
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/LocationInfoController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/LocationInfoController.cs"
new file mode 100644
index 0000000..c62202f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/LocationInfoController.cs"
@@ -0,0 +1,30 @@
+锘縰sing HslCommunication.WebSocket;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System.Collections.Generic;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_Core.Enums;
+using WIDESEA_DTO.Basic;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Basic
+{
+    /// <summary>
+    /// 璐т綅
+    /// </summary>
+    [Route("api/LocationInfo")]
+    [ApiController]
+    public class LocationInfoController : ApiBaseController<ILocationInfoService, Dt_LocationInfo>
+    {
+        public LocationInfoController(ILocationInfoService service) : base(service)
+        {
+        }
+
+       
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/MaterielCodeInfoController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/MaterielCodeInfoController.cs"
new file mode 100644
index 0000000..529ed7b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/MaterielCodeInfoController.cs"
@@ -0,0 +1,17 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Basic
+{
+    [Route("api/MaterielCodeInfo")]
+    [ApiController]
+    public class MaterielCodeInfoController : ApiBaseController<IMaterielCodeInfoService, Dt_MaterielCodeInfo>
+    {
+        public MaterielCodeInfoController(IMaterielCodeInfoService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/MaterielInfoController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/MaterielInfoController.cs"
new file mode 100644
index 0000000..58f725f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/MaterielInfoController.cs"
@@ -0,0 +1,27 @@
+锘縰sing Autofac.Core;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Basic;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Basic
+{
+    /// <summary>
+    /// 鐗╂枡
+    /// </summary>
+    [Route("api/MaterielInfo")]
+    [ApiController]
+    public class MaterielInfoController : ApiBaseController<IMaterielInfoService, Dt_MaterielInfo>
+    {
+        public MaterielInfoController(IMaterielInfoService service) : base(service)
+        {
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/PalletCodeInfoController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/PalletCodeInfoController.cs"
new file mode 100644
index 0000000..beb05d9
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/PalletCodeInfoController.cs"
@@ -0,0 +1,19 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Basic
+{
+    [Route("api/PalletCodeInfo")]
+    [ApiController]
+    public class PalletCodeInfoController : ApiBaseController<IPalletCodeInfoService, Dt_PalletCodeInfo>
+    {
+        public PalletCodeInfoController(IPalletCodeInfoService service) : base(service)
+        {
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/WarehouseController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/WarehouseController.cs"
new file mode 100644
index 0000000..9a40dd7
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/WarehouseController.cs"
@@ -0,0 +1,22 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Basic
+{
+    /// <summary>
+    /// 浠撳簱
+    /// </summary>
+    [Route("api/Warehouse")]
+    [ApiController]
+    public class WarehouseController : ApiBaseController<IWarehouseService, Dt_Warehouse>
+    {
+        public WarehouseController(IWarehouseService service) : base(service)
+        {
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderController.cs"
new file mode 100644
index 0000000..e729346
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderController.cs"
@@ -0,0 +1,23 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_ICheckService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Check
+{
+    /// <summary>
+    /// 璐ㄦ鍗�
+    /// </summary>
+    [Route("api/CheckOrder")]
+    [ApiController]
+    public class CheckOrderController : ApiBaseController<ICheckOrderService, Dt_CheckOrder>
+    {
+        public CheckOrderController(ICheckOrderService service) : base(service)
+        {
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderResultController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderResultController.cs"
new file mode 100644
index 0000000..85e8231
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderResultController.cs"
@@ -0,0 +1,22 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_ICheckService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Check
+{
+    /// <summary>
+    /// 璐ㄦ缁撴灉
+    /// </summary>
+    [Route("api/CheckOrderResult")]
+    [ApiController]
+    public class CheckOrderResultController : ApiBaseController<ICheckOrderResultService, Dt_CheckOrderResult>
+    {
+        public CheckOrderResultController(ICheckOrderResultService service) : base(service)
+        {
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
new file mode 100644
index 0000000..27e8874
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
@@ -0,0 +1,24 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Inbound
+{
+    /// <summary>
+    /// 鍏ュ簱鍗�
+    /// </summary>
+    [Route("api/InboundOrder")]
+    [ApiController]
+    public class InboundOrderController : ApiBaseController<IInboundOrderService, Dt_InboundOrder>
+    {
+        public InboundOrderController(IInboundOrderService service) : base(service)
+        {
+        }
+        
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetailController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetailController.cs"
new file mode 100644
index 0000000..cd51da6
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetailController.cs"
@@ -0,0 +1,22 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Inbound
+{
+    /// <summary>
+    /// 鍏ュ簱鍗曟槑缁�
+    /// </summary>
+    [Route("api/InboundOrderDetail")]
+    [ApiController]
+    public class InboundOrderDetailController : ApiBaseController<IInboundOrderDetailService, Dt_InboundOrderDetail>
+    {
+        public InboundOrderDetailController(IInboundOrderDetailService service) : base(service)
+        {
+        }
+        
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetail_HtyController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetail_HtyController.cs"
new file mode 100644
index 0000000..bdcac48
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetail_HtyController.cs"
@@ -0,0 +1,23 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Inbound
+{
+    /// <summary>
+    /// 鍏ュ簱鍗曟槑缁嗗巻鍙�
+    /// </summary>
+    [Route("api/InboundOrderDetail_Hty")]
+    [ApiController]
+    public class InboundOrderDetail_HtyController : ApiBaseController<IInboundOrderDetail_HtyService, Dt_InboundOrderDetail_Hty>
+    {
+        public InboundOrderDetail_HtyController(IInboundOrderDetail_HtyService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrder_HtyController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrder_HtyController.cs"
new file mode 100644
index 0000000..efb312c
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrder_HtyController.cs"
@@ -0,0 +1,23 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Inbound
+{
+    /// <summary>
+    /// 鍏ュ簱鍗曞巻鍙�
+    /// </summary>
+    [Route("api/InboundOrder_Hty")]
+    [ApiController]
+    public class InboundOrder_HtyController : ApiBaseController<IInboundOrder_HtyService, Dt_InboundOrder_Hty>
+    {
+        public InboundOrder_HtyController(IInboundOrder_HtyService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs"
new file mode 100644
index 0000000..7eba6eb
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs"
@@ -0,0 +1,23 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IOutboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Outbound
+{
+    /// <summary>
+    /// 鍑哄簱璇︽儏
+    /// </summary>
+    [Route("api/OutStockLockInfo")]
+    [ApiController]
+    public class OutStockLockInfoController : ApiBaseController<IOutStockLockInfoService, Dt_OutStockLockInfo>
+    {
+        public OutStockLockInfoController(IOutStockLockInfoService service) : base(service)
+        {
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs"
new file mode 100644
index 0000000..cfd6d31
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs"
@@ -0,0 +1,28 @@
+锘縰sing Autofac.Core;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_DTO.Outbound;
+using WIDESEA_IOutboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Outbound
+{
+    /// <summary>
+    /// 鍑哄簱鍗�
+    /// </summary>
+    [Route("api/OutboundOrder")]
+    [ApiController]
+    public class OutboundOrderController : ApiBaseController<IOutboundOrderService, Dt_OutboundOrder>
+    {
+        public OutboundOrderController(IOutboundOrderService service) : base(service)
+        {
+
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs"
new file mode 100644
index 0000000..1414153
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs"
@@ -0,0 +1,24 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IOutboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Outbound
+{
+    /// <summary>
+    /// 鍑哄簱鍗曟槑缁�
+    /// </summary>
+    [Route("api/OutboundOrderDetail")]
+    [ApiController]
+    public class OutboundOrderDetailController : ApiBaseController<IOutboundOrderDetailService, Dt_OutboundOrderDetail>
+    {
+        public OutboundOrderDetailController(IOutboundOrderDetailService service) : base(service)
+        {
+        }
+        
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetail_HtyController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetail_HtyController.cs"
new file mode 100644
index 0000000..9efe889
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetail_HtyController.cs"
@@ -0,0 +1,24 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_IInboundService;
+using WIDESEA_IOutboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Inbound
+{
+    /// <summary>
+    /// 鍑哄簱鍗曟槑缁嗗巻鍙�
+    /// </summary>
+    [Route("api/OutboundOrderDetail_Hty")]
+    [ApiController]
+    public class OutboundOrderDetail_HtyController : ApiBaseController<IOutboundOrderDetail_HtyService, Dt_OutboundOrderDetail_Hty>
+    {
+        public OutboundOrderDetail_HtyController(IOutboundOrderDetail_HtyService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrder_HtyController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrder_HtyController.cs"
new file mode 100644
index 0000000..7d40d61
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrder_HtyController.cs"
@@ -0,0 +1,24 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_IInboundService;
+using WIDESEA_IOutboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Inbound
+{
+    /// <summary>
+    /// 鍑哄簱鍗曞巻鍙�
+    /// </summary>
+    [Route("api/OutboundOrder_Hty")]
+    [ApiController]
+    public class OutboundOrder_HtyController : ApiBaseController<IOutboundOrder_HtyService, Dt_OutboundOrder_Hty>
+    {
+        public OutboundOrder_HtyController(IOutboundOrder_HtyService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/PDAController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/PDAController.cs"
new file mode 100644
index 0000000..33d6641
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/PDAController.cs"
@@ -0,0 +1,113 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_IInboundService;
+using WIDESEA_IOutboundService;
+using WIDESEA_ITaskInfoService;
+using System.IO;
+using WIDESEA_Model.Models;
+using System;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    /// <summary>
+    /// PDA
+    /// </summary>
+    [Route("api/PDA")]
+    [Authorize, ApiController]
+    public class PDAController : Controller
+    {
+        private readonly IInboundService _inboundService;
+        private readonly IOutboundService _outboundService;
+        private readonly ITaskService _taskService;
+
+        public PDAController(ITaskService taskService, IInboundService inboundService, IOutboundService outboundService)
+        {
+            _inboundService = inboundService;
+            _outboundService = outboundService;
+            _taskService = taskService;
+        }
+
+        /// <summary>
+        /// 涓嬭浇PDA
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("DownLoadApp"), AllowAnonymous]
+        public virtual ActionResult DownLoadApp()
+        {
+            string path = $"{AppDomain.CurrentDomain.BaseDirectory}Upload/App/";
+            if (!Directory.Exists(path)) Directory.CreateDirectory(path);
+            path += "WMS-PDA.apk";
+
+            if (System.IO.File.Exists(path))
+            {
+                byte[] fileBytes = System.IO.File.ReadAllBytes(path);
+                return File(
+                        fileBytes,
+                        System.Net.Mime.MediaTypeNames.Application.Octet,
+                        System.IO.Path.GetFileName(path)
+                    );
+            }
+            else
+            {
+                return Json(WebResponseContent.Instance.Error($"鏈壘鍒板畨瑁呭寘"));
+            }
+
+        }
+
+        /// <summary>
+        /// 涓婁紶PDA
+        /// </summary>
+        /// <param name="fileInput"></param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("UploadApp"), AllowAnonymous]
+        [Consumes("multipart/form-data")]
+        public WebResponseContent UploadApp(IEnumerable<IFormFile> fileInput)
+        {
+            try
+            {
+                List<IFormFile> files = fileInput.ToList();
+                if (files == null || files.Count() == 0)
+                    return new WebResponseContent { Status = true, Message = "璇烽�夋嫨涓婁紶鐨勬枃浠�" };
+                IFormFile formFile = files[0];
+                string dicPath = $"{AppDomain.CurrentDomain.BaseDirectory}Upload/App/";
+                if (!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath);
+                string path = $"{dicPath}WMS-PDA{DateTime.Now:yyyyMMddhhmmss}.apk";
+                dicPath = $"{dicPath}WMS-PDA.apk";
+                if (System.IO.File.Exists(dicPath))
+                    System.IO.File.Move(dicPath, path);
+
+                using (var stream = new FileStream(dicPath, FileMode.Create))
+                {
+                    formFile.CopyTo(stream);
+                }
+                return new WebResponseContent { Status = true, Message = "鏂囦欢涓婁紶鎴愬姛" };
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        [HttpPost, HttpGet, Route("GetPDAVersion"), AllowAnonymous]
+        public WebResponseContent GetPDAVersion(string version)
+        {
+            try
+            {
+                string versionP = AppSettings.Get("PDAVersion");
+                if (Convert.ToInt32(versionP) > Convert.ToInt32(version))
+                    return WebResponseContent.Instance.OK(data: true);
+                else return WebResponseContent.Instance.OK(data: false);
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Record/LocationStatusChangeRecordController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Record/LocationStatusChangeRecordController.cs"
new file mode 100644
index 0000000..8df163d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Record/LocationStatusChangeRecordController.cs"
@@ -0,0 +1,23 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IRecordService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Record
+{
+    /// <summary>
+    /// 璐т綅鐘舵�佸彉鍔ㄨ褰�
+    /// </summary>
+    [Route("api/LocationStatusChangeRecord")]
+    [ApiController]
+    public class LocationStatusChangeRecordController : ApiBaseController<ILocationStatusChangeRecordService, Dt_LocationStatusChangeRecord>
+    {
+        public LocationStatusChangeRecordController(ILocationStatusChangeRecordService service) : base(service)
+        {
+        }
+       
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Record/StockQuantityChangeRecordController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Record/StockQuantityChangeRecordController.cs"
new file mode 100644
index 0000000..2973d77
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Record/StockQuantityChangeRecordController.cs"
@@ -0,0 +1,20 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IRecordService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Record
+{
+    /// <summary>
+    /// 搴撳瓨鏁伴噺鍙樺姩璁板綍
+    /// </summary>
+    [Route("api/StockQuantityChangeRecord")]
+    [ApiController]
+    public class StockQuantityChangeRecordController : ApiBaseController<IStockQuantityChangeRecordService, Dt_StockQuantityChangeRecord>
+    {
+        public StockQuantityChangeRecordController(IStockQuantityChangeRecordService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs"
new file mode 100644
index 0000000..089a068
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs"
@@ -0,0 +1,25 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Stock
+{
+    /// <summary>
+    /// 搴撳瓨
+    /// </summary>
+    [Route("api/StockInfo")]
+    [ApiController]
+    public class StockInfoController : ApiBaseController<IStockInfoService, Dt_StockInfo>
+    {
+        public StockInfoController(IStockInfoService service) : base(service)
+        {
+        }
+
+        
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs"
new file mode 100644
index 0000000..5ff0f67
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs"
@@ -0,0 +1,20 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Stock
+{
+    /// <summary>
+    /// 搴撳瓨鏄庣粏
+    /// </summary>
+    [Route("api/StockInfoDetail")]
+    [ApiController]
+    public class StockInfoDetailController : ApiBaseController<IStockInfoDetailService, Dt_StockInfoDetail>
+    {
+        public StockInfoDetailController(IStockInfoDetailService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetail_HtyController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetail_HtyController.cs"
new file mode 100644
index 0000000..59d8b50
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetail_HtyController.cs"
@@ -0,0 +1,22 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Stock
+{
+    /// <summary>
+    /// 搴撳瓨鏄庣粏鍘嗗彶
+    /// </summary>
+    [Route("api/StockInfoDetail_Hty")]
+    [ApiController]
+    public class StockInfoDetail_HtyController : ApiBaseController<IStockInfoDetail_HtyService, Dt_StockInfoDetail_Hty>
+    {
+        public StockInfoDetail_HtyController(IStockInfoDetail_HtyService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfo_HtyController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfo_HtyController.cs"
new file mode 100644
index 0000000..e7a7f70
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfo_HtyController.cs"
@@ -0,0 +1,22 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Stock
+{
+    /// <summary>
+    /// 搴撳瓨鍘嗗彶
+    /// </summary>
+    [Route("api/StockInfo_Hty")]
+    [ApiController]
+    public class StockInfo_HtyController : ApiBaseController<IStockInfo_HtyService, Dt_StockInfo_Hty>
+    {
+        public StockInfo_HtyController(IStockInfo_HtyService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockViewController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockViewController.cs"
new file mode 100644
index 0000000..69857e1
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockViewController.cs"
@@ -0,0 +1,38 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Stock
+{
+    /// <summary>
+    /// 搴撳瓨瑙嗗浘
+    /// </summary>
+    [Route("api/StockView")]
+    [Authorize, ApiController]
+    public class StockViewController : Controller
+    {
+        private readonly IStockViewService _stockViewService;
+        public StockViewController(IStockViewService stockViewService) 
+        {
+            _stockViewService = stockViewService;
+        }
+
+        [HttpPost, Route("GetPageData")]
+        public PageGridData<StockViewDTO> GetPageData([FromBody] PageDataOptions options)
+        {
+            return _stockViewService.GetPageData(options);
+        }
+
+        [HttpPost, Route("GetDetailPage")]
+        public object GetDetailPage([FromBody] PageDataOptions pageData)
+        {
+            return _stockViewService.GetDetailPage(pageData);
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs"
new file mode 100644
index 0000000..ac11540
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs"
@@ -0,0 +1,31 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
+using WIDESEA_Core.BaseController;
+using WIDESEA_Core.Helper;
+using WIDESEA_ISystemService;
+using WIDESEA_Model.Models;
+using WIDESEA_DTO.System;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    /// <summary>
+    /// 瀛楀吀
+    /// </summary>
+    [Route("api/Sys_Dictionary")]
+    [ApiController]
+    public class Sys_DictionaryController : ApiBaseController<ISys_DictionaryService, Sys_Dictionary>
+    {
+        private readonly IHttpContextAccessor _httpContextAccessor;
+        public Sys_DictionaryController(ISys_DictionaryService service, IHttpContextAccessor httpContextAccessor) : base(service)
+        {
+            _httpContextAccessor = httpContextAccessor;
+        }
+
+        [HttpPost, Route("GetVueDictionary"), AllowAnonymous]
+        public IActionResult GetVueDictionary([FromBody] string[] dicNos)
+        {
+            return Json(Service.GetVueDictionary(dicNos));
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryListController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryListController.cs"
new file mode 100644
index 0000000..26a8597
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryListController.cs"
@@ -0,0 +1,19 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core.BaseController;
+using WIDESEA_ISystemService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    /// <summary>
+    /// 瀛楀吀鏄庣粏
+    /// </summary>
+    [Route("api/Sys_DictionaryList")]
+    [ApiController]
+    public class Sys_DictionaryListController : ApiBaseController<ISys_DictionaryListService, Sys_DictionaryList>
+    {
+        public Sys_DictionaryListController(ISys_DictionaryListService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_LogController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_LogController.cs"
new file mode 100644
index 0000000..3cd2f46
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_LogController.cs"
@@ -0,0 +1,20 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core.BaseController;
+using WIDESEA_ISystemService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    /// <summary>
+    /// 鏃ュ織
+    /// </summary>
+    [Route("api/Sys_Log")]
+    [ApiController]
+    public class Sys_LogController : ApiBaseController<ISys_LogService, Sys_Log>
+    {
+        public Sys_LogController(ISys_LogService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_MenuController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_MenuController.cs"
new file mode 100644
index 0000000..d6dcb2f
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_MenuController.cs"
@@ -0,0 +1,67 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_ISystemService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    /// <summary>
+    /// 鑿滃崟
+    /// </summary>
+    [Route("api/Sys_Menu")]
+    [ApiController]
+    public class Sys_MenuController : ApiBaseController<ISys_MenuService, Sys_Menu>
+    {
+        private readonly IHttpContextAccessor _httpContextAccessor;
+        public Sys_MenuController(ISys_MenuService menuService, IHttpContextAccessor httpContextAccessor) : base(menuService)
+        {
+            _httpContextAccessor = httpContextAccessor;
+        }
+        [HttpGet, HttpPost, Route("getTreeMenu")]
+        public IActionResult GetTreeMenu()
+        {
+            return Json(Service.GetCurrentMenuActionList());
+        }
+
+        [HttpPost, Route("getMenu")]
+        public IActionResult GetMenu()
+        {
+            return Json(Service.GetMenu());
+        }
+
+        [HttpPost, Route("getTreeItem")]
+        public IActionResult GetTreeItem(int menuId)
+        {
+            return Json(Service.GetTreeItem(menuId));
+        }
+
+        [HttpPost, Route("save")]
+        public ActionResult Save([FromBody] Sys_Menu menu)
+        {
+            if (App.User.UserId == 1)
+            {
+                return Json(Service.Save(menu));
+            }
+            else
+            {
+                return Json(WebResponseContent.Instance.Error("浠呴檺瓒呯骇绠$悊鍛樹慨鏀规暟鎹�"));
+            }
+        }
+        [HttpPost, Route("delMenu")]
+        public WebResponseContent DelMenu(int menuId)
+        {
+            return Service.DelMenu(menuId);
+        }
+
+        /// <summary>
+        /// 鑾峰彇棣栭〉鎵�鏈変粨搴撴潈闄�
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet, HttpPost, Route("GetTreeMenuPDAStash")]
+        public IActionResult GetTreeMenuPDAStash(int ParentId)
+        {
+            return Json(Service.GetTreeMenuPDAStash(ParentId));
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_RoleController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_RoleController.cs"
new file mode 100644
index 0000000..22fc324
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_RoleController.cs"
@@ -0,0 +1,84 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Routing;
+using WIDESEA_DTO.System;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_ISystemService;
+using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.System;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    /// <summary>
+    /// 瑙掕壊
+    /// </summary>
+    [Route("api/Sys_Role")]
+    [ApiController]
+    public class Sys_RoleController : ApiBaseController<ISys_RoleService, Sys_Role>
+    {
+        private readonly IHttpContextAccessor _httpContextAccessor;
+        public Sys_RoleController(ISys_RoleService service, IHttpContextAccessor httpContextAccessor) : base(service)
+        {
+            _httpContextAccessor = httpContextAccessor;
+        }
+
+        [HttpPost, Route("getUserChildRoles")]
+        public IActionResult GetUserChildRoles()
+        {
+            int roleId = App.User.RoleId;
+            var data = Service.GetAllChildren(roleId);
+
+            if (App.User.IsSuperAdmin)
+            {
+                return Json(WebResponseContent.Instance.OK(null, data));
+            }
+            //涓嶆槸瓒呯骇绠$悊锛屽皢鑷繁鐨勮鑹叉煡鍑烘潵锛屽湪鏍戝舰鑿滃崟涓婁綔涓烘牴鑺傜偣
+            var self = data.Where(x => x.Id == roleId)
+                 .Select(s => new RoleNodes()
+                 {
+                     Id = s.Id,
+                     ParentId = 0,//灏嗚嚜宸辩殑瑙掕壊浣滀负root鑺傜偣
+                     RoleName = s.RoleName
+                 }).ToList();
+            data.AddRange(self);
+            return Json(WebResponseContent.Instance.OK(null, data));
+        }
+
+        [HttpPost, Route("getCurrentTreePermission")]
+        public IActionResult GetCurrentTreePermission()
+        {
+            return Json(Service.GetCurrentTreePermission());
+        }
+
+        [HttpPost, Route("getUserTreePermission")]
+        public IActionResult GetUserTreePermission(int roleId)
+        {
+            return Json(Service.GetUserTreePermission(roleId));
+        }
+
+        [HttpPost, Route("getCurrentTreePermissionPDA")]
+        public IActionResult GetCurrentTreePermissionPDA()
+        {
+            return Json(Service.GetCurrentTreePermissionPDA());
+        }
+        [HttpPost, Route("getUserTreePermissionPDA")]
+        public IActionResult GetUserTreePermissionPDA(int roleId)
+        {
+            return Json(Service.GetUserTreePermissionPDA(roleId));
+        }
+
+        [HttpPost, Route("savePermission")]
+        public IActionResult SavePermission([FromBody] List<UserPermissionDTO> userPermissions, int roleId)
+        {
+            return Json(Service.SavePermission(userPermissions, roleId));
+        }
+
+        [HttpPost, Route("SavePermissionPDA")]
+        public IActionResult SavePermissionPDA([FromBody] List<UserPermissionDTO> userPermissions, int roleId)
+        {
+            return Json(Service.SavePermissionPDA(userPermissions, roleId));
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_TenantController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_TenantController.cs"
new file mode 100644
index 0000000..d64cd8d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_TenantController.cs"
@@ -0,0 +1,36 @@
+锘�
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.HttpContextUser;
+using WIDESEA_ISystemService;
+using WIDESEA_Model;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    /// <summary>
+    /// 绉熸埛
+    /// </summary>
+    [Route("api/tenant")]
+    [ApiController]
+    public class Sys_TenantController : ApiBaseController<ISys_TenantService, Sys_Tenant>
+    {
+        private readonly IHttpContextAccessor _httpContextAccessor;
+
+        public Sys_TenantController(ISys_TenantService tenantService, IHttpContextAccessor httpContextAccessor) : base(tenantService)
+        {
+            _httpContextAccessor = httpContextAccessor;
+        }
+
+        [HttpGet, Route("initTenantInfo"), AllowAnonymous]
+        public WebResponseContent InitTenantInfo(string tenantName, int tenantType)
+        {
+            return Service.InitTenantInfo(tenantName, tenantType);
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs"
new file mode 100644
index 0000000..0d42fac
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs"
@@ -0,0 +1,157 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
+using Newtonsoft.Json;
+using StackExchange.Profiling;
+using WIDESEA_Core;
+using WIDESEA_Core.Authorization;
+using WIDESEA_Core.BaseController;
+using WIDESEA_Core.Caches;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Extensions;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.HttpContextUser;
+using WIDESEA_Core.Utilities;
+using WIDESEA_ISystemService;
+using WIDESEA_Model;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    /// <summary>
+    /// 鐢ㄦ埛
+    /// </summary>
+    [Route("api/User")]
+    [ApiController]
+    public class Sys_UserController : ApiBaseController<ISys_UserService, Sys_User>
+    {
+        private readonly IHttpContextAccessor _httpContextAccessor;
+        private readonly ICacheService _cacheService;
+
+        public Sys_UserController(ISys_UserService userService, IHttpContextAccessor httpContextAccessor, ICacheService cacheService) : base(userService)
+        {
+            _httpContextAccessor = httpContextAccessor;
+            _cacheService = cacheService;
+        }
+
+        [HttpPost, Route("login"), AllowAnonymous]
+        public IActionResult Login([FromBody] LoginInfo loginInfo)
+        {
+            return Json(Service.Login(loginInfo));
+        }
+
+        [HttpPost, Route("swgLogin"), AllowAnonymous]
+        public dynamic SwgLogin([FromBody] SwaggerLoginRequest loginRequest)
+        {
+            if (loginRequest is null)
+            {
+                return new { result = false };
+            }
+
+            try
+            {
+                LoginInfo loginInfo = new LoginInfo
+                {
+                    Password = loginRequest.pwd,
+                    UserName = loginRequest.name
+                };
+                var result = Service.Login(loginInfo);
+                if (result.Status)
+                {
+                    HttpContext.SuccessSwagger();
+                    Dictionary<string, object>? dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(result.Data.Serialize());
+                    if (dict != null)
+                    {
+                        HttpContext.SuccessSwaggerJwt((dict.ContainsKey("token") ? dict["token"].ToString() : "") ?? "");
+                    }
+                    string str = HttpContext.GetSuccessSwaggerJwt();
+                    return new { result = true };
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+
+            return new { result = false };
+        }
+
+        [HttpPost, Route("getCurrentUserInfo")]
+        public WebResponseContent GetCurrentUser()
+        {
+            return Service.GetCurrentUserInfo();
+        }
+
+        [HttpPost, Route("modifyPwd")]
+        public IActionResult ModifyPwd(string oldPwd, string newPwd)
+        {
+            return Json(Service.ModifyPwd(oldPwd, newPwd));
+        }
+
+        [HttpGet, Route("getVierificationCode"), AllowAnonymous]
+        public IActionResult GetVierificationCode()
+        {
+            //var html = MiniProfiler.Current.RenderIncludes(_httpContextAccessor.HttpContext);
+            string code = "1234" /*VierificationCode.RandomText()*/;
+            var data = new
+            {
+                img = VierificationCode.CreateBase64Imgage(code),
+                uuid = Guid.NewGuid()
+            };
+
+            return Json(data);
+        }
+        [HttpGet, Route("SerializeJwt"), AllowAnonymous]
+        public WebResponseContent SerializeJwt(string code)
+        {
+            return WebResponseContent.Instance.OK(data: JwtHelper.SerializeJwt(code));
+        }
+        [HttpPost, Route("replaceToken")]
+        public WebResponseContent ReplaceToken()
+        {
+            WebResponseContent responseContent = new WebResponseContent();
+            try
+            {
+                string token = App.User.GetToken();
+                if (string.IsNullOrEmpty(token))
+                {
+                    return responseContent = WebResponseContent.Instance.Error("token鏃犳晥锛岃閲嶆柊鐧诲綍锛�");
+                }
+                TokenModelJwt tokenModelJwt = new TokenModelJwt()
+                {
+                    RoleId = App.User.RoleId,
+                    TenantId = App.User.TenantId,
+                    UserId = App.User.UserId,
+                    UserName = App.User.UserName
+                };
+                string newToken = JwtHelper.IssueJwt(tokenModelJwt);
+
+                App.User.UpdateToke(newToken, App.User.UserId);
+                return responseContent = WebResponseContent.Instance.OK(data: newToken);
+            }
+            catch (Exception ex)
+            {
+                return responseContent.Error(ex.Message);
+            }
+
+        }
+        /// <summary>
+        /// 鏇存柊瀵嗙爜
+        /// </summary>
+        /// <param name="password">瀵嗙爜</param>
+        /// <param name="userName">鐢ㄦ埛鍚�</param>
+        /// <returns></returns>
+        [HttpPost,Route("ModifyUserPwd")]
+        public WebResponseContent ModifyUserPwd(string password, string userName)
+        {
+            return Service.ModifyUserPwd(password,userName);
+        }
+    }
+
+    public class SwaggerLoginRequest
+    {
+        public string name { get; set; }
+        public string pwd { get; set; }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
new file mode 100644
index 0000000..dcc27d0
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
@@ -0,0 +1,26 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Stock;
+using WIDESEA_DTO.Task;
+using WIDESEA_ITaskInfoService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.TaskInfo
+{
+    /// <summary>
+    /// 浠诲姟
+    /// </summary>
+    [Route("api/Task")]
+    [ApiController]
+    public class TaskController : ApiBaseController<ITaskService, Dt_Task>
+    {
+        public TaskController(ITaskService service) : base(service)
+        {
+        }
+
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/Task_HtyController.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/Task_HtyController.cs"
new file mode 100644
index 0000000..16f12a7
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/Task_HtyController.cs"
@@ -0,0 +1,23 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Stock;
+using WIDESEA_ITaskInfoService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.TaskInfo
+{
+    /// <summary>
+    /// 浠诲姟鍘嗗彶
+    /// </summary>
+    [Route("api/Task_Hty")]
+    [ApiController]
+    public class Task_HtyController : ApiBaseController<ITask_HtyService, Dt_Task_Hty>
+    {
+        public Task_HtyController(ITask_HtyService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/AutoMapperConfig.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/AutoMapperConfig.cs"
new file mode 100644
index 0000000..2892fb3
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/AutoMapperConfig.cs"
@@ -0,0 +1,18 @@
+锘縰sing AutoMapper;
+
+namespace WIDESEA_WMSServer.Filter
+{
+    /// <summary>
+    /// 闈欐�佸叏灞� AutoMapper 閰嶇疆鏂囦欢
+    /// </summary>
+    public class AutoMapperConfig
+    {
+        public static MapperConfiguration RegisterMappings()
+        {
+            return new MapperConfiguration(cfg =>
+            {
+                cfg.AddProfile(new CustomProfile());
+            });
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/AutoMapperSetup.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/AutoMapperSetup.cs"
new file mode 100644
index 0000000..0e51421
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/AutoMapperSetup.cs"
@@ -0,0 +1,16 @@
+锘縩amespace WIDESEA_WMSServer.Filter
+{
+    /// <summary>
+    /// Automapper 鍚姩鏈嶅姟
+    /// </summary>
+    public static class AutoMapperSetup
+    {
+        public static void AddAutoMapperSetup(this IServiceCollection services)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+
+            services.AddAutoMapper(typeof(AutoMapperConfig));
+            AutoMapperConfig.RegisterMappings();
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/AutofacPropertityModuleReg.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/AutofacPropertityModuleReg.cs"
new file mode 100644
index 0000000..d8f1854
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/AutofacPropertityModuleReg.cs"
@@ -0,0 +1,16 @@
+锘縰sing Autofac;
+using Microsoft.AspNetCore.Mvc;
+
+namespace WIDESEA_WMSServer.Filter
+{
+    public class AutofacPropertityModuleReg : Autofac.Module
+    {
+        protected override void Load(ContainerBuilder builder)
+        {
+            var controllerBaseType = typeof(ControllerBase);
+            builder.RegisterAssemblyTypes(typeof(Program).Assembly)
+                .Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
+                .PropertiesAutowired();
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs"
new file mode 100644
index 0000000..8636c46
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs"
@@ -0,0 +1,38 @@
+锘縰sing Autofac.Builder;
+using AutoMapper;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.OrderEnum;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_DTO.Outbound;
+using WIDESEA_DTO.System;
+using WIDESEA_DTO.Task;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Filter
+{
+    public class CustomProfile : Profile
+    {
+        /// <summary>
+        /// 閰嶇疆鏋勯�犲嚱鏁帮紝鐢ㄦ潵鍒涘缓鍏崇郴鏄犲皠
+        /// </summary>
+        public CustomProfile()
+        {
+            CreateMap<Sys_Menu, MenuDTO>();
+            CreateMap<InboundOrderDetailAddDTO, Dt_InboundOrderDetail>().ForMember(x => x.OrderDetailStatus, b => b.MapFrom(b => 0));
+            CreateMap<InboundOrderAddDTO, Dt_InboundOrder>();
+
+            CreateMap<Dt_StockInfoDetail, Dt_StockQuantityChangeRecord>().ForMember(x => x.SerilNumber, b => b.MapFrom(b => b.SerialNumber)).ForMember(x => x.StockDetailId, b => b.MapFrom(b => b.Id));
+            CreateMap<OutboundOrderDetailAddDTO, Dt_OutboundOrderDetail>().ForMember(x => x.OrderDetailStatus, b => b.MapFrom(b => 0));
+            CreateMap<OutboundOrderAddDTO, Dt_OutboundOrder>();
+            CreateMap<Dt_ReceiveOrderDetail, Dt_CheckOrder>().ForMember(a => a.ReceivedQuantity, b => b.MapFrom(x => x.ReceivedQuantity)).ForMember(a => a.MaterielCode, b => b.MapFrom(x => x.MaterielCode)).ForMember(a => a.CheckOrderStatus, b => b.MapFrom(x => CheckOrderStatusEnum.NotCheck.ObjToInt()));
+
+            CreateMap<Dt_Task, WMSTaskDTO>();
+        }
+    }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs"
new file mode 100644
index 0000000..1b0c26a
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs"
@@ -0,0 +1,139 @@
+using System.Reflection;
+using System.Text;
+using Autofac;
+using Autofac.Core;
+using Autofac.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Mvc.Controllers;
+using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+using Microsoft.Extensions.FileProviders;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using Newtonsoft.Json.Serialization;
+using WIDESEA_Core;
+using WIDESEA_Core.Authorization;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Core;
+using WIDESEA_Core.Extensions;
+using WIDESEA_Core.Filter;
+using WIDESEA_Core.Helper;
+//using WIDESEA_Core.HostedService;
+using WIDESEA_Core.Middlewares;
+using WIDESEA_WMSServer.Filter;
+
+var builder = WebApplication.CreateBuilder(args);
+
+builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureContainer<ContainerBuilder>(builder =>
+{
+    builder.RegisterModule<AutofacModuleRegister>();//带有接口层的服务注入
+    builder.RegisterModule<AutofacPropertityModuleReg>();//
+}).ConfigureAppConfiguration((hostingContext, config) =>
+{
+    hostingContext.Configuration.ConfigureApplication();
+    config.Sources.Clear();
+    config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
+}); ;
+builder.ConfigureApplication();
+
+//App.ExpDateTime = DateTime.Parse("2025-03-31 00:00:00");//过期时间
+
+// 2、配置服务
+builder.Services.AddSingleton(new AppSettings(builder.Configuration));//注册
+builder.Services.AddAllOptionRegister();//读取配置文件
+builder.Services.AddMemoryCacheSetup();//缓存
+builder.Services.AddWebSocketSetup();
+builder.Services.AddSqlsugarSetup();//SqlSugar 启动服务
+builder.Services.AddDbSetup();//Db 启动服务
+builder.Services.AddInitializationHostServiceSetup();//应用初始化服务注入
+//builder.Services.AddHostedService<PermissionDataHostService>();//数据权限
+builder.Services.AddAutoMapperSetup();
+
+builder.Services.AddCorsSetup();
+
+builder.Services.AddMiniProfilerSetup();
+
+builder.Services.AddSwaggerSetup();
+
+builder.Services.AddHttpContextSetup();
+
+
+builder.Services.AddMvc(options =>
+{
+    options.Filters.Add(typeof(ApiAuthorizeFilter));
+    options.Filters.Add(typeof(ActionExecuteFilter));
+});
+
+builder.Services.AddAuthorizationSetup();
+
+builder.Services.AddIpPolicyRateLimitSetup(builder.Configuration);//IPLimit限流 启动服务
+
+builder.Services.AddScoped<UseServiceDIAttribute>();
+
+builder.Services.AddSession();
+
+builder.Services.AddHttpClient();
+
+builder.Services.AddControllers(o =>
+{
+    o.Filters.Add(typeof(GlobalExceptionsFilter));//全局异常
+})
+.AddNewtonsoftJson(options =>
+{
+    options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
+    //options.SerializerSettings.ContractResolver = new DefaultContractResolver();
+    options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
+    options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
+    options.SerializerSettings.NullValueHandling = NullValueHandling.Include;
+    options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
+    options.SerializerSettings.Converters.Add(new StringEnumConverter());
+});
+// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
+builder.Services.AddEndpointsApiExplorer();
+
+builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
+Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+
+
+var app = builder.Build();
+
+// 3、配置中间件
+app.UseMiniProfiler();//性能分析器
+app.ConfigureApplication();//配置文件
+app.UseApplicationSetup();//启动配置
+
+app.UseAllServicesMiddle(builder.Services);
+
+app.UseSession();
+app.UseSwaggerAuthorized();
+app.UseSwaggerMiddle(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("WIDESEA_WMSServer.index.html") ?? throw new Exception("WIDESEA_WMSServer.index.html文件"));
+app.UseIpLimitMiddle();
+app.UseApiLogMiddleware();
+//todo
+//app.UseRecordAccessLogsMiddle();
+
+app.UseCors(AppSettings.Get(new string[] { "Cors", "PolicyName" }));
+
+DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions();
+defaultFilesOptions.DefaultFileNames.Clear();
+defaultFilesOptions.DefaultFileNames.Add("index.html");
+app.UseDefaultFiles(defaultFilesOptions);
+app.UseMiddleware<HttpRequestMiddleware>();
+app.UseStaticFiles();
+
+app.UseStaticFiles(new StaticFileOptions
+{
+    FileProvider = new PhysicalFileProvider(App.WebHostEnvironment.WebRootPath)
+});
+
+app.UseCookiePolicy();
+app.UseStatusCodePages();
+
+app.UseRouting();
+
+app.UseAuthentication();
+app.UseAuthorization();
+
+app.MapControllers();
+
+app.Run();
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml"
new file mode 100644
index 0000000..86bb19c
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml"
@@ -0,0 +1,21 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <DeleteExistingFiles>false</DeleteExistingFiles>
+    <ExcludeApp_Data>false</ExcludeApp_Data>
+    <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
+    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
+    <LastUsedPlatform>Any CPU</LastUsedPlatform>
+    <PublishProvider>FileSystem</PublishProvider>
+    <PublishUrl>E:\IISText\HuanAn\WMS</PublishUrl>
+    <WebPublishMethod>FileSystem</WebPublishMethod>
+    <_TargetId>Folder</_TargetId>
+    <SiteUrlToLaunchAfterPublish />
+    <TargetFramework>net6.0</TargetFramework>
+    <ProjectGuid>d81a65b5-47d1-40c1-8fde-7d24ff003f51</ProjectGuid>
+    <SelfContained>false</SelfContained>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile1.pubxml" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile1.pubxml"
new file mode 100644
index 0000000..36847ea
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile1.pubxml"
@@ -0,0 +1,17 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <DeleteExistingFiles>false</DeleteExistingFiles>
+    <ExcludeApp_Data>false</ExcludeApp_Data>
+    <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
+    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
+    <LastUsedPlatform>Any CPU</LastUsedPlatform>
+    <PublishProvider>FileSystem</PublishProvider>
+    <PublishUrl>bin\Release\net6.0\publish\</PublishUrl>
+    <WebPublishMethod>FileSystem</WebPublishMethod>
+    <_TargetId>Folder</_TargetId>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/launchSettings.json" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/launchSettings.json"
new file mode 100644
index 0000000..16b63a2
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/launchSettings.json"
@@ -0,0 +1,31 @@
+锘縶
+  "$schema": "https://json.schemastore.org/launchsettings.json",
+  "iisSettings": {
+    "windowsAuthentication": false,
+    "anonymousAuthentication": true,
+    "iisExpress": {
+      "applicationUrl": "http://localhost:39740",
+      "sslPort": 0
+    }
+  },
+  "profiles": {
+    "WIDESEA_WMSServer": {
+      "commandName": "Project",
+      "dotnetRunMessages": true,
+      "launchBrowser": true,
+      //"launchUrl": "swagger",
+      "applicationUrl": "http://localhost:5230",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    },
+    "IIS Express": {
+      "commandName": "IISExpress",
+      "launchBrowser": true,
+      //"launchUrl": "swagger",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    }
+  }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj"
new file mode 100644
index 0000000..045168a
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj"
@@ -0,0 +1,87 @@
+锘�<Project Sdk="Microsoft.NET.Sdk.Web">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <Nullable>enable</Nullable>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+    <DocumentationFile></DocumentationFile>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+    <NoWarn>1701;1702;1591;1573;1570</NoWarn>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+    <NoWarn>1701;1702;1591;1573;1570</NoWarn>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Compile Remove="wwwroot\Upload\**" />
+    <Content Remove="wwwroot\Upload\**" />
+    <EmbeddedResource Remove="wwwroot\Upload\**" />
+    <None Remove="wwwroot\Upload\**" />
+  </ItemGroup>
+
+  <ItemGroup>
+	  <Content Update="wwwroot\swg-login.html">
+		  <CopyToOutputDirectory>Never</CopyToOutputDirectory>
+	  </Content>
+    <Content Remove="wwwroot\WIDESEA_DB.DBSeed.Json\Sys_Tenant.tsv" />
+  </ItemGroup>
+
+	<ItemGroup>
+		<None Include="wwwroot\WIDESEA_DB.DBSeed.Json\Sys_User.tsv">
+		  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+		</None>
+	</ItemGroup>
+
+	<ItemGroup>
+		<None Remove="index.html" />
+	</ItemGroup>
+	
+	<ItemGroup>
+		<EmbeddedResource Include="index.html">
+		  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+		</EmbeddedResource>
+	</ItemGroup>
+	
+	<ItemGroup>
+	  <PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="6.7.3" />
+	</ItemGroup>
+	
+	<ItemGroup>
+	  <ProjectReference Include="..\WIDESEA_BasicService\WIDESEA_BasicService.csproj" />
+	  <ProjectReference Include="..\WIDESEA_CheckService\WIDESEA_CheckService.csproj" />
+	  <ProjectReference Include="..\WIDESEA_InboundService\WIDESEA_InboundService.csproj" />
+	  <ProjectReference Include="..\WIDESEA_OutboundService\WIDESEA_OutboundService.csproj" />
+	  <ProjectReference Include="..\WIDESEA_RecordService\WIDESEA_RecordService.csproj" />
+	  <ProjectReference Include="..\WIDESEA_StockService\WIDESEA_StockService.csproj" />
+	  <ProjectReference Include="..\WIDESEA_SystemService\WIDESEA_SystemService.csproj" />
+	  <ProjectReference Include="..\WIDESEA_TaskInfoService\WIDESEA_TaskInfoService.csproj" />
+	</ItemGroup>
+	
+	<ItemGroup>
+	  <Content Update="wwwroot\favicon.ico">
+	    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+	  </Content>
+	  <Content Update="wwwroot\logo.jpg.jpg">
+	    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+	  </Content>
+	  <Content Update="wwwroot\WIDESEA_DB.DBSeed.Json\Sys_Dictionary.tsv">
+	    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+	  </Content>
+	  <Content Update="wwwroot\WIDESEA_DB.DBSeed.Json\Sys_DictionaryList.tsv">
+	    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+	  </Content>
+	  <Content Update="wwwroot\WIDESEA_DB.DBSeed.Json\Sys_Menu.tsv">
+	    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+	  </Content>
+	  <Content Update="wwwroot\WIDESEA_DB.DBSeed.Json\Sys_Role.tsv">
+	    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+	  </Content>
+	  <Content Update="wwwroot\WIDESEA_DB.DBSeed.Json\Sys_RoleAuth.tsv">
+	    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+	  </Content>
+	</ItemGroup>
+</Project>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.xml" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.xml"
new file mode 100644
index 0000000..7f7e193
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.xml"
@@ -0,0 +1,163 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>WIDESEA_WMSServer</name>
+    </assembly>
+    <members>
+        <member name="M:WIDESEA_WMSServer.Controllers.Approval.ApprovalTaskController.AuditAgree(System.Int32)">
+            <summary>
+            鍚屾剰瀹℃壒
+            </summary>
+            <param name="sourceKey"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.Approval.ApprovalTaskController.AuditReject(System.Int32)">
+            <summary>
+            椹冲洖瀹℃壒
+            </summary>
+            <param name="sourceKey"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.Approval.ApprovalTaskController.PushTest">
+            <summary>
+            鎺ㄩ�佹祴璇�
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.Basic.LocationInfoController.InitializationLocation(WIDESEA_DTO.Basic.InitializationLocationDTO)">
+            <summary>
+            鍒濆鍖栬揣浣�
+            </summary>
+            <param name="initializationLocationDTO"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.Basic.LocationInfoController.AssignLocation(System.String,WIDESEA_Common.CommonEnum.PalletTypeEnum)">
+            <summary>
+            璐т綅鍒嗛厤
+            </summary>
+            <param name="roadwayNo"></param>
+            <param name="palletType"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.Basic.LocationInfoController.LocationEnableStatus(System.Int32[])">
+            <summary>
+            鍚敤璐т綅
+            </summary>
+            <param name="keys"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.Basic.LocationInfoController.LocationDisableStatus(System.Int32[])">
+            <summary>
+            绂佺敤璐т綅
+            </summary>
+            <param name="keys"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.Check.CheckOrderController.CommitAudit(System.Int32)">
+            <summary>
+            鎻愪氦瀹℃牳
+            </summary>
+            <param name="checkOrderId"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.Check.CheckOrderResultController.CommitCheckResult(System.Int32,WIDESEA_Model.Models.Dt_CheckOrderResult)">
+            <summary>
+            鎻愪氦璐ㄦ缁撴灉
+            </summary>
+            <param name="checkOrderId"></param>
+            <param name="checkResult"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.ERP.ErpController.ReceivePurchaseOrder(WIDESEA_DTO.PurchaseOrderModel)">
+            <summary>
+            鎺ユ敹ERP閲囪喘鍗曚俊鎭�
+            </summary>
+            <param name="model"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.ERP.ErpController.ReceiveSupplier(WIDESEA_DTO.Basic.SupplierDTO)">
+            <summary>
+            鎺ユ敹ERP渚涘簲鍟嗕俊鎭�
+            </summary>
+            <param name="model"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.ERP.ErpController.ReceiveMaterial(WIDESEA_DTO.Basic.MaterielInfoDTO)">
+            <summary>
+            鎺ユ敹ERP鐗╂枡淇℃伅
+            </summary>
+            <param name="model"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.ERP.ErpController.ReceiveOutOrder(WIDESEA_DTO.ERP.ErpOutOrderDTO)">
+            <summary>
+            鎺ユ敹ERP鍑哄簱鍗曚俊鎭�
+            </summary>
+            <param name="erpOutOrder"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.Inbound.InboundOrderController.MaterielGroup(System.Int32,System.String,System.String)">
+            <summary>
+            鍗曚釜鐗╂枡鐮佺粍鐩�
+            </summary>
+            <param name="inboundOrderId"></param>
+            <param name="palletCode"></param>
+            <param name="serNum"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.Inbound.InboundOrderController.MaterielGroup(System.Int32,System.String,System.Collections.Generic.List{System.String})">
+            <summary>
+            澶氫釜鐗╂枡鐮佺粍鐩�
+            </summary>
+            <param name="inboundOrderId"></param>
+            <param name="palletCode"></param>
+            <param name="serNums"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.Inbound.ReceiveOrderController.CreateInboundOrder(System.Int32)">
+            <summary>
+            鏍规嵁鏀惰揣鍗曞垱寤哄叆搴撳崟
+            </summary>
+            <param name="receiveOrderId"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.Inbound.ReceiveOrderDetailController.AddReceiveOrderDetail(System.String,System.String)">
+            <summary>
+            鍒涘缓鏀惰揣鍗曟槑缁�(PDA鎵爜鏀惰揣)
+            </summary>
+            <param name="serNum"></param>
+            <param name="orderNo"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.TaskInfo.TaskController.RequestInboundTask(System.String,System.String)">
+            <summary>
+            鐢宠鍏ュ簱浠诲姟
+            </summary>
+            <param name="palletCode"></param>
+            <param name="stationCode"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Controllers.TaskInfo.TaskController.InboundTaskCompleted(System.Int32)">
+            <summary>
+            鍏ュ簱浠诲姟瀹屾垚
+            </summary>
+            <param name="taskNum"></param>
+            <returns></returns>
+        </member>
+        <member name="T:WIDESEA_WMSServer.Filter.AutoMapperConfig">
+            <summary>
+            闈欐�佸叏灞� AutoMapper 閰嶇疆鏂囦欢
+            </summary>
+        </member>
+        <member name="T:WIDESEA_WMSServer.Filter.AutoMapperSetup">
+            <summary>
+            Automapper 鍚姩鏈嶅姟
+            </summary>
+        </member>
+        <member name="M:WIDESEA_WMSServer.Filter.CustomProfile.#ctor">
+            <summary>
+            閰嶇疆鏋勯�犲嚱鏁帮紝鐢ㄦ潵鍒涘缓鍏崇郴鏄犲皠
+            </summary>
+        </member>
+    </members>
+</doc>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.Development.json" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.Development.json"
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.Development.json"
@@ -0,0 +1,8 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  }
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json"
new file mode 100644
index 0000000..136e855
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json"
@@ -0,0 +1,34 @@
+{
+    "urls": "http://*:9291", //web鏈嶅姟绔彛锛屽鏋滅敤IIS閮ㄧ讲锛屾妸杩欎釜鍘绘帀
+    "Logging": {
+        "LogLevel": {
+            "Default": "Information",
+            "Microsoft.AspNetCore": "Warning"
+        }
+    },
+    "dics": "inOrderType,outOrderType,inboundState,createType,enableEnum,enableStatusEnum,locationStatusEnum,locationTypeEnum,taskTypeEnum,taskStatusEnum,outboundStatusEnum,orderDetailStatusEnum,stockStatusEmun,stockChangeType,outStockStatus,receiveOrderTypeEnum,authorityScope,authorityScopes,locationChangeType,warehouses,suppliers,taskType,receiveStatus,purchaseType,purchaseOrderStatus,printStatus",
+    "AllowedHosts": "*",
+    "ConnectionStringsEncryption": false,
+    "MainDB": "DB_WIDESEA", //褰撳墠椤圭洰鐨勪富搴擄紝鎵�瀵瑰簲鐨勮繛鎺ュ瓧绗︿覆鐨凟nabled蹇呴』涓簍rue
+    //杩炴帴瀛楃涓�
+    //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
+    "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
+    //"ConnectionString": "Data Source=10.30.4.92;Initial Catalog=WMS_TC;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
+    //鏃MS鏁版嵁搴撹繛鎺�
+    //"TeConnectionString": "Data Source=10.30.4.92;Initial Catalog=TeChuang;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
+    //璺ㄥ煙
+    "Cors": {
+        "PolicyName": "CorsIpAccess", //绛栫暐鍚嶇О
+        "EnableAllIPs": true, //褰撲负true鏃讹紝寮�鏀炬墍鏈塈P鍧囧彲璁块棶銆�
+        // 鏀寔澶氫釜鍩熷悕绔彛锛屾敞鎰忕鍙e彿鍚庝笉瑕佸甫/鏂滄潌锛氭瘮濡俵ocalhost:8000/锛屾槸閿欑殑
+        // 娉ㄦ剰锛宧ttp://127.0.0.1:1818 鍜� http://localhost:1818 鏄笉涓�鏍风殑
+        "IPs": "http://127.0.0.1:8080,http://localhost:8080,http://127.0.0.1:8081,http://localhost:8081"
+    },
+    "LogAopEnable": false,
+    "PrintSql": false, //鎵撳嵃SQL璇彞
+    "ApiName": "WIDESEA",
+    "ExpMinutes": 120,
+    "DBSeedEnable": false,
+    "PDAVersion": "4",
+    "WebSocketPort": 9296
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/index.html" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/index.html"
new file mode 100644
index 0000000..97ba152
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/index.html"
@@ -0,0 +1,188 @@
+锘�<!--1銆佺増鏈彿瑕佷笌nuget鍖呬竴鑷达紱2銆乮d涓嶈兘涓虹┖-->
+<script async="async" id="mini-profiler" src="/profiler/includes.min.js?v=4.3.8+1120572909" data-version="4.3.8+1120572909" data-path="/profiler/" data-current-id="0d7e468e-0bb5-4c81-90fc-91fd1543640a" data-ids="0d7e468e-0bb5-4c81-90fc-91fd1543640a" data-position="Left" data-scheme="Light" data-authorized="true" data-children="true" data-max-traces="15" data-toggle-shortcut="Alt+P" data-trivial-milliseconds="2.0" data-ignored-duplicate-execute-types="Open,OpenAsync,Close,CloseAsync"></script>
+
+<!-- HTML for static distribution bundle build -->
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <!--鏋侀�熸ā寮�-->
+    <meta name="renderer" content="webkit" />
+    <meta name="force-rendering" content="webkit" />
+    <title>%(DocumentTitle)</title>
+    <link href="./swagger-ui.css" rel="stylesheet">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <link rel="stylesheet" type="text/css" href="./swagger-ui.css">
+    <link rel="icon" type="image/png" href="./logo/favicon-32x32.png" sizes="32x32" />
+    <script src="js/jquery-3.3.1.min.js"></script>
+    <style>
+        .swagger-ui .opblock-summary-control:focus {
+            outline: none
+        }
+
+        .swagger-ui .topbar .download-url-wrapper {
+            display: flex;
+            flex: 3;
+            margin-bottom: 0px;
+            justify-content: flex-end;
+        }
+
+        .swagger-ui .auth-container input[type=password], .swagger-ui .auth-container input[type=text] {
+            min-width: 565px;
+        }
+
+        html {
+            box-sizing: border-box;
+            overflow-y: scroll;
+        }
+
+        *,
+        *:before,
+        *:after {
+            box-sizing: inherit;
+        }
+
+        body {
+            margin: 0;
+            background: #fafafa;
+        }
+
+        .qqgroup {
+            position: absolute;
+            right: 0px;
+            top: 0px;
+        }
+
+        .info {
+            float: left;
+            position: relative;
+            width: 100%;
+        }
+
+        .download-contents {
+            display: none;
+        }
+        /* 婊氬姩妲� */
+        ::-webkit-scrollbar {
+            width: 9px;
+            height: 9px;
+        }
+
+        ::-webkit-scrollbar-track {
+            border-radius: 3px;
+            background: rgba(0,0,0,0.06);
+            -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.08);
+        }
+        /* 婊氬姩鏉℃粦鍧� */
+        ::-webkit-scrollbar-thumb {
+            border-radius: 3px;
+            background: rgba(0,0,0,0.12);
+            -webkit-box-shadow: inset 0 0 10px rgba(0,0,0,0.2);
+        }
+    </style>
+    %(HeadContent)
+</head>
+<body style=" user-select: text;">
+    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position:absolute;width:0;height:0">
+        <defs>
+            <symbol viewBox="0 0 20 20" id="unlocked">
+                <path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"></path>
+            </symbol>
+            <symbol viewBox="0 0 20 20" id="locked">
+                <path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z" />
+            </symbol>
+            <symbol viewBox="0 0 20 20" id="close">
+                <path d="M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z" />
+            </symbol>
+            <symbol viewBox="0 0 20 20" id="large-arrow">
+                <path d="M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z" />
+            </symbol>
+            <symbol viewBox="0 0 20 20" id="large-arrow-down">
+                <path d="M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z" />
+            </symbol>
+
+            <symbol viewBox="0 0 24 24" id="jump-to">
+                <path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z" />
+            </symbol>
+            <symbol viewBox="0 0 24 24" id="expand">
+                <path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z" />
+            </symbol>
+        </defs>
+    </svg>
+    <div id="swagger-ui"></div>
+    <div id="footer" style="text-align: center;margin-bottom: 10px;">
+        
+
+        <br><span id="poweredby"></span>
+    </div>
+    <!-- Workaround for https://github.com/swagger-api/swagger-editor/issues/1371 -->
+    <script>
+        if (window.navigator.userAgent.indexOf("Edge") > -1) {
+            console.log("Removing native Edge fetch in favor of swagger-ui's polyfill")
+            window.fetch = undefined;
+        }
+    </script>
+    <script src="./swagger-ui-bundle.js"></script>
+    <script src="./swagger-ui-standalone-preset.js"></script>
+    <script>
+        var int = null;
+
+        window.onload = function () {
+            var configObject = JSON.parse('%(ConfigObject)');
+            var oauthConfigObject = JSON.parse('%(OAuthConfigObject)');
+
+            //鑾峰彇token鍦ㄦ鐩存帴璧嬪�硷紝鑳界洿鎺ュ簲鐢╯wagger鐨勬牱寮�
+            //configObject.onComplete = function () {
+            //    ui.preauthorizeApiKey("oauth2", "");
+            //};
+
+            // Apply mandatory parameters
+            configObject.dom_id = "#swagger-ui";
+            configObject.presets = [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset];
+            configObject.layout = "StandaloneLayout";
+
+            // If oauth2RedirectUrl isn't specified, use the built-in default
+            if (!configObject.hasOwnProperty("oauth2RedirectUrl"))
+                configObject.oauth2RedirectUrl = window.location.href.replace("index.html", "oauth2-redirect.html");
+
+            // Build a system
+            const ui = SwaggerUIBundle(configObject);
+
+            // Apply OAuth config
+            ui.initOAuth(oauthConfigObject);
+
+            //娓呯┖鍏冪礌鍐呭锛岃繖閲屾竻绌轰簡閫夋嫨鐗堟湰鐨勮嫳鏂�
+            $(".select-label span").empty();
+
+            myOnload();
+
+            //淇敼鐗堟湰鐨勭炕璇戜负涓枃
+            function myOnload() {
+                $(document).ready(function () {
+                    $(".select-label span").each(function () {
+                        var myvalue = '閫夋嫨涓�涓帴鍙g増鏈�';
+                        $(this).html(myvalue);
+                    });
+                });
+            }
+            setTimeout(() => {
+
+                //浜岀淮鐮�
+                $('.info').append("<div class='qqgroup'><div style=\"color: #4990e2;\"><a href=\"../allservices\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"link\">路 鏌ョ湅鎵�鏈変緷璧栨敞鍐岀殑鏈嶅姟</a><br></div></div><div style='clear: both;'></div>");
+
+                //淇敼 token鎺堟潈鎸夐挳涓轰腑鏂�
+                //$(".auth-wrapper span").empty();
+                //$(document).ready(function () {
+                //    $('.auth-wrapper span').each(function () {
+                //        var myvalue = '鎺堟潈璁よ瘉';
+                //        $(this).html(myvalue);
+                //    });
+                //});
+                
+            }, 1000)
+            // 鏂囨。logo
+            $(".link img").attr("src", "./logo/favicon-32x32.png");
+        }
+    </script>
+</body>
+</html>
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Dictionary.tsv" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Dictionary.tsv"
new file mode 100644
index 0000000..7cd8502
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Dictionary.tsv"
@@ -0,0 +1,274 @@
+锘縖
+  {
+    "DicId": 3,
+    "Config": "{valueField: 'Enable',\r\ntextField: 'Enable',\r\n containField: null,\r\n  handler: null }",
+    "Sql": null,
+    "DicName": "鏄惁鍊�",
+    "DicNo": "enable",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2022-01-03T18:30:18.113"
+  },
+  {
+    "DicId": 30,
+    "Config": "{valueField: 'Success',\r\n textField: 'Success', \r\n containField: null,\r\n handler: null }\r\n",
+    "Sql": null,
+    "DicName": "鍝嶅簲鐘舵��",
+    "DicNo": "restatus",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2018-06-12T10:21:48"
+  },
+  {
+    "DicId": 31,
+    "Config": "{valueField: 'LogType',\r\n textField: 'LogType', \r\n containField: null,\r\n handler: null }\r\n",
+    "Sql": null,
+    "DicName": "鏃ュ織绫诲瀷",
+    "DicNo": "log",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2022-04-04T13:21:54.927"
+  },
+  {
+    "DicId": 32,
+    "Config": "{valueField: 'RoleId',\r\n textField: 'RoleName', \r\n containField: ['RoleId','RoleName'],\r\n handler: null }\r\n",
+    "Sql": "SELECT RoleId as 'key',RoleName as 'value' FROM Sys_Role WHERE Enable=1",
+    "DicName": "瑙掕壊鍒楄〃",
+    "DicNo": "roles",
+    "Enable": 1,
+    "OrderNo": 123,
+    "ParentId": 0,
+    "Remark": "sql璇彞闇�瑕乲ey,value鍒楋紝鐣岄潰鎵嶈兘缁戝畾鏁版嵁婧�",
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2018-07-13T15:03:53"
+  },
+  {
+    "DicId": 35,
+    "Config": "{\r\n valueField: 'AuditStatus',\r\n textField: 'AuditStatus',\r\n  containField:null \r\n}",
+    "Sql": null,
+    "DicName": "瀹℃牳鐘舵��",
+    "DicNo": "audit",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2023-05-08T01:05:44.193"
+  },
+  {
+    "DicId": 49,
+    "Config": "{\r\n valueField: 'Gender',\r\n textField: 'Gender',\r\n  containField:null \r\n}",
+    "Sql": null,
+    "DicName": "鎬у埆",
+    "DicNo": "gender",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2018-07-23T11:10:28"
+  },
+  {
+    "DicId": 50,
+    "Config": "{\r\n valueField: 'Enable',\r\n textField: 'Enable',\r\n  containField:null \r\n}",
+    "Sql": null,
+    "DicName": "鍚敤鐘舵��",
+    "DicNo": "status",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:01.817"
+  },
+  {
+    "DicId": 59,
+    "Config": "{\r\n valueField: 'IsRegregisterPhone',\r\n textField: 'IsRegregisterPhone',\r\n  containField:null \r\n}",
+    "Sql": null,
+    "DicName": "鎵嬫満鐢ㄦ埛",
+    "DicNo": "isphone",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2020-11-20T23:05:48.303"
+  },
+  {
+    "DicId": 66,
+    "Config": null,
+    "Sql": "SELECT RoleId AS id,parentId,RoleId AS [key],RoleName AS value FROM Sys_Role",
+    "DicName": "绾ц仈瑙掕壊",
+    "DicNo": "tree_roles",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2020-11-20T23:08:03.217"
+  },
+  {
+    "DicId": 67,
+    "Config": null,
+    "Sql": null,
+    "DicName": "nav",
+    "DicNo": "nav",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:01.817"
+  },
+  {
+    "DicId": 70,
+    "Config": null,
+    "Sql": null,
+    "DicName": "璇锋眰鏂瑰紡",
+    "DicNo": "璇锋眰鏂瑰紡",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:01.817"
+  },
+  {
+    "DicId": 71,
+    "Config": null,
+    "Sql": null,
+    "DicName": "瀹氭椂浠诲姟鐘舵��",
+    "DicNo": "瀹氭椂浠诲姟鐘舵��",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:01.817"
+  },
+  {
+    "DicId": 72,
+    "Config": null,
+    "Sql": "SELECT DepartmentId AS 'key',DepartmentId AS 'id',ParentId AS parentId,DepartmentName as 'value' FROM Sys_Department",
+    "DicName": "缁勭粐鏈烘瀯",
+    "DicNo": "缁勭粐鏈烘瀯",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "system",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:01.817"
+  },
+  {
+    "DicId": 75,
+    "Config": null,
+    "Sql": null,
+    "DicName": "鏃ュ織鐘舵��",
+    "DicNo": "LogState",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:54.763",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:01.817"
+  },
+  {
+    "DicId": 78,
+    "Config": null,
+    "Sql": "SELECT Id AS 'key', WarehouseName AS 'value' FROM Dt_Warehouse\r\nUNION ALL\r\nSELECT '0' AS 'key', '鏃�' AS 'value'",
+    "DicName": "浠撳簱",
+    "DicNo": "warehouse",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-23T15:18:34.56",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "DicId": 79,
+    "Config": null,
+    "Sql": "SELECT Id AS 'key', AreaName AS 'value' FROM Dt_AreaInfo\r\nUNION ALL\r\nSELECT '0' AS 'key', '鏃�' AS 'value'",
+    "DicName": "鍖哄煙",
+    "DicNo": "areainfo",
+    "Enable": 1,
+    "OrderNo": null,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-23T17:07:26.75",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "DicId": 81,
+    "Config": null,
+    "Sql": null,
+    "DicName": "鏄惁鍊�",
+    "DicNo": "yesno",
+    "Enable": 1,
+    "OrderNo": 0,
+    "ParentId": 0,
+    "Remark": null,
+    "DicList": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-24T13:40:11.04",
+    "Modifier": null,
+    "ModifyDate": null
+  }
+]
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_DictionaryList.tsv" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_DictionaryList.tsv"
new file mode 100644
index 0000000..798f1dd
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_DictionaryList.tsv"
@@ -0,0 +1,522 @@
+锘縖
+  {
+    "DicListId": 3,
+    "DicName": "鍚�",
+    "DicValue": "0",
+    "DicId": 3,
+    "Enable": null,
+    "OrderNo": 2,
+    "Remark": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2022-01-03T18:30:18.113"
+  },
+  {
+    "DicListId": 4,
+    "DicName": "鏄�",
+    "DicValue": "1",
+    "DicId": 3,
+    "Enable": null,
+    "OrderNo": 1,
+    "Remark": null,
+    "Creater": "xxx",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2022-01-03T18:30:18.113"
+  },
+  {
+    "DicListId": 22,
+    "DicName": "鍏朵粬",
+    "DicValue": "0",
+    "DicId": 30,
+    "Enable": null,
+    "OrderNo": 10,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2019-08-21T16:49:43"
+  },
+  {
+    "DicListId": 23,
+    "DicName": "鎴愬姛",
+    "DicValue": "1",
+    "DicId": 30,
+    "Enable": null,
+    "OrderNo": 100,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2019-08-21T16:49:43"
+  },
+  {
+    "DicListId": 24,
+    "DicName": "寮傚父",
+    "DicValue": "2",
+    "DicId": 30,
+    "Enable": null,
+    "OrderNo": 50,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2019-08-21T16:49:43"
+  },
+  {
+    "DicListId": 25,
+    "DicName": "绯荤粺",
+    "DicValue": "System",
+    "DicId": 31,
+    "Enable": null,
+    "OrderNo": 100,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2022-04-04T13:21:54.947"
+  },
+  {
+    "DicListId": 26,
+    "DicName": "鐧婚檰",
+    "DicValue": "Login",
+    "DicId": 31,
+    "Enable": null,
+    "OrderNo": 90,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2022-04-04T13:21:54.947"
+  },
+  {
+    "DicListId": 27,
+    "DicName": "鏂板缓",
+    "DicValue": "Add",
+    "DicId": 31,
+    "Enable": null,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2022-04-04T13:21:54.943"
+  },
+  {
+    "DicListId": 28,
+    "DicName": "鍒犻櫎",
+    "DicValue": "Del",
+    "DicId": 31,
+    "Enable": 1,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2022-04-04T13:21:54.943"
+  },
+  {
+    "DicListId": 29,
+    "DicName": "缂栬緫",
+    "DicValue": "Edit",
+    "DicId": 31,
+    "Enable": 1,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2022-04-04T13:21:54.943"
+  },
+  {
+    "DicListId": 37,
+    "DicName": "寰呭鏍�",
+    "DicValue": "0",
+    "DicId": 35,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2023-05-08T01:05:44.193"
+  },
+  {
+    "DicListId": 38,
+    "DicName": "瀹℃牳閫氳繃",
+    "DicValue": "1",
+    "DicId": 35,
+    "Enable": null,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2023-05-08T01:05:44.193"
+  },
+  {
+    "DicListId": 39,
+    "DicName": "瀹℃牳涓�",
+    "DicValue": "2",
+    "DicId": 35,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2023-05-08T01:05:44.193"
+  },
+  {
+    "DicListId": 71,
+    "DicName": "寮傚父",
+    "DicValue": "Exception",
+    "DicId": 31,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2022-04-04T13:21:54.943"
+  },
+  {
+    "DicListId": 90,
+    "DicName": "鐢�",
+    "DicValue": "0",
+    "DicId": 49,
+    "Enable": null,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2018-07-23T11:10:28"
+  },
+  {
+    "DicListId": 91,
+    "DicName": "濂�",
+    "DicValue": "1",
+    "DicId": 49,
+    "Enable": null,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2018-07-23T11:10:28"
+  },
+  {
+    "DicListId": 96,
+    "DicName": "鏈惎鐢�",
+    "DicValue": "0",
+    "DicId": 50,
+    "Enable": 1,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2019-08-16T18:17:47"
+  },
+  {
+    "DicListId": 97,
+    "DicName": "宸插惎鐢�",
+    "DicValue": "1",
+    "DicId": 50,
+    "Enable": 1,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2019-08-16T18:17:47"
+  },
+  {
+    "DicListId": 98,
+    "DicName": "宸插垹闄�",
+    "DicValue": "2",
+    "DicId": 50,
+    "Enable": 1,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2019-08-16T18:17:47"
+  },
+  {
+    "DicListId": 128,
+    "DicName": "鏄�",
+    "DicValue": "1",
+    "DicId": 59,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2020-11-20T23:05:48.303"
+  },
+  {
+    "DicListId": 129,
+    "DicName": "鍚�",
+    "DicValue": "0",
+    "DicId": 59,
+    "Enable": 1,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "娴嬭瘯瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2020-11-20T23:05:48.303"
+  },
+  {
+    "DicListId": 144,
+    "DicName": "鍒锋柊Token",
+    "DicValue": "ReplaceToeken",
+    "DicId": 31,
+    "Enable": null,
+    "OrderNo": 110,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2022-04-04T13:21:54.937"
+  },
+  {
+    "DicListId": 145,
+    "DicName": "Info",
+    "DicValue": "3",
+    "DicId": 30,
+    "Enable": null,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 423,
+    "DicName": "鏄�",
+    "DicValue": "1",
+    "DicId": 67,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 424,
+    "DicName": "鍚�",
+    "DicValue": "0",
+    "DicId": 67,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 435,
+    "DicName": "瀹℃牳鏈�氳繃",
+    "DicValue": "3",
+    "DicId": 35,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "瓒呯骇绠$悊鍛�",
+    "ModifyDate": "2023-05-08T01:05:44.193"
+  },
+  {
+    "DicListId": 436,
+    "DicName": "get",
+    "DicValue": "get",
+    "DicId": 70,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 437,
+    "DicName": "post",
+    "DicValue": "post",
+    "DicId": 70,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 438,
+    "DicName": "姝e父",
+    "DicValue": "0",
+    "DicId": 71,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 439,
+    "DicName": "鏆傚仠",
+    "DicValue": "1",
+    "DicId": 71,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 442,
+    "DicName": "椹冲洖",
+    "DicValue": "4",
+    "DicId": 35,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 443,
+    "DicName": "绂佺敤",
+    "DicValue": "DisEnable",
+    "DicId": 73,
+    "Enable": 1,
+    "OrderNo": 1,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "寮�鍙�",
+    "ModifyDate": "2023-07-14T14:17:01.037"
+  },
+  {
+    "DicListId": 444,
+    "DicName": "鍚敤",
+    "DicValue": "Enable",
+    "DicId": 73,
+    "Enable": 1,
+    "OrderNo": 0,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": "寮�鍙�",
+    "ModifyDate": "2023-07-14T14:17:01.017"
+  },
+  {
+    "DicListId": 449,
+    "DicName": "淇℃伅",
+    "DicValue": "Info",
+    "DicId": 75,
+    "Enable": 0,
+    "OrderNo": 1,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 450,
+    "DicName": "鎴愬姛",
+    "DicValue": "Sucess",
+    "DicId": 75,
+    "Enable": 0,
+    "OrderNo": 2,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 451,
+    "DicName": "澶辫触",
+    "DicValue": "Error",
+    "DicId": 75,
+    "Enable": 0,
+    "OrderNo": 3,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 456,
+    "DicName": "鏈鏍�",
+    "DicValue": "OrderState_Unaudited",
+    "DicId": 84,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 457,
+    "DicName": "宸插鏍�",
+    "DicValue": "OrderState_Audited",
+    "DicId": 84,
+    "Enable": 0,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T11:08:55.2",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:07:07.187"
+  },
+  {
+    "DicListId": 458,
+    "DicName": "鏄�",
+    "DicValue": "true",
+    "DicId": 81,
+    "Enable": null,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-24T13:40:11.09",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "DicListId": 459,
+    "DicName": "鍚�",
+    "DicValue": "false",
+    "DicId": 81,
+    "Enable": null,
+    "OrderNo": null,
+    "Remark": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-24T13:40:11.093",
+    "Modifier": null,
+    "ModifyDate": null
+  }
+]
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Menu.tsv" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Menu.tsv"
new file mode 100644
index 0000000..f71d836
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Menu.tsv"
@@ -0,0 +1,716 @@
+锘縖
+  {
+    "MenuId": 1,
+    "MenuName": "鐢ㄦ埛绠$悊",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "el-icon-user",
+    "Description": null,
+    "Enable": 1,
+    "TableName": ".",
+    "ParentId": 0,
+    "Url": null,
+    "OrderNo": 4000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-05-09T15:50:07.567"
+  },
+  {
+    "MenuId": 2,
+    "MenuName": "鐢ㄦ埛绠$悊",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": null,
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Sys_User",
+    "ParentId": 1,
+    "Url": "/Sys_User",
+    "OrderNo": 2000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-05-09T15:50:14.03"
+  },
+  {
+    "MenuId": 3,
+    "MenuName": "鏉冮檺绠$悊",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "ivu-icon ivu-icon-ios-boat",
+    "Description": null,
+    "Enable": 1,
+    "TableName": ",",
+    "ParentId": 1,
+    "Url": "/permission",
+    "OrderNo": 1000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-05-09T15:50:20.727"
+  },
+  {
+    "MenuId": 4,
+    "MenuName": "瑙掕壊绠$悊",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": null,
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Sys_Role",
+    "ParentId": 1,
+    "Url": "/Sys_Role",
+    "OrderNo": 900,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-05-09T15:50:23.177"
+  },
+  {
+    "MenuId": 5,
+    "MenuName": "绯荤粺璁剧疆",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "el-icon-setting",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "绯荤粺璁剧疆",
+    "ParentId": 0,
+    "Url": "/",
+    "OrderNo": 0,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-05-09T15:50:38.703"
+  },
+  {
+    "MenuId": 6,
+    "MenuName": "鑿滃崟璁剧疆",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": null,
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Sys_Menu",
+    "ParentId": 5,
+    "Url": "/sysmenu",
+    "OrderNo": 10,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-05-09T15:50:42.007"
+  },
+  {
+    "MenuId": 7,
+    "MenuName": "涓嬫媺妗嗙粦瀹氳缃�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": null,
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Sys_Dictionary",
+    "ParentId": 5,
+    "Url": "/Sys_Dictionary",
+    "OrderNo": 10,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:06:31.127"
+  },
+  {
+    "MenuId": 8,
+    "MenuName": "鏃ュ織绠$悊",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "el-icon-date",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "xxx",
+    "ParentId": 0,
+    "Url": "/",
+    "OrderNo": 500,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-05-09T15:50:30.557"
+  },
+  {
+    "MenuId": 9,
+    "MenuName": "鎺ュ彛鏃ュ織",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": null,
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Sys_Log",
+    "ParentId": 8,
+    "Url": "/Sys_Log/Manager",
+    "OrderNo": 0,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-05-09T15:50:34.273"
+  },
+  {
+    "MenuId": 12,
+    "MenuName": "浠诲姟绠$悊",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "el-icon-shopping-bag-2",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "/",
+    "ParentId": 0,
+    "Url": "/",
+    "OrderNo": 9000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-09-04T10:44:31.457"
+  },
+  {
+    "MenuId": 13,
+    "MenuName": "浠诲姟淇℃伅",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": null,
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_Task",
+    "ParentId": 12,
+    "Url": "/task",
+    "OrderNo": 500,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-09-20T09:15:35.93"
+  },
+  {
+    "MenuId": 17,
+    "MenuName": "鍩虹绠$悊",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "el-icon-notebook-2",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "/",
+    "ParentId": 0,
+    "Url": "/",
+    "OrderNo": 10000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-09-04T10:44:15.293"
+  },
+  {
+    "MenuId": 19,
+    "MenuName": "鍗曟嵁绠$悊",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"}]",
+    "Icon": "el-icon-document",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "/",
+    "ParentId": 0,
+    "Url": "",
+    "OrderNo": 8000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-09-04T10:50:35.37"
+  },
+  {
+    "MenuId": 20,
+    "MenuName": "搴撳瓨绠$悊",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"}]",
+    "Icon": "el-icon-discount",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "/",
+    "ParentId": 0,
+    "Url": "",
+    "OrderNo": 7000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-09-04T10:53:10.417"
+  },
+  {
+    "MenuId": 21,
+    "MenuName": "浠撳簱淇℃伅",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"},{\"text\":\"鍚敤\",\"value\":\"Enable\"},{\"text\":\"绂佺敤\",\"value\":\"Disable\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_Warehouse",
+    "ParentId": 17,
+    "Url": "/warehouse",
+    "OrderNo": 10000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-09-24T14:36:38.443"
+  },
+  {
+    "MenuId": 23,
+    "MenuName": "璐т綅淇℃伅",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"},{\"text\":\"鍚敤\",\"value\":\"Enable\"},{\"text\":\"绂佺敤\",\"value\":\"Disable\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_LocationInfo",
+    "ParentId": 17,
+    "Url": "/locationInfo",
+    "OrderNo": 8000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-09-24T14:36:47.427"
+  },
+  {
+    "MenuId": 24,
+    "MenuName": "鐗╂枡淇℃伅",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_MaterielInfo",
+    "ParentId": 17,
+    "Url": "/materielInfo",
+    "OrderNo": 7000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:06:31.127"
+  },
+  {
+    "MenuId": 25,
+    "MenuName": "鍏ュ簱鍗�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_InboundOrder",
+    "ParentId": 19,
+    "Url": "/inboundOrder",
+    "OrderNo": 10000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-09-04T10:50:25.91"
+  },
+  {
+    "MenuId": 26,
+    "MenuName": "鍏ュ簱鍗曟槑缁�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 0,
+    "TableName": "Dt_InboundOrderDetail",
+    "ParentId": 19,
+    "Url": "/inboundOrderDetail",
+    "OrderNo": 9000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-09-24T11:12:44.15"
+  },
+  {
+    "MenuId": 27,
+    "MenuName": "鍑哄簱鍗�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_OutboundOrder",
+    "ParentId": 19,
+    "Url": "/outboundOrder",
+    "OrderNo": 8000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:06:31.127"
+  },
+  {
+    "MenuId": 28,
+    "MenuName": "鍑哄簱鍗曟槑缁�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 0,
+    "TableName": "Dt_OutboundOrderDetail",
+    "ParentId": 19,
+    "Url": "/outboundOrderDetail",
+    "OrderNo": 7000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-09-24T11:12:46.923"
+  },
+  {
+    "MenuId": 29,
+    "MenuName": "搴撳瓨淇℃伅",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_StockInfo",
+    "ParentId": 20,
+    "Url": "/stockInfo",
+    "OrderNo": 10000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:06:31.127"
+  },
+  {
+    "MenuId": 30,
+    "MenuName": "搴撳瓨淇℃伅鏄庣粏",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_StockInfoDetail",
+    "ParentId": 20,
+    "Url": "/stockInfoDetail",
+    "OrderNo": 9000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:06:31.127"
+  },
+  {
+    "MenuId": 32,
+    "MenuName": "搴撳瓨瑙嗗浘",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "StockView",
+    "ParentId": 20,
+    "Url": "/stockView",
+    "OrderNo": 9000,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "MenuId": 41,
+    "MenuName": "鍏ュ簱璁㈠崟",
+    "Auth": "",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "/",
+    "ParentId": 0,
+    "Url": "/inboundOrder",
+    "OrderNo": 0,
+    "MenuType": 1,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-09-30T16:34:47.333"
+  },
+  {
+    "MenuId": 42,
+    "MenuName": "渚涘簲鍟嗕俊鎭�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_SupplierInfo",
+    "ParentId": 17,
+    "Url": "/supplierInfo",
+    "OrderNo": 0,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "MenuId": 43,
+    "MenuName": "妫�楠岀鐞�",
+    "Auth": "",
+    "Icon": "el-icon-document-checked",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "/",
+    "ParentId": 0,
+    "Url": "",
+    "OrderNo": 9700,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-12-18T18:46:55.123"
+  },
+  {
+    "MenuId": 44,
+    "MenuName": "妫�楠屼俊鎭�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_CheckOrder",
+    "ParentId": 43,
+    "Url": "/checkOrder",
+    "OrderNo": 0,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "MenuId": 45,
+    "MenuName": "鍘嗗彶鍏ュ簱鍗�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_InboundOrder_Hty",
+    "ParentId": 19,
+    "Url": "/inboundOrder_Hty",
+    "OrderNo": 6500,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-12-17T14:45:19.42"
+  },
+  {
+    "MenuId": 46,
+    "MenuName": "鍘嗗彶鍏ュ簱鍗曟槑缁�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 0,
+    "TableName": "Dt_InboundOrderDetail_Hty",
+    "ParentId": 19,
+    "Url": "/inboundOrderDetail_Hty",
+    "OrderNo": 6400,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-12-17T14:45:26.113"
+  },
+  {
+    "MenuId": 47,
+    "MenuName": "鍘嗗彶鍑哄簱鍗�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_OutboundOrder_Hty",
+    "ParentId": 19,
+    "Url": "/outboundOrder_Hty",
+    "OrderNo": 6300,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-12-17T14:45:31.007"
+  },
+  {
+    "MenuId": 48,
+    "MenuName": "鍘嗗彶鍑哄簱鍗曟槑缁�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 0,
+    "TableName": "Dt_OutboundOrderDetail_Hty",
+    "ParentId": 19,
+    "Url": "/outboundOrderDetail_Hty",
+    "OrderNo": 6200,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-12-17T14:45:35.687"
+  },
+  {
+    "MenuId": 49,
+    "MenuName": "閲囪喘绠$悊",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"}]",
+    "Icon": "el-icon-s-shop",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "/",
+    "ParentId": 0,
+    "Url": "",
+    "OrderNo": 9900,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-12-17T15:34:23.89"
+  },
+  {
+    "MenuId": 50,
+    "MenuName": "閲囪喘鍗�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "/Dt_PurchaseOrder",
+    "ParentId": 49,
+    "Url": "/purchaseOrder",
+    "OrderNo": 0,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": "admin",
+    "ModifyDate": "2024-12-17T16:31:57.193"
+  },
+  {
+    "MenuId": 51,
+    "MenuName": "鏀惰揣绠$悊",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"}]",
+    "Icon": "el-icon-s-home",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "/",
+    "ParentId": 0,
+    "Url": "",
+    "OrderNo": 9800,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "MenuId": 52,
+    "MenuName": "鏀惰揣鍗�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_ReceiveOrder",
+    "ParentId": 51,
+    "Url": "/receiveOrder",
+    "OrderNo": 0,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "MenuId": 53,
+    "MenuName": "閲囪喘鍗曟槑缁�",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 0,
+    "TableName": "Dt_PurchaseOrderDetail",
+    "ParentId": 49,
+    "Url": "/purchaseOrderDetail",
+    "OrderNo": 2,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:25:49.06",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "MenuId": 54,
+    "MenuName": "瀹㈡埛淇℃伅",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_CustomerInfo",
+    "ParentId": 17,
+    "Url": "/customerInfo",
+    "OrderNo": 0,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T17:56:51.487",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "MenuId": 55,
+    "MenuName": "鍛樺伐淇℃伅",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"鏂板缓\",\"value\":\"Add\"},{\"text\":\"鍒犻櫎\",\"value\":\"Delete\"},{\"text\":\"缂栬緫\",\"value\":\"Update\"},{\"text\":\"瀵煎叆\",\"value\":\"Import\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_UserInfo",
+    "ParentId": 17,
+    "Url": "/userInfo",
+    "OrderNo": 0,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T18:19:34.37",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "MenuId": 56,
+    "MenuName": "鍘嗗彶浠诲姟淇℃伅",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_Task_Hty",
+    "ParentId": 12,
+    "Url": "/task_hty",
+    "OrderNo": 0,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T18:35:41.773",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "MenuId": 57,
+    "MenuName": "璐т綅鍙樺姩璁板綍",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_LocationStatusChangeRecord",
+    "ParentId": 8,
+    "Url": "/locationStatusChangeRecord",
+    "OrderNo": 0,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T18:38:41.89",
+    "Modifier": null,
+    "ModifyDate": null
+  },
+  {
+    "MenuId": 58,
+    "MenuName": "搴撳瓨鍙樺姩璁板綍",
+    "Auth": "[{\"text\":\"鏌ヨ\",\"value\":\"Search\"},{\"text\":\"瀵煎嚭\",\"value\":\"Export\"}]",
+    "Icon": "",
+    "Description": null,
+    "Enable": 1,
+    "TableName": "Dt_StockQuantityChangeRecord",
+    "ParentId": 8,
+    "Url": "/stockQuantityChangeRecord",
+    "OrderNo": 0,
+    "MenuType": 0,
+    "Creater": "admin",
+    "CreateDate": "2024-12-18T18:46:22.51",
+    "Modifier": null,
+    "ModifyDate": null
+  }
+]
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Role.tsv" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Role.tsv"
new file mode 100644
index 0000000..119ac80
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Role.tsv"
@@ -0,0 +1,15 @@
+锘縖
+  {
+    "RoleId": 1,
+    "DeptName": null,
+    "DeptId": 111,
+    "Enable": 1,
+    "ParentId": 0,
+    "RoleName": "瓒呯骇绠$悊鍛�",
+    "Roles": null,
+    "Creater": "瓒呯骇绠$悊鍛�",
+    "CreateDate": "2024-09-04T10:37:49.73",
+    "Modifier": "admin",
+    "ModifyDate": "2024-04-29T13:53:44.717"
+  }
+]
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_RoleAuth.tsv" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_RoleAuth.tsv"
new file mode 100644
index 0000000..92a83ba
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_RoleAuth.tsv"
@@ -0,0 +1,167 @@
+锘縖
+  {
+    "AuthId": 136,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 1,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": "admin",
+    "ModifyDate": "2024-02-22T09:31:16.363"
+  },
+  {
+    "AuthId": 137,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 2,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": "admin",
+    "ModifyDate": "2024-04-29T15:04:07.83"
+  },
+  {
+    "AuthId": 138,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 3,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": "admin",
+    "ModifyDate": "2024-02-22T09:31:16.363"
+  },
+  {
+    "AuthId": 140,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 4,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": "admin",
+    "ModifyDate": "2024-02-22T09:31:16.363"
+  },
+  {
+    "AuthId": 141,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 5,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": "admin",
+    "ModifyDate": "2024-02-22T09:31:16.363"
+  },
+  {
+    "AuthId": 143,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 6,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": "admin",
+    "ModifyDate": "2024-02-22T09:31:16.363"
+  },
+  {
+    "AuthId": 144,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 7,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": "admin",
+    "ModifyDate": "2024-04-29T15:00:47.033"
+  },
+  {
+    "AuthId": 146,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 8,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": "admin",
+    "ModifyDate": "2024-04-29T15:04:07.83"
+  },
+  {
+    "AuthId": 148,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 9,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": "admin",
+    "ModifyDate": "2024-02-22T09:31:16.363"
+  },
+  {
+    "AuthId": 153,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 10,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:06:51.9677061+08:00"
+  },
+  {
+    "AuthId": 154,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 12,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:06:51.9677072+08:00"
+  },
+  {
+    "AuthId": 155,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 13,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:06:51.9677079+08:00"
+  },
+  {
+    "AuthId": 156,
+    "AuthValue": "Search",
+    "MenuId": 11,
+    "RoleId": 1,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:06:51.9677085+08:00"
+  },
+  {
+    "AuthId": 157,
+    "AuthValue": "Search",
+    "MenuId": 11,
+    "RoleId": 2,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:06:51.9677167+08:00"
+  },
+  {
+    "AuthId": 158,
+    "AuthValue": "Search,Add,Delete,Update,Import,Export",
+    "MenuId": 10,
+    "RoleId": 2,
+    "UserId": null,
+    "Creater": "admin",
+    "CreateDate": "2024-09-04T10:37:50",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:06:51.9677174+08:00"
+  }
+]
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_User.tsv" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_User.tsv"
new file mode 100644
index 0000000..11ae206
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_User.tsv"
@@ -0,0 +1,29 @@
+锘縖
+  {
+    "UserId": 1,
+    "UserName": "admin",
+    "RoleId": 1,
+    "RoleName": "瓒呯骇绠$悊鍛�",
+    "PhoneNo": "",
+    "Remark": "",
+    "UserPwd": "j79rYYvCz4vdhcboB1Ausg==",
+    "UserTrueName": "瓒呯骇绠$悊鍛�",
+    "DeptName": "",
+    "DeptId": 0,
+    "Email": "",
+    "Enable": 1,
+    "Gender": 1,
+    "HeadImageUrl": "",
+    "LastModifyPwdDate": "2024-04-16T19:58:55",
+    "Address": "绯荤粺鏈嶅姟鍣�",
+    "AuditDate": "2024-04-16T00:54:06",
+    "AuditStatus": 1,
+    "Auditor": "瓒呯骇绠$悊鍛�",
+    "Token": "",
+    "TenantId": 0,
+    "Creater": "绯荤粺",
+    "CreateDate": "2024-09-04T10:37:50.81",
+    "Modifier": null,
+    "ModifyDate": "2024-09-04T11:06:37.8196741+08:00"
+  }
+]
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/css/site.css" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/css/site.css"
new file mode 100644
index 0000000..e679a8e
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/css/site.css"
@@ -0,0 +1,71 @@
+锘�/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
+for details on configuring this project to bundle and minify static web assets. */
+
+a.navbar-brand {
+  white-space: normal;
+  text-align: center;
+  word-break: break-all;
+}
+
+/* Provide sufficient contrast against white background */
+a {
+  color: #0366d6;
+}
+
+.btn-primary {
+  color: #fff;
+  background-color: #1b6ec2;
+  border-color: #1861ac;
+}
+
+.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
+  color: #fff;
+  background-color: #1b6ec2;
+  border-color: #1861ac;
+}
+
+/* Sticky footer styles
+-------------------------------------------------- */
+html {
+  font-size: 14px;
+}
+@media (min-width: 768px) {
+  html {
+    font-size: 16px;
+  }
+}
+
+.border-top {
+  border-top: 1px solid #e5e5e5;
+}
+.border-bottom {
+  border-bottom: 1px solid #e5e5e5;
+}
+
+.box-shadow {
+  box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
+}
+
+button.accept-policy {
+  font-size: 1rem;
+  line-height: inherit;
+}
+
+/* Sticky footer styles
+-------------------------------------------------- */
+html {
+  position: relative;
+  min-height: 100%;
+}
+
+body {
+  /* Margin bottom by footer height */
+  margin-bottom: 60px;
+}
+.footer {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+  white-space: nowrap;
+  line-height: 60px; /* Vertically center the text there */
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/css/style.css" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/css/style.css"
new file mode 100644
index 0000000..f8fe18d
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/css/style.css"
@@ -0,0 +1,132 @@
+@charset "utf-8";
+::selection {
+  background: #2D2F36;
+}
+::-webkit-selection {
+  background: #2D2F36;
+}
+::-moz-selection {
+  background: #2D2F36;
+}
+body {
+  background: white;
+  font-family: 'Inter UI', sans-serif;
+  margin: 0;
+  padding: 20px;
+}
+.page {
+  background: #e2e2e5;
+  display: flex;
+  flex-direction: column;
+  height: calc(100% - 40px);
+  position: absolute;
+  place-content: center;
+  width: calc(100% - 40px);
+}
+@media (max-width: 767px) {
+  .page {
+    height: auto;
+    margin-bottom: 20px;
+    padding-bottom: 20px;
+  }
+}
+.container {
+  display: flex;
+  height: 320px;
+  margin: 0 auto;
+  width: 640px;
+}
+@media (max-width: 767px) {
+  .container {
+    flex-direction: column;
+    height: 630px;
+    width: 320px;
+  }
+}
+.left {
+  background: white;
+  height: calc(100% - 40px);
+  top: 20px;
+  position: relative;
+  width: 50%;
+}
+@media (max-width: 767px) {
+  .left {
+    height: 100%;
+    left: 20px;
+    width: calc(100% - 40px);
+    max-height: 270px;
+  }
+}
+.login {
+  font-size: 33px;
+  font-weight: 900;
+  margin: 50px 40px 40px;
+}
+.eula {
+  color: #999;
+  font-size: 14px;
+  line-height: 1.5;
+  margin: 40px;
+}
+.right {
+  background: #474A59;
+  box-shadow: 0px 0px 40px 16px rgba(0,0,0,0.22);
+  color: #F1F1F2;
+  position: relative;
+  width: 50%;
+}
+@media (max-width: 767px) {
+  .right {
+    flex-shrink: 0;
+    height: 100%;
+    width: 100%;
+    max-height: 350px;
+  }
+}
+svg {
+  position: absolute;
+  width: 320px;
+}
+path {
+  fill: none;
+  stroke: url(#linearGradient);;
+  stroke-width: 4;
+  stroke-dasharray: 240 1386;
+}
+.form {
+  margin: 40px;
+  position: absolute;
+}
+label {
+  color:  #c2c2c5;
+  display: block;
+  font-size: 14px;
+  height: 16px;
+  margin-top: 20px;
+  margin-bottom: 5px;
+}
+input {
+  background: transparent;
+  border: 0;
+  color: #f2f2f2;
+  font-size: 20px;
+  height: 30px;
+  line-height: 30px;
+  outline: none !important;
+  width: 100%;
+}
+input::-moz-focus-inner { 
+  border: 0; 
+}
+#submit {
+  color: #707075;
+  margin-top: 40px;
+  transition: color 300ms;
+}
+#submit:focus {
+  color: #f2f2f2;
+}
+#submit:active {
+  color: #d0d0d2;
+}
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/css/swaggerdoc.css" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/css/swaggerdoc.css"
new file mode 100644
index 0000000..1a05ca2
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/css/swaggerdoc.css"
@@ -0,0 +1,109 @@
+.selectBox {
+    margin: 50px auto; /*灞呬腑*/
+    width: 150px;
+    text-align: center;
+}
+
+    .selectBox a {
+        color: #1b1b1b;
+        text-decoration: none;
+    }
+
+    .selectBox ul, .selectBox li {
+        list-style: none;
+    }
+
+    .selectBox span {
+        line-height: 46px;
+        background-color: #85ea2d;
+        display: block;
+        margin-bottom: 20px;
+        position: relative;
+        z-index: 2;
+        border-radius: 5px;
+        -webkit-transition: all .2s ease-in;
+        transition: all .2s ease-in;
+    }
+
+.drop {
+    left: 0;
+    right: 0;
+    top: -9999px;
+    box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
+    border-radius: 5px;
+    position: absolute;
+    z-index: 1;
+    -webkit-transform: translateY(-50px); /*y杞存柟鍚戝钩绉�*/
+    transform: translateY(-50px);
+    opacity: 0;
+    -webkit-transition: all .2s ease-in; /*骞崇Щ鏃堕棿0.2s*/
+    transition: all .2s ease-in;
+}
+/*缁欓�佷釜涓嬫媺鍔╂敾*/
+.selectBox:hover span {
+    background-color: #74ea0d;
+}
+
+    .selectBox:hover span a:after {
+        -webkit-transform: rotate(180deg); /*鏃嬭浆180搴�*/
+        transform: rotate(180deg);
+    }
+
+.selectBox:hover .drop {
+    position: static;
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+}
+.drop li:first-child:before {
+    content: " ";
+    font-size: 0;
+    line-height: 0;
+    margin: 0 auto; /*灞呬腑*/
+    display: block; /*鐙崰涓�琛�*/
+    box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2); /*閰嶅悎鏁翠綋涓�鏍风殑鎶曞奖*/
+    background-color: #fff;
+    width: 10px;
+    height: 10px;
+    -webkit-transform: rotate(45deg);
+    transform: rotate(45deg); /*涓�涓鏂瑰舰鍊炬枩鍥涘崄浜斿害灏辨槸涓夎浜嗕絾鏄鎶婁笅鍗婇儴鍒嗚棌璧锋潵*/
+    position: relative;
+    top: -5px; /*鏋滄柇鐨勯湶鍑轰笂鍗婇儴鍒�*/
+    z-index: 1; /*鏋滄柇鐨勯殣钘忎笅鍗婇儴鍒�*/
+    -webkit-transition: all .2s ease-in;
+    transition: all .2s ease-in;
+}
+
+.drop li a {
+    color: #888;
+    line-height: 46px;
+    border-bottom: solid 1px #eee;
+    font-size: 14px;
+    display: block;
+    background-color: #fff; /*瑕佹湁鑳屾櫙鑹叉墠鑳界洊浣忓憖*/
+    position: relative;
+    z-index: 2; /*杩欓噷寰堥噸瑕� 瑕佹尅浣忎笁瑙掑舰鐨勪笅鍗婇儴鍒�*/
+    -webkit-transition: all .2s ease-in;
+    transition: all .2s ease-in;
+}
+.drop li:first-child a {
+    border-top-left-radius: 5px;
+    border-top-right-radius: 5px;
+    margin-top: -10px;
+}
+
+.drop li:last-child a {
+    border-bottom-left-radius: 5px;
+    border-bottom-right-radius: 5px;
+    border-bottom: none;
+}
+.drop li:hover:before {
+    background-color: #85ea2d;
+}
+
+.drop li:hover a {
+    background-color: #85ea2d;
+    color: #fff;
+}
+
+
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/favicon.ico" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/favicon.ico"
new file mode 100644
index 0000000..a3a7999
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/favicon.ico"
Binary files differ
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/anime.min.js" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/anime.min.js"
new file mode 100644
index 0000000..c399324
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/anime.min.js"
@@ -0,0 +1,33 @@
+/*
+ 2017 Julian Garnier
+ Released under the MIT license
+*/
+var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(e,r,p){if(p.get||p.set)throw new TypeError("ES3 does not support getters and setters.");e!=Array.prototype&&e!=Object.prototype&&(e[r]=p.value)};$jscomp.getGlobal=function(e){return"undefined"!=typeof window&&window===e?e:"undefined"!=typeof global&&null!=global?global:e};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_";
+$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.symbolCounter_=0;$jscomp.Symbol=function(e){return $jscomp.SYMBOL_PREFIX+(e||"")+$jscomp.symbolCounter_++};
+$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var e=$jscomp.global.Symbol.iterator;e||(e=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[e]&&$jscomp.defineProperty(Array.prototype,e,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(e){var r=0;return $jscomp.iteratorPrototype(function(){return r<e.length?{done:!1,value:e[r++]}:{done:!0}})};
+$jscomp.iteratorPrototype=function(e){$jscomp.initSymbolIterator();e={next:e};e[$jscomp.global.Symbol.iterator]=function(){return this};return e};$jscomp.array=$jscomp.array||{};$jscomp.iteratorFromArray=function(e,r){$jscomp.initSymbolIterator();e instanceof String&&(e+="");var p=0,m={next:function(){if(p<e.length){var u=p++;return{value:r(u,e[u]),done:!1}}m.next=function(){return{done:!0,value:void 0}};return m.next()}};m[Symbol.iterator]=function(){return m};return m};
+$jscomp.polyfill=function(e,r,p,m){if(r){p=$jscomp.global;e=e.split(".");for(m=0;m<e.length-1;m++){var u=e[m];u in p||(p[u]={});p=p[u]}e=e[e.length-1];m=p[e];r=r(m);r!=m&&null!=r&&$jscomp.defineProperty(p,e,{configurable:!0,writable:!0,value:r})}};$jscomp.polyfill("Array.prototype.keys",function(e){return e?e:function(){return $jscomp.iteratorFromArray(this,function(e){return e})}},"es6-impl","es3");var $jscomp$this=this;
+(function(e,r){"function"===typeof define&&define.amd?define([],r):"object"===typeof module&&module.exports?module.exports=r():e.anime=r()})(this,function(){function e(a){if(!h.col(a))try{return document.querySelectorAll(a)}catch(c){}}function r(a,c){for(var d=a.length,b=2<=arguments.length?arguments[1]:void 0,f=[],n=0;n<d;n++)if(n in a){var k=a[n];c.call(b,k,n,a)&&f.push(k)}return f}function p(a){return a.reduce(function(a,d){return a.concat(h.arr(d)?p(d):d)},[])}function m(a){if(h.arr(a))return a;
+h.str(a)&&(a=e(a)||a);return a instanceof NodeList||a instanceof HTMLCollection?[].slice.call(a):[a]}function u(a,c){return a.some(function(a){return a===c})}function C(a){var c={},d;for(d in a)c[d]=a[d];return c}function D(a,c){var d=C(a),b;for(b in a)d[b]=c.hasOwnProperty(b)?c[b]:a[b];return d}function z(a,c){var d=C(a),b;for(b in c)d[b]=h.und(a[b])?c[b]:a[b];return d}function T(a){a=a.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(a,c,d,k){return c+c+d+d+k+k});var c=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a);
+a=parseInt(c[1],16);var d=parseInt(c[2],16),c=parseInt(c[3],16);return"rgba("+a+","+d+","+c+",1)"}function U(a){function c(a,c,b){0>b&&(b+=1);1<b&&--b;return b<1/6?a+6*(c-a)*b:.5>b?c:b<2/3?a+(c-a)*(2/3-b)*6:a}var d=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(a)||/hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%,\s*([\d.]+)\)/g.exec(a);a=parseInt(d[1])/360;var b=parseInt(d[2])/100,f=parseInt(d[3])/100,d=d[4]||1;if(0==b)f=b=a=f;else{var n=.5>f?f*(1+b):f+b-f*b,k=2*f-n,f=c(k,n,a+1/3),b=c(k,n,a);a=c(k,n,a-1/3)}return"rgba("+
+255*f+","+255*b+","+255*a+","+d+")"}function y(a){if(a=/([\+\-]?[0-9#\.]+)(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(a))return a[2]}function V(a){if(-1<a.indexOf("translate")||"perspective"===a)return"px";if(-1<a.indexOf("rotate")||-1<a.indexOf("skew"))return"deg"}function I(a,c){return h.fnc(a)?a(c.target,c.id,c.total):a}function E(a,c){if(c in a.style)return getComputedStyle(a).getPropertyValue(c.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase())||"0"}function J(a,c){if(h.dom(a)&&
+u(W,c))return"transform";if(h.dom(a)&&(a.getAttribute(c)||h.svg(a)&&a[c]))return"attribute";if(h.dom(a)&&"transform"!==c&&E(a,c))return"css";if(null!=a[c])return"object"}function X(a,c){var d=V(c),d=-1<c.indexOf("scale")?1:0+d;a=a.style.transform;if(!a)return d;for(var b=[],f=[],n=[],k=/(\w+)\((.+?)\)/g;b=k.exec(a);)f.push(b[1]),n.push(b[2]);a=r(n,function(a,b){return f[b]===c});return a.length?a[0]:d}function K(a,c){switch(J(a,c)){case "transform":return X(a,c);case "css":return E(a,c);case "attribute":return a.getAttribute(c)}return a[c]||
+0}function L(a,c){var d=/^(\*=|\+=|-=)/.exec(a);if(!d)return a;var b=y(a)||0;c=parseFloat(c);a=parseFloat(a.replace(d[0],""));switch(d[0][0]){case "+":return c+a+b;case "-":return c-a+b;case "*":return c*a+b}}function F(a,c){return Math.sqrt(Math.pow(c.x-a.x,2)+Math.pow(c.y-a.y,2))}function M(a){a=a.points;for(var c=0,d,b=0;b<a.numberOfItems;b++){var f=a.getItem(b);0<b&&(c+=F(d,f));d=f}return c}function N(a){if(a.getTotalLength)return a.getTotalLength();switch(a.tagName.toLowerCase()){case "circle":return 2*
+Math.PI*a.getAttribute("r");case "rect":return 2*a.getAttribute("width")+2*a.getAttribute("height");case "line":return F({x:a.getAttribute("x1"),y:a.getAttribute("y1")},{x:a.getAttribute("x2"),y:a.getAttribute("y2")});case "polyline":return M(a);case "polygon":var c=a.points;return M(a)+F(c.getItem(c.numberOfItems-1),c.getItem(0))}}function Y(a,c){function d(b){b=void 0===b?0:b;return a.el.getPointAtLength(1<=c+b?c+b:0)}var b=d(),f=d(-1),n=d(1);switch(a.property){case "x":return b.x;case "y":return b.y;
+case "angle":return 180*Math.atan2(n.y-f.y,n.x-f.x)/Math.PI}}function O(a,c){var d=/-?\d*\.?\d+/g,b;b=h.pth(a)?a.totalLength:a;if(h.col(b))if(h.rgb(b)){var f=/rgb\((\d+,\s*[\d]+,\s*[\d]+)\)/g.exec(b);b=f?"rgba("+f[1]+",1)":b}else b=h.hex(b)?T(b):h.hsl(b)?U(b):void 0;else f=(f=y(b))?b.substr(0,b.length-f.length):b,b=c&&!/\s/g.test(b)?f+c:f;b+="";return{original:b,numbers:b.match(d)?b.match(d).map(Number):[0],strings:h.str(a)||c?b.split(d):[]}}function P(a){a=a?p(h.arr(a)?a.map(m):m(a)):[];return r(a,
+function(a,d,b){return b.indexOf(a)===d})}function Z(a){var c=P(a);return c.map(function(a,b){return{target:a,id:b,total:c.length}})}function aa(a,c){var d=C(c);if(h.arr(a)){var b=a.length;2!==b||h.obj(a[0])?h.fnc(c.duration)||(d.duration=c.duration/b):a={value:a}}return m(a).map(function(a,b){b=b?0:c.delay;a=h.obj(a)&&!h.pth(a)?a:{value:a};h.und(a.delay)&&(a.delay=b);return a}).map(function(a){return z(a,d)})}function ba(a,c){var d={},b;for(b in a){var f=I(a[b],c);h.arr(f)&&(f=f.map(function(a){return I(a,
+c)}),1===f.length&&(f=f[0]));d[b]=f}d.duration=parseFloat(d.duration);d.delay=parseFloat(d.delay);return d}function ca(a){return h.arr(a)?A.apply(this,a):Q[a]}function da(a,c){var d;return a.tweens.map(function(b){b=ba(b,c);var f=b.value,e=K(c.target,a.name),k=d?d.to.original:e,k=h.arr(f)?f[0]:k,w=L(h.arr(f)?f[1]:f,k),e=y(w)||y(k)||y(e);b.from=O(k,e);b.to=O(w,e);b.start=d?d.end:a.offset;b.end=b.start+b.delay+b.duration;b.easing=ca(b.easing);b.elasticity=(1E3-Math.min(Math.max(b.elasticity,1),999))/
+1E3;b.isPath=h.pth(f);b.isColor=h.col(b.from.original);b.isColor&&(b.round=1);return d=b})}function ea(a,c){return r(p(a.map(function(a){return c.map(function(b){var c=J(a.target,b.name);if(c){var d=da(b,a);b={type:c,property:b.name,animatable:a,tweens:d,duration:d[d.length-1].end,delay:d[0].delay}}else b=void 0;return b})})),function(a){return!h.und(a)})}function R(a,c,d,b){var f="delay"===a;return c.length?(f?Math.min:Math.max).apply(Math,c.map(function(b){return b[a]})):f?b.delay:d.offset+b.delay+
+b.duration}function fa(a){var c=D(ga,a),d=D(S,a),b=Z(a.targets),f=[],e=z(c,d),k;for(k in a)e.hasOwnProperty(k)||"targets"===k||f.push({name:k,offset:e.offset,tweens:aa(a[k],d)});a=ea(b,f);return z(c,{children:[],animatables:b,animations:a,duration:R("duration",a,c,d),delay:R("delay",a,c,d)})}function q(a){function c(){return window.Promise&&new Promise(function(a){return p=a})}function d(a){return g.reversed?g.duration-a:a}function b(a){for(var b=0,c={},d=g.animations,f=d.length;b<f;){var e=d[b],
+k=e.animatable,h=e.tweens,n=h.length-1,l=h[n];n&&(l=r(h,function(b){return a<b.end})[0]||l);for(var h=Math.min(Math.max(a-l.start-l.delay,0),l.duration)/l.duration,w=isNaN(h)?1:l.easing(h,l.elasticity),h=l.to.strings,p=l.round,n=[],m=void 0,m=l.to.numbers.length,t=0;t<m;t++){var x=void 0,x=l.to.numbers[t],q=l.from.numbers[t],x=l.isPath?Y(l.value,w*x):q+w*(x-q);p&&(l.isColor&&2<t||(x=Math.round(x*p)/p));n.push(x)}if(l=h.length)for(m=h[0],w=0;w<l;w++)p=h[w+1],t=n[w],isNaN(t)||(m=p?m+(t+p):m+(t+" "));
+else m=n[0];ha[e.type](k.target,e.property,m,c,k.id);e.currentValue=m;b++}if(b=Object.keys(c).length)for(d=0;d<b;d++)H||(H=E(document.body,"transform")?"transform":"-webkit-transform"),g.animatables[d].target.style[H]=c[d].join(" ");g.currentTime=a;g.progress=a/g.duration*100}function f(a){if(g[a])g[a](g)}function e(){g.remaining&&!0!==g.remaining&&g.remaining--}function k(a){var k=g.duration,n=g.offset,w=n+g.delay,r=g.currentTime,x=g.reversed,q=d(a);if(g.children.length){var u=g.children,v=u.length;
+if(q>=g.currentTime)for(var G=0;G<v;G++)u[G].seek(q);else for(;v--;)u[v].seek(q)}if(q>=w||!k)g.began||(g.began=!0,f("begin")),f("run");if(q>n&&q<k)b(q);else if(q<=n&&0!==r&&(b(0),x&&e()),q>=k&&r!==k||!k)b(k),x||e();f("update");a>=k&&(g.remaining?(t=h,"alternate"===g.direction&&(g.reversed=!g.reversed)):(g.pause(),g.completed||(g.completed=!0,f("complete"),"Promise"in window&&(p(),m=c()))),l=0)}a=void 0===a?{}:a;var h,t,l=0,p=null,m=c(),g=fa(a);g.reset=function(){var a=g.direction,c=g.loop;g.currentTime=
+0;g.progress=0;g.paused=!0;g.began=!1;g.completed=!1;g.reversed="reverse"===a;g.remaining="alternate"===a&&1===c?2:c;b(0);for(a=g.children.length;a--;)g.children[a].reset()};g.tick=function(a){h=a;t||(t=h);k((l+h-t)*q.speed)};g.seek=function(a){k(d(a))};g.pause=function(){var a=v.indexOf(g);-1<a&&v.splice(a,1);g.paused=!0};g.play=function(){g.paused&&(g.paused=!1,t=0,l=d(g.currentTime),v.push(g),B||ia())};g.reverse=function(){g.reversed=!g.reversed;t=0;l=d(g.currentTime)};g.restart=function(){g.pause();
+g.reset();g.play()};g.finished=m;g.reset();g.autoplay&&g.play();return g}var ga={update:void 0,begin:void 0,run:void 0,complete:void 0,loop:1,direction:"normal",autoplay:!0,offset:0},S={duration:1E3,delay:0,easing:"easeOutElastic",elasticity:500,round:0},W="translateX translateY translateZ rotate rotateX rotateY rotateZ scale scaleX scaleY scaleZ skewX skewY perspective".split(" "),H,h={arr:function(a){return Array.isArray(a)},obj:function(a){return-1<Object.prototype.toString.call(a).indexOf("Object")},
+pth:function(a){return h.obj(a)&&a.hasOwnProperty("totalLength")},svg:function(a){return a instanceof SVGElement},dom:function(a){return a.nodeType||h.svg(a)},str:function(a){return"string"===typeof a},fnc:function(a){return"function"===typeof a},und:function(a){return"undefined"===typeof a},hex:function(a){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a)},rgb:function(a){return/^rgb/.test(a)},hsl:function(a){return/^hsl/.test(a)},col:function(a){return h.hex(a)||h.rgb(a)||h.hsl(a)}},A=function(){function a(a,
+d,b){return(((1-3*b+3*d)*a+(3*b-6*d))*a+3*d)*a}return function(c,d,b,f){if(0<=c&&1>=c&&0<=b&&1>=b){var e=new Float32Array(11);if(c!==d||b!==f)for(var k=0;11>k;++k)e[k]=a(.1*k,c,b);return function(k){if(c===d&&b===f)return k;if(0===k)return 0;if(1===k)return 1;for(var h=0,l=1;10!==l&&e[l]<=k;++l)h+=.1;--l;var l=h+(k-e[l])/(e[l+1]-e[l])*.1,n=3*(1-3*b+3*c)*l*l+2*(3*b-6*c)*l+3*c;if(.001<=n){for(h=0;4>h;++h){n=3*(1-3*b+3*c)*l*l+2*(3*b-6*c)*l+3*c;if(0===n)break;var m=a(l,c,b)-k,l=l-m/n}k=l}else if(0===
+n)k=l;else{var l=h,h=h+.1,g=0;do m=l+(h-l)/2,n=a(m,c,b)-k,0<n?h=m:l=m;while(1e-7<Math.abs(n)&&10>++g);k=m}return a(k,d,f)}}}}(),Q=function(){function a(a,b){return 0===a||1===a?a:-Math.pow(2,10*(a-1))*Math.sin(2*(a-1-b/(2*Math.PI)*Math.asin(1))*Math.PI/b)}var c="Quad Cubic Quart Quint Sine Expo Circ Back Elastic".split(" "),d={In:[[.55,.085,.68,.53],[.55,.055,.675,.19],[.895,.03,.685,.22],[.755,.05,.855,.06],[.47,0,.745,.715],[.95,.05,.795,.035],[.6,.04,.98,.335],[.6,-.28,.735,.045],a],Out:[[.25,
+.46,.45,.94],[.215,.61,.355,1],[.165,.84,.44,1],[.23,1,.32,1],[.39,.575,.565,1],[.19,1,.22,1],[.075,.82,.165,1],[.175,.885,.32,1.275],function(b,c){return 1-a(1-b,c)}],InOut:[[.455,.03,.515,.955],[.645,.045,.355,1],[.77,0,.175,1],[.86,0,.07,1],[.445,.05,.55,.95],[1,0,0,1],[.785,.135,.15,.86],[.68,-.55,.265,1.55],function(b,c){return.5>b?a(2*b,c)/2:1-a(-2*b+2,c)/2}]},b={linear:A(.25,.25,.75,.75)},f={},e;for(e in d)f.type=e,d[f.type].forEach(function(a){return function(d,f){b["ease"+a.type+c[f]]=h.fnc(d)?
+d:A.apply($jscomp$this,d)}}(f)),f={type:f.type};return b}(),ha={css:function(a,c,d){return a.style[c]=d},attribute:function(a,c,d){return a.setAttribute(c,d)},object:function(a,c,d){return a[c]=d},transform:function(a,c,d,b,f){b[f]||(b[f]=[]);b[f].push(c+"("+d+")")}},v=[],B=0,ia=function(){function a(){B=requestAnimationFrame(c)}function c(c){var b=v.length;if(b){for(var d=0;d<b;)v[d]&&v[d].tick(c),d++;a()}else cancelAnimationFrame(B),B=0}return a}();q.version="2.2.0";q.speed=1;q.running=v;q.remove=
+function(a){a=P(a);for(var c=v.length;c--;)for(var d=v[c],b=d.animations,f=b.length;f--;)u(a,b[f].animatable.target)&&(b.splice(f,1),b.length||d.pause())};q.getValue=K;q.path=function(a,c){var d=h.str(a)?e(a)[0]:a,b=c||100;return function(a){return{el:d,property:a,totalLength:N(d)*(b/100)}}};q.setDashoffset=function(a){var c=N(a);a.setAttribute("stroke-dasharray",c);return c};q.bezier=A;q.easings=Q;q.timeline=function(a){var c=q(a);c.pause();c.duration=0;c.add=function(d){c.children.forEach(function(a){a.began=
+!0;a.completed=!0});m(d).forEach(function(b){var d=z(b,D(S,a||{}));d.targets=d.targets||a.targets;b=c.duration;var e=d.offset;d.autoplay=!1;d.direction=c.direction;d.offset=h.und(e)?b:L(e,b);c.began=!0;c.completed=!0;c.seek(d.offset);d=q(d);d.began=!0;d.completed=!0;d.duration>b&&(c.duration=d.duration);c.children.push(d)});c.seek(0);c.reset();c.autoplay&&c.restart();return c};return c};q.random=function(a,c){return Math.floor(Math.random()*(c-a+1))+a};return q});
\ No newline at end of file
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/jquery-3.3.1.min.js" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/jquery-3.3.1.min.js"
new file mode 100644
index 0000000..4d9b3a2
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/jquery-3.3.1.min.js"
@@ -0,0 +1,2 @@
+/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e))&&(!(t=i(e))||"function"==typeof(n=f.call(t,"constructor")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",I="\\["+M+"*("+R+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+M+"*\\]",W=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+I+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),F=new RegExp("^"+M+"*,"+M+"*"),_=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B," ")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");l=e&&("object"==typeof e||"function"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,"ms-").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ee=/[A-Z]/g;function te(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ee,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,"hasDataAttrs"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=J.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ie=new RegExp("^(?:([+-])=|)("+re+")([a-z%]*)$","i"),oe=["Top","Right","Bottom","Left"],ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&w.contains(e.ownerDocument,e)&&"none"===w.css(e,"display")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},u=s(),l=n&&n[3]||(w.cssNumber[t]?"":"px"),c=(w.cssNumber[t]||"px"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?("none"===n&&(i[o]=J.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&ae(r)&&(i[o]=ce(r))):"none"!==n&&(i[o]="none",J.set(r,"display",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&N(this,"input"))return this.click(),!1},_default:function(e){return N(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/<script|<style|<link/i,je=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();"input"===n&&pe.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,"script"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||"")&&!J.access(l,"globalEval")&&w.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,""),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,"script")).length>0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp("^("+re+")(?!px)[a-z%]+$","i"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join("|"),"i");!function(){function t(){if(c){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i="1%"!==t.top,u=12===n(t.marginLeft),c.style.right="60%",s=36===n(t.right),o=36===n(t.width),c.style.position="absolute",a=36===c.offsetWidth||"absolute",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement("div"),c=r.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","Moz","ms"],Ye=r.createElement("div").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ze(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?("content"===n&&(u-=w.css(e,"padding"+oe[a],!0,i)),"margin"!==n&&(u-=w.css(e,"border"+oe[a]+"Width",!0,i))):(u+=w.css(e,"padding"+oe[a],!0,i),"padding"!==n?u+=w.css(e,"border"+oe[a]+"Width",!0,i):s+=w.css(e,"border"+oe[a]+"Width",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,"fxshow");n.queue||(null==(a=w._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,"display")),"none"===(c=w.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===w.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?"hidden"in y&&(g=y.hidden):y=J.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,"fxshow");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=["*"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,"finish"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=J.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each(["toggle","show","hide"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut("show"),slideUp:ut("hide"),slideToggle:ut("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement("input"),t=r.createElement("select").appendChild(r.createElement("option"));e.type="checkbox",h.checkOn=""!==e.value,h.optSelected=t.selected,(e=r.createElement("input")).value="t",e.type="radio",h.radioValue="t"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,"optgroup"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||w.expando+"_"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Qt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,"$1"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||w.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),"script"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument("")).createElement("base")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&w.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,"position"),f=w(e),p={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=w.css(e,"top"),u=w.css(e,"left"),(l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),"using"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),i.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-w.css(r,"marginTop",!0),left:t.left-i.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===w.css(e,"position"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/site.js" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/site.js"
new file mode 100644
index 0000000..ac49c18
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/site.js"
@@ -0,0 +1,4 @@
+锘�// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
+// for details on configuring this project to bundle and minify static web assets.
+
+// Write your JavaScript code.
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/swaggerdoc.js" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/swaggerdoc.js"
new file mode 100644
index 0000000..bbba38b
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/js/swaggerdoc.js"
@@ -0,0 +1,139 @@
+锘縱ar exten = "";//涓嬭浇鏂囦欢鍚庣紑鍚�
+var timerLoadExportBtn = null;
+$(document).delegate("#select", "change", function () {
+    debugger
+    setTimeout("LoadExportApiWordBtn()", 300);//鍔犺浇瀵煎嚭鎸夐挳
+    console.log("dom export ok");
+});
+
+$(document).ready(function () {
+    InitLoad();//鍒濆鍖栧鍑�
+    //loading璁剧疆
+    $.busyLoadSetup({
+        animation: "slide",
+        background: "rgba(255, 152, 0, 0.86)"
+    });
+});
+
+//鍒濆鍖�
+function InitLoad() {
+    setTimeout("LoadExportApiWordBtn()", 300);//鍔犺浇瀵煎嚭鎸夐挳
+}
+
+//鍔犺浇鑷畾涔夊鍑烘寜閽�
+function LoadExportApiWordBtn() {
+    $(".information-container").height(240);//鏂囨。浠嬬粛鍖哄煙楂樺害
+    $(".topbar").height(35);
+    var btnExport = "<div class='selectBox' style='position: absolute;margin: 0;padding: 0;margin-left: 1432px;top: 2.5px;'>" +
+        "<span><a href='javascript:void(0);'>瀵煎嚭绂荤嚎鏂囨。</a></span>" +
+        "<div class='drop'>" +
+        "<ul style='margin: 0;padding: 0;'>" +
+        //"<li>" +
+        //"<a href='javascript:void(0);' onclick='ExportApiWord(1)'>瀵煎嚭 Word</a>" +
+        //"</li>" +
+        //"<li>" +
+        //"<a href='javascript:void(0);' onclick='ExportApiWord(2)'>瀵煎嚭 PDF</a>" +
+        //"</li>" +
+        "<li>" +
+        "<a href='javascript:void(0);' onclick='ExportApiWord(3)'>瀵煎嚭 Html</a>" +
+        "</li >" +
+        //"<li>" +
+        //"<a href='javascript:void(0);' onclick='ExportApiWord(4)'>瀵煎嚭 Xml</a>" +
+        //"</li >" +
+        //"<li>" +
+        //"<a href='javascript:void(0);' onclick='ExportApiWord(5)'>瀵煎嚭 Svg</a>" +
+        //"</li >" +
+        "</ul >" +
+        "</div >" +
+        "</div >";
+    //information-container杩欎釜鍏冪礌鏄痵wagger鍚庢湡鍔ㄦ�佹覆鏌撳嚭鏉ョ殑锛屾墍鏈夎繖閲岃鍔犱釜寰幆鍒ゆ柇銆�
+    //绗竴娆¤繘鏉ュ鏋滄湁杩欎釜class鐩存帴鍔犺浇鎸夐挳閫�鍑�
+    if ($("*").hasClass("information-container")) {
+        $(".information-container").append(btnExport);
+        return;
+    }
+    //娌℃湁鍏冪礌绛夊緟鍏冪礌鍑虹幇鍦ㄥ姞杞芥寜閽�
+    timerLoadExportBtn = setInterval(function () {
+        if ($("*").hasClass("information-container")) {
+            $(".information-container").append(btnExport);
+            console.log("load ok");
+            window.clearInterval(timerLoadExportBtn);
+            return;
+        }
+        console.log("loading");
+    }, 788);
+}
+
+
+/**
+ * 寤惰繜鍑芥暟
+ * @param {any} delay
+ */
+function sleep(delay) {
+    var start = (new Date()).getTime();
+    while ((new Date()).getTime() - start < delay) {
+        continue;
+    }
+}
+
+/*
+ * 瀵煎嚭
+ */
+function ExportApiWord(type) {
+    switch (type) {
+        case 1:
+            exten = ".docx";
+            break;
+        case 2:
+            exten = ".pdf";
+            break;
+        case 3:
+            exten = ".html";
+            break;
+        case 4:
+            exten = ".xml";
+            break;
+        case 5:
+            exten = ".svg";
+            break;
+    }
+    var version = $("#select option:selected").val();
+    version = version.split('/')[2];
+    var url = '/api/Swagger/ExportWord?type=' + exten + "&version=" + version;
+    var xhr = new XMLHttpRequest();
+    xhr.open('GET', url, true);    // 涔熷彲浠ヤ娇鐢≒OST鏂瑰紡锛屾牴鎹帴鍙�
+    xhr.responseType = "blob";  // 杩斿洖绫诲瀷blob
+    // 瀹氫箟璇锋眰瀹屾垚鐨勫鐞嗗嚱鏁帮紝璇锋眰鍓嶄篃鍙互澧炲姞鍔犺浇妗�/绂佺敤涓嬭浇鎸夐挳閫昏緫
+    xhr.onload = function () {
+        // 璇锋眰瀹屾垚
+        if (this.status === 200) {
+            // 杩斿洖200
+            var blob = this.response;
+            var reader = new FileReader();
+            reader.readAsDataURL(blob); // 杞崲涓篵ase64锛屽彲浠ョ洿鎺ユ斁鍏琛ㄦ儏href
+            reader.onload = function(e) {
+                // 杞崲瀹屾垚锛屽垱寤轰竴涓猘鏍囩鐢ㄤ簬涓嬭浇
+                var a = document.createElement('a');
+                a.download = 'WIDESEAWCS API鏂囨。 ' + version + exten;
+                a.href = e.target.result;
+                $("body").append(a); // 淇firefox涓棤娉曡Е鍙慶lick
+                a.click();
+                $(a).remove();
+            }
+        } else {
+            alert(this.status+this.statusText);
+        }
+        //鍏抽棴load
+        $.busyLoadFull('hide',
+            {
+                animation: "fade"
+            });
+    };
+    // 鍙戦�乤jax璇锋眰
+    xhr.send();
+    //鎵撳紑loader閬僵
+    $.busyLoadFull('show', {
+        text: "LOADING ...",
+        animation: "fade"
+    });
+}
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/logo.jpg.jpg" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/logo.jpg.jpg"
new file mode 100644
index 0000000..d479f96
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/logo.jpg.jpg"
Binary files differ
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/logo/favicon-32x32.png" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/logo/favicon-32x32.png"
new file mode 100644
index 0000000..68062fe
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/logo/favicon-32x32.png"
Binary files differ
diff --git "a/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/swg-login.html" "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/swg-login.html"
new file mode 100644
index 0000000..16b0b3c
--- /dev/null
+++ "b/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/swg-login.html"
@@ -0,0 +1,140 @@
+锘�<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8" />
+    <title>鐧诲綍 - 鎺ュ彛鏂囨。</title>
+    <script src="js/jquery-3.3.1.min.js"></script>
+    <link type="text/css" href="css/style.css" rel="stylesheet" />
+    <script src="js/anime.min.js"></script>
+</head>
+<body>
+    <div class="page">
+        <div class="container">
+            <div class="left">
+                <div></div>
+
+                <div class="login">鎺ュ彛鏂囨。</div>
+                <div class="eula">娆㈣繋浣跨敤锛�</div>
+            </div>
+            <div class="right">
+                <svg viewBox="0 0 320 300">
+                    <defs>
+                        <linearGradient inkscape:collect="always"
+                                        id="linearGradient"
+                                        x1="13"
+                                        y1="193.49992"
+                                        x2="307"
+                                        y2="193.49992"
+                                        gradientUnits="userSpaceOnUse">
+                            <stop style="stop-color:#ff00ff;"
+                                  offset="0"
+                                  id="stop876" />
+                            <stop style="stop-color:#ff0000;"
+                                  offset="1"
+                                  id="stop878" />
+                        </linearGradient>
+                    </defs>
+                    <path d="m 40,120.00016 239.99984,-3.2e-4 c 0,0 24.99263,0.79932 25.00016,35.00016 0.008,34.20084 -25.00016,35 -25.00016,35 h -239.99984 c 0,-0.0205 -25,4.01348 -25,38.5 0,34.48652 25,38.5 25,38.5 h 215 c 0,0 20,-0.99604 20,-25 0,-24.00396 -20,-25 -20,-25 h -190 c 0,0 -20,1.71033 -20,25 0,24.00396 20,25 20,25 h 168.57143" />
+                </svg>
+                <div class="form">
+                    <label for="email">鐢ㄦ埛鍚�</label>
+                    <input type="email" id="email">
+                    <label for="password">瀵嗙爜</label>
+                    <input type="password" id="password">
+                    <input type="submit" id="submit" onclick="submit()" value="鐧� 褰�">
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <script>
+        var current = null;
+        document.querySelector('#email').addEventListener('focus', function (e) {
+            if (current) current.pause();
+            current = anime({
+                targets: 'path',
+                strokeDashoffset: {
+                    value: 0,
+                    duration: 700,
+                    easing: 'easeOutQuart'
+                },
+                strokeDasharray: {
+                    value: '240 1386',
+                    duration: 700,
+                    easing: 'easeOutQuart'
+                }
+            });
+        });
+        document.querySelector('#password').addEventListener('focus', function (e) {
+            if (current) current.pause();
+            current = anime({
+                targets: 'path',
+                strokeDashoffset: {
+                    value: -336,
+                    duration: 700,
+                    easing: 'easeOutQuart'
+                },
+                strokeDasharray: {
+                    value: '240 1386',
+                    duration: 700,
+                    easing: 'easeOutQuart'
+                }
+            });
+        });
+        document.querySelector('#submit').addEventListener('focus', function (e) {
+            if (current) current.pause();
+            current = anime({
+                targets: 'path',
+                strokeDashoffset: {
+                    value: -730,
+                    duration: 700,
+                    easing: 'easeOutQuart'
+                },
+                strokeDasharray: {
+                    value: '530 1386',
+                    duration: 700,
+                    easing: 'easeOutQuart'
+                }
+            });
+        });
+
+        function GetQueryString(name) {
+            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
+            var r = window.location.search.substr(1).match(reg);
+            if (r != null) return decodeURI(r[2]);
+            return null;
+        }
+
+        function submit() {
+            let postdata = {
+                "name": $("#email").val(),
+                "pwd": $("#password").val(),
+            };
+            if (!(postdata.name && postdata.pwd)) {
+                alert('鍙傛暟涓嶆纭�');
+                return
+            }
+            $.ajax({
+                url: "/api/User/swgLogin",
+                type: "POST",
+                contentType: "application/json; charset=utf-8",
+                data: JSON.stringify(postdata),
+                dataType: 'json',
+                success: function (data) {
+                    if (data?.result) {
+                        var returnUrl = GetQueryString("returnUrl");
+                        if (returnUrl != null && returnUrl.length > 0) {
+                            window.location.href = returnUrl;
+                        } else {
+                            window.location.href = "/index.html";
+                        }
+                    } else {
+                        alert('鍙傛暟涓嶆纭�');
+                    }
+                }
+            });
+        }
+    </script>
+
+</body>
+</html>
\ No newline at end of file

--
Gitblit v1.9.3