瀏覽代碼

增加通知公告(站内信)管理页面

zuohuaijun 3 年之前
父節點
當前提交
5b9f5fb4e7
共有 34 個文件被更改,包括 1330 次插入1246 次删除
  1. 3 1
      .gitignore
  2. 2 2
      Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj
  3. 26 231
      Admin.NET/Admin.NET.Core/Admin.NET.Core.xml
  4. 4 4
      Admin.NET/Admin.NET.Core/Entity/EntityBase.cs
  5. 5 5
      Admin.NET/Admin.NET.Core/Entity/SysNotice.cs
  6. 11 4
      Admin.NET/Admin.NET.Core/Entity/SysNoticeUser.cs
  7. 66 57
      Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs
  8. 20 9
      Admin.NET/Admin.NET.Core/SeedData/SysRoleMenuSeedData.cs
  9. 0 57
      Admin.NET/Admin.NET.Core/Service/Notice/Dto/NoticeBase.cs
  10. 0 40
      Admin.NET/Admin.NET.Core/Service/Notice/Dto/NoticeDetailOutput.cs
  11. 7 71
      Admin.NET/Admin.NET.Core/Service/Notice/Dto/NoticeInput.cs
  12. 0 22
      Admin.NET/Admin.NET.Core/Service/Notice/Dto/NoticeReceiveOutput.cs
  13. 0 18
      Admin.NET/Admin.NET.Core/Service/Notice/ISysNoticeService.cs
  14. 0 12
      Admin.NET/Admin.NET.Core/Service/Notice/ISysNoticeUserService.cs
  15. 68 158
      Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs
  16. 0 77
      Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeUserService.cs
  17. 1 1
      Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj
  18. 222 354
      Web/src/api-services/apis/sys-notice-api.ts
  19. 57 21
      Web/src/api-services/models/add-notice-input.ts
  20. 12 12
      Web/src/api-services/models/admin-result-list-sys-notice-user.ts
  21. 57 0
      Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-notice-user.ts
  22. 57 0
      Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-notice.ts
  23. 1 1
      Web/src/api-services/models/delete-notice-input.ts
  24. 8 4
      Web/src/api-services/models/index.ts
  25. 4 11
      Web/src/api-services/models/notice-input.ts
  26. 63 0
      Web/src/api-services/models/sql-sugar-paged-list-sys-notice-user.ts
  27. 63 0
      Web/src/api-services/models/sql-sugar-paged-list-sys-notice.ts
  28. 22 15
      Web/src/api-services/models/sys-notice-user.ts
  29. 59 34
      Web/src/api-services/models/sys-notice.ts
  30. 53 23
      Web/src/api-services/models/update-notice-input.ts
  31. 160 0
      Web/src/views/home/notice/index.vue
  32. 2 2
      Web/src/views/system/log/oplog/index.vue
  33. 96 0
      Web/src/views/system/notice/component/editNotice.vue
  34. 181 0
      Web/src/views/system/notice/index.vue

+ 3 - 1
.gitignore

@@ -26,4 +26,6 @@ bin-release/
 # folders
 dist/
 .vs/
-node_modules/
+node_modules/
+/Admin.NET/Admin.NET.Web.Entry/wwwroot/Avatar
+/Admin.NET/Admin.NET.Web.Entry/wwwroot/Signature

+ 2 - 2
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -34,11 +34,11 @@
     <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.10" />
     <PackageReference Include="NEST" Version="7.17.5" />
     <PackageReference Include="NETCore.MailKit" Version="2.1.0" />
-    <PackageReference Include="NewLife.Redis" Version="5.0.2022.901" />
+    <PackageReference Include="NewLife.Redis" Version="5.0.2022.1101" />
     <PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.1.9" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.19.0" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="2.13.1" />
-    <PackageReference Include="SqlSugarCore" Version="5.1.3.29" />
+    <PackageReference Include="SqlSugarCore" Version="5.1.3.30" />
     <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.21" />
     <PackageReference Include="UAParser" Version="3.1.47" />
     <PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />

+ 26 - 231
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -979,7 +979,7 @@
         </member>
         <member name="P:Admin.NET.Core.SysNotice.Type">
             <summary>
-            类型(字典 1通知 2公告)
+            类型(1通知 2公告)
             </summary>
         </member>
         <member name="P:Admin.NET.Core.SysNotice.PublicUserId">
@@ -1014,7 +1014,7 @@
         </member>
         <member name="P:Admin.NET.Core.SysNotice.Status">
             <summary>
-            状态(字典 0草稿 1发布 2撤回 3删除)
+            状态(0草稿 1发布 2撤回 3删除)
             </summary>
         </member>
         <member name="T:Admin.NET.Core.SysNoticeUser">
@@ -1027,6 +1027,11 @@
             通知公告Id
             </summary>
         </member>
+        <member name="P:Admin.NET.Core.SysNoticeUser.SysNotice">
+            <summary>
+            通知公告
+            </summary>
+        </member>
         <member name="P:Admin.NET.Core.SysNoticeUser.UserId">
             <summary>
             用户Id
@@ -1039,7 +1044,7 @@
         </member>
         <member name="P:Admin.NET.Core.SysNoticeUser.ReadStatus">
             <summary>
-            状态(字典 0未读 1已读)
+            状态(0未读 1已读)
             </summary>
         </member>
         <member name="T:Admin.NET.Core.SysOnlineUser">
@@ -5448,184 +5453,14 @@
             <param name="message"></param>
             <returns></returns>
         </member>
-        <member name="T:Admin.NET.Core.Service.NoticeBase">
-            <summary>
-            通知公告参数
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeBase.Title">
-            <summary>
-            标题
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeBase.Content">
-            <summary>
-            内容
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeBase.Type">
-            <summary>
-            类型(字典 1通知 2公告)
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeBase.PublicUserId">
-            <summary>
-            发布人Id
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeBase.PublicUserName">
-            <summary>
-            发布人姓名
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeBase.PublicOrgId">
-            <summary>
-            发布机构Id
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeBase.PublicOrgName">
-            <summary>
-            发布机构名称
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeBase.PublicTime">
-            <summary>
-            发布时间
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeBase.CancelTime">
-            <summary>
-            撤回时间
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeBase.Status">
-            <summary>
-            状态(字典 0草稿 1发布 2撤回 3删除)
-            </summary>
-        </member>
-        <member name="T:Admin.NET.Core.Service.NoticeDetailOutput">
-            <summary>
-            系统通知公告详情参数
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeDetailOutput.NoticeUserIdList">
-            <summary>
-            通知到的用户Id集合
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeDetailOutput.NoticeUserReadInfoList">
-            <summary>
-            通知到的用户阅读信息集合
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeUserRead.UserId">
-            <summary>
-            用户Id
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeUserRead.UserName">
-            <summary>
-            用户名称
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeUserRead.ReadStatus">
-            <summary>
-            状态(字典 0未读 1已读)
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeUserRead.ReadTime">
-            <summary>
-            阅读时间
-            </summary>
-        </member>
-        <member name="T:Admin.NET.Core.Service.NoticeInput">
-            <summary>
-            通知公告参数
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeInput.Title">
+        <member name="P:Admin.NET.Core.Service.PageNoticeInput.Title">
             <summary>
             标题
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.NoticeInput.Content">
+        <member name="P:Admin.NET.Core.Service.PageNoticeInput.Type">
             <summary>
-            内容
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeInput.Type">
-            <summary>
-            类型(字典 1通知 2公告)
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeInput.Status">
-            <summary>
-            状态(字典 0草稿 1发布 2撤回 3删除)
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeInput.NoticeUserIdList">
-            <summary>
-            通知到的人
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.AddNoticeInput.Title">
-            <summary>
-            标题
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.AddNoticeInput.Content">
-            <summary>
-            内容
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.AddNoticeInput.Type">
-            <summary>
-            类型(字典 1通知 2公告)
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.AddNoticeInput.Status">
-            <summary>
-            状态(字典 0草稿 1发布 2撤回 3删除)
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.AddNoticeInput.NoticeUserIdList">
-            <summary>
-            通知到的人
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.DeleteNoticeInput.Id">
-            <summary>
-            Id
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.UpdateNoticeInput.Id">
-            <summary>
-            Id
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.ChangeStatusNoticeInput.Status">
-            <summary>
-            状态(字典 0草稿 1发布 2撤回 3删除)
-            </summary>
-        </member>
-        <member name="T:Admin.NET.Core.Service.NoticeReceiveOutput">
-            <summary>
-            通知公告接收参数
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeReceiveOutput.Id">
-            <summary>
-            Id
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeReceiveOutput.ReadStatus">
-            <summary>
-            阅读状态(字典 0未读 1已读)
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.NoticeReceiveOutput.ReadTime">
-            <summary>
-            阅读时间
+            类型(1通知 2公告)
             </summary>
         </member>
         <member name="T:Admin.NET.Core.Service.SysNoticeService">
@@ -5633,9 +5468,9 @@
             系统通知公告服务
             </summary>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysNoticeService.QueryNoticePageList(Admin.NET.Core.Service.NoticeInput)">
+        <member name="M:Admin.NET.Core.Service.SysNoticeService.GetPageNotice(Admin.NET.Core.Service.PageNoticeInput)">
             <summary>
-            分页查询通知公告
+            获取通知公告分页列表
             </summary>
             <param name="input"></param>
             <returns></returns>
@@ -5647,13 +5482,6 @@
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysNoticeService.DeleteNotice(Admin.NET.Core.Service.DeleteNoticeInput)">
-            <summary>
-            删除通知公告
-            </summary>
-            <param name="input"></param>
-            <returns></returns>
-        </member>
         <member name="M:Admin.NET.Core.Service.SysNoticeService.UpdateNotice(Admin.NET.Core.Service.UpdateNoticeInput)">
             <summary>
             更新通知公告
@@ -5661,78 +5489,45 @@
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysNoticeService.GetNotice(Admin.NET.Core.Service.QueryNoticeInput)">
+        <member name="M:Admin.NET.Core.Service.SysNoticeService.DeleteNotice(Admin.NET.Core.Service.DeleteNoticeInput)">
             <summary>
-            获取通知公告详情
+            删除通知公告
             </summary>
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysNoticeService.ChangeStatus(Admin.NET.Core.Service.ChangeStatusNoticeInput)">
+        <member name="M:Admin.NET.Core.Service.SysNoticeService.PublicNotice(Admin.NET.Core.Service.NoticeInput)">
             <summary>
-            修改通知公告状态
+            发布通知公告
             </summary>
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysNoticeService.ReceivedNoticePageList(Admin.NET.Core.Service.NoticeInput)">
+        <member name="M:Admin.NET.Core.Service.SysNoticeService.SetNoticeRead(Admin.NET.Core.Service.NoticeInput)">
             <summary>
-            获取接收的通知公告
+            设置通知公告已读状态
             </summary>
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysNoticeService.UnReadNoticeList(Admin.NET.Core.Service.NoticeInput)">
+        <member name="M:Admin.NET.Core.Service.SysNoticeService.GetPageReceivedNotice(Admin.NET.Core.Service.PageNoticeInput)">
             <summary>
-            未处理消息
+            获取接收的通知公告(当前用户)
             </summary>
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysNoticeService.UpdatePublicInfo(Admin.NET.Core.SysNotice)">
+        <member name="M:Admin.NET.Core.Service.SysNoticeService.GetUnReadNoticeList">
             <summary>
-            更新发布信息
+            获取未读的通知公告(当前用户)
             </summary>
-            <param name="notice"></param>
-        </member>
-        <member name="T:Admin.NET.Core.Service.SysNoticeUserService">
-            <summary>
-            系统通知公告用户
-            </summary>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysNoticeUserService.Add(System.Int64,System.Collections.Generic.List{System.Int64},Admin.NET.Core.NoticeUserStatusEnum)">
-            <summary>
-            增加
-            </summary>
-            <param name="noticeId"></param>
-            <param name="noticeUserIdList"></param>
-            <param name="noticeUserStatus"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysNoticeUserService.Update(System.Int64,System.Collections.Generic.List{System.Int64},Admin.NET.Core.NoticeUserStatusEnum)">
-            <summary>
-            更新
-            </summary>
-            <param name="noticeId"></param>
-            <param name="noticeUserIdList"></param>
-            <param name="noticeUserStatus"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysNoticeUserService.GetNoticeUserListByNoticeId(System.Int64)">
+        <member name="M:Admin.NET.Core.Service.SysNoticeService.InitNoticeInfo(Admin.NET.Core.SysNotice)">
             <summary>
-            获取通知公告用户列表
+            初始化通知公告信息
             </summary>
-            <param name="noticeId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysNoticeUserService.Read(System.Int64,System.Int64,Admin.NET.Core.NoticeUserStatusEnum)">
-            <summary>
-            设置通知公告读取状态
-            </summary>
-            <param name="noticeId"></param>
-            <param name="userId"></param>
-            <param name="status"></param>
-            <returns></returns>
+            <param name="notice"></param>
         </member>
         <member name="P:Admin.NET.Core.Service.PageOnlineUserInput.UserName">
             <summary>

+ 4 - 4
Admin.NET/Admin.NET.Core/Entity/EntityBase.cs

@@ -20,25 +20,25 @@ public abstract class EntityBase : EntityBaseId
     /// <summary>
     /// 创建时间
     /// </summary>
-    [SugarColumn(ColumnDescription = "创建时间")]
+    [SugarColumn(ColumnDescription = "创建时间", IsOnlyIgnoreUpdate = true)]
     public virtual DateTime? CreateTime { get; set; }
 
     /// <summary>
     /// 更新时间
     /// </summary>
-    [SugarColumn(ColumnDescription = "更新时间")]
+    [SugarColumn(ColumnDescription = "更新时间", IsOnlyIgnoreInsert = true)]
     public virtual DateTime? UpdateTime { get; set; }
 
     /// <summary>
     /// 创建者Id
     /// </summary>
-    [SugarColumn(ColumnDescription = "创建者Id")]
+    [SugarColumn(ColumnDescription = "创建者Id", IsOnlyIgnoreUpdate = true)]
     public virtual long? CreateUserId { get; set; }
 
     /// <summary>
     /// 修改者Id
     /// </summary>
-    [SugarColumn(ColumnDescription = "修改者Id")]
+    [SugarColumn(ColumnDescription = "修改者Id", IsOnlyIgnoreInsert = true)]
     public virtual long? UpdateUserId { get; set; }
 
     /// <summary>

+ 5 - 5
Admin.NET/Admin.NET.Core/Entity/SysNotice.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统通知公告表
 /// </summary>
-[SugarTable("sys_notice", "通知公告表")]
+[SugarTable("sys_notice", "系统通知公告表")]
 public class SysNotice : EntityBase
 {
     /// <summary>
@@ -21,9 +21,9 @@ public class SysNotice : EntityBase
     public virtual string Content { get; set; }
 
     /// <summary>
-    /// 类型(字典 1通知 2公告)
+    /// 类型(1通知 2公告)
     /// </summary>
-    [SugarColumn(ColumnDescription = "类型(字典 1通知 2公告)")]
+    [SugarColumn(ColumnDescription = "类型(1通知 2公告)")]
     public NoticeTypeEnum Type { get; set; }
 
     /// <summary>
@@ -65,8 +65,8 @@ public class SysNotice : EntityBase
     public DateTime CancelTime { get; set; }
 
     /// <summary>
-    /// 状态(字典 0草稿 1发布 2撤回 3删除)
+    /// 状态(0草稿 1发布 2撤回 3删除)
     /// </summary>
-    [SugarColumn(ColumnDescription = "状态(字典 0草稿 1发布 2撤回 3删除)")]
+    [SugarColumn(ColumnDescription = "状态(0草稿 1发布 2撤回 3删除)")]
     public NoticeStatusEnum Status { get; set; }
 }

+ 11 - 4
Admin.NET/Admin.NET.Core/Entity/SysNoticeUser.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 系统通知公告用户表
 /// </summary>
-[SugarTable("sys_notice_user", "通知公告用户表")]
+[SugarTable("sys_notice_user", "系统通知公告用户表")]
 public class SysNoticeUser
 {
     /// <summary>
@@ -12,6 +12,13 @@ public class SysNoticeUser
     [SugarColumn(ColumnDescription = "通知公告Id")]
     public long NoticeId { get; set; }
 
+    /// <summary>
+    /// 通知公告
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    [Navigate(NavigateType.OneToOne, nameof(NoticeId))]
+    public SysNotice SysNotice { get; set; }
+
     /// <summary>
     /// 用户Id
     /// </summary>
@@ -25,8 +32,8 @@ public class SysNoticeUser
     public DateTime ReadTime { get; set; }
 
     /// <summary>
-    /// 状态(字典 0未读 1已读)
+    /// 状态(0未读 1已读)
     /// </summary>
-    [SugarColumn(ColumnDescription = "状态(字典 0未读 1已读)")]
-    public NoticeUserStatusEnum ReadStatus { get; set; }
+    [SugarColumn(ColumnDescription = "状态(0未读 1已读)")]
+    public NoticeUserStatusEnum ReadStatus { get; set; } = NoticeUserStatusEnum.UNREAD;
 }

+ 66 - 57
Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs

@@ -15,15 +15,16 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
         {
             new SysMenu{ Id=252885263002100, Pid=0, Title="数据面板", Path="/dashboard", Name="dashboard", Component="Layout", Redirect="/dashboard/home", Icon="ele-HomeFilled", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=10 },
             new SysMenu{ Id=252885263002110, Pid=252885263002100, Title="工作台", Path="/dashboard/home", Name="home", Component="/home/index", IsAffix=true, Icon="ele-HomeFilled", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002111, Pid=252885263002100, Title="站内信", Path="/dashboard/notice", Name="notice", Component="/home/notice/index", IsAffix=true, Icon="ele-Bell", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=101 },
 
             new SysMenu{ Id=252885263002200, Pid=0, Title="系统管理", Path="/system", Name="system", Component="Layout", Redirect="/system/user", Icon="ele-Setting", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002210, Pid=252885263002200, Title="账号管理", Path="/system/user", Name="sysUser", Component="/system/user/index", Icon="ele-User", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002211, Pid=252885263002210, Title="账号查询", Permission="sysUser:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002212, Pid=252885263002210, Title="账号编辑", Permission="sysUser:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002213, Pid=252885263002210, Title="账号增加", Permission="sysUser:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002214, Pid=252885263002210, Title="账号删除", Permission="sysUser:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002215, Pid=252885263002210, Title="查看详情", Permission="sysUser:detail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002211, Pid=252885263002210, Title="查询", Permission="sysUser:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002212, Pid=252885263002210, Title="编辑", Permission="sysUser:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002213, Pid=252885263002210, Title="增加", Permission="sysUser:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002214, Pid=252885263002210, Title="删除", Permission="sysUser:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002215, Pid=252885263002210, Title="详情", Permission="sysUser:detail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002216, Pid=252885263002210, Title="授权角色", Permission="sysUser:grantRole", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002217, Pid=252885263002210, Title="重置密码", Permission="sysUser:resetPwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002218, Pid=252885263002210, Title="设置状态", Permission="sysUser:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
@@ -31,98 +32,106 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             new SysMenu{ Id=252885263012220, Pid=252885263002210, Title="强制下线", Permission="sysUser:forceOffline", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002220, Pid=252885263002200, Title="角色管理", Path="/system/role", Name="sysRole", Component="/system/role/index", Icon="ele-UserFilled", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=110 },
-            new SysMenu{ Id=252885263002221, Pid=252885263002220, Title="角色查询", Permission="sysRole:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002222, Pid=252885263002220, Title="角色编辑", Permission="sysRole:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002223, Pid=252885263002220, Title="角色增加", Permission="sysRole:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002224, Pid=252885263002220, Title="角色删除", Permission="sysRole:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002221, Pid=252885263002220, Title="查询", Permission="sysRole:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002222, Pid=252885263002220, Title="编辑", Permission="sysRole:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002223, Pid=252885263002220, Title="增加", Permission="sysRole:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002224, Pid=252885263002220, Title="删除", Permission="sysRole:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002225, Pid=252885263002220, Title="授权菜单", Permission="sysRole:grantMenu", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002226, Pid=252885263002220, Title="授权数据", Permission="sysRole:grantData", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002227, Pid=252885263002220, Title="设置状态", Permission="sysRole:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002230, Pid=252885263002200, Title="菜单管理", Path="/system/menu", Name="sysMenu", Component="/system/menu/index", Icon="ele-Menu", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=120 },
-            new SysMenu{ Id=252885263002231, Pid=252885263002230, Title="菜单查询", Permission="sysMenu:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002232, Pid=252885263002230, Title="菜单编辑", Permission="sysMenu:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002233, Pid=252885263002230, Title="菜单增加", Permission="sysMenu:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002234, Pid=252885263002230, Title="菜单删除", Permission="sysMenu:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002231, Pid=252885263002230, Title="查询", Permission="sysMenu:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002232, Pid=252885263002230, Title="编辑", Permission="sysMenu:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002233, Pid=252885263002230, Title="增加", Permission="sysMenu:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002234, Pid=252885263002230, Title="删除", Permission="sysMenu:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002240, Pid=252885263002200, Title="机构管理", Path="/system/org", Name="sysOrg", Component="/system/org/index", Icon="ele-OfficeBuilding", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=130 },
-            new SysMenu{ Id=252885263002241, Pid=252885263002240, Title="机构查询", Permission="sysOrg:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002242, Pid=252885263002240, Title="机构编辑", Permission="sysOrg:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002243, Pid=252885263002240, Title="机构增加", Permission="sysOrg:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002244, Pid=252885263002240, Title="机构删除", Permission="sysOrg:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002241, Pid=252885263002240, Title="查询", Permission="sysOrg:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002242, Pid=252885263002240, Title="编辑", Permission="sysOrg:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002243, Pid=252885263002240, Title="增加", Permission="sysOrg:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002244, Pid=252885263002240, Title="删除", Permission="sysOrg:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002250, Pid=252885263002200, Title="职位管理", Path="/system/pos", Name="sysPos", Component="/system/pos/index",Icon="ele-Mug", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=140 },
-            new SysMenu{ Id=252885263002251, Pid=252885263002250, Title="职位查询", Permission="sysPos:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002252, Pid=252885263002250, Title="职位编辑", Permission="sysPos:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002253, Pid=252885263002250, Title="职位增加", Permission="sysPos:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002254, Pid=252885263002250, Title="职位删除", Permission="sysPos:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002251, Pid=252885263002250, Title="查询", Permission="sysPos:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002252, Pid=252885263002250, Title="编辑", Permission="sysPos:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002253, Pid=252885263002250, Title="增加", Permission="sysPos:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002254, Pid=252885263002250, Title="删除", Permission="sysPos:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002260, Pid=252885263002200, Title="个人中心", Path="/system/userCenter", Name="sysUserCenter", Component="/system/user/component/userCenter",Icon="ele-Medal", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=150 },
             new SysMenu{ Id=252885263002261, Pid=252885263002260, Title="修改密码", Permission="sysUser:changePwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002262, Pid=252885263002260, Title="更新信息", Permission="sysUser:updateBase", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002263, Pid=252885263002260, Title="电子签名", Permission="sysUser:signature", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
+            new SysMenu{ Id=252885263002270, Pid=252885263002200, Title="通知公告", Path="/system/notice", Name="sysNotice", Component="/system/notice/index",Icon="ele-Bell", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=160 },
+            new SysMenu{ Id=252885263002271, Pid=252885263002270, Title="查询", Permission="sysNotice:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002272, Pid=252885263002270, Title="编辑", Permission="sysNotice:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002273, Pid=252885263002270, Title="增加", Permission="sysNotice:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002274, Pid=252885263002270, Title="删除", Permission="sysNotice:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002275, Pid=252885263002270, Title="发布", Permission="sysNotice:public", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002276, Pid=252885263002270, Title="撤回", Permission="sysNotice:cancel", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+
             new SysMenu{ Id=252885263002300, Pid=0, Title="平台管理", Path="/platform", Name="platform", Component="Layout", Redirect="/platform/tenant", Icon="ele-Menu", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=200 },
 
             new SysMenu{ Id=252885263002310, Pid=252885263002300, Title="租户管理", Path="/platform/tenant", Name="sysTenant", Component="/system/tenant/index", Icon="ele-School", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002311, Pid=252885263002310, Title="租户查询", Permission="sysTenant:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002312, Pid=252885263002310, Title="租户编辑", Permission="sysTenant:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002313, Pid=252885263002310, Title="租户增加", Permission="sysTenant:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002314, Pid=252885263002310, Title="租户删除", Permission="sysTenant:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002311, Pid=252885263002310, Title="查询", Permission="sysTenant:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002312, Pid=252885263002310, Title="编辑", Permission="sysTenant:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002313, Pid=252885263002310, Title="增加", Permission="sysTenant:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002314, Pid=252885263002310, Title="删除", Permission="sysTenant:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002315, Pid=252885263002310, Title="授权菜单", Permission="sysTenant:grantMenu", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002316, Pid=252885263002310, Title="重置密码", Permission="sysTenant:resetPwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002320, Pid=252885263002300, Title="参数配置", Path="/platform/config", Name="sysConfig", Component="/system/config/index", Icon="ele-DocumentCopy", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=110 },
-            new SysMenu{ Id=252885263002321, Pid=252885263002320, Title="配置查询", Permission="sysConfig:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002322, Pid=252885263002320, Title="配置编辑", Permission="sysConfig:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002323, Pid=252885263002320, Title="配置增加", Permission="sysConfig:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002324, Pid=252885263002320, Title="配置删除", Permission="sysConfig:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002321, Pid=252885263002320, Title="查询", Permission="sysConfig:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002322, Pid=252885263002320, Title="编辑", Permission="sysConfig:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002323, Pid=252885263002320, Title="增加", Permission="sysConfig:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002324, Pid=252885263002320, Title="删除", Permission="sysConfig:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002330, Pid=252885263002300, Title="字典管理", Path="/platform/dict", Name="sysDict", Component="/system/dict/index", Icon="ele-Collection", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=120 },
-            new SysMenu{ Id=252885263002331, Pid=252885263002330, Title="字典查询", Permission="sysDictType:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002332, Pid=252885263002330, Title="字典编辑", Permission="sysDictType:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002333, Pid=252885263002330, Title="字典增加", Permission="sysDictType:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002334, Pid=252885263002330, Title="字典删除", Permission="sysDictType:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002331, Pid=252885263002330, Title="查询", Permission="sysDictType:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002332, Pid=252885263002330, Title="编辑", Permission="sysDictType:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002333, Pid=252885263002330, Title="增加", Permission="sysDictType:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002334, Pid=252885263002330, Title="删除", Permission="sysDictType:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002340, Pid=252885263002300, Title="任务调度", Path="/platform/timer", Name="sysTimer", Component="/system/timer/index", Icon="ele-AlarmClock", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=130 },
-            new SysMenu{ Id=252885263002341, Pid=252885263002340, Title="任务查询", Permission="sysTimer:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002342, Pid=252885263002340, Title="任务编辑", Permission="sysTimer:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002343, Pid=252885263002340, Title="任务增加", Permission="sysTimer:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002344, Pid=252885263002340, Title="任务删除", Permission="sysTimer:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002345, Pid=252885263002340, Title="设置状态", Permission="sysTimer:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002341, Pid=252885263002340, Title="查询", Permission="sysTimer:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002342, Pid=252885263002340, Title="编辑", Permission="sysTimer:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002343, Pid=252885263002340, Title="增加", Permission="sysTimer:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002344, Pid=252885263002340, Title="删除", Permission="sysTimer:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002345, Pid=252885263002340, Title="状态", Permission="sysTimer:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002360, Pid=252885263002300, Title="系统监控", Path="/platform/server", Name="sysServer", Component="/system/server/index", Icon="ele-Monitor", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=140 },
 
             new SysMenu{ Id=252885263002370, Pid=252885263002300, Title="缓存管理", Path="/platform/cache", Name="sysCache", Component="/system/cache/index", Icon="ele-Loading", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=150 },
-            new SysMenu{ Id=252885263002371, Pid=252885263002370, Title="缓存查询", Permission="sysCache:keyList", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002372, Pid=252885263002370, Title="缓存删除", Permission="sysCache:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002371, Pid=252885263002370, Title="查询", Permission="sysCache:keyList", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002372, Pid=252885263002370, Title="删除", Permission="sysCache:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002380, Pid=252885263002300, Title="行政区域", Path="/platform/region", Name="sysRegion", Component="/system/region/index", Icon="ele-LocationInformation", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=160 },
-            new SysMenu{ Id=252885263002381, Pid=252885263002380, Title="区域查询", Permission="sysRegion:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002382, Pid=252885263002380, Title="区域编辑", Permission="sysRegion:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002383, Pid=252885263002380, Title="区域增加", Permission="sysRegion:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002384, Pid=252885263002380, Title="区域删除", Permission="sysRegion:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002385, Pid=252885263002380, Title="更新同步", Permission="sysRegion:sync", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002381, Pid=252885263002380, Title="查询", Permission="sysRegion:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002382, Pid=252885263002380, Title="编辑", Permission="sysRegion:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002383, Pid=252885263002380, Title="增加", Permission="sysRegion:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002384, Pid=252885263002380, Title="删除", Permission="sysRegion:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002385, Pid=252885263002380, Title="同步", Permission="sysRegion:sync", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002390, Pid=252885263002300, Title="文件管理", Path="/platform/file", Name="sysFile", Component="/system/file/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=170 },
-            new SysMenu{ Id=252885263002391, Pid=252885263002390, Title="文件查询", Permission="sysFile:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002392, Pid=252885263002390, Title="文件上传", Permission="sysFile:upload", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002393, Pid=252885263002390, Title="文件下载", Permission="sysFile:download", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002394, Pid=252885263002390, Title="文件删除", Permission="sysFile:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002391, Pid=252885263002390, Title="查询", Permission="sysFile:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002392, Pid=252885263002390, Title="上传", Permission="sysFile:upload", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002393, Pid=252885263002390, Title="下载", Permission="sysFile:download", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002394, Pid=252885263002390, Title="删除", Permission="sysFile:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002500, Pid=0, Title="日志管理", Path="/log", Name="log", Component="Layout", Redirect="/log/vislog", Icon="ele-DocumentCopy", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=300 },
             new SysMenu{ Id=252885263002510, Pid=252885263002500, Title="访问日志", Path="/log/vislog", Name="sysVislog", Component="/system/log/vislog/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002511, Pid=252885263002510, Title="日志查询", Permission="sysVislog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002512, Pid=252885263002510, Title="日志清空", Permission="sysVislog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002511, Pid=252885263002510, Title="查询", Permission="sysVislog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002512, Pid=252885263002510, Title="清空", Permission="sysVislog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002520, Pid=252885263002500, Title="操作日志", Path="/log/oplog", Name="sysOplog", Component="/system/log/oplog/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=110 },
-            new SysMenu{ Id=252885263002521, Pid=252885263002520, Title="日志查询", Permission="sysOplog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002522, Pid=252885263002520, Title="日志清空", Permission="sysOplog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002521, Pid=252885263002520, Title="查询", Permission="sysOplog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002522, Pid=252885263002520, Title="清空", Permission="sysOplog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002530, Pid=252885263002500, Title="异常日志", Path="/log/exlog", Name="sysExlog", Component="/system/log/exlog/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=120 },
-            new SysMenu{ Id=252885263002531, Pid=252885263002530, Title="日志查询", Permission="sysExlog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002532, Pid=252885263002530, Title="日志清空", Permission="sysExlog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002531, Pid=252885263002530, Title="查询", Permission="sysExlog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002532, Pid=252885263002530, Title="清空", Permission="sysExlog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002540, Pid=252885263002500, Title="差异日志", Path="/log/difflog", Name="sysDifflog", Component="/system/log/difflog/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=130 },
-            new SysMenu{ Id=252885263002541, Pid=252885263002540, Title="日志查询", Permission="sysDifflog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
-            new SysMenu{ Id=252885263002542, Pid=252885263002540, Title="日志清空", Permission="sysDifflog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002541, Pid=252885263002540, Title="查询", Permission="sysDifflog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
+            new SysMenu{ Id=252885263002542, Pid=252885263002540, Title="清空", Permission="sysDifflog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
 
             new SysMenu{ Id=252885263002600, Pid=0, Title="开发工具", Path="/develop", Name="develop", Component="Layout", Redirect="/develop/api", Icon="ele-Cpu", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=400 },
             new SysMenu{ Id=252885263002610, Pid=252885263002600, Title="系统接口", Path="/develop/api", Name="sysApi", Component="layout/routerView/iframe", IsIframe=true, OutLink="https://localhost:44326/api/", Icon="ele-Help", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },

+ 20 - 9
Admin.NET/Admin.NET.Core/SeedData/SysRoleMenuSeedData.cs

@@ -16,7 +16,7 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             // 数据面板【admin/252885263003721】
             new SysRoleMenu{ Id=252885263003000, RoleId=252885263003721, MenuId=252885263002100 },
             new SysRoleMenu{ Id=252885263003001, RoleId=252885263003721, MenuId=252885263002110 },
-            //new SysRoleMenu{ Id=252885263003002, RoleId=252885263003721, MenuId=252885263002111 },
+            new SysRoleMenu{ Id=252885263003002, RoleId=252885263003721, MenuId=252885263002111 },
 
             // 系统管理
             new SysRoleMenu{ Id=252885263003100, RoleId=252885263003721, MenuId=252885263002200 },
@@ -64,6 +64,14 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             new SysRoleMenu{ Id=252885263003152, RoleId=252885263003721, MenuId=252885263002261 },
             new SysRoleMenu{ Id=252885263003153, RoleId=252885263003721, MenuId=252885263002262 },
             new SysRoleMenu{ Id=252885263003154, RoleId=252885263003721, MenuId=252885263002263 },
+            // 通知公告
+            new SysRoleMenu{ Id=252885263003161, RoleId=252885263003721, MenuId=252885263002270 },
+            new SysRoleMenu{ Id=252885263003162, RoleId=252885263003721, MenuId=252885263002271 },
+            new SysRoleMenu{ Id=252885263003163, RoleId=252885263003721, MenuId=252885263002272 },
+            new SysRoleMenu{ Id=252885263003164, RoleId=252885263003721, MenuId=252885263002273 },
+            new SysRoleMenu{ Id=252885263003165, RoleId=252885263003721, MenuId=252885263002274 },
+            new SysRoleMenu{ Id=252885263003166, RoleId=252885263003721, MenuId=252885263002275 },
+            new SysRoleMenu{ Id=252885263003167, RoleId=252885263003721, MenuId=252885263002276 },
 
             // 平台管理
             new SysRoleMenu{ Id=252885263003200, RoleId=252885263003721, MenuId=252885263002300 },
@@ -79,11 +87,6 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             new SysRoleMenu{ Id=252885263003213, RoleId=252885263003721, MenuId=252885263002332 },
             new SysRoleMenu{ Id=252885263003214, RoleId=252885263003721, MenuId=252885263002333 },
             new SysRoleMenu{ Id=252885263003215, RoleId=252885263003721, MenuId=252885263002334 },
-            //// 在线用户
-            //new SysRoleMenu{ Id=252885263003221, RoleId=252885263003721, MenuId=252885263002350 },
-            //new SysRoleMenu{ Id=252885263003222, RoleId=252885263003721, MenuId=252885263002351 },
-            //new SysRoleMenu{ Id=252885263003223, RoleId=252885263003721, MenuId=252885263002352 },
-            //new SysRoleMenu{ Id=252885263003224, RoleId=252885263003721, MenuId=252885263002353 },
             // 系统监控
             new SysRoleMenu{ Id=252885263003231, RoleId=252885263003721, MenuId=252885263002360 },
             // 缓存管理
@@ -123,7 +126,7 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             // 数据面板【user1/252885263003722】
             new SysRoleMenu{ Id=252885263004000, RoleId=252885263003722, MenuId=252885263002100 },
             new SysRoleMenu{ Id=252885263004001, RoleId=252885263003722, MenuId=252885263002110 },
-            //new SysRoleMenu{ Id=252885263004002, RoleId=252885263003722, MenuId=252885263002111 },
+            new SysRoleMenu{ Id=252885263004002, RoleId=252885263003722, MenuId=252885263002111 },
             // 系统管理
             new SysRoleMenu{ Id=252885263004100, RoleId=252885263003722, MenuId=252885263002200 },
             // 个人中心
@@ -135,7 +138,7 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             // 数据面板【user3/252885263003724】
             new SysRoleMenu{ Id=252885263005000, RoleId=252885263003724, MenuId=252885263002100 },
             new SysRoleMenu{ Id=252885263005001, RoleId=252885263003724, MenuId=252885263002110 },
-            //new SysRoleMenu{ Id=252885263005002, RoleId=252885263003724, MenuId=252885263002111 },
+            new SysRoleMenu{ Id=252885263005002, RoleId=252885263003724, MenuId=252885263002111 },
             // 系统管理
             new SysRoleMenu{ Id=252885263005100, RoleId=252885263003724, MenuId=252885263002200 },
             // 个人中心
@@ -148,7 +151,7 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             // 数据面板【admin1/252885263004721】
             new SysRoleMenu{ Id=252885263101000, RoleId=252885263004721, MenuId=252885263002100 },
             new SysRoleMenu{ Id=252885263101001, RoleId=252885263004721, MenuId=252885263002110 },
-            //new SysRoleMenu{ Id=252885263101002, RoleId=252885263004721, MenuId=252885263002111 },
+            new SysRoleMenu{ Id=252885263101002, RoleId=252885263004721, MenuId=252885263002111 },
             // 系统管理
             new SysRoleMenu{ Id=252885263101100, RoleId=252885263004721, MenuId=252885263002200 },
             // 账号管理
@@ -195,6 +198,14 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             new SysRoleMenu{ Id=252885263103152, RoleId=252885263004721, MenuId=252885263002261 },
             new SysRoleMenu{ Id=252885263103153, RoleId=252885263004721, MenuId=252885263002262 },
             new SysRoleMenu{ Id=252885263103154, RoleId=252885263004721, MenuId=252885263002263 },
+            // 通知公告
+            new SysRoleMenu{ Id=252885263103161, RoleId=252885263004721, MenuId=252885263002270 },
+            new SysRoleMenu{ Id=252885263103162, RoleId=252885263004721, MenuId=252885263002271 },
+            new SysRoleMenu{ Id=252885263103163, RoleId=252885263004721, MenuId=252885263002272 },
+            new SysRoleMenu{ Id=252885263103164, RoleId=252885263004721, MenuId=252885263002273 },
+            new SysRoleMenu{ Id=252885263103165, RoleId=252885263004721, MenuId=252885263002274 },
+            new SysRoleMenu{ Id=252885263103166, RoleId=252885263004721, MenuId=252885263002275 },
+            new SysRoleMenu{ Id=252885263103167, RoleId=252885263004721, MenuId=252885263002276 },
         };
     }
 }

+ 0 - 57
Admin.NET/Admin.NET.Core/Service/Notice/Dto/NoticeBase.cs

@@ -1,57 +0,0 @@
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 通知公告参数
-/// </summary>
-public class NoticeBase
-{
-    /// <summary>
-    /// 标题
-    /// </summary>
-    public string Title { get; set; }
-
-    /// <summary>
-    /// 内容
-    /// </summary>
-    public string Content { get; set; }
-
-    /// <summary>
-    /// 类型(字典 1通知 2公告)
-    /// </summary>
-    public int Type { get; set; }
-
-    /// <summary>
-    /// 发布人Id
-    /// </summary>
-    public long PublicUserId { get; set; }
-
-    /// <summary>
-    /// 发布人姓名
-    /// </summary>
-    public string PublicUserName { get; set; }
-
-    /// <summary>
-    /// 发布机构Id
-    /// </summary>
-    public long PublicOrgId { get; set; }
-
-    /// <summary>
-    /// 发布机构名称
-    /// </summary>
-    public string PublicOrgName { get; set; }
-
-    /// <summary>
-    /// 发布时间
-    /// </summary>
-    public DateTime PublicTime { get; set; }
-
-    /// <summary>
-    /// 撤回时间
-    /// </summary>
-    public DateTime CancelTime { get; set; }
-
-    /// <summary>
-    /// 状态(字典 0草稿 1发布 2撤回 3删除)
-    /// </summary>
-    public int Status { get; set; }
-}

+ 0 - 40
Admin.NET/Admin.NET.Core/Service/Notice/Dto/NoticeDetailOutput.cs

@@ -1,40 +0,0 @@
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 系统通知公告详情参数
-/// </summary>
-public class NoticeDetailOutput : NoticeBase
-{
-    /// <summary>
-    /// 通知到的用户Id集合
-    /// </summary>
-    public List<string> NoticeUserIdList { get; set; }
-
-    /// <summary>
-    /// 通知到的用户阅读信息集合
-    /// </summary>
-    public List<NoticeUserRead> NoticeUserReadInfoList { get; set; }
-}
-
-public class NoticeUserRead
-{
-    /// <summary>
-    /// 用户Id
-    /// </summary>
-    public long UserId { get; set; }
-
-    /// <summary>
-    /// 用户名称
-    /// </summary>
-    public string UserName { get; set; }
-
-    /// <summary>
-    /// 状态(字典 0未读 1已读)
-    /// </summary>
-    public NoticeUserStatusEnum ReadStatus { get; set; }
-
-    /// <summary>
-    /// 阅读时间
-    /// </summary>
-    public DateTime ReadTime { get; set; }
-}

+ 7 - 71
Admin.NET/Admin.NET.Core/Service/Notice/Dto/NoticeInput.cs

@@ -1,9 +1,6 @@
 namespace Admin.NET.Core.Service;
 
-/// <summary>
-/// 通知公告参数
-/// </summary>
-public class NoticeInput : BasePageInput
+public class PageNoticeInput : BasePageInput
 {
     /// <summary>
     /// 标题
@@ -11,86 +8,25 @@ public class NoticeInput : BasePageInput
     public virtual string Title { get; set; }
 
     /// <summary>
-    /// 内容
-    /// </summary>
-    public virtual string Content { get; set; }
-
-    /// <summary>
-    /// 类型(字典 1通知 2公告)
+    /// 类型(1通知 2公告)
     /// </summary>
     public virtual NoticeTypeEnum Type { get; set; }
-
-    /// <summary>
-    /// 状态(字典 0草稿 1发布 2撤回 3删除)
-    /// </summary>
-    public virtual NoticeStatusEnum Status { get; set; }
-
-    /// <summary>
-    /// 通知到的人
-    /// </summary>
-    public virtual List<long> NoticeUserIdList { get; set; }
 }
 
-public class AddNoticeInput : NoticeInput
+[NotTable]
+public class AddNoticeInput : SysNotice
 {
-    /// <summary>
-    /// 标题
-    /// </summary>
-    [Required(ErrorMessage = "标题不能为空")]
-    public override string Title { get; set; }
-
-    /// <summary>
-    /// 内容
-    /// </summary>
-    [Required(ErrorMessage = "内容不能为空")]
-    public override string Content { get; set; }
-
-    /// <summary>
-    /// 类型(字典 1通知 2公告)
-    /// </summary>
-    [Required(ErrorMessage = "类型不能为空")]
-    public override NoticeTypeEnum Type { get; set; }
-
-    /// <summary>
-    /// 状态(字典 0草稿 1发布 2撤回 3删除)
-    /// </summary>
-    [Required(ErrorMessage = "状态不能为空")]
-    public override NoticeStatusEnum Status { get; set; }
-
-    /// <summary>
-    /// 通知到的人
-    /// </summary>
-    [Required(ErrorMessage = "通知到的人不能为空")]
-    public override List<long> NoticeUserIdList { get; set; }
-}
-
-public class DeleteNoticeInput
-{
-    /// <summary>
-    /// Id
-    /// </summary>
-    [Required(ErrorMessage = "通知公告Id不能为空")]
-    public long Id { get; set; }
 }
 
+[NotTable]
 public class UpdateNoticeInput : AddNoticeInput
 {
-    /// <summary>
-    /// Id
-    /// </summary>
-    [Required(ErrorMessage = "通知公告Id不能为空")]
-    public long Id { get; set; }
 }
 
-public class QueryNoticeInput : DeleteNoticeInput
+public class DeleteNoticeInput : BaseIdInput
 {
 }
 
-public class ChangeStatusNoticeInput : DeleteNoticeInput
+public class NoticeInput : BaseIdInput
 {
-    /// <summary>
-    /// 状态(字典 0草稿 1发布 2撤回 3删除)
-    /// </summary>
-    [Required(ErrorMessage = "状态不能为空")]
-    public NoticeStatusEnum Status { get; set; }
 }

+ 0 - 22
Admin.NET/Admin.NET.Core/Service/Notice/Dto/NoticeReceiveOutput.cs

@@ -1,22 +0,0 @@
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 通知公告接收参数
-/// </summary>
-public class NoticeReceiveOutput : NoticeBase
-{
-    /// <summary>
-    /// Id
-    /// </summary>
-    public long Id { get; set; }
-
-    /// <summary>
-    /// 阅读状态(字典 0未读 1已读)
-    /// </summary>
-    public int ReadStatus { get; set; }
-
-    /// <summary>
-    /// 阅读时间
-    /// </summary>
-    public DateTime ReadTime { get; set; }
-}

+ 0 - 18
Admin.NET/Admin.NET.Core/Service/Notice/ISysNoticeService.cs

@@ -1,18 +0,0 @@
-namespace Admin.NET.Core.Service;
-
-public interface ISysNoticeService
-{
-    Task AddNotice(AddNoticeInput input);
-
-    Task ChangeStatus(ChangeStatusNoticeInput input);
-
-    Task DeleteNotice(DeleteNoticeInput input);
-
-    Task<NoticeDetailOutput> GetNotice([FromQuery] QueryNoticeInput input);
-
-    Task<dynamic> QueryNoticePageList([FromQuery] NoticeInput input);
-
-    Task<dynamic> ReceivedNoticePageList([FromQuery] NoticeInput input);
-
-    Task UpdateNotice(UpdateNoticeInput input);
-}

+ 0 - 12
Admin.NET/Admin.NET.Core/Service/Notice/ISysNoticeUserService.cs

@@ -1,12 +0,0 @@
-namespace Admin.NET.Core.Service;
-
-public interface ISysNoticeUserService
-{
-    Task Add(long noticeId, List<long> noticeUserIdList, NoticeUserStatusEnum noticeUserStatus);
-
-    Task<List<SysNoticeUser>> GetNoticeUserListByNoticeId(long noticeId);
-
-    Task Read(long noticeId, long userId, NoticeUserStatusEnum status);
-
-    Task Update(long noticeId, List<long> noticeUserIdList, NoticeUserStatusEnum noticeUserStatus);
-}

+ 68 - 158
Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs

@@ -4,43 +4,40 @@
 /// 系统通知公告服务
 /// </summary>
 [ApiDescriptionSettings(Order = 100)]
-public class SysNoticeService : ISysNoticeService, IDynamicApiController, ITransient
+public class SysNoticeService : IDynamicApiController, ITransient
 {
     private readonly UserManager _userManager;
-
     private readonly SqlSugarRepository<SysUser> _sysUserRep;
     private readonly SqlSugarRepository<SysNotice> _sysNoticeRep;
-
+    private readonly SqlSugarRepository<SysNoticeUser> _sysNoticeUserRep;
     private readonly SysOnlineUserService _sysOnlineUserService;
-    private readonly ISysNoticeUserService _sysNoticeUserService;
 
     public SysNoticeService(
         UserManager userManager,
         SqlSugarRepository<SysUser> sysUserRep,
         SqlSugarRepository<SysNotice> sysNoticeRep,
-        SysOnlineUserService sysOnlineUserService,
-        ISysNoticeUserService sysNoticeUserService)
+        SqlSugarRepository<SysNoticeUser> sysNoticeUserRep,
+        SysOnlineUserService sysOnlineUserService)
     {
         _userManager = userManager;
         _sysUserRep = sysUserRep;
         _sysNoticeRep = sysNoticeRep;
+        _sysNoticeUserRep = sysNoticeUserRep;
         _sysOnlineUserService = sysOnlineUserService;
-        _sysNoticeUserService = sysNoticeUserService;
     }
 
     /// <summary>
-    /// 分页查询通知公告
+    /// 获取通知公告分页列表
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpGet("/sysNotice/page")]
-    public async Task<dynamic> QueryNoticePageList([FromQuery] NoticeInput input)
+    public async Task<SqlSugarPagedList<SysNotice>> GetPageNotice([FromQuery] PageNoticeInput input)
     {
         return await _sysNoticeRep.Context.Queryable<SysNotice>()
             .WhereIF(!string.IsNullOrWhiteSpace(input.Title), u => u.Title.Contains(input.Title.Trim()))
-            .WhereIF(!string.IsNullOrWhiteSpace(input.Content), u => u.Content.Contains(input.Content.Trim()))
             .WhereIF(input.Type > 0, u => u.Type == input.Type)
-            .Where(u => u.Status != NoticeStatusEnum.DELETED)
+            .OrderBy(u => u.CreateTime, OrderByType.Desc)
             .ToPagedListAsync(input.Page, input.PageSize);
     }
 
@@ -52,207 +49,120 @@ public class SysNoticeService : ISysNoticeService, IDynamicApiController, ITrans
     [HttpPost("/sysNotice/add")]
     public async Task AddNotice(AddNoticeInput input)
     {
-        if (input.Status != NoticeStatusEnum.DRAFT && input.Status != NoticeStatusEnum.PUBLIC)
-            throw Oops.Oh(ErrorCodeEnum.D7000);
-
         var notice = input.Adapt<SysNotice>();
-        await UpdatePublicInfo(notice);
-        // 如果是发布,则设置发布时间
-        if (input.Status == NoticeStatusEnum.PUBLIC)
-            notice.PublicTime = DateTime.Now;
-        var newItem = await _sysNoticeRep.AsInsertable(notice).ExecuteReturnEntityAsync();
-
-        // 通知到的人
-        var noticeUserIdList = input.NoticeUserIdList;
-        var noticeUserStatus = NoticeUserStatusEnum.UNREAD;
-        await _sysNoticeUserService.Add(newItem.Id, noticeUserIdList, noticeUserStatus);
-        if (newItem.Status == NoticeStatusEnum.PUBLIC)
-        {
-            await _sysOnlineUserService.AppendNotice(newItem, noticeUserIdList);
-        }
+        InitNoticeInfo(notice);
+        await _sysNoticeRep.InsertAsync(notice);
     }
 
     /// <summary>
-    /// 删除通知公告
+    /// 更新通知公告
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [HttpPost("/sysNotice/delete")]
-    public async Task DeleteNotice(DeleteNoticeInput input)
+    [HttpPost("/sysNotice/update")]
+    [UnitOfWork]
+    public async Task UpdateNotice(UpdateNoticeInput input)
     {
-        var notice = await _sysNoticeRep.GetFirstAsync(u => u.Id == input.Id);
-        if (notice.Status != NoticeStatusEnum.DRAFT && notice.Status != NoticeStatusEnum.CANCEL) // 只能删除草稿和撤回的
-            throw Oops.Oh(ErrorCodeEnum.D7001);
-
-        await _sysNoticeRep.DeleteAsync(notice);
+        var notice = input.Adapt<SysNotice>();
+        InitNoticeInfo(notice);
+        await _sysNoticeRep.UpdateAsync(notice);
     }
 
     /// <summary>
-    /// 更新通知公告
+    /// 删除通知公告
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [HttpPost("/sysNotice/edit")]
-    public async Task UpdateNotice(UpdateNoticeInput input)
+    [HttpPost("/sysNotice/delete")]
+    [UnitOfWork]
+    public async Task DeleteNotice(DeleteNoticeInput input)
     {
-        if (input.Status != NoticeStatusEnum.DRAFT && input.Status != NoticeStatusEnum.PUBLIC)
-            throw Oops.Oh(ErrorCodeEnum.D7000);
-
-        //  非草稿状态
-        if (input.Status != NoticeStatusEnum.DRAFT)
-            throw Oops.Oh(ErrorCodeEnum.D7002);
+        await _sysNoticeRep.DeleteAsync(u => u.Id == input.Id);
 
-        var notice = input.Adapt<SysNotice>();
-        if (input.Status == NoticeStatusEnum.PUBLIC)
-        {
-            notice.PublicTime = DateTime.Now;
-            await UpdatePublicInfo(notice);
-        }
-        await _sysNoticeRep.UpdateAsync(notice);
-
-        // 通知到的人
-        var noticeUserIdList = input.NoticeUserIdList;
-        var noticeUserStatus = NoticeUserStatusEnum.UNREAD;
-        await _sysNoticeUserService.Update(input.Id, noticeUserIdList, noticeUserStatus);
-        if (notice.Status == NoticeStatusEnum.PUBLIC)
-        {
-            await _sysOnlineUserService.AppendNotice(notice, noticeUserIdList);
-        }
+        await _sysNoticeUserRep.DeleteAsync(u => u.NoticeId == input.Id);
     }
 
     /// <summary>
-    /// 获取通知公告详情
+    /// 发布通知公告
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [HttpGet("/sysNotice/detail")]
-    public async Task<NoticeDetailOutput> GetNotice([FromQuery] QueryNoticeInput input)
+    [HttpPost("/sysNotice/public")]
+    public async Task PublicNotice(NoticeInput input)
     {
+        // 更新发布状态和时间
+        await _sysNoticeRep.UpdateAsync(u => new SysNotice() { Status = NoticeStatusEnum.PUBLIC, PublicTime = DateTime.Now }, u => u.Id == input.Id);
+
         var notice = await _sysNoticeRep.GetFirstAsync(u => u.Id == input.Id);
 
-        // 获取通知到的用户
-        var noticeUserList = await _sysNoticeUserService.GetNoticeUserListByNoticeId(input.Id);
-        var noticeUserIdList = new List<string>();
-        var noticeUserReadInfoList = new List<NoticeUserRead>();
-        if (noticeUserList != null)
+        // 通知到的人(所有账号)
+        var userIdList = await _sysUserRep.AsQueryable().Select(u => u.Id).ToListAsync();
+
+        await _sysNoticeUserRep.DeleteAsync(u => u.NoticeId == notice.Id);
+        var noticeUserList = userIdList.Select(u => new SysNoticeUser
         {
-            noticeUserList.ForEach(u =>
-            {
-                noticeUserIdList.Add(u.UserId.ToString());
-                var noticeUserRead = new NoticeUserRead
-                {
-                    UserId = u.UserId,
-                    UserName = _userManager.Account,
-                    ReadStatus = u.ReadStatus,
-                    ReadTime = u.ReadTime
-                };
-                noticeUserReadInfoList.Add(noticeUserRead);
-            });
-        }
-        var noticeResult = notice.Adapt<NoticeDetailOutput>();
-        noticeResult.NoticeUserIdList = noticeUserIdList;
-        noticeResult.NoticeUserReadInfoList = noticeUserReadInfoList;
-        // 如果该条通知公告为已发布,则将当前用户的该条通知公告设置为已读
-        if (notice.Status == NoticeStatusEnum.PUBLIC)
-            await _sysNoticeUserService.Read(notice.Id, _userManager.UserId, NoticeUserStatusEnum.READ);
-        return noticeResult;
+            NoticeId = notice.Id,
+            UserId = u,
+        }).ToList();
+        await _sysNoticeUserRep.InsertRangeAsync(noticeUserList);
+
+        // 广播所有在线账号
+        await _sysOnlineUserService.AppendNotice(notice, userIdList);
     }
 
     /// <summary>
-    /// 修改通知公告状态
+    /// 设置通知公告已读状态
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [HttpPost("/sysNotice/changeStatus")]
-    public async Task ChangeStatus(ChangeStatusNoticeInput input)
+    [HttpPost("/sysNotice/setRead")]
+    public async Task SetNoticeRead(NoticeInput input)
     {
-        // 状态应为撤回或删除或发布
-        if (input.Status != NoticeStatusEnum.CANCEL && input.Status != NoticeStatusEnum.DELETED && input.Status != NoticeStatusEnum.PUBLIC)
-            throw Oops.Oh(ErrorCodeEnum.D7000);
-
-        var notice = await _sysNoticeRep.GetFirstAsync(u => u.Id == input.Id);
-        notice.Status = input.Status;
-
-        if (input.Status == NoticeStatusEnum.CANCEL)
-        {
-            notice.CancelTime = DateTime.Now;
-        }
-        else if (input.Status == NoticeStatusEnum.PUBLIC)
+        await _sysNoticeUserRep.UpdateAsync(u => new SysNoticeUser
         {
-            notice.PublicTime = DateTime.Now;
-        }
-        await _sysNoticeRep.UpdateAsync(notice);
-        if (notice.Status == NoticeStatusEnum.PUBLIC)
-        {
-            // 获取通知到的用户
-            var noticeUserList = await _sysNoticeUserService.GetNoticeUserListByNoticeId(input.Id);
-            await _sysOnlineUserService.AppendNotice(notice, noticeUserList.Select(m => m.UserId).ToList());
-        }
+            ReadStatus = NoticeUserStatusEnum.READ,
+            ReadTime = DateTime.Now
+        }, u => u.NoticeId == input.Id && u.UserId == _userManager.UserId);
     }
 
     /// <summary>
-    /// 获取接收的通知公告
+    /// 获取接收的通知公告(当前用户)
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [HttpGet("/sysNotice/received")]
-    public async Task<dynamic> ReceivedNoticePageList([FromQuery] NoticeInput input)
+    [HttpGet("/sysNotice/pageReceived")]
+    public async Task<SqlSugarPagedList<SysNoticeUser>> GetPageReceivedNotice([FromQuery] PageNoticeInput input)
     {
-        return await _sysNoticeRep.Context.Queryable<SysNotice, SysNoticeUser>((n, u) => new JoinQueryInfos(JoinType.Inner, n.Id == u.NoticeId))
-          .Where((n, u) => u.UserId == _userManager.UserId)
-          .WhereIF(!string.IsNullOrWhiteSpace(input.Title), u => u.Title.Contains(input.Title.Trim()))
-          .WhereIF(!string.IsNullOrWhiteSpace(input.Content), u => u.Title.Contains(input.Content.Trim()))
-          .WhereIF(input.Type > 0, (n, u) => n.Type == input.Type)
-          .Select<NoticeReceiveOutput>()
-          .ToPagedListAsync(input.Page, input.PageSize);
+        return await _sysNoticeRep.AsSugarClient().Queryable<SysNoticeUser>().Includes(u => u.SysNotice)
+            .Where(u => u.UserId == _userManager.UserId)
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Title), u => u.SysNotice.Title.Contains(input.Title.Trim()))
+            .WhereIF(input.Type > 0, u => u.SysNotice.Type == input.Type)
+            .OrderBy(u => u.SysNotice.CreateTime, OrderByType.Desc)
+            .ToPagedListAsync(input.Page, input.PageSize);
     }
 
     /// <summary>
-    /// 未处理消息
+    /// 获取未读的通知公告(当前用户)
     /// </summary>
-    /// <param name="input"></param>
     /// <returns></returns>
-    [HttpGet("/sysNotice/unread")]
-    public async Task<dynamic> UnReadNoticeList([FromQuery] NoticeInput input)
+    [HttpGet("/sysNotice/unReadList")]
+    public async Task<List<SysNoticeUser>> GetUnReadNoticeList()
     {
-        var dic = typeof(NoticeTypeEnum).EnumToList();
-        var notices = await _sysNoticeRep.Context.Queryable<SysNotice, SysNoticeUser>((n, u) => new JoinQueryInfos(JoinType.Inner, n.Id == u.NoticeId))
-            .Where((n, u) => u.UserId == _userManager.UserId && u.ReadStatus == NoticeUserStatusEnum.UNREAD)
-            .PartitionBy(n => n.Type).OrderBy(n => n.CreateTime, OrderByType.Desc)
-            .Take(input.PageSize).Select<NoticeReceiveOutput>().ToListAsync();
-        var count = await _sysNoticeRep.Context.Queryable<SysNotice, SysNoticeUser>((n, u) => new JoinQueryInfos(JoinType.Inner, n.Id == u.NoticeId))
-            .Where((n, u) => u.UserId == _userManager.UserId && u.ReadStatus == NoticeUserStatusEnum.UNREAD).CountAsync();
-
-        var noticeClays = new List<dynamic>();
-        int index = 0;
-        foreach (var item in dic)
-        {
-            noticeClays.Add(new
-            {
-                Index = index++,
-                Key = item.Describe,
-                Value = item.Value,
-                NoticeData = notices.Where(m => m.Type == item.Value).ToList()
-            });
-        }
-        return new
-        {
-            Rows = noticeClays,
-            TotalRows = count
-        };
+        return await _sysNoticeRep.AsSugarClient().Queryable<SysNoticeUser>().Includes(u => u.SysNotice)
+            .Where(u => u.UserId == _userManager.UserId && u.ReadStatus == NoticeUserStatusEnum.UNREAD)
+            .OrderBy(u => u.SysNotice.CreateTime, OrderByType.Desc)
+            .OrderBy(u => u.SysNotice.CreateTime, OrderByType.Desc).ToListAsync();
     }
 
     /// <summary>
-    /// 更新发布信息
+    /// 初始化通知公告信息
     /// </summary>
     /// <param name="notice"></param>
     [NonAction]
-    private async Task UpdatePublicInfo(SysNotice notice)
+    private void InitNoticeInfo(SysNotice notice)
     {
-        var user = await _sysUserRep.GetFirstAsync(u => u.Id == _userManager.UserId);
         notice.PublicUserId = _userManager.UserId;
-        notice.PublicUserName = _userManager.Account;
-        notice.PublicOrgId = user.OrgId;
-        // notice.PublicOrgName = user.OrgName;
+        notice.PublicUserName = _userManager.RealName;
+        notice.PublicOrgId = _userManager.OrgId;
     }
 }

+ 0 - 77
Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeUserService.cs

@@ -1,77 +0,0 @@
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 系统通知公告用户
-/// </summary>
-[ApiDescriptionSettings(Order = 100)]
-public class SysNoticeUserService : ISysNoticeUserService, ITransient
-{
-    private readonly SqlSugarRepository<SysNoticeUser> _sysNoticeUserRep;  // 通知公告用户表仓储
-
-    public SysNoticeUserService(SqlSugarRepository<SysNoticeUser> sysNoticeUserRep)
-    {
-        _sysNoticeUserRep = sysNoticeUserRep;
-    }
-
-    /// <summary>
-    /// 增加
-    /// </summary>
-    /// <param name="noticeId"></param>
-    /// <param name="noticeUserIdList"></param>
-    /// <param name="noticeUserStatus"></param>
-    /// <returns></returns>
-    public async Task Add(long noticeId, List<long> noticeUserIdList, NoticeUserStatusEnum noticeUserStatus)
-    {
-        var list = new List<SysNoticeUser>();
-        noticeUserIdList.ForEach(u =>
-        {
-            list.Add(new SysNoticeUser
-            {
-                NoticeId = noticeId,
-                UserId = u,
-                ReadStatus = noticeUserStatus
-            });
-        });
-        await _sysNoticeUserRep.InsertRangeAsync(list);
-    }
-
-    /// <summary>
-    /// 更新
-    /// </summary>
-    /// <param name="noticeId"></param>
-    /// <param name="noticeUserIdList"></param>
-    /// <param name="noticeUserStatus"></param>
-    /// <returns></returns>
-    public async Task Update(long noticeId, List<long> noticeUserIdList, NoticeUserStatusEnum noticeUserStatus)
-    {
-        await _sysNoticeUserRep.DeleteAsync(u => u.NoticeId == noticeId);
-
-        await Add(noticeId, noticeUserIdList, noticeUserStatus);
-    }
-
-    /// <summary>
-    /// 获取通知公告用户列表
-    /// </summary>
-    /// <param name="noticeId"></param>
-    /// <returns></returns>
-    public async Task<List<SysNoticeUser>> GetNoticeUserListByNoticeId(long noticeId)
-    {
-        return await _sysNoticeUserRep.GetListAsync(u => u.NoticeId == noticeId);
-    }
-
-    /// <summary>
-    /// 设置通知公告读取状态
-    /// </summary>
-    /// <param name="noticeId"></param>
-    /// <param name="userId"></param>
-    /// <param name="status"></param>
-    /// <returns></returns>
-    public async Task Read(long noticeId, long userId, NoticeUserStatusEnum status)
-    {
-        await _sysNoticeUserRep.UpdateAsync(u => new SysNoticeUser
-        {
-            ReadStatus = status,
-            ReadTime = DateTime.Now
-        }, u => u.NoticeId == noticeId && u.UserId == userId);
-    }
-}

+ 1 - 1
Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj

@@ -11,7 +11,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="AspNet.Security.OAuth.Weixin" Version="6.0.12" />
+    <PackageReference Include="AspNet.Security.OAuth.Weixin" Version="6.0.13" />
     <PackageReference Include="IGeekFan.AspNetCore.Knife4jUI" Version="0.0.12" />
   </ItemGroup>
 

+ 222 - 354
Web/src/api-services/apis/sys-notice-api.ts

@@ -17,11 +17,11 @@ import { Configuration } from '../configuration';
 // @ts-ignore
 import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
 import { AddNoticeInput } from '../models';
-import { AdminResultNoticeDetailOutput } from '../models';
-import { AdminResultObject } from '../models';
-import { ChangeStatusNoticeInput } from '../models';
+import { AdminResultListSysNoticeUser } from '../models';
+import { AdminResultSqlSugarPagedListSysNotice } from '../models';
+import { AdminResultSqlSugarPagedListSysNoticeUser } from '../models';
 import { DeleteNoticeInput } from '../models';
-import { NoticeStatusEnum } from '../models';
+import { NoticeInput } from '../models';
 import { NoticeTypeEnum } from '../models';
 import { UpdateNoticeInput } from '../models';
 /**
@@ -73,13 +73,13 @@ export const SysNoticeApiAxiosParamCreator = function (configuration?: Configura
         },
         /**
          * 
-         * @summary 修改通知公告状态
-         * @param {ChangeStatusNoticeInput} [body] 
+         * @summary 删除通知公告
+         * @param {DeleteNoticeInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        sysNoticeChangeStatusPost: async (body?: ChangeStatusNoticeInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/sysNotice/changeStatus`;
+        sysNoticeDeletePost: async (body?: DeleteNoticeInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/sysNotice/delete`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -114,26 +114,58 @@ export const SysNoticeApiAxiosParamCreator = function (configuration?: Configura
         },
         /**
          * 
-         * @summary 删除通知公告
-         * @param {DeleteNoticeInput} [body] 
+         * @summary 获取通知公告分页列表
+         * @param {string} [title] 标题
+         * @param {NoticeTypeEnum} [type] 类型(1通知 2公告)
+         * @param {number} [page] 当前页码
+         * @param {number} [pageSize] 页码容量
+         * @param {string} [field] 排序字段
+         * @param {string} [order] 排序方向
+         * @param {string} [descStr] 降序排序
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        sysNoticeDeletePost: async (body?: DeleteNoticeInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/sysNotice/delete`;
+        sysNoticePageGet: async (title?: string, type?: NoticeTypeEnum, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/sysNotice/page`;
             // 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 localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
             const localVarHeaderParameter = {} as any;
             const localVarQueryParameter = {} as any;
 
             // authentication Bearer required
 
-            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
+            if (title !== undefined) {
+                localVarQueryParameter['Title'] = title;
+            }
+
+            if (type !== undefined) {
+                localVarQueryParameter['Type'] = type;
+            }
+
+            if (page !== undefined) {
+                localVarQueryParameter['Page'] = page;
+            }
+
+            if (pageSize !== undefined) {
+                localVarQueryParameter['PageSize'] = pageSize;
+            }
+
+            if (field !== undefined) {
+                localVarQueryParameter['Field'] = field;
+            }
+
+            if (order !== undefined) {
+                localVarQueryParameter['Order'] = order;
+            }
+
+            if (descStr !== undefined) {
+                localVarQueryParameter['DescStr'] = descStr;
+            }
 
             const query = new URLSearchParams(localVarUrlObj.search);
             for (const key in localVarQueryParameter) {
@@ -145,8 +177,6 @@ export const SysNoticeApiAxiosParamCreator = function (configuration?: Configura
             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,
@@ -155,17 +185,19 @@ export const SysNoticeApiAxiosParamCreator = function (configuration?: Configura
         },
         /**
          * 
-         * @summary 获取通知公告详情
-         * @param {number} id Id
+         * @summary 获取接收的通知公告(当前用户)
+         * @param {string} [title] 标题
+         * @param {NoticeTypeEnum} [type] 类型(1通知 2公告)
+         * @param {number} [page] 当前页码
+         * @param {number} [pageSize] 页码容量
+         * @param {string} [field] 排序字段
+         * @param {string} [order] 排序方向
+         * @param {string} [descStr] 降序排序
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        sysNoticeDetailGet: async (id: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling sysNoticeDetailGet.');
-            }
-            const localVarPath = `/sysNotice/detail`;
+        sysNoticePageReceivedGet: async (title?: string, type?: NoticeTypeEnum, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/sysNotice/pageReceived`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -178,8 +210,32 @@ export const SysNoticeApiAxiosParamCreator = function (configuration?: Configura
 
             // authentication Bearer required
 
-            if (id !== undefined) {
-                localVarQueryParameter['Id'] = id;
+            if (title !== undefined) {
+                localVarQueryParameter['Title'] = title;
+            }
+
+            if (type !== undefined) {
+                localVarQueryParameter['Type'] = type;
+            }
+
+            if (page !== undefined) {
+                localVarQueryParameter['Page'] = page;
+            }
+
+            if (pageSize !== undefined) {
+                localVarQueryParameter['PageSize'] = pageSize;
+            }
+
+            if (field !== undefined) {
+                localVarQueryParameter['Field'] = field;
+            }
+
+            if (order !== undefined) {
+                localVarQueryParameter['Order'] = order;
+            }
+
+            if (descStr !== undefined) {
+                localVarQueryParameter['DescStr'] = descStr;
             }
 
             const query = new URLSearchParams(localVarUrlObj.search);
@@ -200,13 +256,13 @@ export const SysNoticeApiAxiosParamCreator = function (configuration?: Configura
         },
         /**
          * 
-         * @summary 更新通知公告
-         * @param {UpdateNoticeInput} [body] 
+         * @summary 发布通知公告
+         * @param {NoticeInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        sysNoticeEditPost: async (body?: UpdateNoticeInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/sysNotice/edit`;
+        sysNoticePublicPost: async (body?: NoticeInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/sysNotice/public`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -241,73 +297,26 @@ export const SysNoticeApiAxiosParamCreator = function (configuration?: Configura
         },
         /**
          * 
-         * @summary 分页查询通知公告
-         * @param {string} [title] 标题
-         * @param {string} [content] 内容
-         * @param {NoticeTypeEnum} [type] 类型(字典 1通知 2公告)
-         * @param {NoticeStatusEnum} [status] 状态(字典 0草稿 1发布 2撤回 3删除)
-         * @param {Array<number>} [noticeUserIdList] 通知到的人
-         * @param {number} [page] 当前页码
-         * @param {number} [pageSize] 页码容量
-         * @param {string} [field] 排序字段
-         * @param {string} [order] 排序方向
-         * @param {string} [descStr] 降序排序
+         * @summary 设置通知公告已读状态
+         * @param {NoticeInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        sysNoticePageGet: async (title?: string, content?: string, type?: NoticeTypeEnum, status?: NoticeStatusEnum, noticeUserIdList?: Array<number>, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/sysNotice/page`;
+        sysNoticeSetReadPost: async (body?: NoticeInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/sysNotice/setRead`;
             // 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 localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
             const localVarHeaderParameter = {} as any;
             const localVarQueryParameter = {} as any;
 
             // authentication Bearer required
 
-            if (title !== undefined) {
-                localVarQueryParameter['Title'] = title;
-            }
-
-            if (content !== undefined) {
-                localVarQueryParameter['Content'] = content;
-            }
-
-            if (type !== undefined) {
-                localVarQueryParameter['Type'] = type;
-            }
-
-            if (status !== undefined) {
-                localVarQueryParameter['Status'] = status;
-            }
-
-            if (noticeUserIdList) {
-                localVarQueryParameter['NoticeUserIdList'] = noticeUserIdList;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['Page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['PageSize'] = pageSize;
-            }
-
-            if (field !== undefined) {
-                localVarQueryParameter['Field'] = field;
-            }
-
-            if (order !== undefined) {
-                localVarQueryParameter['Order'] = order;
-            }
-
-            if (descStr !== undefined) {
-                localVarQueryParameter['DescStr'] = descStr;
-            }
+            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
 
             const query = new URLSearchParams(localVarUrlObj.search);
             for (const key in localVarQueryParameter) {
@@ -319,6 +328,8 @@ export const SysNoticeApiAxiosParamCreator = function (configuration?: Configura
             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,
@@ -327,22 +338,12 @@ export const SysNoticeApiAxiosParamCreator = function (configuration?: Configura
         },
         /**
          * 
-         * @summary 获取接收的通知公告
-         * @param {string} [title] 标题
-         * @param {string} [content] 内容
-         * @param {NoticeTypeEnum} [type] 类型(字典 1通知 2公告)
-         * @param {NoticeStatusEnum} [status] 状态(字典 0草稿 1发布 2撤回 3删除)
-         * @param {Array<number>} [noticeUserIdList] 通知到的人
-         * @param {number} [page] 当前页码
-         * @param {number} [pageSize] 页码容量
-         * @param {string} [field] 排序字段
-         * @param {string} [order] 排序方向
-         * @param {string} [descStr] 降序排序
+         * @summary 获取未读的通知公告(当前用户)
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        sysNoticeReceivedGet: async (title?: string, content?: string, type?: NoticeTypeEnum, status?: NoticeStatusEnum, noticeUserIdList?: Array<number>, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/sysNotice/received`;
+        sysNoticeUnReadListGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/sysNotice/unReadList`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -355,46 +356,6 @@ export const SysNoticeApiAxiosParamCreator = function (configuration?: Configura
 
             // authentication Bearer required
 
-            if (title !== undefined) {
-                localVarQueryParameter['Title'] = title;
-            }
-
-            if (content !== undefined) {
-                localVarQueryParameter['Content'] = content;
-            }
-
-            if (type !== undefined) {
-                localVarQueryParameter['Type'] = type;
-            }
-
-            if (status !== undefined) {
-                localVarQueryParameter['Status'] = status;
-            }
-
-            if (noticeUserIdList) {
-                localVarQueryParameter['NoticeUserIdList'] = noticeUserIdList;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['Page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['PageSize'] = pageSize;
-            }
-
-            if (field !== undefined) {
-                localVarQueryParameter['Field'] = field;
-            }
-
-            if (order !== undefined) {
-                localVarQueryParameter['Order'] = order;
-            }
-
-            if (descStr !== undefined) {
-                localVarQueryParameter['DescStr'] = descStr;
-            }
-
             const query = new URLSearchParams(localVarUrlObj.search);
             for (const key in localVarQueryParameter) {
                 query.set(key, localVarQueryParameter[key]);
@@ -413,73 +374,26 @@ export const SysNoticeApiAxiosParamCreator = function (configuration?: Configura
         },
         /**
          * 
-         * @summary 未处理消息
-         * @param {string} [title] 标题
-         * @param {string} [content] 内容
-         * @param {NoticeTypeEnum} [type] 类型(字典 1通知 2公告)
-         * @param {NoticeStatusEnum} [status] 状态(字典 0草稿 1发布 2撤回 3删除)
-         * @param {Array<number>} [noticeUserIdList] 通知到的人
-         * @param {number} [page] 当前页码
-         * @param {number} [pageSize] 页码容量
-         * @param {string} [field] 排序字段
-         * @param {string} [order] 排序方向
-         * @param {string} [descStr] 降序排序
+         * @summary 更新通知公告
+         * @param {UpdateNoticeInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        sysNoticeUnreadGet: async (title?: string, content?: string, type?: NoticeTypeEnum, status?: NoticeStatusEnum, noticeUserIdList?: Array<number>, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/sysNotice/unread`;
+        sysNoticeUpdatePost: async (body?: UpdateNoticeInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/sysNotice/update`;
             // 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 localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
             const localVarHeaderParameter = {} as any;
             const localVarQueryParameter = {} as any;
 
             // authentication Bearer required
 
-            if (title !== undefined) {
-                localVarQueryParameter['Title'] = title;
-            }
-
-            if (content !== undefined) {
-                localVarQueryParameter['Content'] = content;
-            }
-
-            if (type !== undefined) {
-                localVarQueryParameter['Type'] = type;
-            }
-
-            if (status !== undefined) {
-                localVarQueryParameter['Status'] = status;
-            }
-
-            if (noticeUserIdList) {
-                localVarQueryParameter['NoticeUserIdList'] = noticeUserIdList;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['Page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['PageSize'] = pageSize;
-            }
-
-            if (field !== undefined) {
-                localVarQueryParameter['Field'] = field;
-            }
-
-            if (order !== undefined) {
-                localVarQueryParameter['Order'] = order;
-            }
-
-            if (descStr !== undefined) {
-                localVarQueryParameter['DescStr'] = descStr;
-            }
+            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
 
             const query = new URLSearchParams(localVarUrlObj.search);
             for (const key in localVarQueryParameter) {
@@ -491,6 +405,8 @@ export const SysNoticeApiAxiosParamCreator = function (configuration?: Configura
             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,
@@ -522,13 +438,13 @@ export const SysNoticeApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 修改通知公告状态
-         * @param {ChangeStatusNoticeInput} [body] 
+         * @summary 删除通知公告
+         * @param {DeleteNoticeInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticeChangeStatusPost(body?: ChangeStatusNoticeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
-            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticeChangeStatusPost(body, options);
+        async sysNoticeDeletePost(body?: DeleteNoticeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
+            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticeDeletePost(body, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
@@ -536,13 +452,19 @@ export const SysNoticeApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 删除通知公告
-         * @param {DeleteNoticeInput} [body] 
+         * @summary 获取通知公告分页列表
+         * @param {string} [title] 标题
+         * @param {NoticeTypeEnum} [type] 类型(1通知 2公告)
+         * @param {number} [page] 当前页码
+         * @param {number} [pageSize] 页码容量
+         * @param {string} [field] 排序字段
+         * @param {string} [order] 排序方向
+         * @param {string} [descStr] 降序排序
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticeDeletePost(body?: DeleteNoticeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
-            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticeDeletePost(body, options);
+        async sysNoticePageGet(title?: string, type?: NoticeTypeEnum, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSqlSugarPagedListSysNotice>>> {
+            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticePageGet(title, type, page, pageSize, field, order, descStr, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
@@ -550,13 +472,19 @@ export const SysNoticeApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 获取通知公告详情
-         * @param {number} id Id
+         * @summary 获取接收的通知公告(当前用户)
+         * @param {string} [title] 标题
+         * @param {NoticeTypeEnum} [type] 类型(1通知 2公告)
+         * @param {number} [page] 当前页码
+         * @param {number} [pageSize] 页码容量
+         * @param {string} [field] 排序字段
+         * @param {string} [order] 排序方向
+         * @param {string} [descStr] 降序排序
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticeDetailGet(id: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultNoticeDetailOutput>>> {
-            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticeDetailGet(id, options);
+        async sysNoticePageReceivedGet(title?: string, type?: NoticeTypeEnum, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSqlSugarPagedListSysNoticeUser>>> {
+            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticePageReceivedGet(title, type, page, pageSize, field, order, descStr, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
@@ -564,13 +492,13 @@ export const SysNoticeApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 更新通知公告
-         * @param {UpdateNoticeInput} [body] 
+         * @summary 发布通知公告
+         * @param {NoticeInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticeEditPost(body?: UpdateNoticeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
-            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticeEditPost(body, options);
+        async sysNoticePublicPost(body?: NoticeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
+            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticePublicPost(body, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
@@ -578,22 +506,13 @@ export const SysNoticeApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 分页查询通知公告
-         * @param {string} [title] 标题
-         * @param {string} [content] 内容
-         * @param {NoticeTypeEnum} [type] 类型(字典 1通知 2公告)
-         * @param {NoticeStatusEnum} [status] 状态(字典 0草稿 1发布 2撤回 3删除)
-         * @param {Array<number>} [noticeUserIdList] 通知到的人
-         * @param {number} [page] 当前页码
-         * @param {number} [pageSize] 页码容量
-         * @param {string} [field] 排序字段
-         * @param {string} [order] 排序方向
-         * @param {string} [descStr] 降序排序
+         * @summary 设置通知公告已读状态
+         * @param {NoticeInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticePageGet(title?: string, content?: string, type?: NoticeTypeEnum, status?: NoticeStatusEnum, noticeUserIdList?: Array<number>, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultObject>>> {
-            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticePageGet(title, content, type, status, noticeUserIdList, page, pageSize, field, order, descStr, options);
+        async sysNoticeSetReadPost(body?: NoticeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
+            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticeSetReadPost(body, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
@@ -601,22 +520,12 @@ export const SysNoticeApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 获取接收的通知公告
-         * @param {string} [title] 标题
-         * @param {string} [content] 内容
-         * @param {NoticeTypeEnum} [type] 类型(字典 1通知 2公告)
-         * @param {NoticeStatusEnum} [status] 状态(字典 0草稿 1发布 2撤回 3删除)
-         * @param {Array<number>} [noticeUserIdList] 通知到的人
-         * @param {number} [page] 当前页码
-         * @param {number} [pageSize] 页码容量
-         * @param {string} [field] 排序字段
-         * @param {string} [order] 排序方向
-         * @param {string} [descStr] 降序排序
+         * @summary 获取未读的通知公告(当前用户)
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticeReceivedGet(title?: string, content?: string, type?: NoticeTypeEnum, status?: NoticeStatusEnum, noticeUserIdList?: Array<number>, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultObject>>> {
-            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticeReceivedGet(title, content, type, status, noticeUserIdList, page, pageSize, field, order, descStr, options);
+        async sysNoticeUnReadListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListSysNoticeUser>>> {
+            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticeUnReadListGet(options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
@@ -624,22 +533,13 @@ export const SysNoticeApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 未处理消息
-         * @param {string} [title] 标题
-         * @param {string} [content] 内容
-         * @param {NoticeTypeEnum} [type] 类型(字典 1通知 2公告)
-         * @param {NoticeStatusEnum} [status] 状态(字典 0草稿 1发布 2撤回 3删除)
-         * @param {Array<number>} [noticeUserIdList] 通知到的人
-         * @param {number} [page] 当前页码
-         * @param {number} [pageSize] 页码容量
-         * @param {string} [field] 排序字段
-         * @param {string} [order] 排序方向
-         * @param {string} [descStr] 降序排序
+         * @summary 更新通知公告
+         * @param {UpdateNoticeInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticeUnreadGet(title?: string, content?: string, type?: NoticeTypeEnum, status?: NoticeStatusEnum, noticeUserIdList?: Array<number>, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultObject>>> {
-            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticeUnreadGet(title, content, type, status, noticeUserIdList, page, pageSize, field, order, descStr, options);
+        async sysNoticeUpdatePost(body?: UpdateNoticeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
+            const localVarAxiosArgs = await SysNoticeApiAxiosParamCreator(configuration).sysNoticeUpdatePost(body, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
@@ -666,100 +566,84 @@ export const SysNoticeApiFactory = function (configuration?: Configuration, base
         },
         /**
          * 
-         * @summary 修改通知公告状态
-         * @param {ChangeStatusNoticeInput} [body] 
+         * @summary 删除通知公告
+         * @param {DeleteNoticeInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticeChangeStatusPost(body?: ChangeStatusNoticeInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
-            return SysNoticeApiFp(configuration).sysNoticeChangeStatusPost(body, options).then((request) => request(axios, basePath));
+        async sysNoticeDeletePost(body?: DeleteNoticeInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
+            return SysNoticeApiFp(configuration).sysNoticeDeletePost(body, options).then((request) => request(axios, basePath));
         },
         /**
          * 
-         * @summary 删除通知公告
-         * @param {DeleteNoticeInput} [body] 
+         * @summary 获取通知公告分页列表
+         * @param {string} [title] 标题
+         * @param {NoticeTypeEnum} [type] 类型(1通知 2公告)
+         * @param {number} [page] 当前页码
+         * @param {number} [pageSize] 页码容量
+         * @param {string} [field] 排序字段
+         * @param {string} [order] 排序方向
+         * @param {string} [descStr] 降序排序
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticeDeletePost(body?: DeleteNoticeInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
-            return SysNoticeApiFp(configuration).sysNoticeDeletePost(body, options).then((request) => request(axios, basePath));
+        async sysNoticePageGet(title?: string, type?: NoticeTypeEnum, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSqlSugarPagedListSysNotice>> {
+            return SysNoticeApiFp(configuration).sysNoticePageGet(title, type, page, pageSize, field, order, descStr, options).then((request) => request(axios, basePath));
         },
         /**
          * 
-         * @summary 获取通知公告详情
-         * @param {number} id Id
+         * @summary 获取接收的通知公告(当前用户)
+         * @param {string} [title] 标题
+         * @param {NoticeTypeEnum} [type] 类型(1通知 2公告)
+         * @param {number} [page] 当前页码
+         * @param {number} [pageSize] 页码容量
+         * @param {string} [field] 排序字段
+         * @param {string} [order] 排序方向
+         * @param {string} [descStr] 降序排序
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticeDetailGet(id: number, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultNoticeDetailOutput>> {
-            return SysNoticeApiFp(configuration).sysNoticeDetailGet(id, options).then((request) => request(axios, basePath));
+        async sysNoticePageReceivedGet(title?: string, type?: NoticeTypeEnum, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSqlSugarPagedListSysNoticeUser>> {
+            return SysNoticeApiFp(configuration).sysNoticePageReceivedGet(title, type, page, pageSize, field, order, descStr, options).then((request) => request(axios, basePath));
         },
         /**
          * 
-         * @summary 更新通知公告
-         * @param {UpdateNoticeInput} [body] 
+         * @summary 发布通知公告
+         * @param {NoticeInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticeEditPost(body?: UpdateNoticeInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
-            return SysNoticeApiFp(configuration).sysNoticeEditPost(body, options).then((request) => request(axios, basePath));
+        async sysNoticePublicPost(body?: NoticeInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
+            return SysNoticeApiFp(configuration).sysNoticePublicPost(body, options).then((request) => request(axios, basePath));
         },
         /**
          * 
-         * @summary 分页查询通知公告
-         * @param {string} [title] 标题
-         * @param {string} [content] 内容
-         * @param {NoticeTypeEnum} [type] 类型(字典 1通知 2公告)
-         * @param {NoticeStatusEnum} [status] 状态(字典 0草稿 1发布 2撤回 3删除)
-         * @param {Array<number>} [noticeUserIdList] 通知到的人
-         * @param {number} [page] 当前页码
-         * @param {number} [pageSize] 页码容量
-         * @param {string} [field] 排序字段
-         * @param {string} [order] 排序方向
-         * @param {string} [descStr] 降序排序
+         * @summary 设置通知公告已读状态
+         * @param {NoticeInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticePageGet(title?: string, content?: string, type?: NoticeTypeEnum, status?: NoticeStatusEnum, noticeUserIdList?: Array<number>, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
-            return SysNoticeApiFp(configuration).sysNoticePageGet(title, content, type, status, noticeUserIdList, page, pageSize, field, order, descStr, options).then((request) => request(axios, basePath));
+        async sysNoticeSetReadPost(body?: NoticeInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
+            return SysNoticeApiFp(configuration).sysNoticeSetReadPost(body, options).then((request) => request(axios, basePath));
         },
         /**
          * 
-         * @summary 获取接收的通知公告
-         * @param {string} [title] 标题
-         * @param {string} [content] 内容
-         * @param {NoticeTypeEnum} [type] 类型(字典 1通知 2公告)
-         * @param {NoticeStatusEnum} [status] 状态(字典 0草稿 1发布 2撤回 3删除)
-         * @param {Array<number>} [noticeUserIdList] 通知到的人
-         * @param {number} [page] 当前页码
-         * @param {number} [pageSize] 页码容量
-         * @param {string} [field] 排序字段
-         * @param {string} [order] 排序方向
-         * @param {string} [descStr] 降序排序
+         * @summary 获取未读的通知公告(当前用户)
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticeReceivedGet(title?: string, content?: string, type?: NoticeTypeEnum, status?: NoticeStatusEnum, noticeUserIdList?: Array<number>, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
-            return SysNoticeApiFp(configuration).sysNoticeReceivedGet(title, content, type, status, noticeUserIdList, page, pageSize, field, order, descStr, options).then((request) => request(axios, basePath));
+        async sysNoticeUnReadListGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListSysNoticeUser>> {
+            return SysNoticeApiFp(configuration).sysNoticeUnReadListGet(options).then((request) => request(axios, basePath));
         },
         /**
          * 
-         * @summary 未处理消息
-         * @param {string} [title] 标题
-         * @param {string} [content] 内容
-         * @param {NoticeTypeEnum} [type] 类型(字典 1通知 2公告)
-         * @param {NoticeStatusEnum} [status] 状态(字典 0草稿 1发布 2撤回 3删除)
-         * @param {Array<number>} [noticeUserIdList] 通知到的人
-         * @param {number} [page] 当前页码
-         * @param {number} [pageSize] 页码容量
-         * @param {string} [field] 排序字段
-         * @param {string} [order] 排序方向
-         * @param {string} [descStr] 降序排序
+         * @summary 更新通知公告
+         * @param {UpdateNoticeInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysNoticeUnreadGet(title?: string, content?: string, type?: NoticeTypeEnum, status?: NoticeStatusEnum, noticeUserIdList?: Array<number>, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
-            return SysNoticeApiFp(configuration).sysNoticeUnreadGet(title, content, type, status, noticeUserIdList, page, pageSize, field, order, descStr, options).then((request) => request(axios, basePath));
+        async sysNoticeUpdatePost(body?: UpdateNoticeInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
+            return SysNoticeApiFp(configuration).sysNoticeUpdatePost(body, options).then((request) => request(axios, basePath));
         },
     };
 };
@@ -784,106 +668,90 @@ export class SysNoticeApi extends BaseAPI {
     }
     /**
      * 
-     * @summary 修改通知公告状态
-     * @param {ChangeStatusNoticeInput} [body] 
+     * @summary 删除通知公告
+     * @param {DeleteNoticeInput} [body] 
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @memberof SysNoticeApi
      */
-    public async sysNoticeChangeStatusPost(body?: ChangeStatusNoticeInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
-        return SysNoticeApiFp(this.configuration).sysNoticeChangeStatusPost(body, options).then((request) => request(this.axios, this.basePath));
+    public async sysNoticeDeletePost(body?: DeleteNoticeInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
+        return SysNoticeApiFp(this.configuration).sysNoticeDeletePost(body, options).then((request) => request(this.axios, this.basePath));
     }
     /**
      * 
-     * @summary 删除通知公告
-     * @param {DeleteNoticeInput} [body] 
+     * @summary 获取通知公告分页列表
+     * @param {string} [title] 标题
+     * @param {NoticeTypeEnum} [type] 类型(1通知 2公告)
+     * @param {number} [page] 当前页码
+     * @param {number} [pageSize] 页码容量
+     * @param {string} [field] 排序字段
+     * @param {string} [order] 排序方向
+     * @param {string} [descStr] 降序排序
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @memberof SysNoticeApi
      */
-    public async sysNoticeDeletePost(body?: DeleteNoticeInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
-        return SysNoticeApiFp(this.configuration).sysNoticeDeletePost(body, options).then((request) => request(this.axios, this.basePath));
+    public async sysNoticePageGet(title?: string, type?: NoticeTypeEnum, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultSqlSugarPagedListSysNotice>> {
+        return SysNoticeApiFp(this.configuration).sysNoticePageGet(title, type, page, pageSize, field, order, descStr, options).then((request) => request(this.axios, this.basePath));
     }
     /**
      * 
-     * @summary 获取通知公告详情
-     * @param {number} id Id
+     * @summary 获取接收的通知公告(当前用户)
+     * @param {string} [title] 标题
+     * @param {NoticeTypeEnum} [type] 类型(1通知 2公告)
+     * @param {number} [page] 当前页码
+     * @param {number} [pageSize] 页码容量
+     * @param {string} [field] 排序字段
+     * @param {string} [order] 排序方向
+     * @param {string} [descStr] 降序排序
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @memberof SysNoticeApi
      */
-    public async sysNoticeDetailGet(id: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultNoticeDetailOutput>> {
-        return SysNoticeApiFp(this.configuration).sysNoticeDetailGet(id, options).then((request) => request(this.axios, this.basePath));
+    public async sysNoticePageReceivedGet(title?: string, type?: NoticeTypeEnum, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultSqlSugarPagedListSysNoticeUser>> {
+        return SysNoticeApiFp(this.configuration).sysNoticePageReceivedGet(title, type, page, pageSize, field, order, descStr, options).then((request) => request(this.axios, this.basePath));
     }
     /**
      * 
-     * @summary 更新通知公告
-     * @param {UpdateNoticeInput} [body] 
+     * @summary 发布通知公告
+     * @param {NoticeInput} [body] 
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @memberof SysNoticeApi
      */
-    public async sysNoticeEditPost(body?: UpdateNoticeInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
-        return SysNoticeApiFp(this.configuration).sysNoticeEditPost(body, options).then((request) => request(this.axios, this.basePath));
+    public async sysNoticePublicPost(body?: NoticeInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
+        return SysNoticeApiFp(this.configuration).sysNoticePublicPost(body, options).then((request) => request(this.axios, this.basePath));
     }
     /**
      * 
-     * @summary 分页查询通知公告
-     * @param {string} [title] 标题
-     * @param {string} [content] 内容
-     * @param {NoticeTypeEnum} [type] 类型(字典 1通知 2公告)
-     * @param {NoticeStatusEnum} [status] 状态(字典 0草稿 1发布 2撤回 3删除)
-     * @param {Array<number>} [noticeUserIdList] 通知到的人
-     * @param {number} [page] 当前页码
-     * @param {number} [pageSize] 页码容量
-     * @param {string} [field] 排序字段
-     * @param {string} [order] 排序方向
-     * @param {string} [descStr] 降序排序
+     * @summary 设置通知公告已读状态
+     * @param {NoticeInput} [body] 
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @memberof SysNoticeApi
      */
-    public async sysNoticePageGet(title?: string, content?: string, type?: NoticeTypeEnum, status?: NoticeStatusEnum, noticeUserIdList?: Array<number>, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
-        return SysNoticeApiFp(this.configuration).sysNoticePageGet(title, content, type, status, noticeUserIdList, page, pageSize, field, order, descStr, options).then((request) => request(this.axios, this.basePath));
+    public async sysNoticeSetReadPost(body?: NoticeInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
+        return SysNoticeApiFp(this.configuration).sysNoticeSetReadPost(body, options).then((request) => request(this.axios, this.basePath));
     }
     /**
      * 
-     * @summary 获取接收的通知公告
-     * @param {string} [title] 标题
-     * @param {string} [content] 内容
-     * @param {NoticeTypeEnum} [type] 类型(字典 1通知 2公告)
-     * @param {NoticeStatusEnum} [status] 状态(字典 0草稿 1发布 2撤回 3删除)
-     * @param {Array<number>} [noticeUserIdList] 通知到的人
-     * @param {number} [page] 当前页码
-     * @param {number} [pageSize] 页码容量
-     * @param {string} [field] 排序字段
-     * @param {string} [order] 排序方向
-     * @param {string} [descStr] 降序排序
+     * @summary 获取未读的通知公告(当前用户)
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @memberof SysNoticeApi
      */
-    public async sysNoticeReceivedGet(title?: string, content?: string, type?: NoticeTypeEnum, status?: NoticeStatusEnum, noticeUserIdList?: Array<number>, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
-        return SysNoticeApiFp(this.configuration).sysNoticeReceivedGet(title, content, type, status, noticeUserIdList, page, pageSize, field, order, descStr, options).then((request) => request(this.axios, this.basePath));
+    public async sysNoticeUnReadListGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListSysNoticeUser>> {
+        return SysNoticeApiFp(this.configuration).sysNoticeUnReadListGet(options).then((request) => request(this.axios, this.basePath));
     }
     /**
      * 
-     * @summary 未处理消息
-     * @param {string} [title] 标题
-     * @param {string} [content] 内容
-     * @param {NoticeTypeEnum} [type] 类型(字典 1通知 2公告)
-     * @param {NoticeStatusEnum} [status] 状态(字典 0草稿 1发布 2撤回 3删除)
-     * @param {Array<number>} [noticeUserIdList] 通知到的人
-     * @param {number} [page] 当前页码
-     * @param {number} [pageSize] 页码容量
-     * @param {string} [field] 排序字段
-     * @param {string} [order] 排序方向
-     * @param {string} [descStr] 降序排序
+     * @summary 更新通知公告
+     * @param {UpdateNoticeInput} [body] 
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @memberof SysNoticeApi
      */
-    public async sysNoticeUnreadGet(title?: string, content?: string, type?: NoticeTypeEnum, status?: NoticeStatusEnum, noticeUserIdList?: Array<number>, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
-        return SysNoticeApiFp(this.configuration).sysNoticeUnreadGet(title, content, type, status, noticeUserIdList, page, pageSize, field, order, descStr, options).then((request) => request(this.axios, this.basePath));
+    public async sysNoticeUpdatePost(body?: UpdateNoticeInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
+        return SysNoticeApiFp(this.configuration).sysNoticeUpdatePost(body, options).then((request) => request(this.axios, this.basePath));
     }
 }

+ 57 - 21
Web/src/api-services/models/add-notice-input.ts

@@ -20,35 +20,41 @@ import { NoticeTypeEnum } from './notice-type-enum';
  */
 export interface AddNoticeInput {
     /**
-     * 当前页码
+     * 雪花Id
      * @type {number}
      * @memberof AddNoticeInput
      */
-    page?: number;
+    id?: number;
     /**
-     * 页码容量
-     * @type {number}
+     * 创建时间
+     * @type {Date}
      * @memberof AddNoticeInput
      */
-    pageSize?: number;
+    createTime?: Date | null;
     /**
-     * 排序字段
-     * @type {string}
+     * 更新时间
+     * @type {Date}
      * @memberof AddNoticeInput
      */
-    field?: string | null;
+    updateTime?: Date | null;
     /**
-     * 排序方向
-     * @type {string}
+     * 创建者Id
+     * @type {number}
      * @memberof AddNoticeInput
      */
-    order?: string | null;
+    createUserId?: number | null;
     /**
-     * 降序排序
-     * @type {string}
+     * 修改者Id
+     * @type {number}
+     * @memberof AddNoticeInput
+     */
+    updateUserId?: number | null;
+    /**
+     * 软删除
+     * @type {boolean}
      * @memberof AddNoticeInput
      */
-    descStr?: string | null;
+    isDelete?: boolean;
     /**
      * 标题
      * @type {string}
@@ -66,17 +72,47 @@ export interface AddNoticeInput {
      * @type {NoticeTypeEnum}
      * @memberof AddNoticeInput
      */
-    type: NoticeTypeEnum;
+    type?: NoticeTypeEnum;
     /**
-     * 
-     * @type {NoticeStatusEnum}
+     * 发布人Id
+     * @type {number}
+     * @memberof AddNoticeInput
+     */
+    publicUserId?: number;
+    /**
+     * 发布人姓名
+     * @type {string}
      * @memberof AddNoticeInput
      */
-    status: NoticeStatusEnum;
+    publicUserName?: string | null;
     /**
-     * 通知到的人
-     * @type {Array<number>}
+     * 发布机构Id
+     * @type {number}
+     * @memberof AddNoticeInput
+     */
+    publicOrgId?: number;
+    /**
+     * 发布机构名称
+     * @type {string}
+     * @memberof AddNoticeInput
+     */
+    publicOrgName?: string | null;
+    /**
+     * 发布时间
+     * @type {Date}
+     * @memberof AddNoticeInput
+     */
+    publicTime?: Date;
+    /**
+     * 撤回时间
+     * @type {Date}
+     * @memberof AddNoticeInput
+     */
+    cancelTime?: Date;
+    /**
+     * 
+     * @type {NoticeStatusEnum}
      * @memberof AddNoticeInput
      */
-    noticeUserIdList: Array<number>;
+    status?: NoticeStatusEnum;
 }

+ 12 - 12
Web/src/api-services/models/admin-result-notice-detail-output.ts → Web/src/api-services/models/admin-result-list-sys-notice-user.ts

@@ -11,47 +11,47 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-import { NoticeDetailOutput } from './notice-detail-output';
+import { SysNoticeUser } from './sys-notice-user';
 /**
  * 全局返回结果
  * @export
- * @interface AdminResultNoticeDetailOutput
+ * @interface AdminResultListSysNoticeUser
  */
-export interface AdminResultNoticeDetailOutput {
+export interface AdminResultListSysNoticeUser {
     /**
      * 状态码
      * @type {number}
-     * @memberof AdminResultNoticeDetailOutput
+     * @memberof AdminResultListSysNoticeUser
      */
     code?: number;
     /**
      * 类型success、warning、error
      * @type {string}
-     * @memberof AdminResultNoticeDetailOutput
+     * @memberof AdminResultListSysNoticeUser
      */
     type?: string | null;
     /**
      * 错误信息
      * @type {string}
-     * @memberof AdminResultNoticeDetailOutput
+     * @memberof AdminResultListSysNoticeUser
      */
     message?: string | null;
     /**
-     * 
-     * @type {NoticeDetailOutput}
-     * @memberof AdminResultNoticeDetailOutput
+     * 数据
+     * @type {Array<SysNoticeUser>}
+     * @memberof AdminResultListSysNoticeUser
      */
-    result?: NoticeDetailOutput;
+    result?: Array<SysNoticeUser> | null;
     /**
      * 附加数据
      * @type {any}
-     * @memberof AdminResultNoticeDetailOutput
+     * @memberof AdminResultListSysNoticeUser
      */
     extras?: any | null;
     /**
      * 时间
      * @type {Date}
-     * @memberof AdminResultNoticeDetailOutput
+     * @memberof AdminResultListSysNoticeUser
      */
     time?: Date;
 }

+ 57 - 0
Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-notice-user.ts

@@ -0,0 +1,57 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET
+ * 让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: 515096995@qq.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SqlSugarPagedListSysNoticeUser } from './sql-sugar-paged-list-sys-notice-user';
+/**
+ * 全局返回结果
+ * @export
+ * @interface AdminResultSqlSugarPagedListSysNoticeUser
+ */
+export interface AdminResultSqlSugarPagedListSysNoticeUser {
+    /**
+     * 状态码
+     * @type {number}
+     * @memberof AdminResultSqlSugarPagedListSysNoticeUser
+     */
+    code?: number;
+    /**
+     * 类型success、warning、error
+     * @type {string}
+     * @memberof AdminResultSqlSugarPagedListSysNoticeUser
+     */
+    type?: string | null;
+    /**
+     * 错误信息
+     * @type {string}
+     * @memberof AdminResultSqlSugarPagedListSysNoticeUser
+     */
+    message?: string | null;
+    /**
+     * 
+     * @type {SqlSugarPagedListSysNoticeUser}
+     * @memberof AdminResultSqlSugarPagedListSysNoticeUser
+     */
+    result?: SqlSugarPagedListSysNoticeUser;
+    /**
+     * 附加数据
+     * @type {any}
+     * @memberof AdminResultSqlSugarPagedListSysNoticeUser
+     */
+    extras?: any | null;
+    /**
+     * 时间
+     * @type {Date}
+     * @memberof AdminResultSqlSugarPagedListSysNoticeUser
+     */
+    time?: Date;
+}

+ 57 - 0
Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-notice.ts

@@ -0,0 +1,57 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET
+ * 让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: 515096995@qq.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SqlSugarPagedListSysNotice } from './sql-sugar-paged-list-sys-notice';
+/**
+ * 全局返回结果
+ * @export
+ * @interface AdminResultSqlSugarPagedListSysNotice
+ */
+export interface AdminResultSqlSugarPagedListSysNotice {
+    /**
+     * 状态码
+     * @type {number}
+     * @memberof AdminResultSqlSugarPagedListSysNotice
+     */
+    code?: number;
+    /**
+     * 类型success、warning、error
+     * @type {string}
+     * @memberof AdminResultSqlSugarPagedListSysNotice
+     */
+    type?: string | null;
+    /**
+     * 错误信息
+     * @type {string}
+     * @memberof AdminResultSqlSugarPagedListSysNotice
+     */
+    message?: string | null;
+    /**
+     * 
+     * @type {SqlSugarPagedListSysNotice}
+     * @memberof AdminResultSqlSugarPagedListSysNotice
+     */
+    result?: SqlSugarPagedListSysNotice;
+    /**
+     * 附加数据
+     * @type {any}
+     * @memberof AdminResultSqlSugarPagedListSysNotice
+     */
+    extras?: any | null;
+    /**
+     * 时间
+     * @type {Date}
+     * @memberof AdminResultSqlSugarPagedListSysNotice
+     */
+    time?: Date;
+}

+ 1 - 1
Web/src/api-services/models/delete-notice-input.ts

@@ -18,7 +18,7 @@
  */
 export interface DeleteNoticeInput {
     /**
-     * Id
+     * 主键Id
      * @type {number}
      * @memberof DeleteNoticeInput
      */

+ 8 - 4
Web/src/api-services/models/index.ts

@@ -32,6 +32,7 @@ export * from './admin-result-list-sys-config';
 export * from './admin-result-list-sys-dict-data';
 export * from './admin-result-list-sys-dict-type';
 export * from './admin-result-list-sys-menu';
+export * from './admin-result-list-sys-notice-user';
 export * from './admin-result-list-sys-org';
 export * from './admin-result-list-sys-pos';
 export * from './admin-result-list-sys-region';
@@ -40,7 +41,6 @@ export * from './admin-result-list-table-column-ouput';
 export * from './admin-result-list-table-output';
 export * from './admin-result-login-output';
 export * from './admin-result-login-user-output';
-export * from './admin-result-notice-detail-output';
 export * from './admin-result-object';
 export * from './admin-result-sql-sugar-paged-list-sys-code-gen';
 export * from './admin-result-sql-sugar-paged-list-sys-config';
@@ -51,6 +51,8 @@ export * from './admin-result-sql-sugar-paged-list-sys-log-diff';
 export * from './admin-result-sql-sugar-paged-list-sys-log-ex';
 export * from './admin-result-sql-sugar-paged-list-sys-log-op';
 export * from './admin-result-sql-sugar-paged-list-sys-log-vis';
+export * from './admin-result-sql-sugar-paged-list-sys-notice';
+export * from './admin-result-sql-sugar-paged-list-sys-notice-user';
 export * from './admin-result-sql-sugar-paged-list-sys-online-user';
 export * from './admin-result-sql-sugar-paged-list-sys-region';
 export * from './admin-result-sql-sugar-paged-list-sys-role';
@@ -68,7 +70,6 @@ export * from './admin-result-we-chat-pay';
 export * from './admin-result-we-chat-pay-output';
 export * from './card-type-enum';
 export * from './change-pwd-input';
-export * from './change-status-notice-input';
 export * from './code-gen-config';
 export * from './create-entity-input';
 export * from './culture-level-enum';
@@ -111,10 +112,9 @@ export * from './menu-output';
 export * from './menu-type-enum';
 export * from './message-input';
 export * from './message-type-enum';
-export * from './notice-detail-output';
+export * from './notice-input';
 export * from './notice-status-enum';
 export * from './notice-type-enum';
-export * from './notice-user-read';
 export * from './notice-user-status-enum';
 export * from './request-type-enum';
 export * from './reset-pwd-user-input';
@@ -137,6 +137,8 @@ export * from './sql-sugar-paged-list-sys-log-diff';
 export * from './sql-sugar-paged-list-sys-log-ex';
 export * from './sql-sugar-paged-list-sys-log-op';
 export * from './sql-sugar-paged-list-sys-log-vis';
+export * from './sql-sugar-paged-list-sys-notice';
+export * from './sql-sugar-paged-list-sys-notice-user';
 export * from './sql-sugar-paged-list-sys-online-user';
 export * from './sql-sugar-paged-list-sys-region';
 export * from './sql-sugar-paged-list-sys-role';
@@ -161,6 +163,8 @@ export * from './sys-log-op';
 export * from './sys-log-vis';
 export * from './sys-menu';
 export * from './sys-menu-meta';
+export * from './sys-notice';
+export * from './sys-notice-user';
 export * from './sys-online-user';
 export * from './sys-org';
 export * from './sys-pos';

+ 4 - 11
Web/src/api-services/models/change-status-notice-input.ts → Web/src/api-services/models/notice-input.ts

@@ -11,23 +11,16 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-import { NoticeStatusEnum } from './notice-status-enum';
 /**
  * 
  * @export
- * @interface ChangeStatusNoticeInput
+ * @interface NoticeInput
  */
-export interface ChangeStatusNoticeInput {
+export interface NoticeInput {
     /**
-     * Id
+     * 主键Id
      * @type {number}
-     * @memberof ChangeStatusNoticeInput
+     * @memberof NoticeInput
      */
     id: number;
-    /**
-     * 
-     * @type {NoticeStatusEnum}
-     * @memberof ChangeStatusNoticeInput
-     */
-    status: NoticeStatusEnum;
 }

+ 63 - 0
Web/src/api-services/models/sql-sugar-paged-list-sys-notice-user.ts

@@ -0,0 +1,63 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET
+ * 让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: 515096995@qq.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SysNoticeUser } from './sys-notice-user';
+/**
+ * 分页泛型集合
+ * @export
+ * @interface SqlSugarPagedListSysNoticeUser
+ */
+export interface SqlSugarPagedListSysNoticeUser {
+    /**
+     * 页码
+     * @type {number}
+     * @memberof SqlSugarPagedListSysNoticeUser
+     */
+    page?: number;
+    /**
+     * 页容量
+     * @type {number}
+     * @memberof SqlSugarPagedListSysNoticeUser
+     */
+    pageSize?: number;
+    /**
+     * 总条数
+     * @type {number}
+     * @memberof SqlSugarPagedListSysNoticeUser
+     */
+    total?: number;
+    /**
+     * 总页数
+     * @type {number}
+     * @memberof SqlSugarPagedListSysNoticeUser
+     */
+    totalPages?: number;
+    /**
+     * 当前页集合
+     * @type {Array<SysNoticeUser>}
+     * @memberof SqlSugarPagedListSysNoticeUser
+     */
+    items?: Array<SysNoticeUser> | null;
+    /**
+     * 是否有上一页
+     * @type {boolean}
+     * @memberof SqlSugarPagedListSysNoticeUser
+     */
+    hasPrevPage?: boolean;
+    /**
+     * 是否有下一页
+     * @type {boolean}
+     * @memberof SqlSugarPagedListSysNoticeUser
+     */
+    hasNextPage?: boolean;
+}

+ 63 - 0
Web/src/api-services/models/sql-sugar-paged-list-sys-notice.ts

@@ -0,0 +1,63 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET
+ * 让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: 515096995@qq.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SysNotice } from './sys-notice';
+/**
+ * 分页泛型集合
+ * @export
+ * @interface SqlSugarPagedListSysNotice
+ */
+export interface SqlSugarPagedListSysNotice {
+    /**
+     * 页码
+     * @type {number}
+     * @memberof SqlSugarPagedListSysNotice
+     */
+    page?: number;
+    /**
+     * 页容量
+     * @type {number}
+     * @memberof SqlSugarPagedListSysNotice
+     */
+    pageSize?: number;
+    /**
+     * 总条数
+     * @type {number}
+     * @memberof SqlSugarPagedListSysNotice
+     */
+    total?: number;
+    /**
+     * 总页数
+     * @type {number}
+     * @memberof SqlSugarPagedListSysNotice
+     */
+    totalPages?: number;
+    /**
+     * 当前页集合
+     * @type {Array<SysNotice>}
+     * @memberof SqlSugarPagedListSysNotice
+     */
+    items?: Array<SysNotice> | null;
+    /**
+     * 是否有上一页
+     * @type {boolean}
+     * @memberof SqlSugarPagedListSysNotice
+     */
+    hasPrevPage?: boolean;
+    /**
+     * 是否有下一页
+     * @type {boolean}
+     * @memberof SqlSugarPagedListSysNotice
+     */
+    hasNextPage?: boolean;
+}

+ 22 - 15
Web/src/api-services/models/notice-user-read.ts → Web/src/api-services/models/sys-notice-user.ts

@@ -12,34 +12,41 @@
  * Do not edit the class manually.
  */
 import { NoticeUserStatusEnum } from './notice-user-status-enum';
+import { SysNotice } from './sys-notice';
 /**
- * 
+ * 系统通知公告用户表
  * @export
- * @interface NoticeUserRead
+ * @interface SysNoticeUser
  */
-export interface NoticeUserRead {
+export interface SysNoticeUser {
     /**
-     * 用户Id
+     * 通知公告Id
      * @type {number}
-     * @memberof NoticeUserRead
+     * @memberof SysNoticeUser
      */
-    userId?: number;
+    noticeId?: number;
     /**
-     * 用户名称
-     * @type {string}
-     * @memberof NoticeUserRead
+     * 
+     * @type {SysNotice}
+     * @memberof SysNoticeUser
      */
-    userName?: string | null;
+    sysNotice?: SysNotice;
     /**
-     * 
-     * @type {NoticeUserStatusEnum}
-     * @memberof NoticeUserRead
+     * 用户Id
+     * @type {number}
+     * @memberof SysNoticeUser
      */
-    readStatus?: NoticeUserStatusEnum;
+    userId?: number;
     /**
      * 阅读时间
      * @type {Date}
-     * @memberof NoticeUserRead
+     * @memberof SysNoticeUser
      */
     readTime?: Date;
+    /**
+     * 
+     * @type {NoticeUserStatusEnum}
+     * @memberof SysNoticeUser
+     */
+    readStatus?: NoticeUserStatusEnum;
 }

+ 59 - 34
Web/src/api-services/models/notice-detail-output.ts → Web/src/api-services/models/sys-notice.ts

@@ -11,83 +11,108 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-import { NoticeUserRead } from './notice-user-read';
+import { NoticeStatusEnum } from './notice-status-enum';
+import { NoticeTypeEnum } from './notice-type-enum';
 /**
- * 系统通知公告详情参数
+ * 系统通知公告
  * @export
- * @interface NoticeDetailOutput
+ * @interface SysNotice
  */
-export interface NoticeDetailOutput {
+export interface SysNotice {
+    /**
+     * 雪花Id
+     * @type {number}
+     * @memberof SysNotice
+     */
+    id?: number;
+    /**
+     * 创建时间
+     * @type {Date}
+     * @memberof SysNotice
+     */
+    createTime?: Date | null;
+    /**
+     * 更新时间
+     * @type {Date}
+     * @memberof SysNotice
+     */
+    updateTime?: Date | null;
+    /**
+     * 创建者Id
+     * @type {number}
+     * @memberof SysNotice
+     */
+    createUserId?: number | null;
+    /**
+     * 修改者Id
+     * @type {number}
+     * @memberof SysNotice
+     */
+    updateUserId?: number | null;
+    /**
+     * 软删除
+     * @type {boolean}
+     * @memberof SysNotice
+     */
+    isDelete?: boolean;
     /**
      * 标题
      * @type {string}
-     * @memberof NoticeDetailOutput
+     * @memberof SysNotice
      */
-    title?: string | null;
+    title: string;
     /**
      * 内容
      * @type {string}
-     * @memberof NoticeDetailOutput
+     * @memberof SysNotice
      */
-    content?: string | null;
+    content: string;
     /**
-     * 类型(字典 1通知 2公告)
-     * @type {number}
-     * @memberof NoticeDetailOutput
+     * 
+     * @type {NoticeTypeEnum}
+     * @memberof SysNotice
      */
-    type?: number;
+    type?: NoticeTypeEnum;
     /**
      * 发布人Id
      * @type {number}
-     * @memberof NoticeDetailOutput
+     * @memberof SysNotice
      */
     publicUserId?: number;
     /**
      * 发布人姓名
      * @type {string}
-     * @memberof NoticeDetailOutput
+     * @memberof SysNotice
      */
     publicUserName?: string | null;
     /**
      * 发布机构Id
      * @type {number}
-     * @memberof NoticeDetailOutput
+     * @memberof SysNotice
      */
     publicOrgId?: number;
     /**
      * 发布机构名称
      * @type {string}
-     * @memberof NoticeDetailOutput
+     * @memberof SysNotice
      */
     publicOrgName?: string | null;
     /**
      * 发布时间
      * @type {Date}
-     * @memberof NoticeDetailOutput
+     * @memberof SysNotice
      */
     publicTime?: Date;
     /**
      * 撤回时间
      * @type {Date}
-     * @memberof NoticeDetailOutput
+     * @memberof SysNotice
      */
     cancelTime?: Date;
     /**
-     * 状态(字典 0草稿 1发布 2撤回 3删除)
-     * @type {number}
-     * @memberof NoticeDetailOutput
-     */
-    status?: number;
-    /**
-     * 通知到的用户Id集合
-     * @type {Array<string>}
-     * @memberof NoticeDetailOutput
-     */
-    noticeUserIdList?: Array<string> | null;
-    /**
-     * 通知到的用户阅读信息集合
-     * @type {Array<NoticeUserRead>}
-     * @memberof NoticeDetailOutput
+     * 
+     * @type {NoticeStatusEnum}
+     * @memberof SysNotice
      */
-    noticeUserReadInfoList?: Array<NoticeUserRead> | null;
+    status?: NoticeStatusEnum;
 }

+ 53 - 23
Web/src/api-services/models/update-notice-input.ts

@@ -20,35 +20,41 @@ import { NoticeTypeEnum } from './notice-type-enum';
  */
 export interface UpdateNoticeInput {
     /**
-     * 当前页码
+     * 雪花Id
      * @type {number}
      * @memberof UpdateNoticeInput
      */
-    page?: number;
+    id?: number;
     /**
-     * 页码容量
-     * @type {number}
+     * 创建时间
+     * @type {Date}
      * @memberof UpdateNoticeInput
      */
-    pageSize?: number;
+    createTime?: Date | null;
     /**
-     * 排序字段
-     * @type {string}
+     * 更新时间
+     * @type {Date}
      * @memberof UpdateNoticeInput
      */
-    field?: string | null;
+    updateTime?: Date | null;
     /**
-     * 排序方向
-     * @type {string}
+     * 创建者Id
+     * @type {number}
      * @memberof UpdateNoticeInput
      */
-    order?: string | null;
+    createUserId?: number | null;
     /**
-     * 降序排序
-     * @type {string}
+     * 修改者Id
+     * @type {number}
+     * @memberof UpdateNoticeInput
+     */
+    updateUserId?: number | null;
+    /**
+     * 软删除
+     * @type {boolean}
      * @memberof UpdateNoticeInput
      */
-    descStr?: string | null;
+    isDelete?: boolean;
     /**
      * 标题
      * @type {string}
@@ -66,23 +72,47 @@ export interface UpdateNoticeInput {
      * @type {NoticeTypeEnum}
      * @memberof UpdateNoticeInput
      */
-    type: NoticeTypeEnum;
+    type?: NoticeTypeEnum;
     /**
-     * 
-     * @type {NoticeStatusEnum}
+     * 发布人Id
+     * @type {number}
      * @memberof UpdateNoticeInput
      */
-    status: NoticeStatusEnum;
+    publicUserId?: number;
     /**
-     * 通知到的人
-     * @type {Array<number>}
+     * 发布人姓名
+     * @type {string}
      * @memberof UpdateNoticeInput
      */
-    noticeUserIdList: Array<number>;
+    publicUserName?: string | null;
     /**
-     * Id
+     * 发布机构Id
      * @type {number}
      * @memberof UpdateNoticeInput
      */
-    id: number;
+    publicOrgId?: number;
+    /**
+     * 发布机构名称
+     * @type {string}
+     * @memberof UpdateNoticeInput
+     */
+    publicOrgName?: string | null;
+    /**
+     * 发布时间
+     * @type {Date}
+     * @memberof UpdateNoticeInput
+     */
+    publicTime?: Date;
+    /**
+     * 撤回时间
+     * @type {Date}
+     * @memberof UpdateNoticeInput
+     */
+    cancelTime?: Date;
+    /**
+     * 
+     * @type {NoticeStatusEnum}
+     * @memberof UpdateNoticeInput
+     */
+    status?: NoticeStatusEnum;
 }

+ 160 - 0
Web/src/views/home/notice/index.vue

@@ -0,0 +1,160 @@
+<template>
+	<div class="notice-container">
+		<el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
+			<el-form :model="queryParams" ref="queryForm" :inline="true">
+				<el-form-item label="标题" prop="title">
+					<el-input placeholder="标题" clearable @keyup.enter="handleQuery" v-model="queryParams.title" />
+				</el-form-item>
+				<el-form-item label="类型" prop="type">
+					<el-select v-model="queryParams.type" placeholder="类型" clearable style="width: 100%">
+						<el-option label="通知" :value="1" />
+						<el-option label="公告" :value="2" />
+					</el-select>
+				</el-form-item>
+				<el-form-item>
+					<el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button>
+					<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysNotice:page'"> 查询 </el-button>
+				</el-form-item>
+			</el-form>
+		</el-card>
+
+		<el-card shadow="hover" style="margin-top: 8px">
+			<el-table :data="noticeData" style="width: 100%" v-loading="loading" border :row-class-name="tableRowClassName">
+				<el-table-column type="index" label="序号" width="55" align="center" />
+				<el-table-column prop="sysNotice.title" label="标题" show-overflow-tooltip />
+				<el-table-column prop="sysNotice.content" label="内容" show-overflow-tooltip />
+				<el-table-column prop="sysNotice.type" label="类型" width="100" align="center" show-overflow-tooltip>
+					<template #default="scope">
+						<el-tag v-if="scope.row.sysNotice.type === 1"> 通知 </el-tag>
+						<el-tag type="danger" v-else> 公告 </el-tag>
+					</template>
+				</el-table-column>
+				<el-table-column prop="sysNotice.createTime" label="创建时间" align="center" show-overflow-tooltip />
+				<el-table-column prop="readStatus" label="阅读状态" width="100" align="center" show-overflow-tooltip>
+					<template #default="scope">
+						<el-tag type="success" v-if="scope.row.readStatus === 1"> 已读 </el-tag>
+						<el-tag type="danger" v-else> 未读 </el-tag>
+					</template>
+				</el-table-column>
+				<el-table-column prop="sysNotice.publicUserName" label="发布者" align="center" show-overflow-tooltip />
+				<el-table-column prop="sysNotice.publicTime" label="发布时间" align="center" show-overflow-tooltip />
+				<el-table-column label="操作" width="80" fixed="right" align="center" show-overflow-tooltip>
+					<template #default="scope">
+						<el-button icon="ele-InfoFilled" size="small" text type="primary" @click="viewDetail(scope.row)"> 详情 </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]"
+				small
+				background
+				@size-change="handleSizeChange"
+				@current-change="handleCurrentChange"
+				layout="total, sizes, prev, pager, next, jumper"
+			/>
+		</el-card>
+		<el-dialog v-model="dialogVisible" title="消息详情" draggable width="769px">
+			<p v-html="content"></p>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button type="primary" @click="dialogVisible = false">确认</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, defineComponent, onUnmounted, getCurrentInstance } from 'vue';
+
+import { getAPI } from '/@/utils/axios-utils';
+import { SysNoticeApi } from '/@/api-services/api';
+import { SysNoticeUser } from '/@/api-services/models';
+
+export default defineComponent({
+	name: 'notice',
+	components: {},
+	setup() {
+		const { proxy } = getCurrentInstance() as any;
+		const state = reactive({
+			loading: false,
+			noticeData: [] as Array<SysNoticeUser>,
+			queryParams: {
+				title: undefined,
+				type: undefined,
+			},
+			tableParams: {
+				page: 1,
+				pageSize: 10,
+				total: 0 as any,
+			},
+			editNoticeTitle: '',
+			dialogVisible: false,
+			content: '',
+		});
+		onMounted(async () => {
+			handleQuery();
+
+			proxy.mittBus.on('submitRefresh', () => {
+				handleQuery();
+			});
+		});
+		onUnmounted(() => {
+			proxy.mittBus.off('submitRefresh');
+		});
+		// 查询操作
+		const handleQuery = async () => {
+			state.loading = true;
+			var res = await getAPI(SysNoticeApi).sysNoticePageReceivedGet(state.queryParams.title, state.queryParams.type, state.tableParams.page, state.tableParams.pageSize);
+			state.noticeData = res.data.result?.items ?? [];
+			state.tableParams.total = res.data.result?.total;
+			state.loading = false;
+		};
+		// 重置操作
+		const resetQuery = () => {
+			state.queryParams.title = undefined;
+			state.queryParams.type = undefined;
+			handleQuery();
+		};
+		// 改变页面容量
+		const handleSizeChange = (val: number) => {
+			state.tableParams.pageSize = val;
+			handleQuery();
+		};
+		// 改变页码序号
+		const handleCurrentChange = (val: number) => {
+			state.tableParams.page = val;
+			handleQuery();
+		};
+		// 查看详情
+		const viewDetail = async (row: any) => {
+			state.content = row.sysNotice.content;
+			state.dialogVisible = true;
+
+			await getAPI(SysNoticeApi).sysNoticeSetReadPost({ id: row.sysNotice.id });
+		};
+		// eslint-disable-next-line no-unused-vars
+		const tableRowClassName = ({ row, rowIndex }: { row: SysNoticeUser; rowIndex: number }) => {
+			return row.readStatus === 1 ? 'info-row' : '';
+		};
+		return {
+			handleQuery,
+			resetQuery,
+			viewDetail,
+			handleSizeChange,
+			handleCurrentChange,
+			tableRowClassName,
+			...toRefs(state),
+		};
+	},
+});
+</script>
+
+<style lang="scss">
+.el-table .info-row {
+	--el-table-tr-bg-color: var(--el-color-info-light-9);
+}
+</style>

+ 2 - 2
Web/src/views/system/log/oplog/index.vue

@@ -28,9 +28,9 @@
 				<el-table-column prop="threadId" label="线程Id" show-overflow-tooltip />
 				<el-table-column prop="logDateTime" label="日志记录时间" align="center" show-overflow-tooltip />
 				<el-table-column prop="createTime" label="操作时间" align="center" show-overflow-tooltip />
-				<el-table-column label="操作" width="110" align="center" fixed="right" show-overflow-tooltip>
+				<el-table-column label="操作" width="80" align="center" fixed="right" show-overflow-tooltip>
 					<template #default="scope">
-						<el-button icon="ele-Edit" size="small" text type="primary" @click="viewDetail(scope.row)" v-auth="'sysOplog:page'">详情 </el-button>
+						<el-button icon="ele-InfoFilled" size="small" text type="primary" @click="viewDetail(scope.row)" v-auth="'sysOplog:page'">详情 </el-button>
 					</template>
 				</el-table-column>
 			</el-table>

+ 96 - 0
Web/src/views/system/notice/component/editNotice.vue

@@ -0,0 +1,96 @@
+<template>
+	<div class="sys-notice-container">
+		<el-dialog v-model="isShowDialog" :title="title" draggable :close-on-click-modal="false" width="800px">
+			<el-form :model="ruleForm" ref="ruleFormRef" size="default" label-width="80px">
+				<el-row :gutter="35">
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="标题" prop="title" :rules="[{ required: true, message: '标题不能为空', trigger: 'blur' }]">
+							<el-input v-model="ruleForm.title" 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="type" :rules="[{ required: true, message: '类型不能为空', trigger: 'blur' }]">
+							<el-select v-model="ruleForm.type" placeholder="类型" clearable filterable allow-create default-first-option style="width: 100%">
+								<el-option label="通知" :value="1" />
+								<el-option label="公告" :value="2" />
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+						<el-form-item label="内容" prop="content" :rules="[{ required: true, message: '内容不能为空', trigger: 'blur' }]">
+							<Editor v-model="ruleForm.content" />
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="cancel" size="default">取 消</el-button>
+					<el-button type="primary" @click="submit" size="default">确 定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, defineComponent, getCurrentInstance, ref } from 'vue';
+import Editor from '/@/components/editor/index.vue';
+
+import { getAPI } from '/@/utils/axios-utils';
+import { SysNoticeApi } from '/@/api-services/api';
+import { UpdateNoticeInput } from '/@/api-services/models';
+
+export default defineComponent({
+	name: 'sysNoticeEdit',
+	components: { Editor },
+	props: {
+		title: {
+			type: String,
+			default: '',
+		},
+	},
+	setup() {
+		const { proxy } = getCurrentInstance() as any;
+		const ruleFormRef = ref();
+		const state = reactive({
+			isShowDialog: false,
+			ruleForm: {} as UpdateNoticeInput,
+		});
+		// 打开弹窗
+		const openDialog = (row: any) => {
+			state.ruleForm = row;
+			state.isShowDialog = true;
+		};
+		// 关闭弹窗
+		const closeDialog = () => {
+			proxy.mittBus.emit('submitRefresh');
+			state.isShowDialog = false;
+		};
+		// 取消
+		const cancel = () => {
+			state.isShowDialog = false;
+		};
+		// 提交
+		const submit = () => {
+			ruleFormRef.value.validate(async (valid: boolean) => {
+				if (!valid) return;
+				if (state.ruleForm.id != undefined && state.ruleForm.id > 0) {
+					await getAPI(SysNoticeApi).sysNoticeUpdatePost(state.ruleForm);
+				} else {
+					await getAPI(SysNoticeApi).sysNoticeAddPost(state.ruleForm);
+				}
+				closeDialog();
+			});
+		};
+		return {
+			ruleFormRef,
+			openDialog,
+			closeDialog,
+			cancel,
+			submit,
+			...toRefs(state),
+		};
+	},
+});
+</script>

+ 181 - 0
Web/src/views/system/notice/index.vue

@@ -0,0 +1,181 @@
+<template>
+	<div class="sys-notice-container">
+		<el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
+			<el-form :model="queryParams" ref="queryForm" :inline="true">
+				<el-form-item label="标题" prop="title">
+					<el-input placeholder="标题" clearable @keyup.enter="handleQuery" v-model="queryParams.title" />
+				</el-form-item>
+				<el-form-item label="类型" prop="type">
+					<el-select v-model="queryParams.type" placeholder="类型" clearable style="width: 100%">
+						<el-option label="通知" :value="1" />
+						<el-option label="公告" :value="2" />
+					</el-select>
+				</el-form-item>
+				<el-form-item>
+					<el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button>
+					<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysNotice:page'"> 查询 </el-button>
+					<el-button icon="ele-Plus" @click="openAddNotice" v-auth="'sysNotice:add'"> 新增 </el-button>
+				</el-form-item>
+			</el-form>
+		</el-card>
+
+		<el-card shadow="hover" style="margin-top: 8px">
+			<el-table :data="noticeData" style="width: 100%" v-loading="loading" border>
+				<el-table-column type="index" label="序号" width="55" align="center" />
+				<el-table-column prop="title" label="标题" show-overflow-tooltip />
+				<el-table-column prop="content" label="内容" show-overflow-tooltip />
+				<el-table-column prop="type" label="类型" width="100" align="center" show-overflow-tooltip>
+					<template #default="scope">
+						<el-tag v-if="scope.row.type === 1"> 通知 </el-tag>
+						<el-tag type="danger" v-else> 公告 </el-tag>
+					</template>
+				</el-table-column>
+				<el-table-column prop="createTime" label="创建时间" align="center" show-overflow-tooltip />
+				<el-table-column prop="status" label="状态" width="100" align="center" show-overflow-tooltip>
+					<template #default="scope">
+						<el-tag type="success" v-if="scope.row.status === 1"> 已发布 </el-tag>
+						<el-tag type="warning" v-else> 未发布 </el-tag>
+					</template>
+				</el-table-column>
+				<el-table-column prop="publicUserName" label="发布者" align="center" show-overflow-tooltip />
+				<el-table-column prop="publicTime" label="发布时间" align="center" show-overflow-tooltip />
+				<el-table-column label="操作" width="200" fixed="right" align="center" show-overflow-tooltip>
+					<template #default="scope">
+						<el-button icon="ele-Position" size="small" text type="primary" @click="publicNotice(scope.row)" v-auth="'sysNotice:public'" :disabled="scope.row.status === 1"> 发布 </el-button>
+						<el-button icon="ele-Edit" size="small" text type="primary" @click="openEditNotice(scope.row)" v-auth="'sysNotice:update'" :disabled="scope.row.status === 1"> 编辑 </el-button>
+						<el-button icon="ele-Delete" size="small" text type="danger" @click="delNotice(scope.row)" v-auth="'sysNotice:delete'" :disabled="scope.row.status === 1"> 删除 </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]"
+				small
+				background
+				@size-change="handleSizeChange"
+				@current-change="handleCurrentChange"
+				layout="total, sizes, prev, pager, next, jumper"
+			/>
+		</el-card>
+		<EditNotice ref="editNoticeRef" :title="editNoticeTitle" />
+	</div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent, onUnmounted, getCurrentInstance } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import EditNotice from '/@/views/system/notice/component/editNotice.vue';
+
+import { getAPI } from '/@/utils/axios-utils';
+import { SysNoticeApi } from '/@/api-services/api';
+import { SysNotice } from '/@/api-services/models';
+
+export default defineComponent({
+	name: 'sysNotice',
+	components: { EditNotice },
+	setup() {
+		const { proxy } = getCurrentInstance() as any;
+		const editNoticeRef = ref();
+		const state = reactive({
+			loading: false,
+			noticeData: [] as Array<SysNotice>,
+			queryParams: {
+				title: undefined,
+				type: undefined,
+			},
+			tableParams: {
+				page: 1,
+				pageSize: 10,
+				total: 0 as any,
+			},
+			editNoticeTitle: '',
+		});
+		onMounted(async () => {
+			handleQuery();
+
+			proxy.mittBus.on('submitRefresh', () => {
+				handleQuery();
+			});
+		});
+		onUnmounted(() => {
+			proxy.mittBus.off('submitRefresh');
+		});
+		// 查询操作
+		const handleQuery = async () => {
+			state.loading = true;
+			var res = await getAPI(SysNoticeApi).sysNoticePageGet(state.queryParams.title, state.queryParams.type, state.tableParams.page, state.tableParams.pageSize);
+			state.noticeData = res.data.result?.items ?? [];
+			state.tableParams.total = res.data.result?.total;
+			state.loading = false;
+		};
+		// 重置操作
+		const resetQuery = () => {
+			state.queryParams.title = undefined;
+			state.queryParams.type = undefined;
+			handleQuery();
+		};
+		// 打开新增页面
+		const openAddNotice = () => {
+			state.editNoticeTitle = '添加通知公告';
+			editNoticeRef.value.openDialog({});
+		};
+		// 打开编辑页面
+		const openEditNotice = (row: any) => {
+			state.editNoticeTitle = '编辑通知公告';
+			editNoticeRef.value.openDialog(row);
+		};
+		// 删除
+		const delNotice = (row: any) => {
+			ElMessageBox.confirm(`确定删除通知公告:【${row.title}】?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning',
+			})
+				.then(async () => {
+					await getAPI(SysNoticeApi).sysNoticeDeletePost({ id: row.id });
+					handleQuery();
+					ElMessage.success('删除成功');
+				})
+				.catch(() => {});
+		};
+		// 发布
+		const publicNotice = (row: any) => {
+			ElMessageBox.confirm(`确定发布通知公告:【${row.title}】,不可撤销?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning',
+			})
+				.then(async () => {
+					await getAPI(SysNoticeApi).sysNoticePublicPost({ id: row.id });
+					handleQuery();
+					ElMessage.success('发布成功');
+				})
+				.catch(() => {});
+		};
+		// 改变页面容量
+		const handleSizeChange = (val: number) => {
+			state.tableParams.pageSize = val;
+			handleQuery();
+		};
+		// 改变页码序号
+		const handleCurrentChange = (val: number) => {
+			state.tableParams.page = val;
+			handleQuery();
+		};
+		return {
+			handleQuery,
+			resetQuery,
+			editNoticeRef,
+			openAddNotice,
+			openEditNotice,
+			delNotice,
+			publicNotice,
+			handleSizeChange,
+			handleCurrentChange,
+			...toRefs(state),
+		};
+	},
+});
+</script>