From c0b590a5ec03650847f8ded60917c95587166674 Mon Sep 17 00:00:00 2001 From: zuohuaijun Date: Sat, 21 Dec 2024 12:08:16 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=98=8E=E5=A2=9E=E5=8A=A0=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=8F=8A=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Configuration/Captcha.json | 2 - .../Admin.NET.Core/Admin.NET.Core.csproj | 2 +- Admin.NET/Admin.NET.Core/Const/ConfigConst.cs | 5 + Admin.NET/Admin.NET.Core/Entity/SysUpgrade.cs | 23 + .../Admin.NET.Core/Entity/SysUpgradeUser.cs | 33 ++ .../Extension/YitIdHelperExtension.cs | 9 +- .../{Utils => Extension}/YitIdInitHelper.cs | 0 .../SeedData/SysConfigSeedData.cs | 17 +- .../SeedData/SysMenuSeedData.cs | 10 +- .../Service/Notice/SysNoticeService.cs | 3 +- .../Service/Upgrade/Dto/UpgradeInput.cs | 27 + .../Service/Upgrade/SysUpgradeService.cs | 120 ++++ .../Service/User/SysUserService.cs | 2 +- .../Admin.NET.Core/SqlSugar/SqlSugarSetup.cs | 5 +- Admin.NET/Admin.NET.Web.Core/Startup.cs | 14 - .../template/web_views_editDialog.vue.vm | 2 +- Web/package.json | 4 +- Web/src/api-services/api.ts | 1 + Web/src/api-services/apis/sys-upgrade-api.ts | 551 ++++++++++++++++++ .../api-services/models/add-upgrade-input.ts | 94 +++ ...result-sql-sugar-paged-list-sys-upgrade.ts | 69 +++ .../models/admin-result-sys-upgrade.ts | 69 +++ .../models/delete-upgrade-input.ts | 30 + Web/src/api-services/models/index.ts | 9 + .../api-services/models/page-upgrade-input.ts | 84 +++ .../sql-sugar-paged-list-sys-upgrade.ts | 79 +++ Web/src/api-services/models/sys-upgrade.ts | 94 +++ .../models/update-upgrade-input.ts | 94 +++ Web/src/api-services/models/upgrade-input.ts | 30 + Web/src/layout/navBars/topBar/user.vue | 11 +- .../system/upgrade/component/editUpgrade.vue | 83 +++ .../system/upgrade/component/upgradeInfo.vue | 43 ++ Web/src/views/system/upgrade/index.vue | 143 +++++ 33 files changed, 1716 insertions(+), 46 deletions(-) create mode 100644 Admin.NET/Admin.NET.Core/Entity/SysUpgrade.cs create mode 100644 Admin.NET/Admin.NET.Core/Entity/SysUpgradeUser.cs rename Admin.NET/Admin.NET.Core/{Utils => Extension}/YitIdInitHelper.cs (100%) create mode 100644 Admin.NET/Admin.NET.Core/Service/Upgrade/Dto/UpgradeInput.cs create mode 100644 Admin.NET/Admin.NET.Core/Service/Upgrade/SysUpgradeService.cs create mode 100644 Web/src/api-services/apis/sys-upgrade-api.ts create mode 100644 Web/src/api-services/models/add-upgrade-input.ts create mode 100644 Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-upgrade.ts create mode 100644 Web/src/api-services/models/admin-result-sys-upgrade.ts create mode 100644 Web/src/api-services/models/delete-upgrade-input.ts create mode 100644 Web/src/api-services/models/page-upgrade-input.ts create mode 100644 Web/src/api-services/models/sql-sugar-paged-list-sys-upgrade.ts create mode 100644 Web/src/api-services/models/sys-upgrade.ts create mode 100644 Web/src/api-services/models/update-upgrade-input.ts create mode 100644 Web/src/api-services/models/upgrade-input.ts create mode 100644 Web/src/views/system/upgrade/component/editUpgrade.vue create mode 100644 Web/src/views/system/upgrade/component/upgradeInfo.vue create mode 100644 Web/src/views/system/upgrade/index.vue diff --git a/Admin.NET/Admin.NET.Application/Configuration/Captcha.json b/Admin.NET/Admin.NET.Application/Configuration/Captcha.json index 04487d08..fcb10588 100644 --- a/Admin.NET/Admin.NET.Application/Configuration/Captcha.json +++ b/Admin.NET/Admin.NET.Application/Configuration/Captcha.json @@ -3,8 +3,6 @@ // Lazy.Captcha.Core 组件详细文档(https://api.gitee.com/pojianbing/lazy-captcha/) "CaptchaOptions": { - "CacheType": "Memory", // Memory、Redis - "RedisCacheString": "127.0.0.1:6379,password=, defaultDatabase=2", // Redis连接字符串 "CaptchaType": 10, // 验证码类型0、1、2、3、4、5、6、7、8、9、10、11 "CodeLength": 1, // 验证码长度, 要放在CaptchaType设置后 当类型为算术表达式时,长度代表操作的个数, 例如2 "ExpirySeconds": 60, // 验证码过期秒数 diff --git a/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj b/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj index bda26855..77794895 100644 --- a/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj +++ b/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj @@ -46,7 +46,7 @@ - + diff --git a/Admin.NET/Admin.NET.Core/Const/ConfigConst.cs b/Admin.NET/Admin.NET.Core/Const/ConfigConst.cs index e86fbf38..23afcc74 100644 --- a/Admin.NET/Admin.NET.Core/Const/ConfigConst.cs +++ b/Admin.NET/Admin.NET.Core/Const/ConfigConst.cs @@ -116,6 +116,11 @@ public class ConfigConst /// public const string SysPasswordRecord = "sys_password_record"; + /// + /// 显示系统更新日志 + /// + public const string SysUpgrade = "sys_upgrade"; + /// /// Default 分组 /// diff --git a/Admin.NET/Admin.NET.Core/Entity/SysUpgrade.cs b/Admin.NET/Admin.NET.Core/Entity/SysUpgrade.cs new file mode 100644 index 00000000..50a67885 --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Entity/SysUpgrade.cs @@ -0,0 +1,23 @@ +// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 +// +// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 +// +// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + +namespace Admin.NET.Core; + +/// +/// 系统更新日志表 +/// +[SugarTable(null, "系统更新日志表")] +[SysTable] +public partial class SysUpgrade : EntityBase +{ + /// + /// 内容 + /// + [SugarColumn(ColumnDescription = "内容", ColumnDataType = StaticConfig.CodeFirst_BigString)] + [Required] + [SensitiveDetection('*')] + public virtual string Content { get; set; } +} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Entity/SysUpgradeUser.cs b/Admin.NET/Admin.NET.Core/Entity/SysUpgradeUser.cs new file mode 100644 index 00000000..b700bdb1 --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Entity/SysUpgradeUser.cs @@ -0,0 +1,33 @@ +// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 +// +// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 +// +// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + +namespace Admin.NET.Core; + +/// +/// 系统更新日志用户表 +/// +[SugarTable(null, "系统更新日志用户表")] +[SysTable] +public partial class SysUpgradeUser : EntityBaseId +{ + /// + /// 更新日志Id + /// + [SugarColumn(ColumnDescription = "更新日志Id")] + public long UpgradeId { get; set; } + + /// + /// 用户Id + /// + [SugarColumn(ColumnDescription = "用户Id")] + public long UserId { get; set; } + + /// + /// 阅读时间 + /// + [SugarColumn(ColumnDescription = "阅读时间")] + public DateTime? ReadTime { get; set; } +} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Extension/YitIdHelperExtension.cs b/Admin.NET/Admin.NET.Core/Extension/YitIdHelperExtension.cs index bc199a81..d2f8b831 100644 --- a/Admin.NET/Admin.NET.Core/Extension/YitIdHelperExtension.cs +++ b/Admin.NET/Admin.NET.Core/Extension/YitIdHelperExtension.cs @@ -1,11 +1,8 @@ -// 麻省理工学院许可证 +// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // -// 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司 联系电话/微信:18020030720 QQ:515096995 +// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // -// 特此免费授予获得本软件的任何人以处理本软件的权利,但须遵守以下条件:在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。 -// -// 软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、适用性和非侵权的保证。 -// 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。 +// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! namespace Admin.NET.Core; diff --git a/Admin.NET/Admin.NET.Core/Utils/YitIdInitHelper.cs b/Admin.NET/Admin.NET.Core/Extension/YitIdInitHelper.cs similarity index 100% rename from Admin.NET/Admin.NET.Core/Utils/YitIdInitHelper.cs rename to Admin.NET/Admin.NET.Core/Extension/YitIdInitHelper.cs diff --git a/Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs b/Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs index 9599d94a..40a8afa1 100644 --- a/Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs +++ b/Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs @@ -31,16 +31,17 @@ public class SysConfigSeedData : ISqlSugarEntitySeedData new SysConfig{ Id=1300000000191, Name="RefreshToken过期时间", Code=ConfigConst.SysRefreshTokenExpire, Value="20160", SysFlag=YesNoEnum.Y, Remark="刷新Token过期时间(分钟)(一般 refresh_token 的有效时间 > 2 * access_token 的有效时间)", OrderNo=100, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, new SysConfig{ Id=1300000000201, Name="发送异常日志邮件", Code=ConfigConst.SysErrorMail, Value="False", SysFlag=YesNoEnum.Y, Remark="是否发送异常日志邮件", OrderNo=110, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, new SysConfig{ Id=1300000000211, Name="域登录验证", Code=ConfigConst.SysDomainLogin, Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启域登录验证", OrderNo=120, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, - new SysConfig{ Id=1300000000221, Name="租户隔离登录验证", Code=ConfigConst.SysTenantHostLogin, Value="False", SysFlag=YesNoEnum.Y, Remark="租户隔离登录验证", OrderNo=370, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, - new SysConfig{ Id=1300000000231, Name="数据校验日志", Code=ConfigConst.SysValidationLog, Value="True", SysFlag=YesNoEnum.Y, Remark="是否数据校验日志", OrderNo=130, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, - new SysConfig{ Id=1300000000241, Name="行政区划同步层级", Code=ConfigConst.SysRegionSyncLevel, Value="3", SysFlag=YesNoEnum.Y, Remark="行政区划同步层级 1-省级,2-市级,3-区县级,4-街道级,5-村级", OrderNo=140, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, + new SysConfig{ Id=1300000000221, Name="租户隔离登录验证", Code=ConfigConst.SysTenantHostLogin, Value="False", SysFlag=YesNoEnum.Y, Remark="租户隔离登录验证", OrderNo=130, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, + new SysConfig{ Id=1300000000231, Name="数据校验日志", Code=ConfigConst.SysValidationLog, Value="True", SysFlag=YesNoEnum.Y, Remark="是否数据校验日志", OrderNo=140, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, + new SysConfig{ Id=1300000000241, Name="行政区划同步层级", Code=ConfigConst.SysRegionSyncLevel, Value="3", SysFlag=YesNoEnum.Y, Remark="行政区划同步层级 1-省级,2-市级,3-区县级,4-街道级,5-村级", OrderNo=150, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, // 新业务系统记得更改密匙,通过接口(http://localhost:5005/api/sysCommon/smKeyPair)获取 new SysConfig{ Id=1300000000251, Name="国密SM2密匙", Code=ConfigConst.SysSM2Key, Value="04851D329AA3E38C2E7670AFE70E6E70E92F8769CA27C8766B12209A0FFBA4493B603EF7A0B9B1E16F0E8930C0406EA0B179B68DF28E25334BDEC4AE76D907E9E9;3A61D1D30C6302DABFF36201D936D0143EEF0C850AF28C5CA6D5C045AF8C5C8A", SysFlag=YesNoEnum.Y, Remark="国密SM2密匙", OrderNo=160, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2024-11-21 00:00:00") }, - new SysConfig{ Id=1300000000261, Name="开启强制修改密码", Code=ConfigConst.SysForceChangePassword, Value="False", SysFlag=YesNoEnum.Y, Remark="开启强制修改密码", OrderNo=150, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, - new SysConfig{ Id=1300000000271, Name="开启密码强度验证", Code=ConfigConst.SysPasswordStrength, Value="False", SysFlag=YesNoEnum.Y, Remark="开启强制修改密码", OrderNo=170, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, - new SysConfig{ Id=1300000000281, Name="密码强度验证正则表达式", Code=ConfigConst.SysPasswordStrengthExpression, Value="(?=^.{6,20}$)(?=.*\\d)(?=.*\\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\\n).*$", SysFlag=YesNoEnum.Y, Remark="必须包含大小写字母、数字和特殊字符的组合,长度在6-20之间", OrderNo=180, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2024-11-21 00:00:00") }, - new SysConfig{ Id=1300000000291, Name="密码时间有效期", Code=ConfigConst.SysPasswordExpirationTime, Value="0", SysFlag=YesNoEnum.Y, Remark="默认0表示永不过期,否则表示过期天数", OrderNo=190, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2024-12-17 00:00:00") }, - new SysConfig{ Id=1300000000301, Name="密码历史记录验证", Code=ConfigConst.SysPasswordRecord, Value="False", SysFlag=YesNoEnum.Y, Remark="是否验证历史密码禁止再次使用", OrderNo=200, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2024-12-17 00:00:00") }, + new SysConfig{ Id=1300000000261, Name="开启强制修改密码", Code=ConfigConst.SysForceChangePassword, Value="False", SysFlag=YesNoEnum.Y, Remark="开启强制修改密码", OrderNo=170, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, + new SysConfig{ Id=1300000000271, Name="开启密码强度验证", Code=ConfigConst.SysPasswordStrength, Value="False", SysFlag=YesNoEnum.Y, Remark="开启强制修改密码", OrderNo=180, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, + new SysConfig{ Id=1300000000281, Name="密码强度验证正则表达式", Code=ConfigConst.SysPasswordStrengthExpression, Value="(?=^.{6,20}$)(?=.*\\d)(?=.*\\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\\n).*$", SysFlag=YesNoEnum.Y, Remark="必须包含大小写字母、数字和特殊字符的组合,长度在6-20之间", OrderNo=190, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2024-11-21 00:00:00") }, + new SysConfig{ Id=1300000000291, Name="密码时间有效期", Code=ConfigConst.SysPasswordExpirationTime, Value="0", SysFlag=YesNoEnum.Y, Remark="默认0表示永不过期,否则表示过期天数", OrderNo=200, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2024-12-17 00:00:00") }, + new SysConfig{ Id=1300000000301, Name="密码历史记录验证", Code=ConfigConst.SysPasswordRecord, Value="False", SysFlag=YesNoEnum.Y, Remark="是否验证历史密码禁止再次使用", OrderNo=210, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2024-12-17 00:00:00") }, + new SysConfig{ Id=1300000000401, Name="显示系统更新日志", Code=ConfigConst.SysUpgrade, Value="True", SysFlag=YesNoEnum.Y, Remark="是否显示系统更新日志", OrderNo=220, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2024-12-20 00:00:00") }, new SysConfig{ Id=1310000000301, Name="系统主标题", Code=ConfigConst.SysWebTitle, Value="Admin.NET.Pro", SysFlag=YesNoEnum.Y, Remark="系统主标题", OrderNo=300, GroupCode=ConfigConst.SysWebConfigGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, new SysConfig{ Id=1310000000311, Name="系统副标题", Code=ConfigConst.SysWebViceTitle, Value="Admin.NET.Pro", SysFlag=YesNoEnum.Y, Remark="系统副标题", OrderNo=310, GroupCode=ConfigConst.SysWebConfigGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, diff --git a/Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs b/Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs index 8d5f03e2..12e98016 100644 --- a/Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs +++ b/Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs @@ -176,10 +176,12 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData new SysMenu{ Id=1310000000445, Pid=1310000000441, Title="获取支付订单详情(微信接口)", Permission="sysWechatPay/payInfoFromWechat", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000446, Pid=1310000000441, Title="退款申请", Permission="sysWechatPay/refundDomestic", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - //new SysMenu{ Id=1310000000451, Pid=1310000000301, Title="数据库备份", Path="/platform/dbBackup", Name="dbBackup", Component="/system/database/dbBackup", Icon="ele-Coin", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=240 }, - //new SysMenu{ Id=1310000000452, Pid=1310000000451, Title="查询", Permission="dbBackup/page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - //new SysMenu{ Id=1310000000453, Pid=1310000000451, Title="删除", Permission="dbBackup/delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, - //new SysMenu{ Id=1310000000454, Pid=1310000000451, Title="增加", Permission="dbBackup/add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + new SysMenu{ Id=1310000000451, Pid=1310000000301, Title="更新日志", Path="/platform/upgrade", Name="sysUpgrade", Component="/system/upgrade/index", Icon="ele-Paperclip", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=220 }, + + //new SysMenu{ Id=1310000000461, Pid=1310000000301, Title="数据库备份", Path="/platform/dbBackup", Name="dbBackup", Component="/system/database/dbBackup", Icon="ele-Coin", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=240 }, + //new SysMenu{ Id=1310000000462, Pid=1310000000461, Title="查询", Permission="dbBackup/page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000463, Pid=1310000000461, Title="删除", Permission="dbBackup/delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, + //new SysMenu{ Id=1310000000464, Pid=1310000000461, Title="增加", Permission="dbBackup/add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, new SysMenu{ Id=1310000000501, Pid=0, Title="日志管理", Path="/log", Name="log", Component="Layout", Icon="ele-DocumentCopy", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=12000 }, new SysMenu{ Id=1310000000511, Pid=1310000000501, Title="访问日志", Path="/log/logvis", Name="sysLogVis", Component="/system/log/logvis/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 }, diff --git a/Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs b/Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs index f59db982..76311c85 100644 --- a/Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs @@ -18,8 +18,7 @@ public class SysNoticeService : IDynamicApiController, ITransient private readonly SqlSugarRepository _sysNoticeUserRep; private readonly SysOnlineUserService _sysOnlineUserService; - public SysNoticeService( - UserManager userManager, + public SysNoticeService(UserManager userManager, SqlSugarRepository sysUserRep, SqlSugarRepository sysNoticeRep, SqlSugarRepository sysNoticeUserRep, diff --git a/Admin.NET/Admin.NET.Core/Service/Upgrade/Dto/UpgradeInput.cs b/Admin.NET/Admin.NET.Core/Service/Upgrade/Dto/UpgradeInput.cs new file mode 100644 index 00000000..83fd273c --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Service/Upgrade/Dto/UpgradeInput.cs @@ -0,0 +1,27 @@ +// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 +// +// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 +// +// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + +namespace Admin.NET.Core.Service; + +public class PageUpgradeInput : BasePageInput +{ +} + +public class AddUpgradeInput : SysUpgrade +{ +} + +public class UpdateUpgradeInput : AddUpgradeInput +{ +} + +public class DeleteUpgradeInput : BaseIdInput +{ +} + +public class UpgradeInput : BaseIdInput +{ +} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/Upgrade/SysUpgradeService.cs b/Admin.NET/Admin.NET.Core/Service/Upgrade/SysUpgradeService.cs new file mode 100644 index 00000000..03d67ccf --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Service/Upgrade/SysUpgradeService.cs @@ -0,0 +1,120 @@ +// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 +// +// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 +// +// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + +namespace Admin.NET.Core.Service; + +/// +/// 系统更新日志服务 🧩 +/// +[ApiDescriptionSettings(Order = 380, Description = "更新日志")] +public class SysUpgradeService : IDynamicApiController, ITransient +{ + private readonly UserManager _userManager; + private readonly SqlSugarRepository _sysUpgradeRep; + private readonly SqlSugarRepository _sysUpgradeUserRep; + private readonly SysConfigService _sysConfigService; + + public SysUpgradeService(UserManager userManager, + SqlSugarRepository sysUpgradeRep, + SqlSugarRepository sysUpgradeUserRep, + SysConfigService sysConfigService) + { + _userManager = userManager; + _sysUpgradeRep = sysUpgradeRep; + _sysUpgradeUserRep = sysUpgradeUserRep; + _sysConfigService = sysConfigService; + } + + /// + /// 获取系统更新日志分页列表 🔖 + /// + /// + /// + [DisplayName("获取系统更新日志分页列表")] + public async Task> Page(PageUpgradeInput input) + { + return await _sysUpgradeRep.AsQueryable() + .OrderBy(u => u.CreateTime, OrderByType.Desc) + .ToPagedListAsync(input.Page, input.PageSize); + } + + /// + /// 增加系统更新日志 🔖 + /// + /// + /// + [ApiDescriptionSettings(Name = "Add"), HttpPost] + [DisplayName("增加系统更新日志")] + public async Task AddUpgrade(AddUpgradeInput input) + { + var upgrade = input.Adapt(); + await _sysUpgradeRep.InsertAsync(upgrade); + } + + /// + /// 更新系统更新日志 🔖 + /// + /// + /// + [UnitOfWork] + [ApiDescriptionSettings(Name = "Update"), HttpPost] + [DisplayName("更新系统更新日志")] + public async Task UpdateUpgrade(UpdateUpgradeInput input) + { + var upgrade = input.Adapt(); + await _sysUpgradeRep.UpdateAsync(upgrade); + } + + /// + /// 删除系统更新日志 🔖 + /// + /// + /// + [UnitOfWork] + [ApiDescriptionSettings(Name = "Delete"), HttpPost] + [DisplayName("删除系统更新日志")] + public async Task DeleteUpgrade(DeleteUpgradeInput input) + { + await _sysUpgradeRep.DeleteAsync(u => u.Id == input.Id); + + await _sysUpgradeUserRep.DeleteAsync(u => u.UpgradeId == input.Id); + } + + /// + /// 设置系统更新日志已读状态 🔖 + /// + /// + /// + [DisplayName("设置系统更新日志已读状态")] + public async Task SetRead(UpgradeInput input) + { + await _sysUpgradeUserRep.InsertAsync(new SysUpgradeUser + { + UpgradeId = input.Id, + UserId = _userManager.UserId, + ReadTime = DateTime.Now + }); + } + + /// + /// 获取最新的系统更新日志 🔖 + /// + /// + [DisplayName("获取最新的系统更新日志")] + public async Task GetLastUnRead() + { + // 是否启用显示系统更新日志 + var enableUpgrade = await _sysConfigService.GetConfigValueByCode(ConfigConst.SysUpgrade); + if (!enableUpgrade) return null; + + // 取最新的系统更新日志 + var upgrade = await _sysUpgradeRep.AsQueryable().OrderBy(u => u.CreateTime, OrderByType.Desc).FirstAsync(); + if (upgrade == null) return null; + + // 若当前用户没有阅读过则进行显示 + return (await _sysUpgradeUserRep.IsAnyAsync(u => u.UserId == _userManager.UserId && u.UpgradeId == upgrade.Id)) ? null : upgrade; + } +} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs b/Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs index 1507b419..2c5164b7 100644 --- a/Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs +++ b/Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs @@ -32,7 +32,7 @@ public class SysUserService : IDynamicApiController, ITransient SysUserRoleService sysUserRoleService, SysConfigService sysConfigService, SysOnlineUserService sysOnlineUserService, - SysUserMenuService sysUserMenuService, + SysUserMenuService sysUserMenuService, SysCacheService sysCacheService, SysUserLdapService sysUserLdapService, SqlSugarRepository sysUserRep, diff --git a/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs b/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs index a772236a..eb04297e 100644 --- a/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs +++ b/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs @@ -4,8 +4,6 @@ // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! -using Lazy.Captcha.Core; - namespace Admin.NET.Core; public static class SqlSugarSetup @@ -24,8 +22,7 @@ public static class SqlSugarSetup { // 注册雪花Id var snowIdOpt = App.GetConfig("SnowId", true); - var cacheOpt = App.GetConfig("Cache", true); - if(cacheOpt.CacheType == "Memory") + if (App.GetConfig("Cache", true).CacheType == "Memory") { YitIdHelper.SetIdGenerator(snowIdOpt); SnowFlakeSingle.WorkId = snowIdOpt.WorkerId; diff --git a/Admin.NET/Admin.NET.Web.Core/Startup.cs b/Admin.NET/Admin.NET.Web.Core/Startup.cs index 49cad858..d6a838f3 100644 --- a/Admin.NET/Admin.NET.Web.Core/Startup.cs +++ b/Admin.NET/Admin.NET.Web.Core/Startup.cs @@ -32,7 +32,6 @@ using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; using System.Threading.Tasks; -using Microsoft.Extensions.Configuration; namespace Admin.NET.Web.Core; @@ -212,19 +211,6 @@ public class Startup : AppStartup // 验证码 services.AddCaptcha(); - var captchaCacheType = App.GetService().GetSection("CaptchaOptions:CacheType")?.Value; - if (captchaCacheType == "Redis") - { - var connectionString = App.GetService().GetSection("CaptchaOptions:RedisCacheString")?.Value; - // 如果使用redis分布式缓存 - services.AddStackExchangeRedisCache(options => - { - options.Configuration = connectionString; - options.InstanceName = "captcha:"; - }); - } - - // 控制台logo services.AddConsoleLogo(); diff --git a/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_editDialog.vue.vm b/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_editDialog.vue.vm index 9c627caf..797a3cc0 100644 --- a/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_editDialog.vue.vm +++ b/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_editDialog.vue.vm @@ -80,7 +80,7 @@ }else if(@column.EffectType == "InputTextArea"){ @: @: - @:0){ @:maxlength="@(@column.ColumnLength)" } diff --git a/Web/package.json b/Web/package.json index 5646b850..55d880cb 100644 --- a/Web/package.json +++ b/Web/package.json @@ -74,7 +74,7 @@ "vue-router": "^4.5.0", "vue-signature-pad": "^3.0.2", "vue3-tree-org": "^4.2.2", - "vxe-pc-ui": "^4.3.38", + "vxe-pc-ui": "^4.3.40", "vxe-table": "^4.8.10", "vxe-table-plugin-element": "^4.0.4", "vxe-table-plugin-export-xlsx": "^4.0.7", @@ -103,7 +103,7 @@ "sass": "^1.83.0", "terser": "^5.37.0", "typescript": "^5.7.2", - "vite": "^6.0.4", + "vite": "^6.0.5", "vite-plugin-cdn-import": "^1.0.1", "vite-plugin-compression2": "^1.3.3", "vite-plugin-vue-setup-extend": "^0.4.0", diff --git a/Web/src/api-services/api.ts b/Web/src/api-services/api.ts index d9f7d21f..2c673903 100644 --- a/Web/src/api-services/api.ts +++ b/Web/src/api-services/api.ts @@ -52,6 +52,7 @@ export * from './apis/sys-schedule-api'; export * from './apis/sys-server-api'; export * from './apis/sys-sms-api'; export * from './apis/sys-tenant-api'; +export * from './apis/sys-upgrade-api'; export * from './apis/sys-user-api'; export * from './apis/sys-user-menu-api'; export * from './apis/sys-wechat-api'; diff --git a/Web/src/api-services/apis/sys-upgrade-api.ts b/Web/src/api-services/apis/sys-upgrade-api.ts new file mode 100644 index 00000000..4c87d682 --- /dev/null +++ b/Web/src/api-services/apis/sys-upgrade-api.ts @@ -0,0 +1,551 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * OpenAPI spec version: 1.0.0 + * + * + * 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 globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +import { AddUpgradeInput } from '../models'; +import { AdminResultSqlSugarPagedListSysUpgrade } from '../models'; +import { AdminResultSysUpgrade } from '../models'; +import { DeleteUpgradeInput } from '../models'; +import { PageUpgradeInput } from '../models'; +import { UpdateUpgradeInput } from '../models'; +import { UpgradeInput } from '../models'; +/** + * SysUpgradeApi - axios parameter creator + * @export + */ +export const SysUpgradeApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary 增加系统更新日志 🔖 + * @param {AddUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSysUpgradeAddPost: async (body?: AddUpgradeInput, options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/api/sysUpgrade/add`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, 'https://example.com'); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication Bearer required + // http bearer authentication required + if (configuration && configuration.accessToken) { + const accessToken = typeof configuration.accessToken === 'function' + ? await configuration.accessToken() + : await configuration.accessToken; + localVarHeaderParameter["Authorization"] = "Bearer " + accessToken; + } + + localVarHeaderParameter['Content-Type'] = 'application/json-patch+json'; + + const query = new URLSearchParams(localVarUrlObj.search); + for (const key in localVarQueryParameter) { + query.set(key, localVarQueryParameter[key]); + } + for (const key in options.params) { + query.set(key, options.params[key]); + } + localVarUrlObj.search = (new URLSearchParams(query)).toString(); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json'; + localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || ""); + + return { + url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash, + options: localVarRequestOptions, + }; + }, + /** + * + * @summary 删除系统更新日志 🔖 + * @param {DeleteUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSysUpgradeDeletePost: async (body?: DeleteUpgradeInput, options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/api/sysUpgrade/delete`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, 'https://example.com'); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication Bearer required + // http bearer authentication required + if (configuration && configuration.accessToken) { + const accessToken = typeof configuration.accessToken === 'function' + ? await configuration.accessToken() + : await configuration.accessToken; + localVarHeaderParameter["Authorization"] = "Bearer " + accessToken; + } + + localVarHeaderParameter['Content-Type'] = 'application/json-patch+json'; + + const query = new URLSearchParams(localVarUrlObj.search); + for (const key in localVarQueryParameter) { + query.set(key, localVarQueryParameter[key]); + } + for (const key in options.params) { + query.set(key, options.params[key]); + } + localVarUrlObj.search = (new URLSearchParams(query)).toString(); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json'; + localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || ""); + + return { + url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash, + options: localVarRequestOptions, + }; + }, + /** + * + * @summary 获取最新的系统更新日志 🔖 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSysUpgradeLastUnReadGet: async (options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/api/sysUpgrade/lastUnRead`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, 'https://example.com'); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication Bearer required + // http bearer authentication required + if (configuration && configuration.accessToken) { + const accessToken = typeof configuration.accessToken === 'function' + ? await configuration.accessToken() + : await configuration.accessToken; + localVarHeaderParameter["Authorization"] = "Bearer " + accessToken; + } + + const query = new URLSearchParams(localVarUrlObj.search); + for (const key in localVarQueryParameter) { + query.set(key, localVarQueryParameter[key]); + } + for (const key in options.params) { + query.set(key, options.params[key]); + } + localVarUrlObj.search = (new URLSearchParams(query)).toString(); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash, + options: localVarRequestOptions, + }; + }, + /** + * + * @summary 获取系统更新日志分页列表 🔖 + * @param {PageUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSysUpgradePagePost: async (body?: PageUpgradeInput, options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/api/sysUpgrade/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 localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication Bearer required + // http bearer authentication required + if (configuration && configuration.accessToken) { + const accessToken = typeof configuration.accessToken === 'function' + ? await configuration.accessToken() + : await configuration.accessToken; + localVarHeaderParameter["Authorization"] = "Bearer " + accessToken; + } + + localVarHeaderParameter['Content-Type'] = 'application/json-patch+json'; + + const query = new URLSearchParams(localVarUrlObj.search); + for (const key in localVarQueryParameter) { + query.set(key, localVarQueryParameter[key]); + } + for (const key in options.params) { + query.set(key, options.params[key]); + } + localVarUrlObj.search = (new URLSearchParams(query)).toString(); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json'; + localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || ""); + + return { + url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash, + options: localVarRequestOptions, + }; + }, + /** + * + * @summary 设置系统更新日志已读状态 🔖 + * @param {UpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSysUpgradeSetReadPost: async (body?: UpgradeInput, options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/api/sysUpgrade/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: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication Bearer required + // http bearer authentication required + if (configuration && configuration.accessToken) { + const accessToken = typeof configuration.accessToken === 'function' + ? await configuration.accessToken() + : await configuration.accessToken; + localVarHeaderParameter["Authorization"] = "Bearer " + accessToken; + } + + localVarHeaderParameter['Content-Type'] = 'application/json-patch+json'; + + const query = new URLSearchParams(localVarUrlObj.search); + for (const key in localVarQueryParameter) { + query.set(key, localVarQueryParameter[key]); + } + for (const key in options.params) { + query.set(key, options.params[key]); + } + localVarUrlObj.search = (new URLSearchParams(query)).toString(); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json'; + localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || ""); + + return { + url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash, + options: localVarRequestOptions, + }; + }, + /** + * + * @summary 更新系统更新日志 🔖 + * @param {UpdateUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSysUpgradeUpdatePost: async (body?: UpdateUpgradeInput, options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/api/sysUpgrade/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: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication Bearer required + // http bearer authentication required + if (configuration && configuration.accessToken) { + const accessToken = typeof configuration.accessToken === 'function' + ? await configuration.accessToken() + : await configuration.accessToken; + localVarHeaderParameter["Authorization"] = "Bearer " + accessToken; + } + + localVarHeaderParameter['Content-Type'] = 'application/json-patch+json'; + + const query = new URLSearchParams(localVarUrlObj.search); + for (const key in localVarQueryParameter) { + query.set(key, localVarQueryParameter[key]); + } + for (const key in options.params) { + query.set(key, options.params[key]); + } + localVarUrlObj.search = (new URLSearchParams(query)).toString(); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json'; + localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || ""); + + return { + url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash, + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * SysUpgradeApi - functional programming interface + * @export + */ +export const SysUpgradeApiFp = function(configuration?: Configuration) { + return { + /** + * + * @summary 增加系统更新日志 🔖 + * @param {AddUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUpgradeAddPost(body?: AddUpgradeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysUpgradeApiAxiosParamCreator(configuration).apiSysUpgradeAddPost(body, options); + return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; + return axios.request(axiosRequestArgs); + }; + }, + /** + * + * @summary 删除系统更新日志 🔖 + * @param {DeleteUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUpgradeDeletePost(body?: DeleteUpgradeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysUpgradeApiAxiosParamCreator(configuration).apiSysUpgradeDeletePost(body, options); + return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; + return axios.request(axiosRequestArgs); + }; + }, + /** + * + * @summary 获取最新的系统更新日志 🔖 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUpgradeLastUnReadGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysUpgradeApiAxiosParamCreator(configuration).apiSysUpgradeLastUnReadGet(options); + return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; + return axios.request(axiosRequestArgs); + }; + }, + /** + * + * @summary 获取系统更新日志分页列表 🔖 + * @param {PageUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUpgradePagePost(body?: PageUpgradeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysUpgradeApiAxiosParamCreator(configuration).apiSysUpgradePagePost(body, options); + return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; + return axios.request(axiosRequestArgs); + }; + }, + /** + * + * @summary 设置系统更新日志已读状态 🔖 + * @param {UpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUpgradeSetReadPost(body?: UpgradeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysUpgradeApiAxiosParamCreator(configuration).apiSysUpgradeSetReadPost(body, options); + return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; + return axios.request(axiosRequestArgs); + }; + }, + /** + * + * @summary 更新系统更新日志 🔖 + * @param {UpdateUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUpgradeUpdatePost(body?: UpdateUpgradeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysUpgradeApiAxiosParamCreator(configuration).apiSysUpgradeUpdatePost(body, options); + return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; + return axios.request(axiosRequestArgs); + }; + }, + } +}; + +/** + * SysUpgradeApi - factory interface + * @export + */ +export const SysUpgradeApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + return { + /** + * + * @summary 增加系统更新日志 🔖 + * @param {AddUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUpgradeAddPost(body?: AddUpgradeInput, options?: AxiosRequestConfig): Promise> { + return SysUpgradeApiFp(configuration).apiSysUpgradeAddPost(body, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary 删除系统更新日志 🔖 + * @param {DeleteUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUpgradeDeletePost(body?: DeleteUpgradeInput, options?: AxiosRequestConfig): Promise> { + return SysUpgradeApiFp(configuration).apiSysUpgradeDeletePost(body, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary 获取最新的系统更新日志 🔖 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUpgradeLastUnReadGet(options?: AxiosRequestConfig): Promise> { + return SysUpgradeApiFp(configuration).apiSysUpgradeLastUnReadGet(options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary 获取系统更新日志分页列表 🔖 + * @param {PageUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUpgradePagePost(body?: PageUpgradeInput, options?: AxiosRequestConfig): Promise> { + return SysUpgradeApiFp(configuration).apiSysUpgradePagePost(body, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary 设置系统更新日志已读状态 🔖 + * @param {UpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUpgradeSetReadPost(body?: UpgradeInput, options?: AxiosRequestConfig): Promise> { + return SysUpgradeApiFp(configuration).apiSysUpgradeSetReadPost(body, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary 更新系统更新日志 🔖 + * @param {UpdateUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUpgradeUpdatePost(body?: UpdateUpgradeInput, options?: AxiosRequestConfig): Promise> { + return SysUpgradeApiFp(configuration).apiSysUpgradeUpdatePost(body, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * SysUpgradeApi - object-oriented interface + * @export + * @class SysUpgradeApi + * @extends {BaseAPI} + */ +export class SysUpgradeApi extends BaseAPI { + /** + * + * @summary 增加系统更新日志 🔖 + * @param {AddUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SysUpgradeApi + */ + public async apiSysUpgradeAddPost(body?: AddUpgradeInput, options?: AxiosRequestConfig) : Promise> { + return SysUpgradeApiFp(this.configuration).apiSysUpgradeAddPost(body, options).then((request) => request(this.axios, this.basePath)); + } + /** + * + * @summary 删除系统更新日志 🔖 + * @param {DeleteUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SysUpgradeApi + */ + public async apiSysUpgradeDeletePost(body?: DeleteUpgradeInput, options?: AxiosRequestConfig) : Promise> { + return SysUpgradeApiFp(this.configuration).apiSysUpgradeDeletePost(body, options).then((request) => request(this.axios, this.basePath)); + } + /** + * + * @summary 获取最新的系统更新日志 🔖 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SysUpgradeApi + */ + public async apiSysUpgradeLastUnReadGet(options?: AxiosRequestConfig) : Promise> { + return SysUpgradeApiFp(this.configuration).apiSysUpgradeLastUnReadGet(options).then((request) => request(this.axios, this.basePath)); + } + /** + * + * @summary 获取系统更新日志分页列表 🔖 + * @param {PageUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SysUpgradeApi + */ + public async apiSysUpgradePagePost(body?: PageUpgradeInput, options?: AxiosRequestConfig) : Promise> { + return SysUpgradeApiFp(this.configuration).apiSysUpgradePagePost(body, options).then((request) => request(this.axios, this.basePath)); + } + /** + * + * @summary 设置系统更新日志已读状态 🔖 + * @param {UpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SysUpgradeApi + */ + public async apiSysUpgradeSetReadPost(body?: UpgradeInput, options?: AxiosRequestConfig) : Promise> { + return SysUpgradeApiFp(this.configuration).apiSysUpgradeSetReadPost(body, options).then((request) => request(this.axios, this.basePath)); + } + /** + * + * @summary 更新系统更新日志 🔖 + * @param {UpdateUpgradeInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SysUpgradeApi + */ + public async apiSysUpgradeUpdatePost(body?: UpdateUpgradeInput, options?: AxiosRequestConfig) : Promise> { + return SysUpgradeApiFp(this.configuration).apiSysUpgradeUpdatePost(body, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/Web/src/api-services/models/add-upgrade-input.ts b/Web/src/api-services/models/add-upgrade-input.ts new file mode 100644 index 00000000..0b9f0070 --- /dev/null +++ b/Web/src/api-services/models/add-upgrade-input.ts @@ -0,0 +1,94 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * OpenAPI spec version: 1.0.0 + * + * + * 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. + */ + + /** + * + * + * @export + * @interface AddUpgradeInput + */ +export interface AddUpgradeInput { + + /** + * 雪花Id + * + * @type {number} + * @memberof AddUpgradeInput + */ + id?: number; + + /** + * 创建时间 + * + * @type {Date} + * @memberof AddUpgradeInput + */ + createTime?: Date; + + /** + * 更新时间 + * + * @type {Date} + * @memberof AddUpgradeInput + */ + updateTime?: Date | null; + + /** + * 创建者Id + * + * @type {number} + * @memberof AddUpgradeInput + */ + createUserId?: number | null; + + /** + * 创建者姓名 + * + * @type {string} + * @memberof AddUpgradeInput + */ + createUserName?: string | null; + + /** + * 修改者Id + * + * @type {number} + * @memberof AddUpgradeInput + */ + updateUserId?: number | null; + + /** + * 修改者姓名 + * + * @type {string} + * @memberof AddUpgradeInput + */ + updateUserName?: string | null; + + /** + * 软删除 + * + * @type {boolean} + * @memberof AddUpgradeInput + */ + isDelete?: boolean; + + /** + * 内容 + * + * @type {string} + * @memberof AddUpgradeInput + */ + content: string; +} diff --git a/Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-upgrade.ts b/Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-upgrade.ts new file mode 100644 index 00000000..90f544b2 --- /dev/null +++ b/Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-upgrade.ts @@ -0,0 +1,69 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * OpenAPI spec version: 1.0.0 + * + * + * 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 { SqlSugarPagedListSysUpgrade } from './sql-sugar-paged-list-sys-upgrade'; + /** + * 全局返回结果 + * + * @export + * @interface AdminResultSqlSugarPagedListSysUpgrade + */ +export interface AdminResultSqlSugarPagedListSysUpgrade { + + /** + * 状态码 + * + * @type {number} + * @memberof AdminResultSqlSugarPagedListSysUpgrade + */ + code?: number; + + /** + * 类型success、warning、error + * + * @type {string} + * @memberof AdminResultSqlSugarPagedListSysUpgrade + */ + type?: string | null; + + /** + * 错误信息 + * + * @type {string} + * @memberof AdminResultSqlSugarPagedListSysUpgrade + */ + message?: string | null; + + /** + * @type {SqlSugarPagedListSysUpgrade} + * @memberof AdminResultSqlSugarPagedListSysUpgrade + */ + result?: SqlSugarPagedListSysUpgrade; + + /** + * 附加数据 + * + * @type {any} + * @memberof AdminResultSqlSugarPagedListSysUpgrade + */ + extras?: any | null; + + /** + * 时间 + * + * @type {Date} + * @memberof AdminResultSqlSugarPagedListSysUpgrade + */ + time?: Date; +} diff --git a/Web/src/api-services/models/admin-result-sys-upgrade.ts b/Web/src/api-services/models/admin-result-sys-upgrade.ts new file mode 100644 index 00000000..27b82dfe --- /dev/null +++ b/Web/src/api-services/models/admin-result-sys-upgrade.ts @@ -0,0 +1,69 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * OpenAPI spec version: 1.0.0 + * + * + * 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 { SysUpgrade } from './sys-upgrade'; + /** + * 全局返回结果 + * + * @export + * @interface AdminResultSysUpgrade + */ +export interface AdminResultSysUpgrade { + + /** + * 状态码 + * + * @type {number} + * @memberof AdminResultSysUpgrade + */ + code?: number; + + /** + * 类型success、warning、error + * + * @type {string} + * @memberof AdminResultSysUpgrade + */ + type?: string | null; + + /** + * 错误信息 + * + * @type {string} + * @memberof AdminResultSysUpgrade + */ + message?: string | null; + + /** + * @type {SysUpgrade} + * @memberof AdminResultSysUpgrade + */ + result?: SysUpgrade; + + /** + * 附加数据 + * + * @type {any} + * @memberof AdminResultSysUpgrade + */ + extras?: any | null; + + /** + * 时间 + * + * @type {Date} + * @memberof AdminResultSysUpgrade + */ + time?: Date; +} diff --git a/Web/src/api-services/models/delete-upgrade-input.ts b/Web/src/api-services/models/delete-upgrade-input.ts new file mode 100644 index 00000000..a0195353 --- /dev/null +++ b/Web/src/api-services/models/delete-upgrade-input.ts @@ -0,0 +1,30 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * OpenAPI spec version: 1.0.0 + * + * + * 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. + */ + + /** + * + * + * @export + * @interface DeleteUpgradeInput + */ +export interface DeleteUpgradeInput { + + /** + * 主键Id + * + * @type {number} + * @memberof DeleteUpgradeInput + */ + id: number; +} diff --git a/Web/src/api-services/models/index.ts b/Web/src/api-services/models/index.ts index 4225155f..ce469b9c 100644 --- a/Web/src/api-services/models/index.ts +++ b/Web/src/api-services/models/index.ts @@ -19,6 +19,7 @@ export * from './add-subscribe-message-template-input'; export * from './add-sys-app-input'; export * from './add-sys-ldap-input'; export * from './add-tenant-input'; +export * from './add-upgrade-input'; export * from './add-user-input'; export * from './admin-result-boolean'; export * from './admin-result-captcha-output'; @@ -99,6 +100,7 @@ export * from './admin-result-sql-sugar-paged-list-sys-online-user'; export * from './admin-result-sql-sugar-paged-list-sys-plugin'; export * from './admin-result-sql-sugar-paged-list-sys-print'; export * from './admin-result-sql-sugar-paged-list-sys-region'; +export * from './admin-result-sql-sugar-paged-list-sys-upgrade'; export * from './admin-result-sql-sugar-paged-list-sys-wechat-pay'; export * from './admin-result-sql-sugar-paged-list-tenant-output'; export * from './admin-result-sql-sugar-paged-list-user-output'; @@ -115,6 +117,7 @@ export * from './admin-result-sys-log-ex'; export * from './admin-result-sys-log-op'; export * from './admin-result-sys-print'; export * from './admin-result-sys-schedule'; +export * from './admin-result-sys-upgrade'; export * from './admin-result-sys-user'; export * from './admin-result-sys-wechat-pay'; export * from './admin-result-visual-db-table'; @@ -194,6 +197,7 @@ export * from './delete-role-input'; export * from './delete-schedule-input'; export * from './delete-sys-ldap-input'; export * from './delete-tenant-input'; +export * from './delete-upgrade-input'; export * from './delete-user-input'; export * from './dict-data-input'; export * from './dict-type-input'; @@ -289,6 +293,7 @@ export * from './page-role-input'; export * from './page-role-output'; export * from './page-sys-wechat-pay-input'; export * from './page-tenant-input'; +export * from './page-upgrade-input'; export * from './page-user-input'; export * from './page-vis-log-input'; export * from './parameter-attributes'; @@ -346,6 +351,7 @@ export * from './sql-sugar-paged-list-sys-online-user'; export * from './sql-sugar-paged-list-sys-plugin'; export * from './sql-sugar-paged-list-sys-print'; export * from './sql-sugar-paged-list-sys-region'; +export * from './sql-sugar-paged-list-sys-upgrade'; export * from './sql-sugar-paged-list-sys-wechat-pay'; export * from './sql-sugar-paged-list-tenant-output'; export * from './sql-sugar-paged-list-user-output'; @@ -387,6 +393,7 @@ export * from './sys-plugin'; export * from './sys-print'; export * from './sys-region'; export * from './sys-schedule'; +export * from './sys-upgrade'; export * from './sys-user'; export * from './sys-user-ext-org'; export * from './sys-user-ldap'; @@ -431,7 +438,9 @@ export * from './update-schedule-input'; export * from './update-sys-app-input'; export * from './update-sys-ldap-input'; export * from './update-tenant-input'; +export * from './update-upgrade-input'; export * from './update-user-input'; +export * from './upgrade-input'; export * from './upload-file-from-base64-input'; export * from './user-input'; export * from './user-menu-input'; diff --git a/Web/src/api-services/models/page-upgrade-input.ts b/Web/src/api-services/models/page-upgrade-input.ts new file mode 100644 index 00000000..64497ab1 --- /dev/null +++ b/Web/src/api-services/models/page-upgrade-input.ts @@ -0,0 +1,84 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * OpenAPI spec version: 1.0.0 + * + * + * 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 { Filter } from './filter'; +import { Search } from './search'; + /** + * + * + * @export + * @interface PageUpgradeInput + */ +export interface PageUpgradeInput { + + /** + * @type {Search} + * @memberof PageUpgradeInput + */ + search?: Search; + + /** + * 模糊查询关键字 + * + * @type {string} + * @memberof PageUpgradeInput + */ + keyword?: string | null; + + /** + * @type {Filter} + * @memberof PageUpgradeInput + */ + filter?: Filter; + + /** + * 当前页码 + * + * @type {number} + * @memberof PageUpgradeInput + */ + page?: number; + + /** + * 页码容量 + * + * @type {number} + * @memberof PageUpgradeInput + */ + pageSize?: number; + + /** + * 排序字段 + * + * @type {string} + * @memberof PageUpgradeInput + */ + field?: string | null; + + /** + * 排序方向 + * + * @type {string} + * @memberof PageUpgradeInput + */ + order?: string | null; + + /** + * 降序排序 + * + * @type {string} + * @memberof PageUpgradeInput + */ + descStr?: string | null; +} diff --git a/Web/src/api-services/models/sql-sugar-paged-list-sys-upgrade.ts b/Web/src/api-services/models/sql-sugar-paged-list-sys-upgrade.ts new file mode 100644 index 00000000..fc8b1841 --- /dev/null +++ b/Web/src/api-services/models/sql-sugar-paged-list-sys-upgrade.ts @@ -0,0 +1,79 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * OpenAPI spec version: 1.0.0 + * + * + * 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 { SysUpgrade } from './sys-upgrade'; + /** + * 分页泛型集合 + * + * @export + * @interface SqlSugarPagedListSysUpgrade + */ +export interface SqlSugarPagedListSysUpgrade { + + /** + * 页码 + * + * @type {number} + * @memberof SqlSugarPagedListSysUpgrade + */ + page?: number; + + /** + * 页容量 + * + * @type {number} + * @memberof SqlSugarPagedListSysUpgrade + */ + pageSize?: number; + + /** + * 总条数 + * + * @type {number} + * @memberof SqlSugarPagedListSysUpgrade + */ + total?: number; + + /** + * 总页数 + * + * @type {number} + * @memberof SqlSugarPagedListSysUpgrade + */ + totalPages?: number; + + /** + * 当前页集合 + * + * @type {Array} + * @memberof SqlSugarPagedListSysUpgrade + */ + items?: Array | null; + + /** + * 是否有上一页 + * + * @type {boolean} + * @memberof SqlSugarPagedListSysUpgrade + */ + hasPrevPage?: boolean; + + /** + * 是否有下一页 + * + * @type {boolean} + * @memberof SqlSugarPagedListSysUpgrade + */ + hasNextPage?: boolean; +} diff --git a/Web/src/api-services/models/sys-upgrade.ts b/Web/src/api-services/models/sys-upgrade.ts new file mode 100644 index 00000000..f66797c8 --- /dev/null +++ b/Web/src/api-services/models/sys-upgrade.ts @@ -0,0 +1,94 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * OpenAPI spec version: 1.0.0 + * + * + * 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. + */ + + /** + * 系统更新日志表 + * + * @export + * @interface SysUpgrade + */ +export interface SysUpgrade { + + /** + * 雪花Id + * + * @type {number} + * @memberof SysUpgrade + */ + id?: number; + + /** + * 创建时间 + * + * @type {Date} + * @memberof SysUpgrade + */ + createTime?: Date; + + /** + * 更新时间 + * + * @type {Date} + * @memberof SysUpgrade + */ + updateTime?: Date | null; + + /** + * 创建者Id + * + * @type {number} + * @memberof SysUpgrade + */ + createUserId?: number | null; + + /** + * 创建者姓名 + * + * @type {string} + * @memberof SysUpgrade + */ + createUserName?: string | null; + + /** + * 修改者Id + * + * @type {number} + * @memberof SysUpgrade + */ + updateUserId?: number | null; + + /** + * 修改者姓名 + * + * @type {string} + * @memberof SysUpgrade + */ + updateUserName?: string | null; + + /** + * 软删除 + * + * @type {boolean} + * @memberof SysUpgrade + */ + isDelete?: boolean; + + /** + * 内容 + * + * @type {string} + * @memberof SysUpgrade + */ + content: string; +} diff --git a/Web/src/api-services/models/update-upgrade-input.ts b/Web/src/api-services/models/update-upgrade-input.ts new file mode 100644 index 00000000..72f847ad --- /dev/null +++ b/Web/src/api-services/models/update-upgrade-input.ts @@ -0,0 +1,94 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * OpenAPI spec version: 1.0.0 + * + * + * 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. + */ + + /** + * + * + * @export + * @interface UpdateUpgradeInput + */ +export interface UpdateUpgradeInput { + + /** + * 雪花Id + * + * @type {number} + * @memberof UpdateUpgradeInput + */ + id?: number; + + /** + * 创建时间 + * + * @type {Date} + * @memberof UpdateUpgradeInput + */ + createTime?: Date; + + /** + * 更新时间 + * + * @type {Date} + * @memberof UpdateUpgradeInput + */ + updateTime?: Date | null; + + /** + * 创建者Id + * + * @type {number} + * @memberof UpdateUpgradeInput + */ + createUserId?: number | null; + + /** + * 创建者姓名 + * + * @type {string} + * @memberof UpdateUpgradeInput + */ + createUserName?: string | null; + + /** + * 修改者Id + * + * @type {number} + * @memberof UpdateUpgradeInput + */ + updateUserId?: number | null; + + /** + * 修改者姓名 + * + * @type {string} + * @memberof UpdateUpgradeInput + */ + updateUserName?: string | null; + + /** + * 软删除 + * + * @type {boolean} + * @memberof UpdateUpgradeInput + */ + isDelete?: boolean; + + /** + * 内容 + * + * @type {string} + * @memberof UpdateUpgradeInput + */ + content: string; +} diff --git a/Web/src/api-services/models/upgrade-input.ts b/Web/src/api-services/models/upgrade-input.ts new file mode 100644 index 00000000..1f651406 --- /dev/null +++ b/Web/src/api-services/models/upgrade-input.ts @@ -0,0 +1,30 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * OpenAPI spec version: 1.0.0 + * + * + * 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. + */ + + /** + * + * + * @export + * @interface UpgradeInput + */ +export interface UpgradeInput { + + /** + * 主键Id + * + * @type {number} + * @memberof UpgradeInput + */ + id: number; +} diff --git a/Web/src/layout/navBars/topBar/user.vue b/Web/src/layout/navBars/topBar/user.vue index b213e825..d5ba47e8 100644 --- a/Web/src/layout/navBars/topBar/user.vue +++ b/Web/src/layout/navBars/topBar/user.vue @@ -84,6 +84,7 @@ + @@ -105,13 +106,14 @@ import { signalR } from '/@/views/system/onlineUser/signalR'; import { Avatar, CircleCloseFilled, Loading, Lock } from '@element-plus/icons-vue'; import { clearAccessTokens, getAPI } from '/@/utils/axios-utils'; -import { SysAuthApi, SysNoticeApi, SysUserApi } from '/@/api-services/api'; +import { SysAuthApi, SysNoticeApi, SysUpgradeApi, SysUserApi } from '/@/api-services/api'; // 引入组件 const UserNews = defineAsyncComponent(() => import('/@/layout/navBars/topBar/userNews.vue')); const Search = defineAsyncComponent(() => import('/@/layout/navBars/topBar/search.vue')); const OnlineUser = defineAsyncComponent(() => import('/@/views/system/onlineUser/index.vue')); const ChangePassword = defineAsyncComponent(() => import('/@/views/system/user/component/changePassword.vue')); +const UpgradeInfo = defineAsyncComponent(() => import('/@/views/system/upgrade/component/upgradeInfo.vue')); // 定义变量内容 const { locale, t } = useI18n(); @@ -123,6 +125,7 @@ const { themeConfig } = storeToRefs(storesThemeConfig); const searchRef = ref(); const onlineUserRef = ref(); const changePasswordRef = ref(); +const upgradeInfoRef = ref(); const state = reactive({ isScreenfull: false, disabledI18n: 'zh-cn', @@ -263,6 +266,12 @@ onMounted(async () => { // notice.readStatus = 1; // }); + // 加载系统更新日志 + var res1 = await getAPI(SysUpgradeApi).apiSysUpgradeLastUnReadGet(); + if (res1.data.result != null) { + upgradeInfoRef.value?.openDialog(res1.data.result); + } + // 是否修改密码 await changePassword(); }); diff --git a/Web/src/views/system/upgrade/component/editUpgrade.vue b/Web/src/views/system/upgrade/component/editUpgrade.vue new file mode 100644 index 00000000..b7b3293c --- /dev/null +++ b/Web/src/views/system/upgrade/component/editUpgrade.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/Web/src/views/system/upgrade/component/upgradeInfo.vue b/Web/src/views/system/upgrade/component/upgradeInfo.vue new file mode 100644 index 00000000..e9aca3fa --- /dev/null +++ b/Web/src/views/system/upgrade/component/upgradeInfo.vue @@ -0,0 +1,43 @@ + + + diff --git a/Web/src/views/system/upgrade/index.vue b/Web/src/views/system/upgrade/index.vue new file mode 100644 index 00000000..8718ed9e --- /dev/null +++ b/Web/src/views/system/upgrade/index.vue @@ -0,0 +1,143 @@ + + +