From e33eb65b2df036a0b4593dd961b734998c77738d Mon Sep 17 00:00:00 2001
From: wxw <Administrator@DESKTOP-5BIMHQ3>
Date: 星期五, 16 八月 2024 09:41:31 +0800
Subject: [PATCH] Merge branch 'master' of http://47.95.120.53:8083/r/~hewh/JC26WCS

---
 Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskOutput.cs               |  176 ++
 Admin.NET/WCS.Application/Const/ApplicationConst.cs                          |    8 
 Admin.NET/WCS.Application/Service/WcsAlarmLog/WcsAlarmLogService.cs          |   88 +
 Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs                  |  119 +
 Admin.NET/Admin.NET.Core/Service/Log/SysLogOpService.cs                      |   84 +
 Admin.NET/WCS.Application/Entity/WcsTask.cs                                  |  142 ++
 Admin.NET/WCS.Application/Service/WcsAlarmLog/Dto/WcsAlarmLogInput.cs        |  164 ++
 Admin.NET/WCS.Application/Service/WcsTaskMonitor/Dto/WcsTaskMonitorInput.cs  |  165 ++
 Admin.NET/WCS.Application/Service/WcsTaskMonitor/Dto/WcsTaskMonitorOutput.cs |  111 +
 Admin.NET/Admin.NET.Core/Service/Log/Dto/ExportLogDto.cs                     |   68 +
 Admin.NET/WCS.Application/Configuration/Enum.json                            |    2 
 Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskDto.cs                  |  174 ++
 Admin.NET/WCS.Application/Configuration/CodeGen.json                         |    4 
 Admin.NET/Admin.NET.Web.Entry/sensitive-words.txt                            |    4 
 Admin.NET/WCS.Application/Entity/WcsTaskMonitor.cs                           |   63 
 Admin.NET/WCS.Application/Service/Config/SysConfigService.cs                 |  110 +
 Web/src/views/wcs/wcsTask/component/editDialog.vue                           |  226 +++
 Admin.NET/WCS.Application/Entity/WcsAlarmLog.cs                              |   40 
 Admin.NET/Admin.NET.Core/Service/Log/Dto/LogVisOutput.cs                     |   35 
 Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskInput.cs                |  240 +++
 Admin.NET/WCS.Application/Service/Config/Dto/SystemSaveInput.cs              |   44 
 Admin.NET/WCS.Application/Service/WcsAlarmLog/Dto/WcsAlarmLogDto.cs          |   84 +
 Admin.NET/WCS.Application/Service/WcsAlarmLog/Dto/WcsAlarmLogOutput.cs       |   91 +
 Web/src/views/wcs/wcsTask/index.vue                                          |  291 ++++
 Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj                 |    4 
 Admin.NET/Admin.NET.Core/Service/Log/SysLogExService.cs                      |   86 +
 Admin.NET/WCS.Application/Service/WcsTaskMonitor/WcsTaskMonitorService.cs    |  117 +
 Web/src/api/wcs/wcsTask.ts                                                   |   50 
 Web/src/views/wcs/wcsAlarmLog/index.vue                                      |  171 ++
 Admin.NET/WCS.Application/Configuration/Database.json                        |    6 
 Web/tsconfig.json                                                            |   23 
 Admin.NET/Admin.NET.Web.Core/Startup.cs                                      |    2 
 Admin.NET/Admin.NET.Core/Service/Log/SysLogDiffService.cs                    |   58 
 Web/src/api/wcs/wcsTaskMonitor.ts                                            |   23 
 Admin.NET/WCS.Application/Service/WcsTaskMonitor/Dto/WcsTaskMonitorDto.cs    |  109 +
 Admin.NET/Admin.NET.Core/Service/Log/Dto/LogInput.cs                         |   73 +
 Admin.NET/WCS.Application/Entity/WcsAlarmInfo.cs                             |   58 
 Admin.NET/WCS.Application/Startup.cs                                         |    2 
 Web/src/api-services/apis/sys-config-api.ts                                  |  158 ++
 /dev/null                                                                    |   21 
 Web/src/views/system/infoSetting/system.vue                                  |  143 ++
 Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs                             |    2 
 Admin.NET/WCS.Application/Const/SystemConfigConst.cs                         |   44 
 Admin.NET/Admin.NET.Core/Service/Log/SysLogVisService.cs                     |   72 +
 Admin.NET/WCS.Application/Enum/TaskEnum.cs                                   |   88 +
 45 files changed, 3,796 insertions(+), 47 deletions(-)

diff --git a/Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj b/Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj
index 23352b0..33d54be 100644
--- a/Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj
+++ b/Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj
@@ -31,4 +31,8 @@
     <ProjectReference Include="..\Plugins\Admin.NET.Plugin.GoView\Admin.NET.Plugin.GoView.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="Entity\" />
+  </ItemGroup>
+
 </Project>
diff --git a/Admin.NET/Admin.NET.Core/Service/Log/Dto/ExportLogDto.cs b/Admin.NET/Admin.NET.Core/Service/Log/Dto/ExportLogDto.cs
new file mode 100644
index 0000000..bd99c03
--- /dev/null
+++ b/Admin.NET/Admin.NET.Core/Service/Log/Dto/ExportLogDto.cs
@@ -0,0 +1,68 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 瀵煎嚭鏃ュ織鏁版嵁
+/// </summary>
+[ExcelExporter(Name = "鏃ュ織鏁版嵁", TableStyle = OfficeOpenXml.Table.TableStyles.None, AutoFitAllColumn = true)]
+public class ExportLogDto
+{
+    /// <summary>
+    /// 璁板綍鍣ㄧ被鍒悕绉�
+    /// </summary>
+    [ExporterHeader(DisplayName = "璁板綍鍣ㄧ被鍒悕绉�", IsBold = true)]
+    public string LogName { get; set; }
+
+    /// <summary>
+    /// 鏃ュ織绾у埆
+    /// </summary>
+    [ExporterHeader(DisplayName = "鏃ュ織绾у埆", IsBold = true)]
+    public string LogLevel { get; set; }
+
+    /// <summary>
+    /// 浜嬩欢Id
+    /// </summary>
+    [ExporterHeader(DisplayName = "浜嬩欢Id", IsBold = true)]
+    public string EventId { get; set; }
+
+    /// <summary>
+    /// 鏃ュ織娑堟伅
+    /// </summary>
+    [ExporterHeader(DisplayName = "鏃ュ織娑堟伅", IsBold = true)]
+    public string Message { get; set; }
+
+    /// <summary>
+    /// 寮傚父瀵硅薄
+    /// </summary>
+    [ExporterHeader(DisplayName = "寮傚父瀵硅薄", IsBold = true)]
+    public string Exception { get; set; }
+
+    /// <summary>
+    /// 褰撳墠鐘舵�佸��
+    /// </summary>
+    [ExporterHeader(DisplayName = "褰撳墠鐘舵�佸��", IsBold = true)]
+    public string State { get; set; }
+
+    /// <summary>
+    /// 鏃ュ織璁板綍鏃堕棿
+    /// </summary>
+    [ExporterHeader(DisplayName = "鏃ュ織璁板綍鏃堕棿", IsBold = true)]
+    public DateTime LogDateTime { get; set; }
+
+    /// <summary>
+    /// 绾跨▼Id
+    /// </summary>
+    [ExporterHeader(DisplayName = "绾跨▼Id", IsBold = true)]
+    public int ThreadId { get; set; }
+
+    /// <summary>
+    /// 璇锋眰璺熻釜Id
+    /// </summary>
+    [ExporterHeader(DisplayName = "璇锋眰璺熻釜Id", IsBold = true)]
+    public string TraceId { get; set; }
+}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Core/Service/Log/Dto/LogInput.cs b/Admin.NET/Admin.NET.Core/Service/Log/Dto/LogInput.cs
new file mode 100644
index 0000000..c342f4b
--- /dev/null
+++ b/Admin.NET/Admin.NET.Core/Service/Log/Dto/LogInput.cs
@@ -0,0 +1,73 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace Admin.NET.Core.Service;
+
+public class PageOpLogInput : PageVisLogInput
+{
+    /// <summary>
+    /// 妯″潡鍚嶇О
+    /// </summary>
+    public string? ControllerName { get; set; }
+}
+
+public class PageExLogInput : PageOpLogInput
+{
+}
+
+public class PageVisLogInput : PageLogInput
+{
+    /// <summary>
+    /// 鏂规硶鍚嶇О
+    ///</summary>
+    public string? ActionName { get; set; }
+}
+
+public class PageLogInput : BasePageInput
+{
+    /// <summary>
+    /// 寮�濮嬫椂闂�
+    /// </summary>
+    public DateTime? StartTime { get; set; }
+
+    /// <summary>
+    /// 缁撴潫鏃堕棿
+    /// </summary>
+    public DateTime? EndTime { get; set; }
+
+    /// <summary>
+    /// 璐﹀彿
+    /// </summary>
+    public string? Account { get; set; }
+
+    /// <summary>
+    /// 鎿嶄綔鐢ㄦ椂
+    /// </summary>
+    public long? Elapsed { get; set; }
+
+    /// <summary>
+    /// 鐘舵��
+    /// </summary>
+    public string Status { get; set; }
+
+    /// <summary>
+    /// IP鍦板潃
+    /// </summary>
+    public string? RemoteIp { get; set; }
+}
+
+public class LogInput
+{
+    /// <summary>
+    /// 寮�濮嬫椂闂�
+    /// </summary>
+    public DateTime? StartTime { get; set; }
+
+    /// <summary>
+    /// 缁撴潫鏃堕棿
+    /// </summary>
+    public DateTime? EndTime { get; set; }
+}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Core/Service/Log/Dto/LogVisOutput.cs b/Admin.NET/Admin.NET.Core/Service/Log/Dto/LogVisOutput.cs
new file mode 100644
index 0000000..8e69aaf
--- /dev/null
+++ b/Admin.NET/Admin.NET.Core/Service/Log/Dto/LogVisOutput.cs
@@ -0,0 +1,35 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace Admin.NET.Core.Service;
+
+public class LogVisOutput
+{
+    /// <summary>
+    /// 鐧诲綍鍦扮偣
+    /// </summary>
+    public string Location { get; set; }
+
+    /// <summary>
+    /// 缁忓害
+    /// </summary>
+    public double? Longitude { get; set; }
+
+    /// <summary>
+    /// 缁村害
+    /// </summary>
+    public double? Latitude { get; set; }
+
+    /// <summary>
+    /// 鐪熷疄濮撳悕
+    /// </summary>
+    public string RealName { get; set; }
+
+    /// <summary>
+    /// 鏃ュ織鏃堕棿
+    /// </summary>
+    public DateTime? LogDateTime { get; set; }
+}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Core/Service/Log/SysLogDiffService.cs b/Admin.NET/Admin.NET.Core/Service/Log/SysLogDiffService.cs
new file mode 100644
index 0000000..8db3141
--- /dev/null
+++ b/Admin.NET/Admin.NET.Core/Service/Log/SysLogDiffService.cs
@@ -0,0 +1,58 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 绯荤粺宸紓鏃ュ織鏈嶅姟 馃З
+/// </summary>
+[ApiDescriptionSettings(Order = 330)]
+public class SysLogDiffService : IDynamicApiController, ITransient
+{
+    private readonly SqlSugarRepository<SysLogDiff> _sysLogDiffRep;
+
+    public SysLogDiffService(SqlSugarRepository<SysLogDiff> sysLogDiffRep)
+    {
+        _sysLogDiffRep = sysLogDiffRep;
+    }
+
+    /// <summary>
+    /// 鑾峰彇宸紓鏃ュ織鍒嗛〉鍒楄〃 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [SuppressMonitor]
+    [DisplayName("鑾峰彇宸紓鏃ュ織鍒嗛〉鍒楄〃")]
+    public async Task<SqlSugarPagedList<SysLogDiff>> Page(PageLogInput input)
+    {
+        return await _sysLogDiffRep.AsQueryable()
+            .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()), u => u.CreateTime >= input.StartTime)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.EndTime.ToString()), u => u.CreateTime <= input.EndTime)
+            .OrderBy(u => u.CreateTime, OrderByType.Desc)
+            .ToPagedListAsync(input.Page, input.PageSize);
+    }
+
+    /// <summary>
+    /// 鑾峰彇宸紓鏃ュ織璇︽儏 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [SuppressMonitor]
+    [DisplayName("鑾峰彇宸紓鏃ュ織璇︽儏")]
+    public async Task<SysLogDiff> GetDetail(long id)
+    {
+        return await _sysLogDiffRep.GetFirstAsync(u => u.Id == id);
+    }
+
+    /// <summary>
+    /// 娓呯┖宸紓鏃ュ織 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [ApiDescriptionSettings(Name = "Clear"), HttpPost]
+    [DisplayName("娓呯┖宸紓鏃ュ織")]
+    public void Clear()
+    {
+        _sysLogDiffRep.AsSugarClient().DbMaintenance.TruncateTable<SysLogDiff>();
+    }
+}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Core/Service/Log/SysLogExService.cs b/Admin.NET/Admin.NET.Core/Service/Log/SysLogExService.cs
new file mode 100644
index 0000000..2519a26
--- /dev/null
+++ b/Admin.NET/Admin.NET.Core/Service/Log/SysLogExService.cs
@@ -0,0 +1,86 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 绯荤粺寮傚父鏃ュ織鏈嶅姟 馃З
+/// </summary>
+[ApiDescriptionSettings(Order = 350)]
+public class SysLogExService : IDynamicApiController, ITransient
+{
+    private readonly SqlSugarRepository<SysLogEx> _sysLogExRep;
+
+    public SysLogExService(SqlSugarRepository<SysLogEx> sysLogExRep)
+    {
+        _sysLogExRep = sysLogExRep;
+    }
+
+    /// <summary>
+    /// 鑾峰彇寮傚父鏃ュ織鍒嗛〉鍒楄〃 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [SuppressMonitor]
+    [DisplayName("鑾峰彇寮傚父鏃ュ織鍒嗛〉鍒楄〃")]
+    public async Task<SqlSugarPagedList<SysLogEx>> Page(PageExLogInput input)
+    {
+        return await _sysLogExRep.AsQueryable()
+            .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()), u => u.CreateTime >= input.StartTime)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.EndTime.ToString()), u => u.CreateTime <= input.EndTime)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Account), u => u.Account == input.Account)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.ControllerName), u => u.ControllerName == input.ControllerName)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.ActionName), u => u.ActionName == input.ActionName)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.RemoteIp), u => u.RemoteIp == input.RemoteIp)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Elapsed.ToString()), u => u.Elapsed >= input.Elapsed)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Status) && input.Status == "200", u => u.Status == input.Status)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Status) && input.Status != "200", u => u.Status != input.Status)
+            //.OrderBy(u => u.CreateTime, OrderByType.Desc)
+            .IgnoreColumns(u => new { u.RequestParam, u.ReturnResult, u.Message })
+            .OrderBuilder(input)
+            .ToPagedListAsync(input.Page, input.PageSize);
+    }
+
+    /// <summary>
+    /// 鑾峰彇寮傚父鏃ュ織璇︽儏 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [SuppressMonitor]
+    [DisplayName("鑾峰彇寮傚父鏃ュ織璇︽儏")]
+    public async Task<SysLogEx> GetDetail(long id)
+    {
+        return await _sysLogExRep.GetFirstAsync(u => u.Id == id);
+    }
+
+    /// <summary>
+    /// 娓呯┖寮傚父鏃ュ織 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [ApiDescriptionSettings(Name = "Clear"), HttpPost]
+    [DisplayName("娓呯┖寮傚父鏃ュ織")]
+    public void Clear()
+    {
+        _sysLogExRep.AsSugarClient().DbMaintenance.TruncateTable<SysLogEx>();
+    }
+
+    /// <summary>
+    /// 瀵煎嚭寮傚父鏃ュ織 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [ApiDescriptionSettings(Name = "Export"), NonUnify]
+    [DisplayName("瀵煎嚭寮傚父鏃ュ織")]
+    public async Task<IActionResult> ExportLogEx(LogInput input)
+    {
+        var logExList = await _sysLogExRep.AsQueryable()
+            .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()) && !string.IsNullOrWhiteSpace(input.EndTime.ToString()),
+                    u => u.CreateTime >= input.StartTime && u.CreateTime <= input.EndTime)
+            .OrderBy(u => u.CreateTime, OrderByType.Desc)
+            .Select<ExportLogDto>().ToListAsync();
+
+        IExcelExporter excelExporter = new ExcelExporter();
+        var res = await excelExporter.ExportAsByteArray(logExList);
+        return new FileStreamResult(new MemoryStream(res), "application/octet-stream") { FileDownloadName = DateTime.Now.ToString("yyyyMMddHHmm") + "寮傚父鏃ュ織.xlsx" };
+    }
+}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Core/Service/Log/SysLogOpService.cs b/Admin.NET/Admin.NET.Core/Service/Log/SysLogOpService.cs
new file mode 100644
index 0000000..7d3d2d2
--- /dev/null
+++ b/Admin.NET/Admin.NET.Core/Service/Log/SysLogOpService.cs
@@ -0,0 +1,84 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 绯荤粺鎿嶄綔鏃ュ織鏈嶅姟 馃З
+/// </summary>
+[ApiDescriptionSettings(Order = 360)]
+public class SysLogOpService : IDynamicApiController, ITransient
+{
+    private readonly SqlSugarRepository<SysLogOp> _sysLogOpRep;
+
+    public SysLogOpService(SqlSugarRepository<SysLogOp> sysLogOpRep)
+    {
+        _sysLogOpRep = sysLogOpRep;
+    }
+
+    /// <summary>
+    /// 鑾峰彇鎿嶄綔鏃ュ織鍒嗛〉鍒楄〃 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [SuppressMonitor]
+    [DisplayName("鑾峰彇鎿嶄綔鏃ュ織鍒嗛〉鍒楄〃")]
+    public async Task<SqlSugarPagedList<SysLogOp>> Page(PageOpLogInput input)
+    {
+        return await _sysLogOpRep.AsQueryable()
+            .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()), u => u.CreateTime >= input.StartTime)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.EndTime.ToString()), u => u.CreateTime <= input.EndTime)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Account), u => u.Account == input.Account)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.RemoteIp), u => u.RemoteIp == input.RemoteIp)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.ControllerName), u => u.ControllerName == input.ControllerName)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.ActionName), u => u.ActionName == input.ActionName)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Elapsed.ToString()), u => u.Elapsed >= input.Elapsed)
+            //.OrderBy(u => u.CreateTime, OrderByType.Desc)
+            .IgnoreColumns(u => new { u.RequestParam, u.ReturnResult, u.Message })
+            .OrderBuilder(input)
+            .ToPagedListAsync(input.Page, input.PageSize);
+    }
+
+    /// <summary>
+    /// 鑾峰彇鎿嶄綔鏃ュ織璇︽儏 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [SuppressMonitor]
+    [DisplayName("鑾峰彇鎿嶄綔鏃ュ織璇︽儏")]
+    public async Task<SysLogOp> GetDetail(long id)
+    {
+        return await _sysLogOpRep.GetFirstAsync(u => u.Id == id);
+    }
+
+    /// <summary>
+    /// 娓呯┖鎿嶄綔鏃ュ織 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [ApiDescriptionSettings(Name = "Clear"), HttpPost]
+    [DisplayName("娓呯┖鎿嶄綔鏃ュ織")]
+    public void Clear()
+    {
+        _sysLogOpRep.AsSugarClient().DbMaintenance.TruncateTable<SysLogOp>();
+    }
+
+    /// <summary>
+    /// 瀵煎嚭鎿嶄綔鏃ュ織 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [ApiDescriptionSettings(Name = "Export"), NonUnify]
+    [DisplayName("瀵煎嚭鎿嶄綔鏃ュ織")]
+    public async Task<IActionResult> ExportLogOp(LogInput input)
+    {
+        var logOpList = await _sysLogOpRep.AsQueryable()
+            .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()) && !string.IsNullOrWhiteSpace(input.EndTime.ToString()),
+                    u => u.CreateTime >= input.StartTime && u.CreateTime <= input.EndTime)
+            .OrderBy(u => u.CreateTime, OrderByType.Desc)
+            .Select<ExportLogDto>().ToListAsync();
+
+        IExcelExporter excelExporter = new ExcelExporter();
+        var res = await excelExporter.ExportAsByteArray(logOpList);
+        return new FileStreamResult(new MemoryStream(res), "application/octet-stream") { FileDownloadName = DateTime.Now.ToString("yyyyMMddHHmm") + "鎿嶄綔鏃ュ織.xlsx" };
+    }
+}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Core/Service/Log/SysLogVisService.cs b/Admin.NET/Admin.NET.Core/Service/Log/SysLogVisService.cs
new file mode 100644
index 0000000..9c681fd
--- /dev/null
+++ b/Admin.NET/Admin.NET.Core/Service/Log/SysLogVisService.cs
@@ -0,0 +1,72 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 绯荤粺璁块棶鏃ュ織鏈嶅姟 馃З
+/// </summary>
+[ApiDescriptionSettings(Order = 340)]
+public class SysLogVisService : IDynamicApiController, ITransient
+{
+    private readonly SqlSugarRepository<SysLogVis> _sysLogVisRep;
+
+    public SysLogVisService(SqlSugarRepository<SysLogVis> sysLogVisRep)
+    {
+        _sysLogVisRep = sysLogVisRep;
+    }
+
+    /// <summary>
+    /// 鑾峰彇璁块棶鏃ュ織鍒嗛〉鍒楄〃 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [SuppressMonitor]
+    [DisplayName("鑾峰彇璁块棶鏃ュ織鍒嗛〉鍒楄〃")]
+    public async Task<SqlSugarPagedList<SysLogVis>> Page(PageVisLogInput input)
+    {
+        return await _sysLogVisRep.AsQueryable()
+            .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()), u => u.CreateTime >= input.StartTime)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.EndTime.ToString()), u => u.CreateTime <= input.EndTime)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Account), u => u.Account == input.Account)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.ActionName), u => u.ActionName == input.ActionName)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.RemoteIp), u => u.RemoteIp == input.RemoteIp)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Elapsed.ToString()), u => u.Elapsed >= input.Elapsed)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Status) && input.Status == "200", u => u.Status == input.Status)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Status) && input.Status != "200", u => u.Status != input.Status)
+            .OrderBy(u => u.CreateTime, OrderByType.Desc)
+            .ToPagedListAsync(input.Page, input.PageSize);
+    }
+
+    /// <summary>
+    /// 娓呯┖璁块棶鏃ュ織 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [ApiDescriptionSettings(Name = "Clear"), HttpPost]
+    [DisplayName("娓呯┖璁块棶鏃ュ織")]
+    public void Clear()
+    {
+        _sysLogVisRep.AsSugarClient().DbMaintenance.TruncateTable<SysLogVis>();
+    }
+
+    /// <summary>
+    /// 鑾峰彇璁块棶鏃ュ織鍒楄〃 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [DisplayName("鑾峰彇璁块棶鏃ュ織鍒楄〃")]
+    public async Task<List<LogVisOutput>> GetList()
+    {
+        return await _sysLogVisRep.AsQueryable()
+            .Where(u => u.Longitude > 0 && u.Longitude > 0)
+            .Select(u => new LogVisOutput
+            {
+                Location = u.Location,
+                Longitude = u.Longitude,
+                Latitude = u.Latitude,
+                RealName = u.RealName,
+                LogDateTime = u.LogDateTime
+            }).ToListAsync();
+    }
+}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Web.Core/Startup.cs b/Admin.NET/Admin.NET.Web.Core/Startup.cs
index 9c54d78..da9e5a0 100644
--- a/Admin.NET/Admin.NET.Web.Core/Startup.cs
+++ b/Admin.NET/Admin.NET.Web.Core/Startup.cs
@@ -284,7 +284,7 @@
         {
             foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups())
             {
-                groupInfo.Description += "<br/><u><b><font color='FF0000'> 馃懏涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�</font></b></u>";
+                //groupInfo.Description += "<br/><u><b><font color='FF0000'> 馃懏涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�</font></b></u>";
             }
         });
 
diff --git a/Admin.NET/Admin.NET.Web.Entry/sensitive-words.txt b/Admin.NET/Admin.NET.Web.Entry/sensitive-words.txt
index 901a560..e69de29 100644
--- a/Admin.NET/Admin.NET.Web.Entry/sensitive-words.txt
+++ b/Admin.NET/Admin.NET.Web.Entry/sensitive-words.txt
@@ -1,4 +0,0 @@
-瑁匵|鐗逛箞鐨剕SB|灞岀垎浜唡浣犲|椹嫆鎴堝|铔嬬柤|涔颁簡涓〃|濡堣泲|鏃ヤ簡鐙�
-鍚冪繑
-瑁�13
-灞佹皯
diff --git a/Admin.NET/WCS.Application/Configuration/CodeGen.json b/Admin.NET/WCS.Application/Configuration/CodeGen.json
index 5d5758f..a6b48fc 100644
--- a/Admin.NET/WCS.Application/Configuration/CodeGen.json
+++ b/Admin.NET/WCS.Application/Configuration/CodeGen.json
@@ -1,7 +1,7 @@
 {
   // 浠g爜鐢熸垚閰嶇疆椤�-绋嬪簭闆嗗悕绉伴泦鍚�
   "CodeGen": {
-    "EntityAssemblyNames": [ "Admin.NET.Core", "Admin.NET.Application" ],
+    "EntityAssemblyNames": [ "Admin.NET.Core", "WCS.Application" ],
     "BaseEntityNames": [ "EntityTenantId", "EntityTenant", "EntityTenantBaseData", "EntityBaseData", "EntityBase", "EntityBaseId" ],
     "EntityBaseColumn": {
       "EntityTenantId": [ "Id", "TenantId" ],
@@ -13,6 +13,6 @@
       //"BaseId": [ "Id" ]
     },
     "FrontRootPath": "Web", // 鍓嶇椤圭洰鏍圭洰褰�
-    "BackendApplicationNamespaces": [ "Admin.NET.Application", "Admin.NET.Application2" ] // 鍚庣鐢熸垚鍒扮殑椤圭洰
+    "BackendApplicationNamespaces": [ "WCS.Application" ] // 鍚庣鐢熸垚鍒扮殑椤圭洰
   }
 }
\ No newline at end of file
diff --git a/Admin.NET/WCS.Application/Configuration/Database.json b/Admin.NET/WCS.Application/Configuration/Database.json
index dd242ca..66f3e07 100644
--- a/Admin.NET/WCS.Application/Configuration/Database.json
+++ b/Admin.NET/WCS.Application/Configuration/Database.json
@@ -24,16 +24,16 @@
         //	}
         //],
         "DbSettings": {
-          "EnableInitDb": true, // 鍚敤搴撳垵濮嬪寲
+          "EnableInitDb": false, // 鍚敤搴撳垵濮嬪寲
           "EnableDiffLog": false, // 鍚敤搴撹〃宸紓鏃ュ織
           "EnableUnderLine": false // 鍚敤椹煎嘲杞笅鍒掔嚎
         },
         "TableSettings": {
-          "EnableInitTable": true, // 鍚敤琛ㄥ垵濮嬪寲
+          "EnableInitTable": false, // 鍚敤琛ㄥ垵濮嬪寲
           "EnableIncreTable": false // 鍚敤琛ㄥ閲忔洿鏂�-鐗规�IncreTable]
         },
         "SeedSettings": {
-          "EnableInitSeed": true, // 鍚敤绉嶅瓙鍒濆鍖�
+          "EnableInitSeed": false, // 鍚敤绉嶅瓙鍒濆鍖�
           "EnableIncreSeed": false // 鍚敤绉嶅瓙澧為噺鏇存柊-鐗规�IncreSeed]
         }
       }
diff --git a/Admin.NET/WCS.Application/Configuration/Enum.json b/Admin.NET/WCS.Application/Configuration/Enum.json
index a010558..b7daa5e 100644
--- a/Admin.NET/WCS.Application/Configuration/Enum.json
+++ b/Admin.NET/WCS.Application/Configuration/Enum.json
@@ -1,6 +1,6 @@
 {
   // 鏋氫妇瀹炰綋鎵�鍦ㄧ▼搴忛泦鍚嶇О闆嗗悎
   "Enum": {
-    "EntityAssemblyNames": [ "Admin." ]
+    "EntityAssemblyNames": [ "Admin.", "WCS." ]
   }
 }
\ No newline at end of file
diff --git a/Admin.NET/WCS.Application/Const/ApplicationConst.cs b/Admin.NET/WCS.Application/Const/ApplicationConst.cs
index 7451100..5dd2b0e 100644
--- a/Admin.NET/WCS.Application/Const/ApplicationConst.cs
+++ b/Admin.NET/WCS.Application/Const/ApplicationConst.cs
@@ -1,5 +1,5 @@
-锘縩amespace Admin.NET.Application;
-
+锘�
+namespace WCS.Application;
 /// <summary>
 /// 涓氬姟搴旂敤鐩稿叧甯搁噺
 /// </summary>
@@ -8,5 +8,5 @@
     /// <summary>
     /// API鍒嗙粍鍚嶇О
     /// </summary>
-    public const string GroupName = "xxx涓氬姟搴旂敤";
-}
\ No newline at end of file
+    public const string GroupName = "WCS";
+}
diff --git a/Admin.NET/WCS.Application/Const/SystemConfigConst.cs b/Admin.NET/WCS.Application/Const/SystemConfigConst.cs
new file mode 100644
index 0000000..75a3a9e
--- /dev/null
+++ b/Admin.NET/WCS.Application/Const/SystemConfigConst.cs
@@ -0,0 +1,44 @@
+锘�
+namespace WCS.Application;
+
+/// <summary>
+/// 涓婁笅娓哥郴缁熼厤缃父閲�
+/// </summary>
+public class SystemConfigConst
+{
+    /// <summary>
+    /// 鏈嶅姟鍦板潃
+    /// </summary>
+    public const string ServiceAddress = "system_service_address";
+    /// <summary>
+    /// 鏈嶅姟绔彛
+    /// </summary>
+    public const string ServicePort = "system_service_port";
+
+    /// <summary>
+    /// WMS鍦板潃
+    /// </summary>
+    public const string WMSAddress = "system_wms_address";
+    /// <summary>
+    /// WMS绔彛
+    /// </summary>
+    public const string WMSPort = "system_wms_port";
+
+    /// <summary>
+    /// 璧嬬爜绯荤粺鍦板潃
+    /// </summary>
+    public const string CodingAddress = "system_coding_address";
+    /// <summary>
+    /// 璧嬬爜绯荤粺绔彛
+    /// </summary>
+    public const string CodingPort = "system_coding_port";
+
+    /// <summary>
+    /// RCS鍦板潃
+    /// </summary>
+    public const string RCSAddress = "system_rcs_address";
+    /// <summary>
+    /// RCS绔彛
+    /// </summary>
+    public const string RCSPort = "system_rcs_port";
+}
diff --git a/Admin.NET/WCS.Application/Entity/WcsAlarmInfo.cs b/Admin.NET/WCS.Application/Entity/WcsAlarmInfo.cs
new file mode 100644
index 0000000..5b6c957
--- /dev/null
+++ b/Admin.NET/WCS.Application/Entity/WcsAlarmInfo.cs
@@ -0,0 +1,58 @@
+锘�
+namespace WCS.Application;
+
+/// <summary>
+/// 鎶ヨ淇℃伅琛�
+/// </summary>
+[SugarTable("WCSAlarmInfo","鎶ヨ淇℃伅琛�")]
+public class WcsAlarmInfo  : EntityBaseData
+{
+    /// <summary>
+    /// PLCIP鍦板潃
+    /// </summary>
+    [SugarColumn(ColumnName = "PlcIP", ColumnDescription = "PLCIP鍦板潃", Length = 20)]
+    public string? PlcIP { get; set; }
+    
+    /// <summary>
+    /// 鎶ヨ缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "AlarmCode", ColumnDescription = "鎶ヨ缂栧彿", Length = 20)]
+    public string? AlarmCode { get; set; }
+    
+    /// <summary>
+    /// 鎶ヨ鎻忚堪
+    /// </summary>
+    [SugarColumn(ColumnName = "AlarmName", ColumnDescription = "鎶ヨ鎻忚堪", Length = 100)]
+    public string? AlarmName { get; set; }
+    
+    /// <summary>
+    /// 鏄剧ず灞廼p鍦板潃
+    /// </summary>
+    [SugarColumn(ColumnName = "LedIP", ColumnDescription = "鏄剧ず灞廼p鍦板潃", Length = 20)]
+    public string? LedIP { get; set; }
+
+    /// <summary>
+    /// 鐘舵��
+    /// </summary>
+    [SugarColumn(ColumnName = "Status", ColumnDescription = "鐘舵��")]
+    public YesNoEnum? Status { get; set; } = YesNoEnum.N;
+    
+    /// <summary>
+    /// 璁惧绫诲瀷
+    /// </summary>
+    [SugarColumn(ColumnName = "Type", ColumnDescription = "璁惧绫诲瀷", Length = 20)]
+    public string? Type { get; set; }
+    
+    /// <summary>
+    /// 鎶ヨ鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "AlarmTime", ColumnDescription = "鎶ヨ鏃ユ湡")]
+    public DateTime? AlarmTime { get; set; }
+    
+    /// <summary>
+    /// LED鐘舵��
+    /// </summary>
+    [SugarColumn(ColumnName = "LedStatus", ColumnDescription = "LED鐘舵��")]
+    public int? LedStatus { get; set; }
+    
+}
diff --git a/Admin.NET/WCS.Application/Entity/WcsAlarmLog.cs b/Admin.NET/WCS.Application/Entity/WcsAlarmLog.cs
new file mode 100644
index 0000000..7c632ee
--- /dev/null
+++ b/Admin.NET/WCS.Application/Entity/WcsAlarmLog.cs
@@ -0,0 +1,40 @@
+锘�
+namespace WCS.Application;
+
+/// <summary>
+/// 鎶ヨ鏃ュ織琛�
+/// </summary>
+[SugarTable("WCSAlarmLog", "鎶ヨ鏃ュ織琛�")]
+public class WcsAlarmLog : EntityBaseData
+{
+    /// <summary>
+    /// PLCIP鍦板潃
+    /// </summary>
+    [SugarColumn(ColumnName = "PlcIP", ColumnDescription = "PLCIP鍦板潃", Length = 20)]
+    public string? PlcIP { get; set; }
+
+    /// <summary>
+    /// 鎶ヨ缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "AlarmCode", ColumnDescription = "鎶ヨ缂栧彿", Length = 20)]
+    public string? AlarmCode { get; set; }
+
+    /// <summary>
+    /// 鎶ヨ鎻忚堪
+    /// </summary>
+    [SugarColumn(ColumnName = "AlarmName", ColumnDescription = "鎶ヨ鎻忚堪", Length = 100)]
+    public string? AlarmName { get; set; }
+
+    /// <summary>
+    /// 璁惧绫诲瀷
+    /// </summary>
+    [SugarColumn(ColumnName = "Type", ColumnDescription = "璁惧绫诲瀷", Length = 20)]
+    public string? Type { get; set; }
+
+    /// <summary>
+    /// 鎶ヨ鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "AlarmTime", ColumnDescription = "鎶ヨ鏃ユ湡")]
+    public DateTime? AlarmTime { get; set; }
+
+}
diff --git a/Admin.NET/WCS.Application/Entity/WcsTask.cs b/Admin.NET/WCS.Application/Entity/WcsTask.cs
new file mode 100644
index 0000000..8119603
--- /dev/null
+++ b/Admin.NET/WCS.Application/Entity/WcsTask.cs
@@ -0,0 +1,142 @@
+锘縰sing Admin.NET.Core;
+namespace WCS.Application;
+
+/// <summary>
+/// 浠诲姟琛�
+/// </summary>
+[SugarTable("WCSTask","浠诲姟琛�")]
+public class WcsTask  : EntityBaseData
+{
+    /// <summary>
+    /// 浠诲姟鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "TaskNo", ColumnDescription = "浠诲姟鍙�", Length = 20)]
+    public string? TaskNo { get; set; }
+    
+    /// <summary>
+    /// 浠诲姟绫诲瀷
+    /// </summary>
+    [SugarColumn(ColumnName = "TaskType", ColumnDescription = "浠诲姟绫诲瀷")]
+    public TaskTypeEnum? TaskType { get; set; }
+    
+    /// <summary>
+    /// 鐘舵��
+    /// </summary>
+    [SugarColumn(ColumnName = "Status", ColumnDescription = "鐘舵��")]
+    public TaskStatusEnum? Status { get; set; }
+    
+    /// <summary>
+    /// 鏄惁鍥為鎴愬姛
+    /// </summary>
+    [SugarColumn(ColumnName = "IsSuccess", ColumnDescription = "鏄惁鍥為鎴愬姛")]
+    public TaskSuccessEnum? IsSuccess { get; set; }
+    
+    /// <summary>
+    /// 寮傚父淇℃伅
+    /// </summary>
+    [SugarColumn(ColumnName = "Information", ColumnDescription = "寮傚父淇℃伅", Length = 32)]
+    public string? Information { get; set; }
+    
+    /// <summary>
+    /// 鏉ユ簮
+    /// </summary>
+    [SugarColumn(ColumnName = "Origin", ColumnDescription = "鏉ユ簮", Length = 20)]
+    public string? Origin { get; set; }
+    
+    /// <summary>
+    /// 璧峰浣嶇疆
+    /// </summary>
+    [SugarColumn(ColumnName = "StartLocate", ColumnDescription = "璧峰浣嶇疆", Length = 20)]
+    public string? StartLocate { get; set; }
+    
+    /// <summary>
+    /// 璧峰宸烽亾
+    /// </summary>
+    [SugarColumn(ColumnName = "StartRoadway", ColumnDescription = "璧峰宸烽亾", Length = 20)]
+    public string? StartRoadway { get; set; }
+    
+    /// <summary>
+    /// 缁撴潫浣嶇疆
+    /// </summary>
+    [SugarColumn(ColumnName = "EndLocate", ColumnDescription = "缁撴潫浣嶇疆", Length = 20)]
+    public string? EndLocate { get; set; }
+    
+    /// <summary>
+    /// 鐩爣宸烽亾
+    /// </summary>
+    [SugarColumn(ColumnName = "EndRoadway", ColumnDescription = "鐩爣宸烽亾", Length = 20)]
+    public string? EndRoadway { get; set; }
+    
+    /// <summary>
+    /// 鎵樼洏鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "PalletNo", ColumnDescription = "鎵樼洏鍙�", Length = 20)]
+    public string? PalletNo { get; set; }
+    
+    /// <summary>
+    /// 鎵规鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "LotNo", ColumnDescription = "鎵规鍙�", Length = 20)]
+    public string? LotNo { get; set; }
+    
+    /// <summary>
+    /// 渚涜揣鎵规
+    /// </summary>
+    [SugarColumn(ColumnName = "SupplierLot", ColumnDescription = "渚涜揣鎵规", Length = 20)]
+    public string? SupplierLot { get; set; }
+    
+    /// <summary>
+    /// 鐗╂枡缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "SkuNo", ColumnDescription = "鐗╂枡缂栫爜", Length = 20)]
+    public string? SkuNo { get; set; }
+    
+    /// <summary>
+    /// 鐗╂枡鍚嶇О
+    /// </summary>
+    [SugarColumn(ColumnName = "SkuName", ColumnDescription = "鐗╂枡鍚嶇О", Length = 20)]
+    public string? SkuName { get; set; }
+    
+    /// <summary>
+    /// 鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "Qty", ColumnDescription = "鏁伴噺")]
+    public int? Qty { get; set; }
+    
+    /// <summary>
+    /// 鎷嗗灈鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "CompleteQty", ColumnDescription = "鎷嗗灈鏁伴噺")]
+    public int? CompleteQty { get; set; }
+    
+    /// <summary>
+    /// 鎷h揣鏂瑰紡
+    /// </summary>
+    [SugarColumn(ColumnName = "UnstackingMode", ColumnDescription = "鎷h揣鏂瑰紡", Length = 10)]
+    public string? UnstackingMode { get; set; }
+    
+    /// <summary>
+    /// 鍙栨秷鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "CancelDate", ColumnDescription = "鍙栨秷鏃堕棿")]
+    public DateTime? CancelDate { get; set; }
+    
+    /// <summary>
+    /// 瀹屾垚鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "FinishDate", ColumnDescription = "瀹屾垚鏃堕棿")]
+    public DateTime? FinishDate { get; set; }
+    
+    /// <summary>
+    /// 鏈�鍚庡啓鍏ユ祦绋嬫帶鍒跺瓧鍊�
+    /// </summary>
+    [SugarColumn(ColumnName = "WcsPosValue", ColumnDescription = "鏈�鍚庡啓鍏ユ祦绋嬫帶鍒跺瓧鍊�", Length = 20)]
+    public string? WcsPosValue { get; set; }
+    
+    /// <summary>
+    /// 浼樺厛绾�
+    /// </summary>
+    [SugarColumn(ColumnName = "Levels", ColumnDescription = "浼樺厛绾�")]
+    public int? Levels { get; set; }
+    
+}
diff --git a/Admin.NET/WCS.Application/Entity/WcsTaskMonitor.cs b/Admin.NET/WCS.Application/Entity/WcsTaskMonitor.cs
new file mode 100644
index 0000000..74ee893
--- /dev/null
+++ b/Admin.NET/WCS.Application/Entity/WcsTaskMonitor.cs
@@ -0,0 +1,63 @@
+锘縩amespace WCS.Application;
+
+/// <summary>
+/// 浠诲姟鏄庣粏\鐩戞帶琛�
+/// </summary>
+[SugarTable("WCSTaskMonitor","浠诲姟鏄庣粏鐩戞帶琛�")]
+public class WcsTaskMonitor  : EntityBaseData
+{
+    /// <summary>
+    /// 浠诲姟鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "TaskNo", ColumnDescription = "浠诲姟鍙�", Length = 20)]
+    public string? TaskNo { get; set; }
+    
+    /// <summary>
+    /// 浜や簰宸ヤ綅鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "PlcId", ColumnDescription = "浜や簰宸ヤ綅鍙�")]
+    public long? PlcId { get; set; }
+    
+    /// <summary>
+    /// 浜や簰浣嶇疆
+    /// </summary>
+    [SugarColumn(ColumnName = "PlcName", ColumnDescription = "浜や簰浣嶇疆", Length = 32)]
+    public string? PlcName { get; set; }
+    
+    /// <summary>
+    /// 璧峰浣嶇疆
+    /// </summary>
+    [SugarColumn(ColumnName = "StartLocat", ColumnDescription = "璧峰浣嶇疆", Length = 20)]
+    public string? StartLocat { get; set; }
+    
+    /// <summary>
+    /// 鐩爣浣嶇疆
+    /// </summary>
+    [SugarColumn(ColumnName = "EndLocat", ColumnDescription = "鐩爣浣嶇疆", Length = 32)]
+    public string? EndLocat { get; set; }
+    
+    /// <summary>
+    /// 浜や簰淇℃伅
+    /// </summary>
+    [SugarColumn(ColumnName = "InteractiveMsg", ColumnDescription = "浜や簰淇℃伅", Length = 100)]
+    public string? InteractiveMsg { get; set; }
+    
+    /// <summary>
+    /// 寮傚父璁板綍
+    /// </summary>
+    [SugarColumn(ColumnName = "ErrorMsg", ColumnDescription = "寮傚父璁板綍", Length = 100)]
+    public string? ErrorMsg { get; set; }
+    
+    /// <summary>
+    /// 鎵樼洏鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "PalletNo", ColumnDescription = "鎵樼洏鍙�", Length = 20)]
+    public string? PalletNo { get; set; }
+    
+    /// <summary>
+    /// 鐘舵��
+    /// </summary>
+    [SugarColumn(ColumnName = "Status", ColumnDescription = "鐘舵��")]
+    public TaskStatusEnum? Status { get; set; }
+    
+}
diff --git a/Admin.NET/WCS.Application/Enum/TaskEnum.cs b/Admin.NET/WCS.Application/Enum/TaskEnum.cs
new file mode 100644
index 0000000..d35bae5
--- /dev/null
+++ b/Admin.NET/WCS.Application/Enum/TaskEnum.cs
@@ -0,0 +1,88 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.Application;
+
+/// <summary>
+/// 浠诲姟绫诲瀷鏋氫妇
+/// </summary>
+[Description("浠诲姟绫诲瀷鏋氫妇")]
+public enum TaskTypeEnum
+{
+    /// <summary>
+    /// 鍏ュ簱浠诲姟
+    /// </summary>
+    [Description("鍏ュ簱浠诲姟")]
+    In = 0,
+
+    /// <summary>
+    /// 鍑哄簱浠诲姟
+    /// </summary>
+    [Description("鍑哄簱浠诲姟")]
+    Out = 1,
+
+    /// <summary>
+    /// 绉诲簱浠诲姟
+    /// </summary>
+    [Description("绉诲簱浠诲姟")]
+    Move = 2,
+
+    /// <summary>
+    /// PLC鐢宠鍏ュ簱
+    /// </summary>
+    [Description("PLC鐢宠鍏ュ簱")]
+    PLC = 3,
+}
+/// <summary>
+/// 浠诲姟鐘舵�佹灇涓�
+/// </summary>
+[Description("浠诲姟鐘舵�佹灇涓�")]
+public enum TaskStatusEnum
+{
+    /// <summary>
+    /// 绛夊緟鎵ц
+    /// </summary>
+    [Description("绛夊緟鎵ц")]
+    Wait = 0,
+    /// <summary>
+    /// 姝e湪鎵ц
+    /// </summary>
+    [Description("姝e湪鎵ц")]
+    Doing = 1,
+    /// <summary>
+    /// 鎵ц瀹屾垚
+    /// </summary>
+    [Description("鎵ц瀹屾垚")]
+    Complete = 2,
+    /// <summary>
+    /// 寮傚父缁撴潫
+    /// </summary>
+    [Description("寮傚父缁撴潫")]
+    Exception = 3,
+    /// <summary>
+    /// 浠诲姟鍙栨秷
+    /// </summary>
+    [Description("浠诲姟鍙栨秷")]
+    Cancell = 4,
+}
+
+/// <summary>
+/// 鏄惁鎴愬姛鏋氫妇
+/// </summary>
+[Description("鏄惁鎴愬姛鏋氫妇")]
+public enum TaskSuccessEnum
+{
+    /// <summary>
+    /// 鍥炰紶鎴愬姛
+    /// </summary>
+    [Description("鍥炰紶鎴愬姛")]
+    Success = 0,
+    /// <summary>
+    /// 鍥炰紶澶辫触
+    /// </summary>
+    [Description("鍥炰紶澶辫触")]
+    Fail = 1
+}
\ No newline at end of file
diff --git a/Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs b/Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs
index b5d2f6b..0224c16 100644
--- a/Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs
+++ b/Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs
@@ -1,4 +1,4 @@
-锘縩amespace Admin.NET.Application;
+锘縩amespace WCS.Application;
 
 ///// <summary>
 ///// 绀轰緥寮�鏀炬帴鍙�
diff --git a/Admin.NET/WCS.Application/Service/Config/Dto/SystemSaveInput.cs b/Admin.NET/WCS.Application/Service/Config/Dto/SystemSaveInput.cs
new file mode 100644
index 0000000..68a0dc5
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/Config/Dto/SystemSaveInput.cs
@@ -0,0 +1,44 @@
+锘�
+namespace WCS.Application;
+
+/// <summary>
+/// 绯荤粺淇℃伅淇濆瓨杈撳叆鍙傛暟
+/// </summary>
+public class SystemSaveInput
+{
+    /// <summary>
+    /// 鏈嶅姟鍦板潃
+    /// </summary>
+    public string ServiceAddress { get; set; }
+    /// <summary>
+    /// 鏈嶅姟绔彛
+    /// </summary>
+    public string ServicePort { get; set; }
+
+    /// <summary>
+    /// WMS鍦板潃
+    /// </summary>
+    public string WMSAddress { get; set; }
+    /// <summary>
+    /// WMS绔彛
+    /// </summary>
+    public string WMSPort { get; set; }
+
+    /// <summary>
+    /// 璧嬬爜绯荤粺
+    /// </summary>
+    public string CodingAddress { get; set; }
+    /// <summary>
+    /// 璧嬬爜绔彛
+    /// </summary>
+    public string CodingPort { get; set; }
+
+    /// <summary>
+    /// RCS鍦板潃
+    /// </summary>
+    public string RCSAddress { get; set; }
+    /// <summary>
+    /// RCS绔彛
+    /// </summary>
+    public string RCSPort { get; set; }
+}
\ No newline at end of file
diff --git a/Admin.NET/WCS.Application/Service/Config/SysConfigService.cs b/Admin.NET/WCS.Application/Service/Config/SysConfigService.cs
new file mode 100644
index 0000000..2c691a9
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/Config/SysConfigService.cs
@@ -0,0 +1,110 @@
+锘�
+using Admin.NET.Core.Service;
+using Furion.DatabaseAccessor;
+using System.Text.RegularExpressions;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.TCBGetPressureTestReportResponse.Types;
+
+namespace WCS.Application;
+/// <summary>
+/// 绯荤粺鍙傛暟閰嶇疆鏈嶅姟 馃З
+/// </summary>
+[ApiDescriptionSettings(Order = 440)]
+public class SysConfigService : IDynamicApiController, ITransient
+{
+    private readonly SysCacheService _sysCacheService;
+    private readonly SqlSugarRepository<SysConfig> _sysConfigRep;
+
+    public SysConfigService(SysCacheService sysCacheService,
+        SqlSugarRepository<SysConfig> sysConfigRep)
+    {
+        _sysCacheService = sysCacheService;
+        _sysConfigRep = sysConfigRep;
+    }
+
+    /// <summary>
+    /// 鑾峰彇涓婁笅娓哥郴缁熶俊鎭� 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [SuppressMonitor]
+    //[AllowAnonymous]
+    [DisplayName("鑾峰彇涓婁笅娓哥郴缁熶俊鎭�")]
+    public async Task<dynamic> GetSystemInfo()
+    {
+        var serviceAddress = await GetConfigValue<string>(SystemConfigConst.ServiceAddress);
+        var servicePort = await GetConfigValue<string>(SystemConfigConst.ServicePort);
+        var wmsAddress = await GetConfigValue<string>(SystemConfigConst.WMSAddress);
+        var wmsPort = await GetConfigValue<string>(SystemConfigConst.WMSPort);
+        var codingAddress = await GetConfigValue<string>(SystemConfigConst.CodingAddress);
+        var codingPort = await GetConfigValue<string>(SystemConfigConst.CodingPort);
+        var rcsAddress = await GetConfigValue<string>(SystemConfigConst.RCSAddress);
+        var rcsPort = await GetConfigValue<string>(SystemConfigConst.RCSPort);
+
+        return new
+        {
+            ServiceAddress = serviceAddress,
+            ServicePort = servicePort,
+            WMSAddress = wmsAddress,
+            WMSPort = wmsPort,
+            CodingAddress = codingAddress,
+            CodingPort = codingPort,
+            RCSAddress = rcsAddress,
+            RCSPort = rcsPort,
+        };
+    }
+    /// <summary>
+    /// 淇濆瓨涓婁笅娓哥郴缁熶俊鎭� 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [UnitOfWork]
+    [DisplayName("淇濆瓨涓婁笅娓哥郴缁熶俊鎭�")]
+    public async Task SaveSystemInfo(SystemSaveInput input)
+    {
+        await UpdateConfigValue(SystemConfigConst.ServiceAddress, input.ServiceAddress);
+        await UpdateConfigValue(SystemConfigConst.ServicePort, input.ServicePort);
+        await UpdateConfigValue(SystemConfigConst.WMSAddress, input.WMSAddress);
+        await UpdateConfigValue(SystemConfigConst.WMSPort, input.WMSPort);
+        await UpdateConfigValue(SystemConfigConst.CodingAddress, input.CodingAddress);
+        await UpdateConfigValue(SystemConfigConst.CodingPort, input.CodingPort);
+        await UpdateConfigValue(SystemConfigConst.RCSAddress, input.RCSAddress);
+        await UpdateConfigValue(SystemConfigConst.RCSPort, input.RCSPort);
+    }
+
+    /// <summary>
+    /// 鑾峰彇鍙傛暟閰嶇疆鍊�
+    /// </summary>
+    /// <param name="code"></param>
+    /// <returns></returns>
+    [NonAction]
+    public async Task<T> GetConfigValue<T>(string code)
+    {
+        if (string.IsNullOrWhiteSpace(code)) return default;
+
+        var value = _sysCacheService.Get<string>($"{CacheConst.KeyConfig}{code}");
+        if (string.IsNullOrEmpty(value))
+        {
+            var config = await _sysConfigRep.CopyNew().GetFirstAsync(u => u.Code == code);
+            value = config != null ? config.Value : default;
+            _sysCacheService.Set($"{CacheConst.KeyConfig}{code}", value);
+        }
+        if (string.IsNullOrWhiteSpace(value)) return default;
+        return (T)Convert.ChangeType(value, typeof(T));
+    }
+
+    /// <summary>
+    /// 鏇存柊鍙傛暟閰嶇疆鍊�
+    /// </summary>
+    /// <param name="code"></param>
+    /// <param name="value"></param>
+    /// <returns></returns>
+    [NonAction]
+    public async Task UpdateConfigValue(string code, string value)
+    {
+        var config = await _sysConfigRep.GetFirstAsync(u => u.Code == code);
+        if (config == null) return;
+
+        config.Value = value;
+        await _sysConfigRep.AsUpdateable(config).ExecuteCommandAsync();
+
+        _sysCacheService.Remove($"{CacheConst.KeyConfig}{config.Code}");
+    }
+}
diff --git a/Admin.NET/WCS.Application/Service/WcsAlarmLog/Dto/WcsAlarmLogDto.cs b/Admin.NET/WCS.Application/Service/WcsAlarmLog/Dto/WcsAlarmLogDto.cs
new file mode 100644
index 0000000..8794e40
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsAlarmLog/Dto/WcsAlarmLogDto.cs
@@ -0,0 +1,84 @@
+锘�
+namespace WCS.Application;
+
+    /// <summary>
+    /// 鎶ヨ鏃ュ織杈撳嚭鍙傛暟
+    /// </summary>
+    public class WcsAlarmLogDto
+    {
+        /// <summary>
+        /// 涓婚敭Id
+        /// </summary>
+        public long Id { get; set; }
+        
+        /// <summary>
+        /// PLCIP鍦板潃
+        /// </summary>
+        public string? PlcIP { get; set; }
+        
+        /// <summary>
+        /// 鎶ヨ缂栧彿
+        /// </summary>
+        public string? AlarmCode { get; set; }
+        
+        /// <summary>
+        /// 鎶ヨ鎻忚堪
+        /// </summary>
+        public string? AlarmName { get; set; }
+        
+        /// <summary>
+        /// 璁惧绫诲瀷
+        /// </summary>
+        public string? Type { get; set; }
+        
+        /// <summary>
+        /// 鎶ヨ鏃ユ湡
+        /// </summary>
+        public DateTime? AlarmTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTime? CreateTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public DateTime? UpdateTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰匢d
+        /// </summary>
+        public long? CreateUserId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭鍚�
+        /// </summary>
+        public string? CreateUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰匢d
+        /// </summary>
+        public long? UpdateUserId { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭鍚�
+        /// </summary>
+        public string? UpdateUserName { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂↖d
+        /// </summary>
+        public long? CreateOrgId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+        /// </summary>
+        public string? CreateOrgName { get; set; }
+        
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        public bool IsDelete { get; set; }
+        
+    }
diff --git a/Admin.NET/WCS.Application/Service/WcsAlarmLog/Dto/WcsAlarmLogInput.cs b/Admin.NET/WCS.Application/Service/WcsAlarmLog/Dto/WcsAlarmLogInput.cs
new file mode 100644
index 0000000..a93f685
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsAlarmLog/Dto/WcsAlarmLogInput.cs
@@ -0,0 +1,164 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.Application;
+
+    /// <summary>
+    /// 鎶ヨ鏃ュ織鍩虹杈撳叆鍙傛暟
+    /// </summary>
+    public class WcsAlarmLogBaseInput
+    {
+        /// <summary>
+        /// PLCIP鍦板潃
+        /// </summary>
+        public virtual string? PlcIP { get; set; }
+        
+        /// <summary>
+        /// 鎶ヨ缂栧彿
+        /// </summary>
+        public virtual string? AlarmCode { get; set; }
+        
+        /// <summary>
+        /// 鎶ヨ鎻忚堪
+        /// </summary>
+        public virtual string? AlarmName { get; set; }
+        
+        /// <summary>
+        /// 璁惧绫诲瀷
+        /// </summary>
+        public virtual string? Type { get; set; }
+        
+        /// <summary>
+        /// 鎶ヨ鏃ユ湡
+        /// </summary>
+        public virtual DateTime? AlarmTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public virtual DateTime? CreateTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public virtual DateTime? UpdateTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰匢d
+        /// </summary>
+        public virtual long? CreateUserId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭鍚�
+        /// </summary>
+        public virtual string? CreateUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰匢d
+        /// </summary>
+        public virtual long? UpdateUserId { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭鍚�
+        /// </summary>
+        public virtual string? UpdateUserName { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂↖d
+        /// </summary>
+        public virtual long? CreateOrgId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+        /// </summary>
+        public virtual string? CreateOrgName { get; set; }
+        
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        public virtual bool IsDelete { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 鎶ヨ鏃ュ織鍒嗛〉鏌ヨ杈撳叆鍙傛暟
+    /// </summary>
+    public class PageWcsAlarmLogInput : BasePageInput
+    {
+        /// <summary>
+        /// 鍏抽敭瀛楁煡璇�
+        /// </summary>
+        public string? SearchKey { get; set; }
+
+        /// <summary>
+        /// PLCIP鍦板潃
+        /// </summary>
+        public string? PlcIP { get; set; }
+        
+        /// <summary>
+        /// 鎶ヨ缂栧彿
+        /// </summary>
+        public string? AlarmCode { get; set; }
+        
+        /// <summary>
+        /// 璁惧绫诲瀷
+        /// </summary>
+        public string? Type { get; set; }
+        
+        /// <summary>
+        /// 鎶ヨ鏃ユ湡
+        /// </summary>
+        public DateTime? AlarmTime { get; set; }
+        
+        /// <summary>
+         /// 鎶ヨ鏃ユ湡鑼冨洿
+         /// </summary>
+         public DateTime?[] AlarmTimeRange { get; set; } 
+    }
+
+    /// <summary>
+    /// 鎶ヨ鏃ュ織澧炲姞杈撳叆鍙傛暟
+    /// </summary>
+    public class AddWcsAlarmLogInput : WcsAlarmLogBaseInput
+    {
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        [Required(ErrorMessage = "杞垹闄や笉鑳戒负绌�")]
+        public override bool IsDelete { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 鎶ヨ鏃ュ織鍒犻櫎杈撳叆鍙傛暟
+    /// </summary>
+    public class DeleteWcsAlarmLogInput : BaseIdInput
+    {
+    }
+
+    /// <summary>
+    /// 鎶ヨ鏃ュ織鏇存柊杈撳叆鍙傛暟
+    /// </summary>
+    public class UpdateWcsAlarmLogInput : WcsAlarmLogBaseInput
+    {
+        /// <summary>
+        /// 涓婚敭Id
+        /// </summary>
+        [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+        public long Id { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 鎶ヨ鏃ュ織涓婚敭鏌ヨ杈撳叆鍙傛暟
+    /// </summary>
+    public class QueryByIdWcsAlarmLogInput : DeleteWcsAlarmLogInput
+    {
+
+    }
diff --git a/Admin.NET/WCS.Application/Service/WcsAlarmLog/Dto/WcsAlarmLogOutput.cs b/Admin.NET/WCS.Application/Service/WcsAlarmLog/Dto/WcsAlarmLogOutput.cs
new file mode 100644
index 0000000..4690326
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsAlarmLog/Dto/WcsAlarmLogOutput.cs
@@ -0,0 +1,91 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace WCS.Application;
+
+/// <summary>
+/// 鎶ヨ鏃ュ織杈撳嚭鍙傛暟
+/// </summary>
+public class WcsAlarmLogOutput
+{
+    /// <summary>
+    /// 涓婚敭Id
+    /// </summary>
+    public long Id { get; set; }
+    
+    /// <summary>
+    /// PLCIP鍦板潃
+    /// </summary>
+    public string? PlcIP { get; set; }
+    
+    /// <summary>
+    /// 鎶ヨ缂栧彿
+    /// </summary>
+    public string? AlarmCode { get; set; }
+    
+    /// <summary>
+    /// 鎶ヨ鎻忚堪
+    /// </summary>
+    public string? AlarmName { get; set; }
+    
+    /// <summary>
+    /// 璁惧绫诲瀷
+    /// </summary>
+    public string? Type { get; set; }
+    
+    /// <summary>
+    /// 鎶ヨ鏃ユ湡
+    /// </summary>
+    public DateTime? AlarmTime { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鏃堕棿
+    /// </summary>
+    public DateTime? CreateTime { get; set; }
+    
+    /// <summary>
+    /// 鏇存柊鏃堕棿
+    /// </summary>
+    public DateTime? UpdateTime { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰匢d
+    /// </summary>
+    public long? CreateUserId { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呭鍚�
+    /// </summary>
+    public string? CreateUserName { get; set; }
+    
+    /// <summary>
+    /// 淇敼鑰匢d
+    /// </summary>
+    public long? UpdateUserId { get; set; }
+    
+    /// <summary>
+    /// 淇敼鑰呭鍚�
+    /// </summary>
+    public string? UpdateUserName { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呴儴闂↖d
+    /// </summary>
+    public long? CreateOrgId { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+    /// </summary>
+    public string? CreateOrgName { get; set; }
+    
+    /// <summary>
+    /// 杞垹闄�
+    /// </summary>
+    public bool IsDelete { get; set; }
+    
+    }
+ 
+
diff --git a/Admin.NET/WCS.Application/Service/WcsAlarmLog/WcsAlarmLogService.cs b/Admin.NET/WCS.Application/Service/WcsAlarmLog/WcsAlarmLogService.cs
new file mode 100644
index 0000000..06adcf8
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsAlarmLog/WcsAlarmLogService.cs
@@ -0,0 +1,88 @@
+锘�
+using Admin.NET.Core.Service;
+using Microsoft.AspNetCore.Http;
+namespace WCS.Application;
+
+/// <summary>
+/// 鎶ヨ鏃ュ織鏈嶅姟
+/// </summary>
+[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
+public class WcsAlarmLogService : IDynamicApiController, ITransient
+{
+    private readonly SqlSugarRepository<WcsAlarmLog> _wcsAlarmLogRep;
+    public WcsAlarmLogService(SqlSugarRepository<WcsAlarmLog> wcsAlarmLogRep)
+    {
+        _wcsAlarmLogRep = wcsAlarmLogRep;
+    }
+
+    /// <summary>
+    /// 鍒嗛〉鏌ヨ鎶ヨ鏃ュ織
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Page")]
+    [DisplayName("鍒嗛〉鏌ヨ鎶ヨ鏃ュ織")]
+    public async Task<SqlSugarPagedList<WcsAlarmLogOutput>> Page(PageWcsAlarmLogInput input)
+    {
+        input.SearchKey = input.SearchKey?.Trim();
+        var query = _wcsAlarmLogRep.AsQueryable()
+            .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u =>
+                u.PlcIP.Contains(input.SearchKey)
+                || u.AlarmCode.Contains(input.SearchKey)
+                || u.Type.Contains(input.Type)
+            )
+            .WhereIF(!string.IsNullOrWhiteSpace(input.PlcIP), u => u.PlcIP.Contains(input.PlcIP.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.AlarmCode), u => u.AlarmCode.Contains(input.AlarmCode.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Type), u => u.Type == input.Type)
+            .WhereIF(input.AlarmTimeRange != null && input.AlarmTimeRange.Length == 2, u => u.AlarmTime >= input.AlarmTimeRange[0] && u.AlarmTime <= input.AlarmTimeRange[1])
+            .Select<WcsAlarmLogOutput>();
+        return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+    }
+
+    /// <summary>
+    /// 澧炲姞鎶ヨ鏃ュ織
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Add")]
+    [DisplayName("澧炲姞鎶ヨ鏃ュ織")]
+    public async Task<long> Add(AddWcsAlarmLogInput input)
+    {
+        var entity = input.Adapt<WcsAlarmLog>();
+        await _wcsAlarmLogRep.InsertAsync(entity);
+        return entity.Id;
+    }
+
+    /// <summary>
+    /// 鑾峰彇鎶ヨ鏃ュ織
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "Detail")]
+    [DisplayName("鑾峰彇鎶ヨ鏃ュ織")]
+    public async Task<WcsAlarmLog> Detail([FromQuery] QueryByIdWcsAlarmLogInput input)
+    {
+        return await _wcsAlarmLogRep.GetFirstAsync(u => u.Id == input.Id);
+    }
+
+    /// <summary>
+    /// 鑾峰彇鎶ヨ鏃ュ織鍒楄〃
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "List")]
+    [DisplayName("鑾峰彇鎶ヨ鏃ュ織鍒楄〃")]
+    public async Task<List<WcsAlarmLogOutput>> List([FromQuery] PageWcsAlarmLogInput input)
+    {
+        return await _wcsAlarmLogRep.AsQueryable().Select<WcsAlarmLogOutput>().ToListAsync();
+    }
+
+
+
+
+
+}
diff --git a/Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskDto.cs b/Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskDto.cs
new file mode 100644
index 0000000..8df859c
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskDto.cs
@@ -0,0 +1,174 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace WCS.Application;
+
+    /// <summary>
+    /// 浠诲姟琛ㄨ緭鍑哄弬鏁�
+    /// </summary>
+    public class WcsTaskDto
+    {
+        /// <summary>
+        /// 涓婚敭Id
+        /// </summary>
+        public long Id { get; set; }
+        
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public string? TaskNo { get; set; }
+        
+        /// <summary>
+        /// 浠诲姟绫诲瀷
+        /// </summary>
+        public TaskTypeEnum TaskType { get; set; }
+        
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        public TaskStatusEnum Status { get; set; }
+        
+        /// <summary>
+        /// 鏄惁鍥為鎴愬姛
+        /// </summary>
+        public TaskSuccessEnum IsSuccess { get; set; }
+        
+        /// <summary>
+        /// 寮傚父淇℃伅
+        /// </summary>
+        public string? Information { get; set; }
+        
+        /// <summary>
+        /// 鏉ユ簮
+        /// </summary>
+        public string? Origin { get; set; }
+        
+        /// <summary>
+        /// 璧峰浣嶇疆
+        /// </summary>
+        public string? StartLocate { get; set; }
+        
+        /// <summary>
+        /// 璧峰宸烽亾
+        /// </summary>
+        public string? StartRoadway { get; set; }
+        
+        /// <summary>
+        /// 缁撴潫浣嶇疆
+        /// </summary>
+        public string? EndLocate { get; set; }
+        
+        /// <summary>
+        /// 鐩爣宸烽亾
+        /// </summary>
+        public string? EndRoadway { get; set; }
+        
+        /// <summary>
+        /// 鎵樼洏鍙�
+        /// </summary>
+        public string? PalletNo { get; set; }
+        
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        public string? LotNo { get; set; }
+        
+        /// <summary>
+        /// 渚涜揣鎵规
+        /// </summary>
+        public string? SupplierLot { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        public string? SkuNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public string? SkuName { get; set; }
+        
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        public int? Qty { get; set; }
+        
+        /// <summary>
+        /// 鎷嗗灈鏁伴噺
+        /// </summary>
+        public int? CompleteQty { get; set; }
+        
+        /// <summary>
+        /// 鎷h揣鏂瑰紡
+        /// </summary>
+        public string? UnstackingMode { get; set; }
+        
+        /// <summary>
+        /// 鍙栨秷鏃堕棿
+        /// </summary>
+        public DateTime? CancelDate { get; set; }
+        
+        /// <summary>
+        /// 瀹屾垚鏃堕棿
+        /// </summary>
+        public DateTime? FinishDate { get; set; }
+        
+        /// <summary>
+        /// 鏈�鍚庡啓鍏ユ祦绋嬫帶鍒跺瓧鍊�
+        /// </summary>
+        public string? WcsPosValue { get; set; }
+        
+        /// <summary>
+        /// 浼樺厛绾�
+        /// </summary>
+        public int? Levels { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTime? CreateTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public DateTime? UpdateTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰匢d
+        /// </summary>
+        public long? CreateUserId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭鍚�
+        /// </summary>
+        public string? CreateUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰匢d
+        /// </summary>
+        public long? UpdateUserId { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭鍚�
+        /// </summary>
+        public string? UpdateUserName { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂↖d
+        /// </summary>
+        public long? CreateOrgId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+        /// </summary>
+        public string? CreateOrgName { get; set; }
+        
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        public bool IsDelete { get; set; }
+        
+    }
diff --git a/Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskInput.cs b/Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskInput.cs
new file mode 100644
index 0000000..1fd8664
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskInput.cs
@@ -0,0 +1,240 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.Application;
+
+    /// <summary>
+    /// 浠诲姟琛ㄥ熀纭�杈撳叆鍙傛暟
+    /// </summary>
+    public class WcsTaskBaseInput
+    {
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public virtual string? TaskNo { get; set; }
+        
+        /// <summary>
+        /// 浠诲姟绫诲瀷
+        /// </summary>
+        public virtual TaskTypeEnum TaskType { get; set; }
+        
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        public virtual TaskStatusEnum Status { get; set; }
+        
+        /// <summary>
+        /// 鏄惁鍥為鎴愬姛
+        /// </summary>
+        public virtual TaskSuccessEnum IsSuccess { get; set; }
+        
+        /// <summary>
+        /// 寮傚父淇℃伅
+        /// </summary>
+        public virtual string? Information { get; set; }
+        
+        /// <summary>
+        /// 鏉ユ簮
+        /// </summary>
+        public virtual string? Origin { get; set; }
+        
+        /// <summary>
+        /// 璧峰浣嶇疆
+        /// </summary>
+        public virtual string? StartLocate { get; set; }
+        
+        /// <summary>
+        /// 璧峰宸烽亾
+        /// </summary>
+        public virtual string? StartRoadway { get; set; }
+        
+        /// <summary>
+        /// 缁撴潫浣嶇疆
+        /// </summary>
+        public virtual string? EndLocate { get; set; }
+        
+        /// <summary>
+        /// 鐩爣宸烽亾
+        /// </summary>
+        public virtual string? EndRoadway { get; set; }
+        
+        /// <summary>
+        /// 鎵樼洏鍙�
+        /// </summary>
+        public virtual string? PalletNo { get; set; }
+        
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        public virtual string? LotNo { get; set; }
+        
+        /// <summary>
+        /// 渚涜揣鎵规
+        /// </summary>
+        public virtual string? SupplierLot { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        public virtual string? SkuNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public virtual string? SkuName { get; set; }
+        
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        public virtual int? Qty { get; set; }
+        
+        /// <summary>
+        /// 鎷嗗灈鏁伴噺
+        /// </summary>
+        public virtual int? CompleteQty { get; set; }
+        
+        /// <summary>
+        /// 鎷h揣鏂瑰紡
+        /// </summary>
+        public virtual string? UnstackingMode { get; set; }
+        
+        /// <summary>
+        /// 鍙栨秷鏃堕棿
+        /// </summary>
+        public virtual DateTime? CancelDate { get; set; }
+        
+        /// <summary>
+        /// 瀹屾垚鏃堕棿
+        /// </summary>
+        public virtual DateTime? FinishDate { get; set; }
+        
+        /// <summary>
+        /// 鏈�鍚庡啓鍏ユ祦绋嬫帶鍒跺瓧鍊�
+        /// </summary>
+        public virtual string? WcsPosValue { get; set; }
+        
+        /// <summary>
+        /// 浼樺厛绾�
+        /// </summary>
+        public virtual int? Levels { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public virtual DateTime? CreateTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public virtual DateTime? UpdateTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰匢d
+        /// </summary>
+        public virtual long? CreateUserId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭鍚�
+        /// </summary>
+        public virtual string? CreateUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰匢d
+        /// </summary>
+        public virtual long? UpdateUserId { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭鍚�
+        /// </summary>
+        public virtual string? UpdateUserName { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂↖d
+        /// </summary>
+        public virtual long? CreateOrgId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+        /// </summary>
+        public virtual string? CreateOrgName { get; set; }
+        
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        public virtual bool IsDelete { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 浠诲姟琛ㄥ垎椤垫煡璇㈣緭鍏ュ弬鏁�
+    /// </summary>
+    public class PageWcsTaskInput : BasePageInput
+    {
+        /// <summary>
+        /// 鍏抽敭瀛楁煡璇�
+        /// </summary>
+        public string? SearchKey { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public string? TaskNo { get; set; }
+        
+        /// <summary>
+        /// 浠诲姟绫诲瀷
+        /// </summary>
+        public TaskTypeEnum? TaskType { get; set; }
+        
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        public TaskStatusEnum? Status { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 浠诲姟琛ㄥ鍔犺緭鍏ュ弬鏁�
+    /// </summary>
+    public class AddWcsTaskInput : WcsTaskBaseInput
+    {
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        [Required(ErrorMessage = "杞垹闄や笉鑳戒负绌�")]
+        public override bool IsDelete { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 浠诲姟琛ㄥ垹闄よ緭鍏ュ弬鏁�
+    /// </summary>
+    public class DeleteWcsTaskInput : BaseIdInput
+    {
+    }
+
+    /// <summary>
+    /// 浠诲姟琛ㄦ洿鏂拌緭鍏ュ弬鏁�
+    /// </summary>
+    public class UpdateWcsTaskInput : WcsTaskBaseInput
+    {
+        /// <summary>
+        /// 涓婚敭Id
+        /// </summary>
+        [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+        public long Id { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 浠诲姟琛ㄤ富閿煡璇㈣緭鍏ュ弬鏁�
+    /// </summary>
+    public class QueryByIdWcsTaskInput : DeleteWcsTaskInput
+    {
+
+    }
diff --git a/Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskOutput.cs b/Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskOutput.cs
new file mode 100644
index 0000000..928a687
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskOutput.cs
@@ -0,0 +1,176 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace WCS.Application;
+
+/// <summary>
+/// 浠诲姟琛ㄨ緭鍑哄弬鏁�
+/// </summary>
+public class WcsTaskOutput
+{
+    /// <summary>
+    /// 涓婚敭Id
+    /// </summary>
+    public long Id { get; set; }
+    
+    /// <summary>
+    /// 浠诲姟鍙�
+    /// </summary>
+    public string? TaskNo { get; set; }
+    
+    /// <summary>
+    /// 浠诲姟绫诲瀷
+    /// </summary>
+    public TaskTypeEnum TaskType { get; set; }
+    
+    /// <summary>
+    /// 鐘舵��
+    /// </summary>
+    public TaskStatusEnum Status { get; set; }
+    
+    /// <summary>
+    /// 鏄惁鍥為鎴愬姛
+    /// </summary>
+    public TaskSuccessEnum IsSuccess { get; set; }
+    
+    /// <summary>
+    /// 寮傚父淇℃伅
+    /// </summary>
+    public string? Information { get; set; }
+    
+    /// <summary>
+    /// 鏉ユ簮
+    /// </summary>
+    public string? Origin { get; set; }
+    
+    /// <summary>
+    /// 璧峰浣嶇疆
+    /// </summary>
+    public string? StartLocate { get; set; }
+    
+    /// <summary>
+    /// 璧峰宸烽亾
+    /// </summary>
+    public string? StartRoadway { get; set; }
+    
+    /// <summary>
+    /// 缁撴潫浣嶇疆
+    /// </summary>
+    public string? EndLocate { get; set; }
+    
+    /// <summary>
+    /// 鐩爣宸烽亾
+    /// </summary>
+    public string? EndRoadway { get; set; }
+    
+    /// <summary>
+    /// 鎵樼洏鍙�
+    /// </summary>
+    public string? PalletNo { get; set; }
+    
+    /// <summary>
+    /// 鎵规鍙�
+    /// </summary>
+    public string? LotNo { get; set; }
+    
+    /// <summary>
+    /// 渚涜揣鎵规
+    /// </summary>
+    public string? SupplierLot { get; set; }
+    
+    /// <summary>
+    /// 鐗╂枡缂栫爜
+    /// </summary>
+    public string? SkuNo { get; set; }
+    
+    /// <summary>
+    /// 鐗╂枡鍚嶇О
+    /// </summary>
+    public string? SkuName { get; set; }
+    
+    /// <summary>
+    /// 鏁伴噺
+    /// </summary>
+    public int? Qty { get; set; }
+    
+    /// <summary>
+    /// 鎷嗗灈鏁伴噺
+    /// </summary>
+    public int? CompleteQty { get; set; }
+    
+    /// <summary>
+    /// 鎷h揣鏂瑰紡
+    /// </summary>
+    public string? UnstackingMode { get; set; }
+    
+    /// <summary>
+    /// 鍙栨秷鏃堕棿
+    /// </summary>
+    public DateTime? CancelDate { get; set; }
+    
+    /// <summary>
+    /// 瀹屾垚鏃堕棿
+    /// </summary>
+    public DateTime? FinishDate { get; set; }
+    
+    /// <summary>
+    /// 鏈�鍚庡啓鍏ユ祦绋嬫帶鍒跺瓧鍊�
+    /// </summary>
+    public string? WcsPosValue { get; set; }
+    
+    /// <summary>
+    /// 浼樺厛绾�
+    /// </summary>
+    public int? Levels { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鏃堕棿
+    /// </summary>
+    public DateTime? CreateTime { get; set; }
+    
+    /// <summary>
+    /// 鏇存柊鏃堕棿
+    /// </summary>
+    public DateTime? UpdateTime { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰匢d
+    /// </summary>
+    public long? CreateUserId { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呭鍚�
+    /// </summary>
+    public string? CreateUserName { get; set; }
+    
+    /// <summary>
+    /// 淇敼鑰匢d
+    /// </summary>
+    public long? UpdateUserId { get; set; }
+    
+    /// <summary>
+    /// 淇敼鑰呭鍚�
+    /// </summary>
+    public string? UpdateUserName { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呴儴闂↖d
+    /// </summary>
+    public long? CreateOrgId { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+    /// </summary>
+    public string? CreateOrgName { get; set; }
+    
+    /// <summary>
+    /// 杞垹闄�
+    /// </summary>
+    public bool IsDelete { get; set; }
+    
+    }
+ 
+
diff --git a/Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs b/Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs
new file mode 100644
index 0000000..5023d85
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs
@@ -0,0 +1,119 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core.Service;
+using Microsoft.AspNetCore.Http;
+namespace WCS.Application;
+
+/// <summary>
+/// 浠诲姟琛ㄦ湇鍔�
+/// </summary>
+[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
+public class WcsTaskService : IDynamicApiController, ITransient
+{
+    private readonly SqlSugarRepository<WcsTask> _wcsTaskRep;
+    public WcsTaskService(SqlSugarRepository<WcsTask> wcsTaskRep)
+    {
+        _wcsTaskRep = wcsTaskRep;
+    }
+
+    /// <summary>
+    /// 鍒嗛〉鏌ヨ浠诲姟琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Page")]
+    [DisplayName("鍒嗛〉鏌ヨ浠诲姟琛�")]
+    public async Task<SqlSugarPagedList<WcsTaskOutput>> Page(PageWcsTaskInput input)
+    {
+		input.SearchKey = input.SearchKey?.Trim();
+        var query = _wcsTaskRep.AsQueryable()
+            .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u =>
+                u.TaskNo.Contains(input.SearchKey)
+            )
+            .WhereIF(!string.IsNullOrWhiteSpace(input.TaskNo), u => u.TaskNo.Contains(input.TaskNo.Trim()))
+            .WhereIF(input.TaskType.HasValue, u => u.TaskType == input.TaskType)
+            .WhereIF(input.Status.HasValue, u => u.Status == input.Status)
+            .Select<WcsTaskOutput>();
+		return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+    }
+
+    /// <summary>
+    /// 澧炲姞浠诲姟琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Add")]
+    [DisplayName("澧炲姞浠诲姟琛�")]
+    public async Task<long> Add(AddWcsTaskInput input)
+    {
+        var entity = input.Adapt<WcsTask>();
+        await _wcsTaskRep.InsertAsync(entity);
+        return entity.Id;
+    }
+
+    /// <summary>
+    /// 鍒犻櫎浠诲姟琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Delete")]
+    [DisplayName("鍒犻櫎浠诲姟琛�")]
+    public async Task Delete(DeleteWcsTaskInput input)
+    {
+        var entity = await _wcsTaskRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+        await _wcsTaskRep.FakeDeleteAsync(entity);   //鍋囧垹闄�
+        //await _wcsTaskRep.DeleteAsync(entity);   //鐪熷垹闄�
+    }
+
+    /// <summary>
+    /// 鏇存柊浠诲姟琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Update")]
+    [DisplayName("鏇存柊浠诲姟琛�")]
+    public async Task Update(UpdateWcsTaskInput input)
+    {
+        var entity = input.Adapt<WcsTask>();
+        await _wcsTaskRep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+    }
+
+    /// <summary>
+    /// 鑾峰彇浠诲姟琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "Detail")]
+    [DisplayName("鑾峰彇浠诲姟琛�")]
+    public async Task<WcsTask> Detail([FromQuery] QueryByIdWcsTaskInput input)
+    {
+        return await _wcsTaskRep.GetFirstAsync(u => u.Id == input.Id);
+    }
+
+    /// <summary>
+    /// 鑾峰彇浠诲姟琛ㄥ垪琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "List")]
+    [DisplayName("鑾峰彇浠诲姟琛ㄥ垪琛�")]
+    public async Task<List<WcsTaskOutput>> List([FromQuery] PageWcsTaskInput input)
+    {
+        return await _wcsTaskRep.AsQueryable().Select<WcsTaskOutput>().ToListAsync();
+    }
+
+
+
+
+
+}
diff --git a/Admin.NET/WCS.Application/Service/WcsTaskMonitor/Dto/WcsTaskMonitorDto.cs b/Admin.NET/WCS.Application/Service/WcsTaskMonitor/Dto/WcsTaskMonitorDto.cs
new file mode 100644
index 0000000..ff92027
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsTaskMonitor/Dto/WcsTaskMonitorDto.cs
@@ -0,0 +1,109 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace WCS.Application;
+
+    /// <summary>
+    /// 浠诲姟鏄庣粏鐩戞帶琛ㄨ緭鍑哄弬鏁�
+    /// </summary>
+    public class WcsTaskMonitorDto
+    {
+        /// <summary>
+        /// 涓婚敭Id
+        /// </summary>
+        public long Id { get; set; }
+        
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public string? TaskNo { get; set; }
+        
+        /// <summary>
+        /// 浜や簰宸ヤ綅鍙�
+        /// </summary>
+        public long? PlcId { get; set; }
+        
+        /// <summary>
+        /// 浜や簰浣嶇疆
+        /// </summary>
+        public string? PlcName { get; set; }
+        
+        /// <summary>
+        /// 璧峰浣嶇疆
+        /// </summary>
+        public string? StartLocat { get; set; }
+        
+        /// <summary>
+        /// 鐩爣浣嶇疆
+        /// </summary>
+        public string? EndLocat { get; set; }
+        
+        /// <summary>
+        /// 浜や簰淇℃伅
+        /// </summary>
+        public string? InteractiveMsg { get; set; }
+        
+        /// <summary>
+        /// 寮傚父璁板綍
+        /// </summary>
+        public string? ErrorMsg { get; set; }
+        
+        /// <summary>
+        /// 鎵樼洏鍙�
+        /// </summary>
+        public string? PalletNo { get; set; }
+        
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        public int? Status { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTime? CreateTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public DateTime? UpdateTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰匢d
+        /// </summary>
+        public long? CreateUserId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭鍚�
+        /// </summary>
+        public string? CreateUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰匢d
+        /// </summary>
+        public long? UpdateUserId { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭鍚�
+        /// </summary>
+        public string? UpdateUserName { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂↖d
+        /// </summary>
+        public long? CreateOrgId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+        /// </summary>
+        public string? CreateOrgName { get; set; }
+        
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        public bool IsDelete { get; set; }
+        
+    }
diff --git a/Admin.NET/WCS.Application/Service/WcsTaskMonitor/Dto/WcsTaskMonitorInput.cs b/Admin.NET/WCS.Application/Service/WcsTaskMonitor/Dto/WcsTaskMonitorInput.cs
new file mode 100644
index 0000000..665dbae
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsTaskMonitor/Dto/WcsTaskMonitorInput.cs
@@ -0,0 +1,165 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.Application;
+
+    /// <summary>
+    /// 浠诲姟鏄庣粏鐩戞帶琛ㄥ熀纭�杈撳叆鍙傛暟
+    /// </summary>
+    public class WcsTaskMonitorBaseInput
+    {
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public virtual string? TaskNo { get; set; }
+        
+        /// <summary>
+        /// 浜や簰宸ヤ綅鍙�
+        /// </summary>
+        public virtual long? PlcId { get; set; }
+        
+        /// <summary>
+        /// 浜や簰浣嶇疆
+        /// </summary>
+        public virtual string? PlcName { get; set; }
+        
+        /// <summary>
+        /// 璧峰浣嶇疆
+        /// </summary>
+        public virtual string? StartLocat { get; set; }
+        
+        /// <summary>
+        /// 鐩爣浣嶇疆
+        /// </summary>
+        public virtual string? EndLocat { get; set; }
+        
+        /// <summary>
+        /// 浜や簰淇℃伅
+        /// </summary>
+        public virtual string? InteractiveMsg { get; set; }
+        
+        /// <summary>
+        /// 寮傚父璁板綍
+        /// </summary>
+        public virtual string? ErrorMsg { get; set; }
+        
+        /// <summary>
+        /// 鎵樼洏鍙�
+        /// </summary>
+        public virtual string? PalletNo { get; set; }
+        
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        public virtual int? Status { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public virtual DateTime? CreateTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public virtual DateTime? UpdateTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰匢d
+        /// </summary>
+        public virtual long? CreateUserId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭鍚�
+        /// </summary>
+        public virtual string? CreateUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰匢d
+        /// </summary>
+        public virtual long? UpdateUserId { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭鍚�
+        /// </summary>
+        public virtual string? UpdateUserName { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂↖d
+        /// </summary>
+        public virtual long? CreateOrgId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+        /// </summary>
+        public virtual string? CreateOrgName { get; set; }
+        
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        public virtual bool IsDelete { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 浠诲姟鏄庣粏鐩戞帶琛ㄥ垎椤垫煡璇㈣緭鍏ュ弬鏁�
+    /// </summary>
+    public class PageWcsTaskMonitorInput : BasePageInput
+    {
+        /// <summary>
+        /// 鍏抽敭瀛楁煡璇�
+        /// </summary>
+        public string? SearchKey { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public string? TaskNo { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 浠诲姟鏄庣粏鐩戞帶琛ㄥ鍔犺緭鍏ュ弬鏁�
+    /// </summary>
+    public class AddWcsTaskMonitorInput : WcsTaskMonitorBaseInput
+    {
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        [Required(ErrorMessage = "杞垹闄や笉鑳戒负绌�")]
+        public override bool IsDelete { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 浠诲姟鏄庣粏鐩戞帶琛ㄥ垹闄よ緭鍏ュ弬鏁�
+    /// </summary>
+    public class DeleteWcsTaskMonitorInput : BaseIdInput
+    {
+    }
+
+    /// <summary>
+    /// 浠诲姟鏄庣粏鐩戞帶琛ㄦ洿鏂拌緭鍏ュ弬鏁�
+    /// </summary>
+    public class UpdateWcsTaskMonitorInput : WcsTaskMonitorBaseInput
+    {
+        /// <summary>
+        /// 涓婚敭Id
+        /// </summary>
+        [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+        public long Id { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 浠诲姟鏄庣粏鐩戞帶琛ㄤ富閿煡璇㈣緭鍏ュ弬鏁�
+    /// </summary>
+    public class QueryByIdWcsTaskMonitorInput : DeleteWcsTaskMonitorInput
+    {
+
+    }
diff --git a/Admin.NET/WCS.Application/Service/WcsTaskMonitor/Dto/WcsTaskMonitorOutput.cs b/Admin.NET/WCS.Application/Service/WcsTaskMonitor/Dto/WcsTaskMonitorOutput.cs
new file mode 100644
index 0000000..8b09ac7
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsTaskMonitor/Dto/WcsTaskMonitorOutput.cs
@@ -0,0 +1,111 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace WCS.Application;
+
+/// <summary>
+/// 浠诲姟鏄庣粏鐩戞帶琛ㄨ緭鍑哄弬鏁�
+/// </summary>
+public class WcsTaskMonitorOutput
+{
+    /// <summary>
+    /// 涓婚敭Id
+    /// </summary>
+    public long Id { get; set; }
+    
+    /// <summary>
+    /// 浠诲姟鍙�
+    /// </summary>
+    public string? TaskNo { get; set; }
+    
+    /// <summary>
+    /// 浜や簰宸ヤ綅鍙�
+    /// </summary>
+    public long? PlcId { get; set; }
+    
+    /// <summary>
+    /// 浜や簰浣嶇疆
+    /// </summary>
+    public string? PlcName { get; set; }
+    
+    /// <summary>
+    /// 璧峰浣嶇疆
+    /// </summary>
+    public string? StartLocat { get; set; }
+    
+    /// <summary>
+    /// 鐩爣浣嶇疆
+    /// </summary>
+    public string? EndLocat { get; set; }
+    
+    /// <summary>
+    /// 浜や簰淇℃伅
+    /// </summary>
+    public string? InteractiveMsg { get; set; }
+    
+    /// <summary>
+    /// 寮傚父璁板綍
+    /// </summary>
+    public string? ErrorMsg { get; set; }
+    
+    /// <summary>
+    /// 鎵樼洏鍙�
+    /// </summary>
+    public string? PalletNo { get; set; }
+    
+    /// <summary>
+    /// 鐘舵��
+    /// </summary>
+    public int? Status { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鏃堕棿
+    /// </summary>
+    public DateTime? CreateTime { get; set; }
+    
+    /// <summary>
+    /// 鏇存柊鏃堕棿
+    /// </summary>
+    public DateTime? UpdateTime { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰匢d
+    /// </summary>
+    public long? CreateUserId { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呭鍚�
+    /// </summary>
+    public string? CreateUserName { get; set; }
+    
+    /// <summary>
+    /// 淇敼鑰匢d
+    /// </summary>
+    public long? UpdateUserId { get; set; }
+    
+    /// <summary>
+    /// 淇敼鑰呭鍚�
+    /// </summary>
+    public string? UpdateUserName { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呴儴闂↖d
+    /// </summary>
+    public long? CreateOrgId { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+    /// </summary>
+    public string? CreateOrgName { get; set; }
+    
+    /// <summary>
+    /// 杞垹闄�
+    /// </summary>
+    public bool IsDelete { get; set; }
+    
+    }
+ 
+
diff --git a/Admin.NET/WCS.Application/Service/WcsTaskMonitor/WcsTaskMonitorService.cs b/Admin.NET/WCS.Application/Service/WcsTaskMonitor/WcsTaskMonitorService.cs
new file mode 100644
index 0000000..34d7595
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsTaskMonitor/WcsTaskMonitorService.cs
@@ -0,0 +1,117 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core.Service;
+using Microsoft.AspNetCore.Http;
+namespace WCS.Application;
+
+/// <summary>
+/// 浠诲姟鏄庣粏鐩戞帶琛ㄦ湇鍔�
+/// </summary>
+[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
+public class WcsTaskMonitorService : IDynamicApiController, ITransient
+{
+    private readonly SqlSugarRepository<WcsTaskMonitor> _wcsTaskMonitorRep;
+    public WcsTaskMonitorService(SqlSugarRepository<WcsTaskMonitor> wcsTaskMonitorRep)
+    {
+        _wcsTaskMonitorRep = wcsTaskMonitorRep;
+    }
+
+    /// <summary>
+    /// 鍒嗛〉鏌ヨ浠诲姟鏄庣粏鐩戞帶琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Page")]
+    [DisplayName("鍒嗛〉鏌ヨ浠诲姟鏄庣粏鐩戞帶琛�")]
+    public async Task<SqlSugarPagedList<WcsTaskMonitorOutput>> Page(PageWcsTaskMonitorInput input)
+    {
+		input.SearchKey = input.SearchKey?.Trim();
+        var query = _wcsTaskMonitorRep.AsQueryable()
+            .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u =>
+                u.TaskNo.Contains(input.SearchKey)
+            )
+            .WhereIF(!string.IsNullOrWhiteSpace(input.TaskNo), u => u.TaskNo.Contains(input.TaskNo.Trim()))
+            .Select<WcsTaskMonitorOutput>();
+		return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+    }
+
+    /// <summary>
+    /// 澧炲姞浠诲姟鏄庣粏鐩戞帶琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Add")]
+    [DisplayName("澧炲姞浠诲姟鏄庣粏鐩戞帶琛�")]
+    public async Task<long> Add(AddWcsTaskMonitorInput input)
+    {
+        var entity = input.Adapt<WcsTaskMonitor>();
+        await _wcsTaskMonitorRep.InsertAsync(entity);
+        return entity.Id;
+    }
+
+    /// <summary>
+    /// 鍒犻櫎浠诲姟鏄庣粏鐩戞帶琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Delete")]
+    [DisplayName("鍒犻櫎浠诲姟鏄庣粏鐩戞帶琛�")]
+    public async Task Delete(DeleteWcsTaskMonitorInput input)
+    {
+        var entity = await _wcsTaskMonitorRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+        await _wcsTaskMonitorRep.FakeDeleteAsync(entity);   //鍋囧垹闄�
+        //await _wcsTaskMonitorRep.DeleteAsync(entity);   //鐪熷垹闄�
+    }
+
+    /// <summary>
+    /// 鏇存柊浠诲姟鏄庣粏鐩戞帶琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Update")]
+    [DisplayName("鏇存柊浠诲姟鏄庣粏鐩戞帶琛�")]
+    public async Task Update(UpdateWcsTaskMonitorInput input)
+    {
+        var entity = input.Adapt<WcsTaskMonitor>();
+        await _wcsTaskMonitorRep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+    }
+
+    /// <summary>
+    /// 鑾峰彇浠诲姟鏄庣粏鐩戞帶琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "Detail")]
+    [DisplayName("鑾峰彇浠诲姟鏄庣粏鐩戞帶琛�")]
+    public async Task<WcsTaskMonitor> Detail([FromQuery] QueryByIdWcsTaskMonitorInput input)
+    {
+        return await _wcsTaskMonitorRep.GetFirstAsync(u => u.Id == input.Id);
+    }
+
+    /// <summary>
+    /// 鑾峰彇浠诲姟鏄庣粏鐩戞帶琛ㄥ垪琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "List")]
+    [DisplayName("鑾峰彇浠诲姟鏄庣粏鐩戞帶琛ㄥ垪琛�")]
+    public async Task<List<WcsTaskMonitorOutput>> List([FromQuery] PageWcsTaskMonitorInput input)
+    {
+        return await _wcsTaskMonitorRep.AsQueryable().Select<WcsTaskMonitorOutput>().ToListAsync();
+    }
+
+
+
+
+
+}
diff --git a/Admin.NET/WCS.Application/Startup.cs b/Admin.NET/WCS.Application/Startup.cs
index 35dbc7e..fadba3d 100644
--- a/Admin.NET/WCS.Application/Startup.cs
+++ b/Admin.NET/WCS.Application/Startup.cs
@@ -1,7 +1,7 @@
 锘縰sing Microsoft.AspNetCore.Builder;
 using Microsoft.AspNetCore.Hosting;
 
-namespace Admin.NET.Application;
+namespace WCS.Application;
 
 [AppStartup(100)]
 public class Startup : AppStartup
diff --git a/Web/LICENSE b/Web/LICENSE
deleted file mode 100644
index 6f6a7ea..0000000
--- a/Web/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2021 lyt-Top
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
diff --git a/Web/src/api-services/apis/sys-config-api.ts b/Web/src/api-services/apis/sys-config-api.ts
index 5bee5bf..788c62a 100644
--- a/Web/src/api-services/apis/sys-config-api.ts
+++ b/Web/src/api-services/apis/sys-config-api.ts
@@ -467,12 +467,103 @@
         },
         /**
          * 
+         * @summary 淇濆瓨涓婁笅娓哥郴缁熶俊鎭� 馃敄
+         * @param {InfoSaveInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        apiSysConfigSaveSystemInfoPost: async (body?: InfoSaveInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysConfig/saveSystemInfo`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+            // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
+
+            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
+
+            const query = new URLSearchParams(localVarUrlObj.search);
+            for (const key in localVarQueryParameter) {
+                query.set(key, localVarQueryParameter[key]);
+            }
+            for (const key in options.params) {
+                query.set(key, options.params[key]);
+            }
+            localVarUrlObj.search = (new URLSearchParams(query)).toString();
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
+            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
+
+            return {
+                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
          * @summary 鑾峰彇绯荤粺淇℃伅 馃敄
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
         apiSysConfigSysInfoGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
             const localVarPath = `/api/sysConfig/sysInfo`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+            // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
+
+            const query = new URLSearchParams(localVarUrlObj.search);
+            for (const key in localVarQueryParameter) {
+                query.set(key, localVarQueryParameter[key]);
+            }
+            for (const key in options.params) {
+                query.set(key, options.params[key]);
+            }
+            localVarUrlObj.search = (new URLSearchParams(query)).toString();
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+            return {
+                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @summary 鑾峰彇绯荤粺淇℃伅 馃敄
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        apiSysConfigSystemInfoGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysConfig/systemInfo`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -692,12 +783,39 @@
         },
         /**
          * 
+         * @summary 淇濆瓨绯荤粺淇℃伅 馃敄
+         * @param {InfoSaveInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysConfigSaveSystemInfoPost(body?: InfoSaveInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
+            const localVarAxiosArgs = await SysConfigApiAxiosParamCreator(configuration).apiSysConfigSaveSystemInfoPost(body, options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
+        /**
+         * 
          * @summary 鑾峰彇绯荤粺淇℃伅 馃敄
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
         async apiSysConfigSysInfoGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultObject>>> {
             const localVarAxiosArgs = await SysConfigApiAxiosParamCreator(configuration).apiSysConfigSysInfoGet(options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
+        /**
+         * 
+         * @summary 鑾峰彇绯荤粺淇℃伅 馃敄
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysConfigSystemInfoGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultObject>>> {
+            const localVarAxiosArgs = await SysConfigApiAxiosParamCreator(configuration).apiSysConfigSystemInfoGet(options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
@@ -817,12 +935,31 @@
         },
         /**
          * 
+         * @summary 淇濆瓨绯荤粺淇℃伅 馃敄
+         * @param {InfoSaveInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysConfigSaveSystemInfoPost(body?: InfoSaveInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
+            return SysConfigApiFp(configuration).apiSysConfigSaveSystemInfoPost(body, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
          * @summary 鑾峰彇绯荤粺淇℃伅 馃敄
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
         async apiSysConfigSysInfoGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
             return SysConfigApiFp(configuration).apiSysConfigSysInfoGet(options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @summary 鑾峰彇绯荤粺淇℃伅 馃敄
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysConfigSystemInfoGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
+            return SysConfigApiFp(configuration).apiSysConfigSystemInfoGet(options).then((request) => request(axios, basePath));
         },
         /**
          * 
@@ -942,6 +1079,17 @@
     public async apiSysConfigSaveSysInfoPost(body?: InfoSaveInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
         return SysConfigApiFp(this.configuration).apiSysConfigSaveSysInfoPost(body, options).then((request) => request(this.axios, this.basePath));
     }
+        /**
+     * 
+     * @summary 淇濆瓨绯荤粺淇℃伅 馃敄
+     * @param {InfoSaveInput} [body] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysConfigApi
+     */
+        public async apiSysConfigSaveSystemInfoPost(body?: any, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
+            return SysConfigApiFp(this.configuration).apiSysConfigSaveSystemInfoPost(body, options).then((request) => request(this.axios, this.basePath));
+        }
     /**
      * 
      * @summary 鑾峰彇绯荤粺淇℃伅 馃敄
@@ -952,6 +1100,16 @@
     public async apiSysConfigSysInfoGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
         return SysConfigApiFp(this.configuration).apiSysConfigSysInfoGet(options).then((request) => request(this.axios, this.basePath));
     }
+        /**
+     * 
+     * @summary 鑾峰彇绯荤粺淇℃伅 馃敄
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysConfigApi
+     */
+        public async apiSysConfigSystemInfoGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
+            return SysConfigApiFp(this.configuration).apiSysConfigSystemInfoGet(options).then((request) => request(this.axios, this.basePath));
+        }
     /**
      * 
      * @summary 鏇存柊鍙傛暟閰嶇疆 馃敄
diff --git a/Web/src/api/wcs/wcsTask.ts b/Web/src/api/wcs/wcsTask.ts
new file mode 100644
index 0000000..54669c5
--- /dev/null
+++ b/Web/src/api/wcs/wcsTask.ts
@@ -0,0 +1,50 @@
+锘縤mport request from '/@/utils/request';
+enum Api {
+  AddWcsTask = '/api/wcsTask/add',
+  DeleteWcsTask = '/api/wcsTask/delete',
+  UpdateWcsTask = '/api/wcsTask/update',
+  PageWcsTask = '/api/wcsTask/page',
+  DetailWcsTask = '/api/wcsTask/detail',
+}
+
+// 澧炲姞浠诲姟琛�
+export const addWcsTask = (params?: any) =>
+	request({
+		url: Api.AddWcsTask,
+		method: 'post',
+		data: params,
+	});
+
+// 鍒犻櫎浠诲姟琛�
+export const deleteWcsTask = (params?: any) => 
+	request({
+			url: Api.DeleteWcsTask,
+			method: 'post',
+			data: params,
+		});
+
+// 缂栬緫浠诲姟琛�
+export const updateWcsTask = (params?: any) => 
+	request({
+			url: Api.UpdateWcsTask,
+			method: 'post',
+			data: params,
+		});
+
+// 鍒嗛〉鏌ヨ浠诲姟琛�
+export const pageWcsTask = (params?: any) => 
+	request({
+			url: Api.PageWcsTask,
+			method: 'post',
+			data: params,
+		});
+
+// 璇︽儏浠诲姟琛�
+export const detailWcsTask = (id: any) => 
+	request({
+			url: Api.DetailWcsTask,
+			method: 'get',
+			data: { id },
+		});
+
+
diff --git a/Web/src/api/wcs/wcsTaskMonitor.ts b/Web/src/api/wcs/wcsTaskMonitor.ts
new file mode 100644
index 0000000..3ee2c0b
--- /dev/null
+++ b/Web/src/api/wcs/wcsTaskMonitor.ts
@@ -0,0 +1,23 @@
+锘縤mport request from '/@/utils/request';
+enum Api {
+  PageWcsMonitorTask = '/api/wcsTaskMonitor/page',
+  DetailWcsMonitorTask = '/api/wcsTaskMonitor/detail',
+}
+
+// 鍒嗛〉鏌ヨ浠诲姟琛�
+export const pageWcsMonitorTask = (params?: any) => 
+	request({
+			url: Api.PageWcsMonitorTask,
+			method: 'post',
+			data: params,
+		});
+
+// 璇︽儏浠诲姟琛�
+export const detailWcsMonitorTask = (id: any) => 
+	request({
+			url: Api.DetailWcsMonitorTask,
+			method: 'get',
+			data: { id },
+		});
+
+
diff --git a/Web/src/views/system/infoSetting/system.vue b/Web/src/views/system/infoSetting/system.vue
new file mode 100644
index 0000000..a494e70
--- /dev/null
+++ b/Web/src/views/system/infoSetting/system.vue
@@ -0,0 +1,143 @@
+<template>
+	<div>
+		<el-card shadow="hover" v-loading="state.isLoading">
+			<el-descriptions title="涓婁笅娓哥郴缁熶俊鎭厤缃�" :column="2" :border="true">
+				<template #title>
+					<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle">
+						<ele-Setting /> </el-icon> 涓婁笅娓哥郴缁熶俊鎭厤缃�
+				</template>
+
+				<el-descriptions-item label="鏈嶅姟鍦板潃">
+					<el-input v-model="state.formData.serviceAddress" />
+				</el-descriptions-item>
+				<el-descriptions-item label="鏈嶅姟绔彛">
+					<el-input v-model="state.formData.servicePort" />
+				</el-descriptions-item>
+				<el-descriptions-item label="WMS鍦板潃">
+					<el-input v-model="state.formData.wmsAddress" />
+				</el-descriptions-item>
+				<el-descriptions-item label="WMS绔彛">
+					<el-input v-model="state.formData.wmsPort" />
+				</el-descriptions-item>
+				<el-descriptions-item label="璧嬬爜绯荤粺鍦板潃">
+					<el-input v-model="state.formData.codingAddress" />
+				</el-descriptions-item>
+				<el-descriptions-item label="璧嬬爜绯荤粺绔彛">
+					<el-input v-model="state.formData.codingPort" />
+				</el-descriptions-item>
+				<el-descriptions-item label="RCS鍦板潃">
+					<el-input v-model="state.formData.rcsAddress" />
+				</el-descriptions-item>
+				<el-descriptions-item label="RCS绔彛">
+					<el-input v-model="state.formData.rcsPort" />
+				</el-descriptions-item>
+
+				<template #extra>
+					<el-button type="primary" icon="ele-SuccessFilled" @click="onSave">淇濆瓨</el-button>
+				</template>
+			</el-descriptions>
+		</el-card>
+	</div>
+</template>
+
+<script setup lang="ts" name="systemInfoSetting">
+import { nextTick, reactive, ref } from 'vue';
+import { ElMessage } from 'element-plus';
+
+import { getAPI } from '/@/utils/axios-utils';
+import { SysConfigApi } from '/@/api-services';
+
+const state = reactive({
+	isLoading: false,
+	formData: {
+		serviceAddress: '',
+		servicePort: '',
+		wmsAddress: '',
+		wmsPort: '',
+		codingAddress: '',
+		codingPort: '',
+		rcsAddress: '',
+		rcsPort: '',
+	},
+});
+
+
+// 淇濆瓨
+const onSave = async () => {
+	try {
+		state.isLoading = true;
+		const res = await getAPI(SysConfigApi).apiSysConfigSaveSystemInfoPost({
+			serviceAddress: state.formData.serviceAddress,
+			servicePort: state.formData.servicePort,
+			wmsAddress: state.formData.wmsAddress,
+			wmsPort: state.formData.wmsPort,
+			codingAddress: state.formData.codingAddress,
+			codingPort: state.formData.codingPort,
+			rcsAddress: state.formData.rcsAddress,
+			rcsPort: state.formData.rcsPort
+		});
+		if (res.data!.type !== 'success') return;
+		await loadData();
+		ElMessage.success('淇濆瓨鎴愬姛');
+	} finally {
+		nextTick(() => {
+			state.isLoading = false;
+		});
+	}
+};
+
+// 鍔犺浇鏁版嵁
+const loadData = async () => {
+	try {
+		state.isLoading = true;
+		const res = await getAPI(SysConfigApi).apiSysConfigSystemInfoGet();
+		if (res.data!.type !== 'success') return;
+
+		const result = res.data.result;
+		state.formData = {
+			serviceAddress: result.serviceAddress,
+			servicePort: result.servicePort,
+			wmsAddress: result.wmsAddress,
+			wmsPort: result.wmsPort,
+			codingAddress: result.codingAddress,
+			codingPort: result.codingPort,
+			rcsAddress: result.rcsAddress,
+			rcsPort: result.rcsPort
+		};
+	} finally {
+		nextTick(() => {
+			state.isLoading = false;
+		});
+	}
+};
+
+loadData();
+</script>
+
+<style lang="scss" scoped>
+.avatar-uploader .avatar {
+	width: 100px;
+	height: 100px;
+	display: block;
+	object-fit: contain;
+}
+
+:deep(.avatar-uploader) .el-upload {
+	border: 1px dashed var(--el-border-color);
+	cursor: pointer;
+	position: relative;
+	overflow: hidden;
+	transition: var(--el-transition-duration-fast);
+}
+
+:deep(.avatar-uploader) .el-upload:hover {
+	border-color: var(--el-color-primary);
+}
+
+.el-icon.avatar-uploader-icon {
+	color: #8c939d;
+	width: 100px;
+	height: 100px;
+	text-align: center;
+}
+</style>
diff --git a/Web/src/views/wcs/wcsAlarmLog/index.vue b/Web/src/views/wcs/wcsAlarmLog/index.vue
new file mode 100644
index 0000000..5964458
--- /dev/null
+++ b/Web/src/views/wcs/wcsAlarmLog/index.vue
@@ -0,0 +1,171 @@
+锘�<template>
+  <div class="wcsAlarmLog-container">
+    <el-card shadow="hover" :body-style="{ paddingBottom: '0' }"> 
+      <el-form :model="queryParams" ref="queryForm" labelWidth="90">
+        <el-row>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+            <el-form-item label="鍏抽敭瀛�">
+              <el-input v-model="queryParams.searchKey" clearable="" placeholder="璇疯緭鍏ユā绯婃煡璇㈠叧閿瓧"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="PLCIP鍦板潃">
+              <el-input v-model="queryParams.plcIP" clearable="" placeholder="璇疯緭鍏LCIP鍦板潃"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鎶ヨ缂栧彿">
+              <el-input v-model="queryParams.alarmCode" clearable="" placeholder="璇疯緭鍏ユ姤璀︾紪鍙�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="璁惧绫诲瀷">
+              <el-input v-model="queryParams.type"  clearable="" placeholder="璇疯緭鍏ヨ澶囩被鍨�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鎶ヨ鏃ユ湡">
+              <el-date-picker type="daterange" v-model="queryParams.alarmTimeRange"  value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" />
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+            <el-form-item >
+              <el-button-group style="display: flex; align-items: center;">
+                <el-button type="primary"  icon="ele-Search" @click="handleQuery" v-auth="'wcsAlarmLog:page'"> 鏌ヨ </el-button>
+                      <el-button icon="ele-Refresh" @click="() => queryParams = {}"> 閲嶇疆 </el-button>
+                        <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUI" v-if="!showAdvanceQueryUI" style="margin-left:5px;"> 楂樼骇鏌ヨ </el-button>
+                        <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUI" v-if="showAdvanceQueryUI" style="margin-left:5px;"> 闅愯棌 </el-button>
+              </el-button-group>
+            </el-form-item>
+            
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-card>
+    <el-card class="full-table" shadow="hover" style="margin-top: 5px">
+      <el-table
+				:data="tableData"
+				style="width: 100%"
+				v-loading="loading"
+				tooltip-effect="light"
+                				row-key="id"
+                @sort-change="sortChange"
+				border="">
+        <el-table-column type="index" label="搴忓彿" width="55" align="center"/>
+        <el-table-column prop="plcIP" label="PLCIP鍦板潃"  show-overflow-tooltip="" />
+        <el-table-column prop="alarmCode" label="鎶ヨ缂栧彿"  show-overflow-tooltip="" />
+        <el-table-column prop="alarmName" label="鎶ヨ鎻忚堪"  show-overflow-tooltip="" />
+        <el-table-column prop="type" label="璁惧绫诲瀷"  show-overflow-tooltip="" />
+        <el-table-column prop="alarmTime" label="鎶ヨ鏃ユ湡"  show-overflow-tooltip="" />
+        <el-table-column label="淇敼璁板綍" width="80" align="center" show-overflow-tooltip>
+              <template #default="scope">
+                <ModifyRecord :data="scope.row" />
+              </template>
+            </el-table-column>
+      </el-table>
+      <el-pagination
+				v-model:currentPage="tableParams.page"
+				v-model:page-size="tableParams.pageSize"
+				:total="tableParams.total"
+				:page-sizes="[10, 20, 50, 100, 200, 500]"
+				size="small"
+				background=""
+				@size-change="handleSizeChange"
+				@current-change="handleCurrentChange"
+				layout="total, sizes, prev, pager, next, jumper"
+	/>
+      <printDialog
+        ref="printDialogRef"
+        :title="printWcsAlarmLogTitle"
+        @reloadTable="handleQuery" />
+    </el-card>
+  </div>
+</template>
+
+<script lang="ts" setup="" name="wcsAlarmLog">
+  import { ref } from "vue";
+  import { ElMessageBox, ElMessage } from "element-plus";
+  import { auth } from '/@/utils/authFunction';
+
+  import ModifyRecord from '/@/components/table/modifyRecord.vue';
+  import { formatDate } from '/@/utils/formatTime';
+
+
+  import printDialog from '/@/views/system/print/component/hiprint/preview.vue'
+  import { pageWcsAlarmLog, deleteWcsAlarmLog } from '/@/api/log/wcsAlarmLog';
+
+  const showAdvanceQueryUI = ref(false);
+  const printDialogRef = ref();
+  const editDialogRef = ref();
+  const loading = ref(false);
+  const tableData = ref<any>([]);
+  const queryParams = ref<any>({});
+  const tableParams = ref({
+    page: 1,
+    pageSize: 10,
+    total: 0,
+  });
+
+  const printWcsAlarmLogTitle = ref("");
+  const editWcsAlarmLogTitle = ref("");
+
+  // 鏀瑰彉楂樼骇鏌ヨ鐨勬帶浠舵樉绀虹姸鎬�
+  const changeAdvanceQueryUI = () => {
+    showAdvanceQueryUI.value = !showAdvanceQueryUI.value;
+  }
+
+  // 鏌ヨ鎿嶄綔
+  const handleQuery = async () => {
+    loading.value = true;
+    var res = await pageWcsAlarmLog(Object.assign(queryParams.value, tableParams.value));
+    tableData.value = res.data.result?.items ?? [];
+    tableParams.value.total = res.data.result?.total;
+    loading.value = false;
+  };
+
+  // 鍒楁帓搴�
+  const sortChange = async (column: any) => {
+	queryParams.value.field = column.prop;
+	queryParams.value.order = column.order;
+	await handleQuery();
+  };
+
+  // 鎵撳紑鏂板椤甸潰
+  const openAddWcsAlarmLog = () => {
+    editWcsAlarmLogTitle.value = '娣诲姞鎶ヨ鏃ュ織';
+    editDialogRef.value.openDialog({});
+  };
+
+  // 鎵撳紑鎵撳嵃椤甸潰
+  const openPrintWcsAlarmLog = async (row: any) => {
+    printWcsAlarmLogTitle.value = '鎵撳嵃鎶ヨ鏃ュ織';
+  }
+  
+
+  // 鏀瑰彉椤甸潰瀹归噺
+  const handleSizeChange = (val: number) => {
+    tableParams.value.pageSize = val;
+    handleQuery();
+  };
+
+  // 鏀瑰彉椤电爜搴忓彿
+  const handleCurrentChange = (val: number) => {
+    tableParams.value.page = val;
+    handleQuery();
+  };
+
+  handleQuery();
+</script>
+<style scoped>
+:deep(.el-input),
+:deep(.el-select),
+:deep(.el-input-number) {
+	width: 100%;
+}
+</style>
+
diff --git a/Web/src/views/wcs/wcsTask/component/editDialog.vue b/Web/src/views/wcs/wcsTask/component/editDialog.vue
new file mode 100644
index 0000000..ff70f63
--- /dev/null
+++ b/Web/src/views/wcs/wcsTask/component/editDialog.vue
@@ -0,0 +1,226 @@
+锘�<template>
+	<div class="wcsTask-container">
+		<el-dialog v-model="isShowDialog" :width="800" draggable="" :close-on-click-modal="false">
+			<template #header>
+				<div style="color: #fff">
+					<!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
+					<span>{{ props.title }}</span>
+				</div>
+			</template>
+			<el-form :model="ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules">
+				<el-row :gutter="35">
+					<el-form-item v-show="false">
+						<el-input v-model="ruleForm.id" />
+					</el-form-item>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="浠诲姟鍙�" prop="taskNo">
+							<el-input v-model="ruleForm.taskNo" placeholder="璇疯緭鍏ヤ换鍔″彿" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="浠诲姟绫诲瀷" prop="taskType">
+							<el-select clearable v-model="ruleForm.taskType" placeholder="璇烽�夋嫨浠诲姟绫诲瀷">
+								<el-option v-for="(item,index) in dl('TaskTypeEnum')" :key="index" :value="Number(item.value)" :label="`${item.name} (${item.code}) [${item.value}]`"></el-option>
+								
+							</el-select>
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鏉ユ簮" prop="origin">
+							<el-input v-model="ruleForm.origin" placeholder="璇疯緭鍏ユ潵婧�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="璧峰浣嶇疆" prop="startLocate">
+							<el-input v-model="ruleForm.startLocate" placeholder="璇疯緭鍏ヨ捣濮嬩綅缃�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="璧峰宸烽亾" prop="startRoadway">
+							<el-input v-model="ruleForm.startRoadway" placeholder="璇疯緭鍏ヨ捣濮嬪贩閬�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="缁撴潫浣嶇疆" prop="endLocate">
+							<el-input v-model="ruleForm.endLocate" placeholder="璇疯緭鍏ョ粨鏉熶綅缃�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鐩爣宸烽亾" prop="endRoadway">
+							<el-input v-model="ruleForm.endRoadway" placeholder="璇疯緭鍏ョ洰鏍囧贩閬�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鎵樼洏鍙�" prop="palletNo">
+							<el-input v-model="ruleForm.palletNo" placeholder="璇疯緭鍏ユ墭鐩樺彿" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鎵规鍙�" prop="lotNo">
+							<el-input v-model="ruleForm.lotNo" placeholder="璇疯緭鍏ユ壒娆″彿" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="渚涜揣鎵规" prop="supplierLot">
+							<el-input v-model="ruleForm.supplierLot" placeholder="璇疯緭鍏ヤ緵璐ф壒娆�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鐗╂枡缂栫爜" prop="skuNo">
+							<el-input v-model="ruleForm.skuNo" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鐗╂枡鍚嶇О" prop="skuName">
+							<el-input v-model="ruleForm.skuName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鏁伴噺" prop="qty">
+							<el-input-number v-model="ruleForm.qty" placeholder="璇疯緭鍏ユ暟閲�" clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鎷嗗灈鏁伴噺" prop="completeQty">
+							<el-input-number v-model="ruleForm.completeQty" placeholder="璇疯緭鍏ユ媶鍨涙暟閲�" clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鎷h揣鏂瑰紡" prop="unstackingMode">
+							<el-input v-model="ruleForm.unstackingMode" placeholder="璇疯緭鍏ユ嫞璐ф柟寮�" maxlength="10" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="cancel">鍙� 娑�</el-button>
+					<el-button type="primary" @click="submit">纭� 瀹�</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+<style lang="scss" scoped>
+:deep(.el-select),
+:deep(.el-input-number) {
+	width: 100%;
+}
+</style>
+<script lang="ts" setup>
+	import { ref,onMounted } from "vue";
+	import { ElMessage } from "element-plus";
+	import type { FormRules } from "element-plus";
+	import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
+	import { getDictLabelByVal as dv } from '/@/utils/dict-utils';
+  	import { formatDate } from '/@/utils/formatTime';
+	import { addWcsTask, updateWcsTask, detailWcsTask } from "/@/api/wcs/wcsTask";
+	import { getAPI } from '/@/utils/axios-utils';
+	import { SysEnumApi } from '/@/api-services/api';
+
+	//鐖剁骇浼犻�掓潵鐨勫弬鏁�
+	var props = defineProps({
+		title: {
+		type: String,
+		default: "",
+	},
+	});
+	//鐖剁骇浼犻�掓潵鐨勫嚱鏁帮紝鐢ㄤ簬鍥炶皟
+	const emit = defineEmits(["reloadTable"]);
+	const ruleFormRef = ref();
+	const isShowDialog = ref(false);
+	const ruleForm = ref<any>({});
+	//鑷娣诲姞鍏朵粬瑙勫垯
+	const rules = ref<FormRules>({
+	});
+
+	// 椤甸潰鍔犺浇鏃�
+	onMounted(() => {
+
+	});
+
+	// 鎵撳紑寮圭獥
+	const openDialog = async (row: any) => {
+		// ruleForm.value = JSON.parse(JSON.stringify(row));
+		// 鏀圭敤detail鑾峰彇鏈�鏂版暟鎹潵缂栬緫
+		let rowData = JSON.parse(JSON.stringify(row));
+		if (rowData.id)
+			ruleForm.value = (await detailWcsTask(rowData.id)).data.result;
+		else
+			ruleForm.value = rowData;
+		isShowDialog.value = true;
+	};
+
+	// 鍏抽棴寮圭獥
+	const closeDialog = () => {
+		emit("reloadTable");
+		isShowDialog.value = false;
+	};
+
+	// 鍙栨秷
+	const cancel = () => {
+		isShowDialog.value = false;
+	};
+
+	// 鎻愪氦
+	const submit = async () => {
+		ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
+			if (isValid) {
+				let values = ruleForm.value;
+				if (ruleForm.value.id == undefined || ruleForm.value.id == null || ruleForm.value.id == "" || ruleForm.value.id == 0) {
+					await addWcsTask(values);
+				} else {
+					await updateWcsTask(values);
+				}
+				closeDialog();
+			} else {
+				ElMessage({
+					message: `琛ㄥ崟鏈�${Object.keys(fields).length}澶勯獙璇佸け璐ワ紝璇蜂慨鏀瑰悗鍐嶆彁浜,
+					type: "error",
+				});
+			}
+		});
+	};
+
+
+
+
+
+
+	//灏嗗睘鎬ф垨鑰呭嚱鏁版毚闇茬粰鐖剁粍浠�
+	defineExpose({ openDialog });
+</script>
+
+
+
+
diff --git a/Web/src/views/wcs/wcsTask/index.vue b/Web/src/views/wcs/wcsTask/index.vue
new file mode 100644
index 0000000..eac32a8
--- /dev/null
+++ b/Web/src/views/wcs/wcsTask/index.vue
@@ -0,0 +1,291 @@
+锘�<template>
+  <div class="wcsTask-container">
+    <el-row :gutter="8" style="width: 100%; height: 100%; flex: 1">
+      <el-col :span="12" :xs="24" style="display: flex; height: 100%; flex: 1">
+        <el-card class="full-table" shadow="hover" ::body-style="{ height: 'calc(100% - 51px)' }">
+          <template #header>
+						<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"><ele-Collection /></el-icon>浠诲姟鏃ュ織
+					</template>
+          <el-form :model="queryParams" ref="queryForm" labelWidth="90">
+            <el-row>
+              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+                <el-form-item label="鍏抽敭瀛�">
+                  <el-input v-model="queryParams.searchKey" clearable="" placeholder="璇疯緭鍏ユā绯婃煡璇㈠叧閿瓧" />
+                </el-form-item>
+              </el-col>
+              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+                <el-form-item label="浠诲姟鍙�">
+                  <el-input v-model="queryParams.taskNo" clearable="" placeholder="璇疯緭鍏ヤ换鍔″彿" />
+                </el-form-item>
+              </el-col>
+              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+                <el-form-item label="浠诲姟绫诲瀷">
+                  <el-select clearable="" v-model="queryParams.taskType" placeholder="璇烽�夋嫨浠诲姟绫诲瀷">
+                    <el-option v-for="(item, index) in dl('TaskTypeEnum')" :key="index" :value="item.value"
+                      :label="`${item.name} (${item.code}) [${item.value}] `" />
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+                <el-form-item label="鐘舵��">
+                  <el-select clearable="" v-model="queryParams.status" placeholder="璇烽�夋嫨鐘舵��">
+                    <el-option v-for="(item, index) in dl('TaskStatusEnum')" :key="index" :value="item.value"
+                      :label="`${item.name} (${item.code}) [${item.value}] `" />
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+                <el-form-item>
+                  <el-button-group style="display: flex; align-items: center;">
+                    <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'wcsTask:page'"> 鏌ヨ
+                    </el-button>
+                    <el-button icon="ele-Refresh" @click="() => queryParams = {}"> 閲嶇疆 </el-button>
+                    <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUI" v-if="!showAdvanceQueryUI"
+                      style="margin-left:5px;"> 楂樼骇鏌ヨ </el-button>
+                    <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUI" v-if="showAdvanceQueryUI"
+                      style="margin-left:5px;"> 闅愯棌 </el-button>
+                    <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="openAddWcsTask"
+                      v-auth="'wcsTask:add'"> 鏂板 </el-button>
+
+                  </el-button-group>
+                </el-form-item>
+
+              </el-col>
+            </el-row>
+          </el-form>
+          <el-table :data="tableData" style="width: 100%" v-loading="loading" tooltip-effect="light" row-key="id" @row-click="handleClick"
+            @sort-change="sortChange" border="">
+            <el-table-column type="index" label="搴忓彿" width="55" align="center" />
+            <el-table-column prop="taskNo" label="浠诲姟鍙�" show-overflow-tooltip="" />
+            <el-table-column prop="taskType" width="85" label="浠诲姟绫诲瀷" show-overflow-tooltip="">
+              <template #default="scope">
+                <el-tag :type="dv('TaskTypeEnum', scope.row.taskType)?.tagType"> {{ dv('TaskTypeEnum',
+                  scope.row.taskType)?.name }}</el-tag>
+              </template>
+            </el-table-column>
+            <el-table-column prop="status" width="85" label="鐘舵��" show-overflow-tooltip="">
+              <template #default="scope">
+                <el-tag :type="dv('TaskStatusEnum', scope.row.status)?.tagType"> {{ dv('TaskStatusEnum',
+                  scope.row.status)?.name }}</el-tag>
+              </template>
+            </el-table-column>
+            <el-table-column prop="startLocate" label="璧峰浣嶇疆" show-overflow-tooltip="" />
+            <el-table-column prop="endLocate" label="缁撴潫浣嶇疆" show-overflow-tooltip="" />
+            <el-table-column prop="palletNo" label="鎵樼洏鍙�" show-overflow-tooltip="" />
+            <el-table-column prop="cancelDate" label="鍙栨秷鏃堕棿" show-overflow-tooltip="" />
+            <el-table-column prop="finishDate" label="瀹屾垚鏃堕棿" show-overflow-tooltip="" />
+            <el-table-column label="淇敼璁板綍" width="80" align="center" show-overflow-tooltip>
+              <template #default="scope">
+                <ModifyRecord :data="scope.row" />
+              </template>
+            </el-table-column>
+            <el-table-column label="鎿嶄綔" width="130" align="center" fixed="right" show-overflow-tooltip=""
+              v-if="auth('wcsTask:complete') || auth('wcsTask:cancell')">
+              <template #default="scope">
+                <!-- <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditWcsTask(scope.row)"
+              v-auth="'wcsTask:update'"> 缂栬緫 </el-button>
+            <el-button icon="ele-Delete" size="small" text="" type="primary" @click="delWcsTask(scope.row)"
+              v-auth="'wcsTask:delete'"> 鍒犻櫎 </el-button> -->
+                <el-button icon="ele-Check" size="small" text="" type="primary" @click="completeTask(scope.row)"
+                  v-auth="'wcsTask:complete'"> 瀹屾垚 </el-button>
+                <el-button icon="ele-Close" size="small" text="" type="primary" @click="cancellTask(scope.row)"
+                  v-auth="'wcsTask:cancell'"> 鍙栨秷 </el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+          <el-pagination v-model:currentPage="tableParams.page" v-model:page-size="tableParams.pageSize"
+            :total="tableParams.total" :page-sizes="[10, 20, 50, 100, 200, 500]" size="small" background=""
+            @size-change="handleSizeChange" @current-change="handleCurrentChange"
+            layout="total, sizes, prev, pager, next, jumper" />
+          <printDialog ref="printDialogRef" :title="printWcsTaskTitle" @reloadTable="handleQuery" />
+          <editDialog ref="editDialogRef" :title="editWcsTaskTitle" @reloadTable="handleQuery" />
+        </el-card>
+      </el-col>
+      <el-col :span="12" :xs="24" style="display: flex; height: 100%; flex: 1">
+        <el-card class="full-table" shadow="hover" :body-style="{ height: 'calc(100% - 51px)' }">
+          <template #header>
+						<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"><ele-Collection /></el-icon>浠诲姟璇︽儏
+					</template>
+          <el-form :model="queryParams2" ref="queryForm2" labelWidth="90">
+            <el-row>
+              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+                <el-form-item label="浠诲姟鍙�">
+                  <el-input v-model="queryParams2.taskNo" clearable="" placeholder="璇疯緭鍏ヤ换鍔″彿" />
+                </el-form-item>
+              </el-col>
+              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+                <el-form-item>
+                  <el-button type="primary" icon="ele-Search" @click="handleQuery2"> 鏌ヨ
+                  </el-button>
+                </el-form-item>
+
+              </el-col>
+            </el-row>
+          </el-form>
+          <el-table :data="tableData2" style="width: 100%" v-loading="loading" tooltip-effect="light" row-key="id" border="">
+            <el-table-column type="index" label="搴忓彿" width="55" align="center" />
+            <el-table-column prop="taskNo" label="浠诲姟鍙�" show-overflow-tooltip="" />
+            <el-table-column prop="plcId" label="浜や簰宸ヤ綅鍙�" show-overflow-tooltip="" />
+            <el-table-column prop="plcName" label="浜や簰浣嶇疆" show-overflow-tooltip="" />
+            <el-table-column prop="interactiveMsg" label="浜や簰淇℃伅" show-overflow-tooltip="" />
+            <el-table-column label="淇敼璁板綍" width="80" align="center" show-overflow-tooltip>
+              <template #default="scope">
+                <ModifyRecord :data="scope.row" />
+              </template>
+            </el-table-column>
+          </el-table>
+          <el-pagination v-model:currentPage="tableParams2.page" v-model:page-size="tableParams2.pageSize"
+            :total="tableParams2.total" :page-sizes="[10, 20, 50, 100, 200, 500]" size="small" background=""
+            @size-change="handleSizeChange2" @current-change="handleCurrentChange2"
+            layout="total, sizes, prev, pager, next, jumper" />
+        </el-card>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script lang="ts" setup="" name="wcsTask">
+import ModifyRecord from '/@/components/table/modifyRecord.vue';
+import { ref } from "vue";
+import { ElMessageBox, ElMessage } from "element-plus";
+import { auth } from '/@/utils/authFunction';
+
+import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
+import { getDictLabelByVal as dv } from '/@/utils/dict-utils';
+import { formatDate } from '/@/utils/formatTime';
+
+
+import printDialog from '/@/views/system/print/component/hiprint/preview.vue'
+import editDialog from '/@/views/wcs/wcsTask/component/editDialog.vue'
+import { pageWcsTask, deleteWcsTask } from '/@/api/wcs/wcsTask';
+import { pageWcsMonitorTask } from '/@/api/wcs/wcsTaskMonitor';
+import { getAPI } from '/@/utils/axios-utils';
+import { SysEnumApi } from '/@/api-services/api';
+import commonFunction from '/@/utils/commonFunction';
+
+const showAdvanceQueryUI = ref(false);
+const printDialogRef = ref();
+const editDialogRef = ref();
+const loading = ref(false);
+const tableData = ref<any>([]);
+const tableData2 = ref<any>([]);
+const queryParams = ref<any>({});
+const queryParams2 = ref<any>({});
+const tableParams = ref({
+  page: 1,
+  pageSize: 10,
+  total: 0,
+});
+const tableParams2 = ref({
+  page: 1,
+  pageSize: 10,
+  total: 0,
+});
+const printWcsTaskTitle = ref("");
+const editWcsTaskTitle = ref("");
+
+// 鏀瑰彉楂樼骇鏌ヨ鐨勬帶浠舵樉绀虹姸鎬�
+const changeAdvanceQueryUI = () => {
+  showAdvanceQueryUI.value = !showAdvanceQueryUI.value;
+}
+
+// 鏌ヨ鎿嶄綔
+const handleQuery = async () => {
+  loading.value = true;
+  var res = await pageWcsTask(Object.assign(queryParams.value, tableParams.value));
+  tableData.value = res.data.result?.items ?? [];
+  tableParams.value.total = res.data.result?.total;
+  loading.value = false;
+};
+// 鏌ヨ鎿嶄綔
+const handleQuery2 = async () => {
+  loading.value = true;
+  var res = await pageWcsMonitorTask(Object.assign(queryParams2.value, tableParams2.value));
+  tableData2.value = res.data.result?.items ?? [];
+  tableParams2.value.total = res.data.result?.total;
+  loading.value = false;
+};
+
+// 鍒楁帓搴�
+const sortChange = async (column: any) => {
+  queryParams.value.field = column.prop;
+  queryParams.value.order = column.order;
+  await handleQuery();
+};
+
+// 鎵撳紑鏂板椤甸潰
+const openAddWcsTask = () => {
+  editWcsTaskTitle.value = '娣诲姞浠诲姟琛�';
+  editDialogRef.value.openDialog({});
+};
+
+// 鎵撳紑鎵撳嵃椤甸潰
+const openPrintWcsTask = async (row: any) => {
+  printWcsTaskTitle.value = '鎵撳嵃浠诲姟琛�';
+}
+
+// 鎵撳紑缂栬緫椤甸潰
+const openEditWcsTask = (row: any) => {
+  editWcsTaskTitle.value = '缂栬緫浠诲姟琛�';
+  editDialogRef.value.openDialog(row);
+};
+//瀹屾垚浠诲姟
+const completeTask = (row: any) => {
+
+}
+//鍙栨秷浠诲姟
+const cancellTask = (row: any) => {
+
+}
+// 鐐瑰嚮琛ㄦ牸
+const handleClick = (row: any, event: any, column: any) => {
+	queryParams2.value.taskNo = row.taskNo;
+	handleQuery2();
+};
+// 鍒犻櫎
+const delWcsTask = (row: any) => {
+  ElMessageBox.confirm(`纭畾瑕佸垹闄ゅ悧?`, "鎻愮ず", {
+    confirmButtonText: "纭畾",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+    .then(async () => {
+      await deleteWcsTask(row);
+      handleQuery();
+      ElMessage.success("鍒犻櫎鎴愬姛");
+    })
+    .catch(() => { });
+};
+
+// 鏀瑰彉椤甸潰瀹归噺
+const handleSizeChange = (val: number) => {
+  tableParams.value.pageSize = val;
+  handleQuery();
+};
+
+// 鏀瑰彉椤电爜搴忓彿
+const handleCurrentChange = (val: number) => {
+  tableParams.value.page = val;
+  handleQuery();
+};
+// 鏀瑰彉椤甸潰瀹归噺
+const handleSizeChange2 = (val: number) => {
+  tableParams2.value.pageSize = val;
+  handleQuery();
+};
+
+// 鏀瑰彉椤电爜搴忓彿
+const handleCurrentChange2 = (val: number) => {
+  tableParams2.value.page = val;
+  handleQuery();
+};
+handleQuery();
+handleQuery2();
+</script>
+<style scoped>
+:deep(.el-input),
+:deep(.el-select),
+:deep(.el-input-number) {
+  width: 100%;
+}
+</style>
diff --git a/Web/tsconfig.json b/Web/tsconfig.json
index aed1401..e314fd4 100644
--- a/Web/tsconfig.json
+++ b/Web/tsconfig.json
@@ -25,14 +25,14 @@
 		"isolatedModules": true /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */,
 
 		/* Strict Type-Checking Options */
-		"strict": true /* Enable all strict type-checking options. */,
-		// "noImplicitAny": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */
-		// "strictNullChecks": true,              /* Enable strict null checks. */
-		// "strictFunctionTypes": true,           /* Enable strict checking of function types. */
-		// "strictBindCallApply": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
-		// "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */
-		// "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */
-		// "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */
+		"strict": false /* Enable all strict type-checking options. */,
+		"noImplicitAny": false,                 /* Raise error on expressions and declarations with an implied 'any' type. */
+		"strictNullChecks": false,              /* Enable strict null checks. */
+		"strictFunctionTypes": false,           /* Enable strict checking of function types. */
+		"strictBindCallApply": false,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
+		"strictPropertyInitialization": false,  /* Enable strict checking of property initialization in classes. */
+		"noImplicitThis": false,                /* Raise error on 'this' expressions with an implied 'any' type. */
+		"alwaysStrict": false,                  /* Parse in strict mode and emit "use strict" for each source file. */
 
 		/* Additional Checks */
 		// "noUnusedLocals": true,                /* Report errors on unused locals. */
@@ -69,6 +69,11 @@
 		"skipLibCheck": true /* Skip type checking of declaration files. */,
 		"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
 	},
-	"include": ["src/**/*.ts", "src/**/*.vue", "src/**/*.tsx", "src/**/*.d.ts"], // **Represents any directory, and * represents any file. Indicates that all files in the src directory will be compiled
+	"include": [
+    "src/**/*.ts",
+    "src/**/*.d.ts",
+    "src/**/*.tsx",
+    "src/**/*.vue"
+  	], // **Represents any directory, and * represents any file. Indicates that all files in the src directory will be compiled
 	"exclude": ["node_modules", "dist"] // Indicates the file directory that does not need to be compiled
 }

--
Gitblit v1.8.0