From 7cee0efdea6b80afd259d2a9ef43c1792b1df745 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Sat, 9 Jul 2022 19:02:36 +0800 Subject: [PATCH 001/122] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Middleware/GlobalExceptionMiddleware.cs | 3 +- ZR.Admin.WebApi/appsettings.json | 7 + ZR.Common/WxNoticeHelper.cs | 157 ++++++++++++++++++ ZR.Tasks/TaskScheduler/JobBase.cs | 2 + 4 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 ZR.Common/WxNoticeHelper.cs diff --git a/ZR.Admin.WebApi/Middleware/GlobalExceptionMiddleware.cs b/ZR.Admin.WebApi/Middleware/GlobalExceptionMiddleware.cs index cdc619ae..f31d0b41 100644 --- a/ZR.Admin.WebApi/Middleware/GlobalExceptionMiddleware.cs +++ b/ZR.Admin.WebApi/Middleware/GlobalExceptionMiddleware.cs @@ -10,6 +10,7 @@ using System.Text.Encodings.Web; using System.Text.Json; using System.Threading.Tasks; using ZR.Admin.WebApi.Extensions; +using ZR.Common; using ZR.Model.System; using ZR.Service.System.IService; @@ -119,7 +120,7 @@ namespace ZR.Admin.WebApi.Middleware Logger.Log(ei); context.Response.ContentType = "text/json;charset=utf-8"; await context.Response.WriteAsync(responseResult, System.Text.Encoding.UTF8); - + WxNoticeHelper.SendMsg("系统出错", sysOperLog.errorMsg); SysOperLogService.InsertOperlog(sysOperLog); } diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json index 33712f76..5ac496f5 100644 --- a/ZR.Admin.WebApi/appsettings.json +++ b/ZR.Admin.WebApi/appsettings.json @@ -31,6 +31,13 @@ "bucketName": "bucketName", "domainUrl": "http://xxx.xxx.com" //访问资源域名 }, + //企业微信通知配置 + "WxCorp": { + "AgentID": "", + "CorpID": "", + "CorpSecret": "", + "SendUser": "@all" + }, "gen": { "conn": "Data Source=LAPTOP-STKF2M8H\\SQLEXPRESS;User ID=sa;Password=zradmin123;Initial Catalog=ZrAdmin;Integrated Security=SSPI", "dbType": 1, //MySql = 0, SqlServer = 1 diff --git a/ZR.Common/WxNoticeHelper.cs b/ZR.Common/WxNoticeHelper.cs new file mode 100644 index 00000000..0f7fa3a1 --- /dev/null +++ b/ZR.Common/WxNoticeHelper.cs @@ -0,0 +1,157 @@ +using Infrastructure; +using System.Collections.Generic; +using System.Text.Json; + +namespace ZR.Common +{ + public class WxNoticeHelper + { + //CorpID 企业ID + //AGENTID 应用的ID + //Secret 应用的ID对应的密钥 + private static readonly string AGENTID = AppSettings.App(new string[] { "WxCorp", "AgentID" }); + private static readonly string CORPID = AppSettings.App(new string[] { "WxCorp", "CorpID" }); + private static readonly string CORPSECRET = AppSettings.App(new string[] { "WxCorp", "CorpSecret" }); + private static readonly string SEND_USER = AppSettings.App(new string[] { "WxCorp", "SendUser" }); + private static readonly string SendUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send"; + private static readonly string GetTokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"; + + /// + /// 消息类型 + /// + public enum MsgType { markdown, text, textcard, interactive_taskcard } + + /// + /// 发送消息公共模板方法 + /// + /// 微信微信好友id,默认@all发给所有关注该应用的用户 + /// 标题 + /// 内容 + /// 消息类型 + /// + public static (int, string) SendMsg(string title, string content, string toUser = "", MsgType msgType = MsgType.text) + { + if (string.IsNullOrEmpty(toUser)) + { + toUser = SEND_USER; + } + if (string.IsNullOrEmpty(title)) + { + return (0, "title不能为空"); + } + if (string.IsNullOrEmpty(CORPID)) + { + return (0, "请完成企业微信通知配置"); + } + GetTokenResult tokenResult = GetAccessToken(); + + if (tokenResult == null || tokenResult.errcode != 0) + { + return (0, tokenResult?.errmsg); + } + + Dictionary dic = null; + switch (msgType) + { + case MsgType.markdown: + dic = GetMarkdown(title, content, toUser); + break; + case MsgType.text: + dic = GetText(title, content, toUser); + break; + case MsgType.textcard: + break; + case MsgType.interactive_taskcard: + break; + default: + dic = GetText(title, content, toUser); + break; + } + string postData = JsonSerializer.Serialize(dic); + string msgUrl = $"{SendUrl}?access_token={tokenResult.access_token}"; + + //返回结果 + //{"errcode":0,"errmsg":"ok","invaliduser":""} + string msgResult = HttpHelper.HttpPost(msgUrl, postData, "contentType/json"); + GetTokenResult getTokenResult = JsonSerializer.Deserialize(msgResult); + + return (getTokenResult?.errcode == 0 ? 100 : 0, getTokenResult?.errmsg); + } + public static (int, string) SendMsg(string title, string content, string toUser) + { + return SendMsg(title, content, toUser, MsgType.markdown); + } + + /// + /// 获取访问token + /// + /// + /// {"errcode":0,"errmsg":"ok","access_token":"iCbcfE1OjfRhV0_io-CzqTNC0lnrudeW3oF5rhJKfmINaxLClLa1FoqAY_wEXtodYh_DTnrtAwZfzeb-NRXvwiOoqUTHx3i6QKLYcfBtF8y-xd5mvaeaf3e9mvTAPhmX0lkm1cLTwRLmoa1IwzgQ-QZEZcuIcntWdEMGseVYok3BwCGpC87bt6nNdgnekZdFVRp1uuaxoctDGlXpoQlQsA","expires_in":7200} + /// + private static GetTokenResult GetAccessToken() + { + string getTokenUrl = $"{GetTokenUrl}?corpid={CORPID}&corpsecret={CORPSECRET}"; + string getTokenResult = HttpHelper.HttpGet(getTokenUrl); + + GetTokenResult tokenResult = JsonSerializer.Deserialize(getTokenResult); + return tokenResult; + } + + /// + /// 发送text + /// + /// + /// + /// + /// + private static Dictionary GetText(string title, string content, string toUser = "") + { + Dictionary dic = new() + { + { "msgtype", "text" }, + { "touser", toUser }, + { "agentid", AGENTID }, + { "text", new Dictionary + { + { "content",$"{title}\n\n{content}" + } + }} + }; + return dic; + } + + /// + /// 发送markdown + /// + /// 要发送的标题 + /// 发送的内容 + /// 指定接收消息的成员,成员ID列表(多个接收者用‘|’分隔,最多支持1000个)。 特殊情况:指定为”@all”,则向该企业应用的全部成员发送 + /// + private static Dictionary GetMarkdown(string title, string content, string toUser = "") + { + Dictionary dic = new() + { + { "touser", toUser }, + { "msgtype", "markdown" }, + { "agentid", AGENTID }, + { "enable_duplicate_check",1} + }; + + dic.Add("markdown", new Dictionary + { + { "content", $"**{title}**\n\n{content}" } + }); + return dic; + } + + public class GetTokenResult + { + /// + /// 0、正常 + /// + public int errcode { get; set; } + public string errmsg { get; set; } + public string access_token { get; set; } + } + } +} diff --git a/ZR.Tasks/TaskScheduler/JobBase.cs b/ZR.Tasks/TaskScheduler/JobBase.cs index 0f3d9739..52419e05 100644 --- a/ZR.Tasks/TaskScheduler/JobBase.cs +++ b/ZR.Tasks/TaskScheduler/JobBase.cs @@ -4,6 +4,7 @@ using Quartz; using System; using System.Diagnostics; using System.Threading.Tasks; +using ZR.Common; using ZR.Model.System; using ZR.Service.System.IService; @@ -47,6 +48,7 @@ namespace ZR.Tasks }; status = 1; logMsg = $"Job Run Fail,Exception:{ex.Message}"; + WxNoticeHelper.SendMsg("任务执行出错", logMsg); } var logModel = new SysTasksLog() -- Gitee From 80aa65f695b25bdf18ff42626566181c526b5052 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 12 Jul 2022 21:12:52 +0800 Subject: [PATCH 002/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Infrastructure/OptionsSetting.cs | 9 +++-- .../Controllers/CommonController.cs | 36 ++++++++++++------- ZR.Admin.WebApi/appsettings.json | 13 ++++--- ZR.Model/System/Dto/UploadDto.cs | 18 ++++++++++ 4 files changed, 57 insertions(+), 19 deletions(-) create mode 100644 ZR.Model/System/Dto/UploadDto.cs diff --git a/Infrastructure/OptionsSetting.cs b/Infrastructure/OptionsSetting.cs index c6cf6f07..fd00be33 100644 --- a/Infrastructure/OptionsSetting.cs +++ b/Infrastructure/OptionsSetting.cs @@ -12,7 +12,7 @@ namespace Infrastructure public bool DemoMode { get; set; } public MailOptions MailOptions { get; set; } public Upload Upload { get; set; } - public ALYUN_OCS ALYUN_OCS { get; set; } + public ALIYUN_OSS ALIYUN_OSS { get; set; } public JwtSettings JwtSettings { get; set; } } /// @@ -33,15 +33,20 @@ namespace Infrastructure { public string UploadUrl { get; set; } public string LocalSavePath { get; set; } + public int MaxSize { get; set; } + public string[] NotAllowedExt { get; set; } = new string[0]; } /// /// 阿里云存储 /// - public class ALYUN_OCS + public class ALIYUN_OSS { public string REGIONID { get; set; } public string KEY { get; set; } public string SECRET { get; set; } + public string BucketName { get; set; } + public string DomainUrl { get; set; } + public int MaxSize { get; set; } = 100; } /// diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs index 3c549e53..64990dd0 100644 --- a/ZR.Admin.WebApi/Controllers/CommonController.cs +++ b/ZR.Admin.WebApi/Controllers/CommonController.cs @@ -16,6 +16,7 @@ using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Filters; using ZR.Common; using ZR.Model.System; +using ZR.Model.System.Dto; using ZR.Service.System.IService; namespace ZR.Admin.WebApi.Controllers @@ -89,43 +90,54 @@ namespace ZR.Admin.WebApi.Controllers /// 存储文件 /// /// - /// 存储目录 - /// 自定义文件名 + /// 自定义文件名 /// 上传类型1、保存到本地 2、保存到阿里云 /// [HttpPost()] [Verify] [ActionPermissionFilter(Permission = "common")] - public async Task UploadFile([FromForm(Name = "file")] IFormFile formFile, string fileName = "", string fileDir = "", StoreType storeType = StoreType.LOCAL) + public async Task UploadFile([FromForm(Name = "file")] IFormFile formFile, [FromForm] UploadDto uploadDto, StoreType storeType = StoreType.LOCAL) { if (formFile == null) throw new CustomException(ResultCode.PARAM_ERROR, "上传文件不能为空"); SysFile file = new(); string fileExt = Path.GetExtension(formFile.FileName);//文件后缀 double fileSize = Math.Round(formFile.Length / 1024.0, 2);//文件大小KB - string[] NotAllowedFileExtensions = new string[] { ".bat", ".exe", ".jar", ".js" }; - int MaxContentLength = 15; - if (NotAllowedFileExtensions.Contains(fileExt)) + + if (OptionsSetting.Upload.NotAllowedExt.Contains(fileExt)) { return ToResponse(ResultCode.CUSTOM_ERROR, "上传失败,未经允许上传类型"); } + if (uploadDto.FileNameType == 1) + { + uploadDto.FileName = Path.GetFileNameWithoutExtension(formFile.FileName); + } + else if (uploadDto.FileNameType == 3) + { + uploadDto.FileName = SysFileService.HashFileName(); + } switch (storeType) { case StoreType.LOCAL: string savePath = Path.Combine(WebHostEnvironment.WebRootPath); - if (fileDir.IsEmpty()) + if (uploadDto.FileDir.IsEmpty()) { - fileDir = AppSettings.App(new string[] { "Upload", "localSavePath" }); + uploadDto.FileDir = OptionsSetting.Upload.LocalSavePath; } - file = await SysFileService.SaveFileToLocal(savePath, fileName, fileDir, HttpContext.GetName(), formFile); + file = await SysFileService.SaveFileToLocal(savePath, uploadDto.FileName, uploadDto.FileDir, HttpContext.GetName(), formFile); break; case StoreType.REMOTE: break; case StoreType.ALIYUN: - if ((fileSize / 1024) > MaxContentLength) + int AlimaxContentLength = OptionsSetting.ALIYUN_OSS.MaxSize; + if (OptionsSetting.ALIYUN_OSS.REGIONID.IsEmpty()) + { + return ToResponse(ResultCode.CUSTOM_ERROR, "配置文件缺失"); + } + if ((fileSize / 1024) > AlimaxContentLength) { - return ToResponse(ResultCode.CUSTOM_ERROR, "上传文件过大,不能超过 " + MaxContentLength + " MB"); + return ToResponse(ResultCode.CUSTOM_ERROR, "上传文件过大,不能超过 " + AlimaxContentLength + " MB"); } - file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", fileDir, HttpContext.GetName()) + file = new(formFile.FileName, uploadDto.FileName, fileExt, fileSize + "kb", uploadDto.FileDir, HttpContext.GetName()) { StoreType = (int)StoreType.ALIYUN, FileType = formFile.ContentType diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json index 5ac496f5..ac12f24a 100644 --- a/ZR.Admin.WebApi/appsettings.json +++ b/ZR.Admin.WebApi/appsettings.json @@ -20,16 +20,19 @@ }, "DemoMode": false, //是否演示模式 "Upload": { - "UploadUrl": "http://localhost:8888", //本地存储资源访问路径 - "localSavePath": "uploads" //本地上传默认文件存储目录 wwwroot/uploads + "uploadUrl": "http://localhost:8888", //本地存储资源访问路径 + "localSavePath": "uploads", //本地上传默认文件存储目录 wwwroot/uploads + "maxSize": 15, //上传文件大小限制 15M + "notAllowedExt": [ ".bat", ".exe", ".jar", ".js"] }, //阿里云存储配置 "ALIYUN_OSS": { - "REGIONID": "cn-hangzhou", + "REGIONID": "", //eg:cn-hangzhou "KEY": "XX", "SECRET": "XX", "bucketName": "bucketName", - "domainUrl": "http://xxx.xxx.com" //访问资源域名 + "domainUrl": "http://xxx.xxx.com", //访问资源域名 + "maxSize": 100 //上传文件大小限制 100M }, //企业微信通知配置 "WxCorp": { @@ -69,7 +72,7 @@ "RealIpHeader": "X-Real-IP", "ClientIdHeader": "X-ClientId", "HttpStatusCode": 429, - "EndpointWhitelist": [ "post:/system/dict/data/types", "*:/msghub/negotiate", "*:/LogOut" ], + "EndpointWhitelist": [ "post:/system/dict/data/types", "*:/msghub/negotiate", "*:/LogOut", "*:/common/uploadfile" ], "QuotaExceededResponse": { "Content": "{{\"code\":429,\"msg\":\"访问过于频繁,请稍后重试\"}}", "ContentType": "application/json", diff --git a/ZR.Model/System/Dto/UploadDto.cs b/ZR.Model/System/Dto/UploadDto.cs new file mode 100644 index 00000000..3293d878 --- /dev/null +++ b/ZR.Model/System/Dto/UploadDto.cs @@ -0,0 +1,18 @@ +namespace ZR.Model.System.Dto +{ + public class UploadDto + { + /// + /// 自定文件名 + /// + public string FileName { get; set; } + /// + /// 存储目录 + /// + public string FileDir { get; set; } + /// + /// 文件名生成类型 1 原文件名 2 自定义 3 自动生成 + /// + public int FileNameType { get; set; } + } +} -- Gitee From 5563775b811a402f50c4c5e54b56b59e22170325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 15 Jul 2022 20:02:41 +0800 Subject: [PATCH 003/122] =?UTF-8?q?fix=EF=BC=9A=E4=B8=8A=E4=BC=A0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=8E=A5=E5=8F=A3=E5=AF=BC=E8=87=B4swagger=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/CommonController.cs | 62 ++++++------------- ZR.Model/System/Dto/UploadDto.cs | 18 ------ 2 files changed, 19 insertions(+), 61 deletions(-) delete mode 100644 ZR.Model/System/Dto/UploadDto.cs diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs index 64990dd0..a35deb4b 100644 --- a/ZR.Admin.WebApi/Controllers/CommonController.cs +++ b/ZR.Admin.WebApi/Controllers/CommonController.cs @@ -89,20 +89,20 @@ namespace ZR.Admin.WebApi.Controllers /// /// 存储文件 /// - /// /// 自定义文件名 /// 上传类型1、保存到本地 2、保存到阿里云 /// [HttpPost()] [Verify] [ActionPermissionFilter(Permission = "common")] - public async Task UploadFile([FromForm(Name = "file")] IFormFile formFile, [FromForm] UploadDto uploadDto, StoreType storeType = StoreType.LOCAL) + public async Task UploadFile([FromForm] UploadDto uploadDto, StoreType storeType = StoreType.LOCAL) { + IFormFile formFile = uploadDto.File; if (formFile == null) throw new CustomException(ResultCode.PARAM_ERROR, "上传文件不能为空"); SysFile file = new(); string fileExt = Path.GetExtension(formFile.FileName);//文件后缀 double fileSize = Math.Round(formFile.Length / 1024.0, 2);//文件大小KB - + if (OptionsSetting.Upload.NotAllowedExt.Contains(fileExt)) { return ToResponse(ResultCode.CUSTOM_ERROR, "上传失败,未经允许上传类型"); @@ -161,47 +161,23 @@ namespace ZR.Admin.WebApi.Controllers }); } + #endregion + } + + public class UploadDto + { /// - /// 存储文件到阿里云(已弃用) + /// 自定文件名 /// - /// - /// 自定义文件名 - /// 上传文件夹路径 - /// - [HttpPost] - [Verify] - [ActionPermissionFilter(Permission = "common")] - public async Task UploadFileAliyun([FromForm(Name = "file")] IFormFile formFile, string fileName = "", string fileDir = "") - { - if (formFile == null) throw new CustomException(ResultCode.PARAM_ERROR, "上传文件不能为空"); - string fileExt = Path.GetExtension(formFile.FileName);//文件后缀 - double fileSize = Math.Round(formFile.Length / 1024.0, 2);//文件大小KB - string[] NotAllowedFileExtensions = new string[] { ".bat", ".exe", ".jar", ".js" }; - int MaxContentLength = 15; - if (NotAllowedFileExtensions.Contains(fileExt)) - { - return ToResponse(ResultCode.CUSTOM_ERROR, "上传失败,未经允许上传类型"); - } - if ((fileSize / 1024) > MaxContentLength) - { - return ToResponse(ResultCode.CUSTOM_ERROR, "上传文件过大,不能超过 " + MaxContentLength + " MB"); - } - SysFile file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", fileDir, HttpContext.GetName()) - { - StoreType = (int)StoreType.ALIYUN, - FileType = formFile.ContentType - }; - file = await SysFileService.SaveFileToAliyun(file, formFile); - - if (file.Id <= 0) { return ToResponse(ApiResult.Error("阿里云连接失败")); } - - return SUCCESS(new - { - url = file.AccessUrl, - fileName = file.FileName, - fileId = file.Id.ToString() - }); - } - #endregion + public string FileName { get; set; } + /// + /// 存储目录 + /// + public string FileDir { get; set; } + /// + /// 文件名生成类型 1 原文件名 2 自定义 3 自动生成 + /// + public int FileNameType { get; set; } + public IFormFile File { get; set; } } } diff --git a/ZR.Model/System/Dto/UploadDto.cs b/ZR.Model/System/Dto/UploadDto.cs deleted file mode 100644 index 3293d878..00000000 --- a/ZR.Model/System/Dto/UploadDto.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace ZR.Model.System.Dto -{ - public class UploadDto - { - /// - /// 自定文件名 - /// - public string FileName { get; set; } - /// - /// 存储目录 - /// - public string FileDir { get; set; } - /// - /// 文件名生成类型 1 原文件名 2 自定义 3 自动生成 - /// - public int FileNameType { get; set; } - } -} -- Gitee From c6f69481be66bbb8ec59ba9b49a989678700e6d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Sat, 16 Jul 2022 20:43:48 +0800 Subject: [PATCH 004/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E5=9C=B0=E7=90=86=E4=BD=8D=E7=BD=AE=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/System/SysLoginController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs index ee5bb7a8..14b9634a 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs @@ -196,7 +196,7 @@ namespace ZR.Admin.WebApi.Controllers.System os = clientInfo.OS.ToString(), ipaddr = ipAddr, userName = context.GetName(), - loginLocation = ip_info.Province + "-" + ip_info.City + loginLocation = ip_info?.Province + "-" + ip_info?.City }; return sysLogininfor; -- Gitee From fcd7f7ab88423fe85ff03d9cb00d1f5e7caf670a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Sat, 16 Jul 2022 20:44:27 +0800 Subject: [PATCH 005/122] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=A0=B9=E6=8D=AE=E4=B8=8A=E7=BA=A7=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=B8=8B=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Repository/System/SysMenuRepository.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ZR.Repository/System/SysMenuRepository.cs b/ZR.Repository/System/SysMenuRepository.cs index d3d09bad..945b7780 100644 --- a/ZR.Repository/System/SysMenuRepository.cs +++ b/ZR.Repository/System/SysMenuRepository.cs @@ -20,13 +20,21 @@ namespace ZR.Repository.System /// public List SelectTreeMenuList(MenuQueryDto menu) { - return Context.Queryable() + int parentId = 0; + if (menu.ParentId != null) + { + parentId = (int)menu.ParentId; + } + var list = Context.Queryable() .WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName)) .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.visible == menu.Visible) .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.status == menu.Status) .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), it => menu.MenuTypeIdArr.Contains(it.menuType)) + .WhereIF(menu.ParentId != null, it => it.parentId == menu.ParentId) .OrderBy(it => new { it.parentId, it.orderNum }) - .ToTree(it => it.children, it => it.parentId, 0); + .ToTree(it => it.children, it => it.parentId, parentId); + + return list; } /// -- Gitee From a6891127b7e48186584247ff82e4937d8c970ed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 2 Aug 2022 07:23:36 +0800 Subject: [PATCH 006/122] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=A0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/System/SysUserController.cs | 26 ++++----- ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 7 +++ .../wwwroot/importTemplate/user.xlsx | Bin 0 -> 13375 bytes ZR.Common/ExcelHelper.cs | 2 +- ZR.Common/Tools.cs | 14 +++++ ZR.Service/System/IService/ISysUserService.cs | 10 +++- ZR.Service/System/SysUserService.cs | 50 ++++++++++++++++-- 7 files changed, 92 insertions(+), 17 deletions(-) create mode 100644 ZR.Admin.WebApi/wwwroot/importTemplate/user.xlsx diff --git a/ZR.Admin.WebApi/Controllers/System/SysUserController.cs b/ZR.Admin.WebApi/Controllers/System/SysUserController.cs index 7e6372da..4fb9d13d 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysUserController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysUserController.cs @@ -2,17 +2,17 @@ using Infrastructure.Attribute; using Infrastructure.Enums; using Infrastructure.Model; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; -using System.IO; using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Filters; using ZR.Common; using ZR.Model; using ZR.Model.System; using ZR.Service.System.IService; - +using ff = System.IO; namespace ZR.Admin.WebApi.Controllers.System { /// @@ -26,17 +26,18 @@ namespace ZR.Admin.WebApi.Controllers.System private readonly ISysRoleService RoleService; private readonly ISysPostService PostService; private readonly ISysUserPostService UserPostService; - + private readonly IWebHostEnvironment WebHostEnvironment; public SysUserController( ISysUserService userService, ISysRoleService roleService, ISysPostService postService, - ISysUserPostService userPostService) + ISysUserPostService userPostService, IWebHostEnvironment webHostEnvironment) { UserService = userService; RoleService = roleService; PostService = postService; UserPostService = userPostService; + WebHostEnvironment = webHostEnvironment; } /// @@ -175,14 +176,15 @@ namespace ZR.Admin.WebApi.Controllers.System /// 使用IFromFile必须使用name属性否则获取不到文件 /// [HttpPost("importData")] - [Log(Title = "用户导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false, IsSaveResponseData = false)] + [Log(Title = "用户导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false, IsSaveResponseData = true)] [ActionPermissionFilter(Permission = "system:user:import")] public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile) { - IEnumerable users = ExcelHelper.ImportData(formFile.OpenReadStream()); + List users = (List)ExcelHelper.ImportData(formFile.OpenReadStream()); - //TODO 业务逻辑,自行插入数据到db - return SUCCESS(users); + string msg = UserService.ImportUsers(users); + + return ToResponse(Infrastructure.ResultCode.SUCCESS, msg); } /// @@ -194,11 +196,11 @@ namespace ZR.Admin.WebApi.Controllers.System [AllowAnonymous] public IActionResult ImportTemplateExcel() { - List user = new List(); - MemoryStream stream = new MemoryStream(); + string fileDir = ff.Path.Combine(WebHostEnvironment.WebRootPath, "importTemplate", "user.xlsx"); + + var stream = ff.File.OpenRead(fileDir); //创建文件流 - string sFileName = DownloadImportTemplate(user, stream, "用户列表"); - return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"{sFileName}"); + return File(stream, "text/plain", "user.xlsx"); } /// diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 33f4e729..e88115e8 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -12,6 +12,13 @@ 1701;1702;1591;1570 + + + + + + + diff --git a/ZR.Admin.WebApi/wwwroot/importTemplate/user.xlsx b/ZR.Admin.WebApi/wwwroot/importTemplate/user.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a8a2b77f8efa2d778abfe437fc1a3746052acf71 GIT binary patch literal 13375 zcmeHt1y@|zwlx-9gG++Dy9R;;cbDLf)BVQx z1KvGjoH}*bwI)@2&n0`FB`*aDg#iW)1`7rTMhtec`GDF14hALw0|tf;1`DAj46t!D zwsF)|cC$5h&}MM8wj#=bf}qL;q^O6`!I7j|UYshI@}+uJ-yIz6BO!y-7Uz@k^UrY7IV;t5PZS-l=!?3G1Z z=?O%XWSoZByc*xtu{ePxNQh_aGP;L#xG?#2U9;V*MajA$a$51g0JH!KRfy6W(j7C0Q%kYRDfAV71$%kRre}H>dc~Ux9cGHT7rkF!Z*RTT6g`-7HMrm0S5q_kLEdSg z-cx_%`&lp5nLTGkOuR1E@u}cq7tz^;GlE6|Ovsl?AK|1o;g>O5m_Rq;$2VC1_}4{C zYWD0K@Zyq#V+)z@K3vbcm|Lul9k$p2dh_*P40nz|bFLJ^B+c$u1k^xl9T_qj!DK!x z0~gD%+19|nL~+9MZTRAW?{Cxed%l{wt^S}J`l2{qJ z&YvzXejnU-HNEr^RY=N3P`rs)*~>>_5v3+FmkfWYjgkOW8P6Y5%)7W`?FKMkyX;9Lwof8ZVg?*x^UCCM(n)CF<^ks^eq#KoUOEgV!eGyQqe}zHY}b(BF34-P$_APDPCimzsmjK;FTbs6}ykkV0UP(>YQ_I})Gn)gg%!5)%82)Fd% zL<(k~gMsN>nMa=$@x=|Eijo<(d4)lyJr9YSu94N(Gm*45^al@m+4Md|61JDuETdw* z^r`@Z-4g%cJngRIowxQ5UL^)Baat~^+~QAp|e zi(^;+H{)Kf4SOY&s9N+_n>4UwREfi#XZJifg8(6prZxi}?W4GS!UPbBo4#wwRvyu9p>#GxXv!S^(>Y*y19 z{jBdK(kbIDGI=r&ZjmXav+;=K8QVXeafk1Ui@qonnjs1+5P^K))7MzeKHVj^O)n}Y zsV41b^+~Rb-%EqX(BOmbK_JFV$zQ#E=~9~Smxbbe*s;pa>1%#KGeSb{z&%6n<7_dZ z^=LTL?n(+Zc!bl8_-TX6eOMZKrX>DJQuPsU&>O1rIBlFsym&$qto;MIrpxfKu>TUb z)Ser?cDT_T^BRQ`b(Lc5fq$|&Ua%QVZB-sVqjHQVl{&m?`GQSTA8yH(M@~udh(ydj zE2=#tO2XQmXSt=UA5+k$0!dVvtNgL-&IDb+^!vb;EOGgIC&@M}X$2~}G3;x2(ohJN zLAemw5}|xzycd&j7;EPta6B#Yoyn|r(ii9JUsOu9(0TAptTYqzV-@9aNAo63<4xrm z9dAY2jGELRh1&#k~-1;Pm#vxW#WZu;c^t2lR z-8|qIYnd=&`!0mkT4Y~w>h8*@F}H9{i0Ad#KI6XXFig|;k2woaoHp^*WY@}}i4<6Q z?X~iB@AUL=5)HGvUx20t6itL5lCdDzph+0+MUx<)|7M)C}&DggnLRaob=MtgmQq-IC zjf6y-7yjxfU-mn_b@l6Nkj(8*-!V0rnK--DHZd+$qMT1@lDa15r2`detz_u0wN5=Q zzT&k^_q!7JNYd4@(yfRi_R1-6>LLjzZcjs9BnA5fU6a?v!&a%JQEnVEHnW6fd-d7=3)n?Dz0mY>d_@} z-nUkNZz6MpI^!323#RW{t@OHz{f&pFcQ!P$H2Vq(ekmdb#8hfg*vaVvkRb2zQN@^dPLDxtN=+(C8&asBw9szt9jmdcPDz- zD2mTeA^{yplL$m$-PM1%ncUAiUyhH^K!Hu@mp8X=L4**Nq6j@z8KzOEj!*3BP-{Vu zF2(I%5>|v#z$x%0YZju{|J2K*tYABkiSb5Ubq*^hg$V0BEq11$Fyl<2`F$L^>(Rxc zxQB%r^y{dTa|ziRmd_RZDlBICOHJ>g!qxc6Ul}UDY!R432b8TY{KwZb#0R9N87LB)pzl2AmQQ2u2@bn0Jqd*xF+fJwhEVwmoraOe?z#TOp*K>s zD=B(YEPcK)Gw;(&74J+o5biM`#_N%gV&n&-4`bkBfIB$H%Y;dg1s{oUSQba_tngi? zTP+w(UvR_T6?FkJ7g&T52uHE@JQB0Lj?#GEu(s0Di-$er`6`k7K;=@povDF&ijI`7 zC;C+qQYsOEch5>qx>p3hj!>x@^yih8@^P?-3Mq_2y{V>>nHY!VdKK(5OS)d1q(GA$ zgbZFOECM9V55M99?~MYlG+b16lpp_AagpgP_x3Q5@?@CjK#nM5q^ah=FzX{SZ?$BwVpUk>*$doo@NB_HziQ6}$Eu zI6W%5nA5IOHuCe)Q(b@)X`3-G?j3qBa{zL^?pP=_D`mt#mhk`0iE}ERP;@|o!7$NJ z(co867488=MvM(5M!f8Lk(=uf z#h=05cs-Jl>@Jp!&=H%c+baL#O?t#^GTCIJw*wayn}?iud<2>?oXrga-Mvfgiq`?j zd@Nd2CCrb|Ss{9XSo>NPx-c|EQaj&aTZk1IoamSUF@E|eZXW0sW_nf0d`)IiveOo* z?(EBXBO%e*yN7W`Z;y-bbtwEn0^T3E#j-j?LNP4#L~dGB!L|JGc=_pQ1JpwpwwBRy z=m`t(t2c;SNj;-Uh}XgsbteS8?CuQEtc`_~Z9cMZLf=xx4MOz}dzWWPeH=C`oQ*{ShURO*Wo?AWO#jjghUb}x5Cl<2{q`nQYXxZZ@ zSNo^JI1~ZCh9_-~I#uKTqiiFKfrpEWLT~R=->V%I-N%d7YRCOaSN-)YkGt`>EN{0Iw4+NZa_X7yzGQUlY)4c zy#Q=vBt>v_@-0G`X|F{9*y-V7f1kLoH9qj_+KJ^dX?@v^WgE>rufMqGLu`x(+2J=h=(Q>|Ao}DMZ(H9D`=+ zCzE%@f65cWrOiSHqe`+R#7h=bPxl^LsEB^$aOnq6M5F3brx?e}+7~&<8^Ot%Hq8Os zFS{8MgfWyR*P6sd8Az|NJ&e|Gg@p17lUd3IdW7nY%Iwt3(aveVG96c(jK8xYZ6FI~ z$Y=^-MxQebUV`mrEgU8bl|F1*M^(gdn@MqOze;Wqo?`6+C&%yf4A-Mw9HsC}ds|i@ z;pSHa*j_{%luDkvvlFC*ZBj27HVoHZNaw1~WzEw3)Dq78uGcK0(&bD$_{A%ZYL85O zPi_d+x%RTI#)!lBDx+{%vy)E4JnxQQ>gONwXI3Fy9@5LAjY5z!ucxu;1{P_3LMTj+ zlPn(}2f{T=X2S<~*zs(og1r*8zv47+c};w9s5sh@QI25Ked2bBb2zxb*vKdd-By8! zdgpLw5>mu2n8_pz^&%+TMz9Osn;~aJg`UG@K;}>;Ef^f0w0JpG;>XbXj`AG(Bd>9E zlMlDQUvKHPie!dNe3irJuX6!+D2eQE*yPF#xg@@EA2fgFF1NUU@>HodXUv*m*{K zsX&N+k7kUr9-tJtl4EJ6%Zci~lYryrrV=U0_``4}{Uo5KsNEJklQkx$>(=G!yOynB!Fj zvwTNVSno?gp)}UTYjaa$0h>fi%4T_kzKhe@>k8dKI;Dl3qg3ySE0Jk)our?Li(M5g z63_EKPIdsAIVSl-d>6egy>|i<+c-gvHLaQt>azMq>RVbssvW8$Z=WkmJE?il5{^Qq zETQk3Qkkt+akuX460$jhjuyhm=oUzx9Zu9db#+Esn5a;naDV&#VP@a73e1?T8<%~( z0kfIrunF$?C{mtqdFPyDqs$KW(6XU%Ia)#-xw+JK-~j_)@@L4)1i2+s!s!7AX!C8; zf^M4qDaW|I1Kv%f;vd3ORW$iF53=<3WtI#L$S6U`Jfk4nndq~ISY$MsWjn*F zs}&Z$u+qUI%1v=xTRVwzy*aI-6zIzs(R6xCcOaQ@eY?HbJZ%C~=ga4A>&;cDxGUe0 z!7e6$p3nJ_+WIS218FrL8o!%^tmfmA;w*AwLWLF;dxsZs5p=!~sg)YS5mQOxoqogA zf%0*CJ4tRmK|$RmWPL|=_~EfmbotUs@1RyH0x1@DN^2IQMd!tXXTy498{y|Pw-wU2 zJT8_Ag4OefQ}DwUALL=(Gem)NrB3iInsv+g=Z*Tg-1R#j#PA5d6fb3e17KKe+0>y< zNeB%jA7?j`;irg)Tu*t42#T@O=IP1GD}ho2MRT?4eQVu^M&x-NQqan2 zL>+;XP==U1k@L9bH3GA1U*r`B2MEB*D2v0eHpLp10Q+kO(NKLZ!te&8DCIZHMZ6^M zGD(uAf>4Yl$OFe^i8(v+sP-{6a&&o;k_BBMH;qHTraS&XGjaS>q~d;Q0aGC$0Fti; zgX^*cTB;l29R_M&_4Uz&v8&=K0$EwZyx?!%1g0@}e$Yo=#CvHi_(5Rdoj+-OWibrG zk-smA6j3#z0trm}-WB!&p1tH-G{@GO9WOig{O=sF8|^R3*^|koK1otFY8OFNEPkpA zh#B}APSdElFx`jel{A4PK14@Nts~)^f;4w5+6L|d-!a=jKeRK=epq1N6|}RM9#8G} zvaWsEx;@5gVa>^}n=r>|7IGGc>WRB#Qn`is{fyO}V`q}cmUXz#xrl7>uP zRS@}VvG9Q8hWgv&oQFp^>b)T0fIB7AbH!9Fl6Q9xpRAGEXXl9`xu?hK^qn}u3U;SY z@5deO(u0q?vg8)cL=0T;MzL)OUJYZ1d+Y~4jvur$HTP0knR4d2p$@b8`+jma{qSSw zgLW7wf45nOz5USVi5K2huqQ4l}gy_#<%)<#m?wf2i382 zCN|nM$iAa!w%Y<52*mP(TBnzFZ4!6A6A+!_1Ubt;x2TuczT~Mi!D8HSh!3v0eiuG6w9&8ETS`W;w8Z;6uk`md0;%_^PS6A#)!XP+jJU zCqY57r;y7x8(U&$x-W~QFl9@F6C}_;(X1S|=;goZ+d5mhcKcD5yLb3J((Q z)JG(NZDi@@;O_KOs$+t_qZZ|SJOGdOy~1Z2mpDmmBrf%}JRiv~32ThHh%w*ala;78 z%9HS2erQ~o&21FI%^c^3gH_wEVY$KL=+gx9NH@gdeW<&#)Y!TpMTz6yrjEY(l9bFp z(HF}hzFw;;Js7X+g63Ifhc(Pa3x>CM-XeKJrz0|6|Fj*!X2CPpE3a8HQYr1m&e6US zppO1J11~l=uEJNV+vcrSu$J)W1kve$A)Ng6z}d$Bd{wMF#WjwtT@<>nnkw0&tXoK> z&KCq2-{pt($r++d5JozB)S?FvBqA(q@z~X47+)nLeP-2FPT;h(rW7reClD)-w&25; zhOObspW&si#3&SNDOYya&QTxgw-Xpw{VdznB43=LW07k|D@mVUMOr)2gQ1r#(NIh4 znuc9>0L`IV1)vE@B}-YOznoN#&7A8ck>z zI(5V_c0$^wqqVlcHxNthc2{pSA127r?6ThBO0$eMe7Nx=XsYd;&I619)=+|SS-7~> zf{rnsnE~T)I4g9Ga%iWP3J4ck={mG-HnbaNYA8D6!EYjFBwmog6+zbGK(iZro1wkk z^NC;26i&r?9evTb^6I*K#8uEkh2wxcxW?tC!qaWdg~#?msUZ64;~ppFs9+0GM3#{I zCE=bota;8A*xm~TnX45+_hnXs?~mjYO1FUF)_={c-w~*}=s;n>7c@%x2bF)SpMR=V zf5@S~HLG7@Xi40lO(zlRyQ_p-6s$WI3eV4B8Sio>=W6$0P;nNDpy{&B&#p51_Wh~M zId$5HLU@B4m~=g6TW1YIdYZ!EbgCdSe$3a`8ZaL8hV!a+k!2*dxTsgY60I#79o?3j z9TW*RFbz`w7#5Cspon)2p0htT(D&dIMH7jlN&zp7;ICX>^)5MK3n^d)uVjQRJfTco zeNRfY#0ApnQFnneQlb8Qe>g`RPZHPZI zg3{Y}nX%Uj8Muz*m_w;kg7n^Ze2<_;Qycn>V@Jnd;p5poGlPM-&0+ko>F$p{AZ zx+oWC`Un2whMn!ldIAJ~WK?32X!{VHthKQ#G&1L*qOjy5y{R#Z^G|KI+ZT*@Y(uN} z{xLR_w;>P8VeSI?4h$VQ4R=n0))g{)81MEzL>+y;JH)AOTo_t^8GdVTa<7A(m-4rG`VMjjX* z%p9H11PTV%0;+bs$6fWZhV3q}pvi3G$btW`Y4>@1oMfhWtzK&{m z4IJL|X0BzQNmg_@2R~=uDY195;>_D!>O76+-AOEG#%N(eE2yJ6Jxje_MY; zF5jkA(E6`J{ZHO?)HeW?v5dbif6Bru7NF;CJtr_9V1RdB&T*;3UDUZl@>IrbN03xM z?C5d?L}Rsr$6Z!pGHO%ed{Y>VZu)NbczLp#8~5VL81*ukcnbUZ3ZU3H^T(Rf`2{em z0r6a;j{SM#A15KX+^ZjNjko4hA=;3;qPwvjjpPC z2TfNEoRVxx$%{&TXlh9v?6I$2Kf-Gk+24}(htWzlpGr51oi%)$KHPVgX%?}8iHQ&}bY!iiTJe7k}-M{@+rS$fGWW9Pq&E!-@J?xaUOawZMEZ5QtI zP6_ecFmn{yO5Em)mK;(|hNyN#5sKf*(>rb10tT_EEHe`~iQNmM%?sF@;vR%Tt(q4f z;L>HG3rW92H%fgqYMe3<@#xY5T!G_d#IL*>t~iB(b7^ELd_3~MGElpNvfLZX4y+hK z0TKMj@am8bXc_IfI z-51IVkwyrejJ!QW9?uJrw|XnIZFR~TDTKn)h0tW@c!c|E+2J^kqByaC7!q5s_nRv> z$tghvQX$w;Y>$9fJoY+YaD@%F<7B084~jSV>eMm+0Iwztua`Iaab5xw}@0Q2O$#~y&=I%DHqcn8i+xiaprVi ziY|n^tT^-JI(3UNmpH(yB|1*K<@WeP}fdW_zh_Y0F(ACk*-dNwr*hu(K+JY4F zzy0BlpcX4&xyVEibS2d4KgMtnZJc2}f=%$`dpv`pXLU1T8;dLzfI$Ay23K?UBl3}s z=I$)9@T43%1LroaNJBv&$8hYswyo*hm9w0^HPO|q6j?m_Bi9R;6FJ)unda#!( zAo@B*9;YUZv-nd^bac+OhwpiC4-~{{>&M5=Ype>+o7nCx@^sJEN`1n^F9N=bWN$&x z%&pkF118Ltot(_)$IF&7k+St1gYPJPAh_?A;*1V4p|9~S=FGK7M;fYk?IMLJHW{0zeHl?Tsy9NkyNzoUz$`*RmFFNdA)ZHv7~-RMbij0LoYX#ZUsTipD;yt>9#vn2 z9*^M`K*0=0tFWn(l2nL_cvrGoBcA-0xR`p~xN97Z6f?(8VaDx!e85cM6>ooJ+7bWb z?Bjh!)3v*USA*x%@#TKp`|I4jscb;`avAi3^eO*d?~00mzRE*ySV2Gm8=S$dRWY0l ziI8OZd-A}#A41F*NVX&Jv0WQ8Ix>{?HvF%4u4*MiY`VUhkrf^4mb&H^`C8`r*uB#>Owa6 z%0_jUq&}x8aiXjEB3fJkmw%#@gyG)jv{YDJJSG2&_+F06p^`}@#yd+4wJ-YO6#Sp!laxTqeNvgOo7rFvKB$SrM zRw~{^?-PvB3{E82T-xh_OpZG`xyhnMERFcBI~E$w0}bV&IL9Qwx27ZaJEV30ae?SZ zk34keQ5?84UGuPp8(gH)G#7D65-0B_>R}qC#UdFp{NwM4?UFhZCx#+3NrYl~L2c$*W z$<3v|>gsNBFrtHrnJ+@sIpBdC&A?_KRa1zRiL5$%RNi#tM z^I24K_1N7My*R3+in2IQ?klA7dPgASOTb5T03>~M`(YVuTA~tw^(@-U`_bC2QD;8S z4>i&S7yn!-(PxsM( zuP-1HX)Yz4^Dy}7FctB)7qJ7!nSQv}Kn343$wYIPpuIS5B}c2Q2C;5;@XWfjn-)(TphKL`yDK@U3KMVMu>%TPY%S-(o;O~vT|1tb| zy#sm4U)p}38$NG-{B24E()K`^@2{<3&yD}yKla-c)J+Ee%lLokCVP(aykqD$k}cx@ ze2IVb4?RbD-m>r;g&nlB0R5Eb4Ghl#o1?AtS=pcO*^uHaR z%gfIZo=d8~5tImiA^dLw>vN#zg4S=K*Mz@-{(th;bHL}K&2PYPqF;c|Bpb$O_rD~Z z=b+D(fWLr}`~v-lF7O=T`Ofh-LI&9{gum@0pIbjK dictHeader = new(); for (int i = colStart; i < colEnd; i++) { - var name = worksheet.Cells[rowStart, i].Value.ToString(); + var name = worksheet.Cells[rowStart, i].Value?.ToString(); dictHeader[name] = i; PropertyInfo propertyInfo = MapPropertyInfo(name); diff --git a/ZR.Common/Tools.cs b/ZR.Common/Tools.cs index 053802cf..f049dda8 100644 --- a/ZR.Common/Tools.cs +++ b/ZR.Common/Tools.cs @@ -81,6 +81,20 @@ namespace ZR.Common } } + public static bool CheckUserName(string str) + { + try + { + string rg = @"^[a-z][a-z0-9-_]*$"; + return Regex.IsMatch(str, rg); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + return false; + } + } + /// /// 计算密码强度 /// diff --git a/ZR.Service/System/IService/ISysUserService.cs b/ZR.Service/System/IService/ISysUserService.cs index 8f2997bb..9e6a99ae 100644 --- a/ZR.Service/System/IService/ISysUserService.cs +++ b/ZR.Service/System/IService/ISysUserService.cs @@ -1,4 +1,5 @@ -using ZR.Model; +using System.Collections.Generic; +using ZR.Model; using ZR.Model.System; using ZR.Model.System.Dto; @@ -70,5 +71,12 @@ namespace ZR.Service.System.IService SysUser Register(RegisterDto dto); void CheckUserAllowed(SysUser user); void CheckUserDataScope(long userid, long loginUserId); + + /// + /// 导入 + /// + /// + /// + string ImportUsers(List users); } } diff --git a/ZR.Service/System/SysUserService.cs b/ZR.Service/System/SysUserService.cs index c9a6b0f7..862fd679 100644 --- a/ZR.Service/System/SysUserService.cs +++ b/ZR.Service/System/SysUserService.cs @@ -1,5 +1,6 @@ using Infrastructure; using Infrastructure.Attribute; +using Infrastructure.Extensions; using Microsoft.AspNetCore.Http; using System; using System.Collections; @@ -149,7 +150,7 @@ namespace ZR.Service /// public int DeleteUser(long userid) { - CheckUserAllowed(new SysUser() { UserId = userid}); + CheckUserAllowed(new SysUser() { UserId = userid }); //删除用户与角色关联 UserRoleService.DeleteUserRoleByUserId((int)userid); // 删除用户与岗位关联 @@ -216,10 +217,53 @@ namespace ZR.Service { if (!SysUser.IsAdmin(loginUserId)) { - SysUser user = new SysUser() { UserId = userid}; - + SysUser user = new SysUser() { UserId = userid }; + //TODO 判断用户是否有数据权限 } } + + /// + /// 导入数据 + /// + /// + /// + public string ImportUsers(List users) + { + users.ForEach(x => + { + x.Create_time = DateTime.Now; + x.Status = "0"; + x.DelFlag = "0"; + x.Password = "E10ADC3949BA59ABBE56E057F20F883E"; + x.Remark = "数据导入"; + }); + var x = Context.Storageable(users) + .SplitInsert(it => !it.Any()) + .SplitIgnore(it => it.Item.UserName == "admin") + .SplitError(x => x.Item.UserName.IsEmpty(), "用户名不能为空") + .SplitError(x => !Tools.CheckUserName(x.Item.UserName), "用户名不符合规范") + .WhereColumns(it => it.UserName)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2}) + .ToStorage(); + var result = x.AsInsertable.ExecuteCommand();//插入可插入部分; + + string msg = string.Format(" 插入{0} 更新{1} 错误数据{2} 不计算数据{3} 删除数据{4},总共{5}", + x.InsertList.Count, + x.UpdateList.Count, + x.ErrorList.Count, + x.IgnoreList.Count, + x.DeleteList.Count, + x.TotalList.Count); + //输出统计 + Console.WriteLine(msg); + + //输出错误信息 + foreach (var item in x.ErrorList) + { + Console.WriteLine("userName为" + item.Item.UserName + " : " + item.StorageMessage); + } + + return msg; + } } } -- Gitee From 3a3bd642c153bc84141bb45d092ca008742eb5d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 2 Aug 2022 07:43:35 +0800 Subject: [PATCH 007/122] =?UTF-8?q?=E5=AD=97=E5=85=B8=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E6=96=B0=E5=A2=9E=E6=AD=A3=E5=88=99=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../System/SysDictTypeController.cs | 12 ++++++---- ZR.Model/System/Dto/SysDictTypeDto.cs | 24 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 ZR.Model/System/Dto/SysDictTypeDto.cs diff --git a/ZR.Admin.WebApi/Controllers/System/SysDictTypeController.cs b/ZR.Admin.WebApi/Controllers/System/SysDictTypeController.cs index 8c7389ba..f70cb3cd 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysDictTypeController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysDictTypeController.cs @@ -1,6 +1,7 @@ using Infrastructure.Attribute; using Infrastructure.Enums; using Infrastructure.Model; +using Mapster; using Microsoft.AspNetCore.Mvc; using System; using ZR.Admin.WebApi.Extensions; @@ -8,6 +9,7 @@ using ZR.Admin.WebApi.Filters; using ZR.Common; using ZR.Model; using ZR.Model.System; +using ZR.Model.System.Dto; using ZR.Service.System.IService; namespace ZR.Admin.WebApi.Controllers.System @@ -56,13 +58,14 @@ namespace ZR.Admin.WebApi.Controllers.System /// /// 添加字典类型 /// - /// + /// /// [ActionPermissionFilter(Permission = "system:dict:add")] [Log(Title = "字典操作", BusinessType = BusinessType.INSERT)] [HttpPost("edit")] - public IActionResult Add([FromBody] SysDictType dict) + public IActionResult Add([FromBody] SysDictTypeDto dto) { + SysDictType dict = dto.Adapt(); if (UserConstants.NOT_UNIQUE.Equals(SysDictService.CheckDictTypeUnique(dict))) { return ToResponse(ApiResult.Error($"新增字典'{dict.DictName}'失败,字典类型已存在")); @@ -75,14 +78,15 @@ namespace ZR.Admin.WebApi.Controllers.System /// /// 修改字典类型 /// - /// + /// /// [ActionPermissionFilter(Permission = "system:dict:edit")] [Log(Title = "字典操作", BusinessType = BusinessType.UPDATE)] [Route("edit")] [HttpPut] - public IActionResult Edit([FromBody] SysDictType dict) + public IActionResult Edit([FromBody] SysDictTypeDto dto) { + SysDictType dict = dto.Adapt(); if (UserConstants.NOT_UNIQUE.Equals(SysDictService.CheckDictTypeUnique(dict))) { return ToResponse(ApiResult.Error($"修改字典'{dict.DictName}'失败,字典类型已存在")); diff --git a/ZR.Model/System/Dto/SysDictTypeDto.cs b/ZR.Model/System/Dto/SysDictTypeDto.cs new file mode 100644 index 00000000..6ae5cf46 --- /dev/null +++ b/ZR.Model/System/Dto/SysDictTypeDto.cs @@ -0,0 +1,24 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZR.Model.System.Dto +{ + public class SysDictTypeDto + { + public long DictId { get; set; } + /// + /// 字典名称 + /// + public string DictName { get; set; } + /// + /// 字典类型 + /// + [Required(ErrorMessage = "字典类型不能为空")] + [RegularExpression(pattern: "^[a-z][a-z0-9_]*$", ErrorMessage = "字典类型必须以字母开头,且字典类型只能由小写字母或加下划线还有数字组成")] + public string DictType { get; set; } + public string Status { get; set; } + /// + /// 系统内置 Y是 N否 + /// + public string Type { get; set; } + } +} -- Gitee From 6f6c2d61d178b7899be0f0ffc2b260b04e70215b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 2 Aug 2022 07:44:01 +0800 Subject: [PATCH 008/122] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=90=8D=E6=96=B0=E5=A2=9E=E6=AD=A3=E5=88=99=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/System/SysUserController.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/System/SysUserController.cs b/ZR.Admin.WebApi/Controllers/System/SysUserController.cs index 4fb9d13d..2237ce84 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysUserController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysUserController.cs @@ -96,7 +96,10 @@ namespace ZR.Admin.WebApi.Controllers.System { return ToResponse(ApiResult.Error($"新增用户 '{user.UserName}'失败,登录账号已存在")); } - + if (!Tools.CheckUserName(user.UserName)) + { + return ToResponse(ApiResult.Error($"用户名请使用字母开头可包含大小写字母数字_-")); + } user.Create_by = HttpContext.GetName(); user.Password = NETCore.Encrypt.EncryptProvider.Md5(user.Password); @@ -183,7 +186,7 @@ namespace ZR.Admin.WebApi.Controllers.System List users = (List)ExcelHelper.ImportData(formFile.OpenReadStream()); string msg = UserService.ImportUsers(users); - + return ToResponse(Infrastructure.ResultCode.SUCCESS, msg); } -- Gitee From 0af519be75c41c05b0f29962a1cb35b762ebc0e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 15 Aug 2022 19:56:41 +0800 Subject: [PATCH 009/122] =?UTF-8?q?=E5=8D=87=E7=BA=A7sqlsugar=E8=87=B35.1.?= =?UTF-8?q?2.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 2 +- ZR.CodeGenerator/ZR.CodeGenerator.csproj | 2 +- ZR.Model/ZR.Model.csproj | 2 +- ZR.Repository/ZR.Repository.csproj | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index e88115e8..0c74d0c2 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -31,7 +31,7 @@ - + diff --git a/ZR.CodeGenerator/ZR.CodeGenerator.csproj b/ZR.CodeGenerator/ZR.CodeGenerator.csproj index 953bf963..e4c7abdc 100644 --- a/ZR.CodeGenerator/ZR.CodeGenerator.csproj +++ b/ZR.CodeGenerator/ZR.CodeGenerator.csproj @@ -12,6 +12,6 @@ - + diff --git a/ZR.Model/ZR.Model.csproj b/ZR.Model/ZR.Model.csproj index 46d4eade..adbd207b 100644 --- a/ZR.Model/ZR.Model.csproj +++ b/ZR.Model/ZR.Model.csproj @@ -7,7 +7,7 @@ - + diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index 0cc8a71e..f40e0832 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -13,8 +13,8 @@ - - + + -- Gitee From 5f241f87590d37da39fcbd4d6413259dbba2ba46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 19 Aug 2022 09:29:26 +0800 Subject: [PATCH 010/122] =?UTF-8?q?fix=EF=BC=9A=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt | 2 +- ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt index dc05b23a..6e91504f 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt @@ -410,7 +410,7 @@ $end function getList(){ $foreach(item in genTable.Columns) $if(item.HtmlType == "datetime" && item.IsQuery == true) - proxy.addDateRange(queryParams, proxy.dateRange${item.CsharpField}, '${item.CsharpField}'); + proxy.addDateRange(queryParams, dateRange${item.CsharpField}.value, '${item.CsharpField}'); $end $end loading.value = true diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt index 94ce0971..7ebb75b5 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt @@ -385,7 +385,7 @@ $end function getList(){ $foreach(item in genTable.Columns) $if(item.HtmlType == "datetime" && item.IsQuery == true) - proxy.addDateRange(queryParams, proxy.dateRange${item.CsharpField}, '${item.CsharpField}'); + proxy.addDateRange(queryParams, dateRange${item.CsharpField}.value, '${item.CsharpField}'); $end $end loading.value = true -- Gitee From 77ec15cfa32669745e8709336b01ff5337ee47d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 30 Aug 2022 22:06:32 +0800 Subject: [PATCH 011/122] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 10 +++++----- ZR.CodeGenerator/ZR.CodeGenerator.csproj | 2 +- ZR.Common/ZR.Common.csproj | 2 +- ZR.Model/ZR.Model.csproj | 2 +- ZR.Repository/ZR.Repository.csproj | 2 +- ZR.Tasks/ZR.Tasks.csproj | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 0c74d0c2..199b4ed9 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -24,16 +24,16 @@ - + - - + + - - + + diff --git a/ZR.CodeGenerator/ZR.CodeGenerator.csproj b/ZR.CodeGenerator/ZR.CodeGenerator.csproj index e4c7abdc..c9aa8430 100644 --- a/ZR.CodeGenerator/ZR.CodeGenerator.csproj +++ b/ZR.CodeGenerator/ZR.CodeGenerator.csproj @@ -12,6 +12,6 @@ - + diff --git a/ZR.Common/ZR.Common.csproj b/ZR.Common/ZR.Common.csproj index c737253c..7104c6f8 100644 --- a/ZR.Common/ZR.Common.csproj +++ b/ZR.Common/ZR.Common.csproj @@ -6,7 +6,7 @@ - + diff --git a/ZR.Model/ZR.Model.csproj b/ZR.Model/ZR.Model.csproj index adbd207b..d9400efb 100644 --- a/ZR.Model/ZR.Model.csproj +++ b/ZR.Model/ZR.Model.csproj @@ -7,7 +7,7 @@ - + diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index f40e0832..9d054798 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -14,7 +14,7 @@ - + diff --git a/ZR.Tasks/ZR.Tasks.csproj b/ZR.Tasks/ZR.Tasks.csproj index 4bdcc3ff..74022ac4 100644 --- a/ZR.Tasks/ZR.Tasks.csproj +++ b/ZR.Tasks/ZR.Tasks.csproj @@ -5,7 +5,7 @@ - + -- Gitee From 13240cdd841d29a7255d1befff3fbd376e318d00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 1 Sep 2022 21:54:53 +0800 Subject: [PATCH 012/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E9=A6=96=E5=AD=97=E6=AF=8D=E5=A4=A7=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/System/SysLoginController.cs | 10 +-- .../Controllers/System/SysMenuController.cs | 8 +-- .../System/monitor/SysLogininforController.cs | 2 +- .../Extensions/HttpContextExtension.cs | 4 +- .../Filters/GlobalActionMonitor.cs | 28 ++++---- .../Middleware/GlobalExceptionMiddleware.cs | 30 ++++---- ZR.Model/System/Dto/MenuDto.cs | 24 +++---- ZR.Model/System/SysLogininfor.cs | 18 ++--- ZR.Model/System/SysMenu.cs | 26 +++---- ZR.Model/System/SysOperLog.cs | 62 ++++++++--------- ZR.Model/System/Vo/TreeSelectVo.cs | 2 +- .../System/SysLogininfoRepository.cs | 10 +-- ZR.Repository/System/SysMenuRepository.cs | 46 ++++++------- ZR.Repository/System/SysOperLogRepository.cs | 10 +-- ZR.Service/System/SysLoginService.cs | 18 ++--- ZR.Service/System/SysMenuService.cs | 68 +++++++++---------- ZR.Service/System/SysOperLogService.cs | 4 +- 17 files changed, 184 insertions(+), 186 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs index 14b9634a..0dbbf77c 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs @@ -192,11 +192,11 @@ namespace ZR.Admin.WebApi.Controllers.System ClientInfo clientInfo = context.GetClientInfo(); SysLogininfor sysLogininfor = new() { - browser = clientInfo.Device.Family, - os = clientInfo.OS.ToString(), - ipaddr = ipAddr, - userName = context.GetName(), - loginLocation = ip_info?.Province + "-" + ip_info?.City + Browser = clientInfo.Device.Family, + Os = clientInfo.OS.ToString(), + Ipaddr = ipAddr, + UserName = context.GetName(), + LoginLocation = ip_info?.Province + "-" + ip_info?.City }; return sysLogininfor; diff --git a/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs b/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs index 7281ead6..13fa1746 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs @@ -106,11 +106,11 @@ namespace ZR.Admin.WebApi.Controllers.System .NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);//忽略字段名称的大小写;//忽略除以上配置的所有字段 var modal = menuDto.Adapt(config).ToUpdate(HttpContext); - if (UserConstants.YES_FRAME.Equals(modal.isFrame) && !modal.path.StartsWith("http")) + if (UserConstants.YES_FRAME.Equals(modal.IsFrame) && !modal.Path.StartsWith("http")) { return ToResponse(ApiResult.Error($"修改菜单'{modal.MenuName}'失败,地址必须以http(s)://开头")); } - if (modal.MenuId.Equals(modal.parentId)) + if (modal.MenuId.Equals(modal.ParentId)) { return ToResponse(ApiResult.Error($"修改菜单'{modal.MenuName}'失败,上级菜单不能选择自己")); } @@ -141,7 +141,7 @@ namespace ZR.Admin.WebApi.Controllers.System { return ToResponse(ApiResult.Error($"新增菜单'{menu.MenuName}'失败,菜单名称已存在")); } - if (UserConstants.YES_FRAME.Equals(menu.isFrame) && !menu.path.StartsWith("http")) + if (UserConstants.YES_FRAME.Equals(menu.IsFrame) && !menu.Path.StartsWith("http")) { return ToResponse(ApiResult.Error($"新增菜单'{menu.MenuName}'失败,地址必须以http(s)://开头")); } @@ -189,7 +189,7 @@ namespace ZR.Admin.WebApi.Controllers.System MenuDto MenuDto = new() { MenuId = id, - orderNum = value + OrderNum = value }; if (MenuDto == null) { return ToResponse(ApiResult.Error(101, "请求参数错误")); } diff --git a/ZR.Admin.WebApi/Controllers/System/monitor/SysLogininforController.cs b/ZR.Admin.WebApi/Controllers/System/monitor/SysLogininforController.cs index f66d19e0..189a1f5a 100644 --- a/ZR.Admin.WebApi/Controllers/System/monitor/SysLogininforController.cs +++ b/ZR.Admin.WebApi/Controllers/System/monitor/SysLogininforController.cs @@ -87,7 +87,7 @@ namespace ZR.Admin.WebApi.Controllers.monitor logininfoDto.BeginTime = DateTimeHelper.GetBeginTime(logininfoDto.BeginTime, -1); logininfoDto.EndTime = DateTimeHelper.GetBeginTime(logininfoDto.EndTime, 1); var exp = Expressionable.Create() - .And(it => it.loginTime >= logininfoDto.BeginTime && it.loginTime <= logininfoDto.EndTime); + .And(it => it.LoginTime >= logininfoDto.BeginTime && it.LoginTime <= logininfoDto.EndTime); var list = sysLoginService.Queryable().Where(exp.ToExpression()) .ToList(); diff --git a/ZR.Admin.WebApi/Extensions/HttpContextExtension.cs b/ZR.Admin.WebApi/Extensions/HttpContextExtension.cs index dea415d7..7f35eeb4 100644 --- a/ZR.Admin.WebApi/Extensions/HttpContextExtension.cs +++ b/ZR.Admin.WebApi/Extensions/HttpContextExtension.cs @@ -134,7 +134,7 @@ namespace ZR.Admin.WebApi.Extensions /// public static void GetRequestValue(this HttpContext context, SysOperLog operLog) { - string reqMethod = operLog.requestMethod; + string reqMethod = operLog.RequestMethod; string param; if (HttpMethods.IsPost(reqMethod) || HttpMethods.IsPut(reqMethod)) @@ -148,7 +148,7 @@ namespace ZR.Admin.WebApi.Extensions { param = context.Request.QueryString.Value.ToString(); } - operLog.operParam = param; + operLog.OperParam = param; } } diff --git a/ZR.Admin.WebApi/Filters/GlobalActionMonitor.cs b/ZR.Admin.WebApi/Filters/GlobalActionMonitor.cs index 19efe966..01a5fc15 100644 --- a/ZR.Admin.WebApi/Filters/GlobalActionMonitor.cs +++ b/ZR.Admin.WebApi/Filters/GlobalActionMonitor.cs @@ -101,31 +101,31 @@ namespace ZR.Admin.WebApi.Filters SysOperLog sysOperLog = new() { - status = 0, - operName = userName, - operIp = ip, - operUrl = HttpContextExtension.GetRequestUrl(context.HttpContext), - requestMethod = method, - jsonResult = jsonResult, - operLocation = ip_info.Province + " " + ip_info.City, - method = controller + "." + action + "()", + Status = 0, + OperName = userName, + OperIp = ip, + OperUrl = HttpContextExtension.GetRequestUrl(context.HttpContext), + RequestMethod = method, + JsonResult = jsonResult, + OperLocation = ip_info.Province + " " + ip_info.City, + Method = controller + "." + action + "()", //Elapsed = _stopwatch.ElapsedMilliseconds, - operTime = DateTime.Now + OperTime = DateTime.Now }; HttpContextExtension.GetRequestValue(context.HttpContext, sysOperLog); if (logAttribute != null) { - sysOperLog.title = logAttribute?.Title; - sysOperLog.businessType = (int)logAttribute?.BusinessType; - sysOperLog.operParam = logAttribute.IsSaveRequestData ? sysOperLog.operParam : ""; - sysOperLog.jsonResult = logAttribute.IsSaveResponseData ? sysOperLog.jsonResult : ""; + sysOperLog.Title = logAttribute?.Title; + sysOperLog.BusinessType = (int)logAttribute?.BusinessType; + sysOperLog.OperParam = logAttribute.IsSaveRequestData ? sysOperLog.OperParam : ""; + sysOperLog.JsonResult = logAttribute.IsSaveResponseData ? sysOperLog.JsonResult : ""; } LogEventInfo ei = new(LogLevel.Info, "GlobalActionMonitor", ""); ei.Properties["jsonResult"] = !HttpMethods.IsGet(method) ? jsonResult : ""; - ei.Properties["requestParam"] = sysOperLog.operParam; + ei.Properties["requestParam"] = sysOperLog.OperParam; ei.Properties["user"] = userName; logger.Log(ei); diff --git a/ZR.Admin.WebApi/Middleware/GlobalExceptionMiddleware.cs b/ZR.Admin.WebApi/Middleware/GlobalExceptionMiddleware.cs index f31d0b41..b0a1d228 100644 --- a/ZR.Admin.WebApi/Middleware/GlobalExceptionMiddleware.cs +++ b/ZR.Admin.WebApi/Middleware/GlobalExceptionMiddleware.cs @@ -84,15 +84,15 @@ namespace ZR.Admin.WebApi.Middleware SysOperLog sysOperLog = new() { - status = 1, - operIp = ip, - operUrl = HttpContextExtension.GetRequestUrl(context), - requestMethod = context.Request.Method, - jsonResult = responseResult, - errorMsg = string.IsNullOrEmpty(error) ? msg : error, - operName = context.User.Identity.Name, - operLocation = ip_info.Province + " " + ip_info.City, - operTime = DateTime.Now + Status = 1, + OperIp = ip, + OperUrl = HttpContextExtension.GetRequestUrl(context), + RequestMethod = context.Request.Method, + JsonResult = responseResult, + ErrorMsg = string.IsNullOrEmpty(error) ? msg : error, + OperName = context.User.Identity.Name, + OperLocation = ip_info.Province + " " + ip_info.City, + OperTime = DateTime.Now }; HttpContextExtension.GetRequestValue(context, sysOperLog); var endpoint = GetEndpoint(context); @@ -101,10 +101,10 @@ namespace ZR.Admin.WebApi.Middleware var logAttribute = endpoint.Metadata.GetMetadata(); if (logAttribute != null) { - sysOperLog.businessType = (int)logAttribute?.BusinessType; - sysOperLog.title = logAttribute?.Title; - sysOperLog.operParam = logAttribute.IsSaveRequestData ? sysOperLog.operParam : ""; - sysOperLog.jsonResult = logAttribute.IsSaveResponseData ? sysOperLog.jsonResult : ""; + sysOperLog.BusinessType = (int)logAttribute?.BusinessType; + sysOperLog.Title = logAttribute?.Title; + sysOperLog.OperParam = logAttribute.IsSaveRequestData ? sysOperLog.OperParam : ""; + sysOperLog.JsonResult = logAttribute.IsSaveResponseData ? sysOperLog.JsonResult : ""; } } LogEventInfo ei = new(logLevel, "GlobalExceptionMiddleware", error) @@ -114,13 +114,13 @@ namespace ZR.Admin.WebApi.Middleware }; ei.Properties["status"] = 1;//走正常返回都是通过走GlobalExceptionFilter不通过 ei.Properties["jsonResult"] = responseResult; - ei.Properties["requestParam"] = sysOperLog.operParam; + ei.Properties["requestParam"] = sysOperLog.OperParam; ei.Properties["user"] = HttpContextExtension.GetName(context); Logger.Log(ei); context.Response.ContentType = "text/json;charset=utf-8"; await context.Response.WriteAsync(responseResult, System.Text.Encoding.UTF8); - WxNoticeHelper.SendMsg("系统出错", sysOperLog.errorMsg); + WxNoticeHelper.SendMsg("系统出错", sysOperLog.ErrorMsg); SysOperLogService.InsertOperlog(sysOperLog); } diff --git a/ZR.Model/System/Dto/MenuDto.cs b/ZR.Model/System/Dto/MenuDto.cs index 2152c99f..23c3a26f 100644 --- a/ZR.Model/System/Dto/MenuDto.cs +++ b/ZR.Model/System/Dto/MenuDto.cs @@ -1,7 +1,5 @@ using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Text; namespace ZR.Model.System.Dto { @@ -14,60 +12,60 @@ namespace ZR.Model.System.Dto /// /// 父菜单ID /// - public long? parentId { get; set; } + public long? ParentId { get; set; } /// /// 显示顺序 /// - public int orderNum { get; set; } + public int OrderNum { get; set; } /// /// 路由地址 /// - public string path { get; set; } = "#"; + public string Path { get; set; } = "#"; /// /// 组件路径 /// - public string component { get; set; } + public string Component { get; set; } /// /// 是否缓存(1缓存 0不缓存) /// [Required(ErrorMessage = "是否缓存不能为空")] - public string isCache { get; set; } + public string IsCache { get; set; } /// /// 是否外链 1、是 0、否 /// - public string isFrame { get; set; } + public string IsFrame { get; set; } /// /// 类型(M目录 C菜单 F按钮 L链接) /// [Required(ErrorMessage = "菜单类型不能为空")] - public string menuType { get; set; } + public string MenuType { get; set; } /// /// 显示状态(0显示 1隐藏) /// [Required(ErrorMessage = "显示状态不能为空")] - public string visible { get; set; } + public string Visible { get; set; } /// /// 菜单状态(0正常 1停用) /// [Required(ErrorMessage = "菜单状态不能为空")] - public string status { get; set; } + public string Status { get; set; } /// /// 权限字符串 /// - public string perms { get; set; } + public string Perms { get; set; } /// /// 菜单图标 /// - public string icon { get; set; } = string.Empty; + public string Icon { get; set; } = string.Empty; /// /// 翻译key /// diff --git a/ZR.Model/System/SysLogininfor.cs b/ZR.Model/System/SysLogininfor.cs index 1350e02e..471feb94 100644 --- a/ZR.Model/System/SysLogininfor.cs +++ b/ZR.Model/System/SysLogininfor.cs @@ -14,47 +14,47 @@ namespace ZR.Model.System { //[Key] [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] - public long infoId { get; set; } + public long InfoId { get; set; } /// /// 用户账号 /// - public string userName { get; set; } + public string UserName { get; set; } /// /// 登录状态 0成功 1失败 /// - public string status { get; set; } + public string Status { get; set; } /// /// 登录IP地址 /// - public string ipaddr { get; set; } + public string Ipaddr { get; set; } /// /// 登录地点 /// - public string loginLocation { get; set; } + public string LoginLocation { get; set; } /// /// 浏览器类型 /// - public string browser { get; set; } + public string Browser { get; set; } /** 操作系统 */ //@Excel(name = "操作系统") - public string os { get; set; } + public string Os { get; set; } /// /// 提示消息 /// - public string msg { get; set; } + public string Msg { get; set; } /// /// 访问时间 /// [EpplusTableColumn(NumberFormat = "yyyy-MM-dd HH:mm:ss")] - public DateTime loginTime { get; set; } = DateTime.Now; + public DateTime LoginTime { get; set; } = DateTime.Now; [SugarColumn(IsIgnore = true)] public DateTime? BeginTime { get; set; } [SugarColumn(IsIgnore = true)] diff --git a/ZR.Model/System/SysMenu.cs b/ZR.Model/System/SysMenu.cs index 61d0c4f6..6613e0a4 100644 --- a/ZR.Model/System/SysMenu.cs +++ b/ZR.Model/System/SysMenu.cs @@ -24,56 +24,56 @@ namespace ZR.Model.System /// /// 父菜单ID /// - public long parentId { get; set; } + public long ParentId { get; set; } /// /// 显示顺序 /// - public int orderNum { get; set; } + public int OrderNum { get; set; } /// /// 路由地址 /// - public string path { get; set; } = "#"; + public string Path { get; set; } = "#"; /// /// 组件路径 /// - public string component { get; set; } + public string Component { get; set; } /// /// 是否缓存(1缓存 0不缓存) /// - public string isCache { get; set; } + public string IsCache { get; set; } /// /// 是否外链 1、是 0、否 /// - public string isFrame { get; set; } + public string IsFrame { get; set; } /// /// 类型(M目录 C菜单 F按钮 L链接) /// - public string menuType { get; set; } + public string MenuType { get; set; } /// /// 显示状态(0显示 1隐藏) /// - public string visible { get; set; } + public string Visible { get; set; } /// /// 菜单状态(0正常 1停用) /// - public string status { get; set; } + public string Status { get; set; } /// /// 权限字符串 /// - public string perms { get; set; } + public string Perms { get; set; } /// /// 菜单图标 /// - public string icon { get; set; } = string.Empty; + public string Icon { get; set; } = string.Empty; /// /// 菜单名key /// @@ -83,7 +83,7 @@ namespace ZR.Model.System /// 子菜单 /// [SugarColumn(IsIgnore = true)] - public List children { get; set; } = new List(); + public List Children { get; set; } = new List(); /// /// 子菜单个数 /// @@ -97,7 +97,7 @@ namespace ZR.Model.System { get { - return SubNum > 0 || children.Count > 0; + return SubNum > 0 || Children.Count > 0; } } } diff --git a/ZR.Model/System/SysOperLog.cs b/ZR.Model/System/SysOperLog.cs index bdaa0980..1a7c0d2b 100644 --- a/ZR.Model/System/SysOperLog.cs +++ b/ZR.Model/System/SysOperLog.cs @@ -1,9 +1,6 @@ -using Newtonsoft.Json; +using OfficeOpenXml.Attributes; using SqlSugar; using System; -using System.Collections.Generic; -using System.Text; -using OfficeOpenXml.Attributes; namespace ZR.Model.System { @@ -14,72 +11,75 @@ namespace ZR.Model.System [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] public long OperId { get; set; } /** 操作模块 */ - //@Excel(name = "操作模块") - public string title { get; set; } + [EpplusTableColumn(Header = "操作模块")] + public string Title { get; set; } /** 业务类型(0其它 1新增 2修改 3删除) */ //@Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据") - public int businessType { get; set; } + [EpplusTableColumn(Header = "业务类型")] + public int BusinessType { get; set; } /** 业务类型数组 */ [SugarColumn(IsIgnore = true)] - public int[] businessTypes { get; set; } + [EpplusIgnore] + public int[] BusinessTypes { get; set; } /** 请求方法 */ - //@Excel(name = "请求方法") - public string method { get; set; } + [EpplusTableColumn(Header = "请求方法")] + public string Method { get; set; } /** 请求方式 */ - //@Excel(name = "请求方式") - public string requestMethod { get; set; } + [EpplusTableColumn(Header = "请求方式")] + public string RequestMethod { get; set; } /** 操作类别(0其它 1后台用户 2手机端用户) */ //@Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户") - public int operatorType { get; set; } + [EpplusTableColumn(Header = "操作类别")] + public int OperatorType { get; set; } /** 操作人员 */ - //@Excel(name = "操作人员") - public string operName { get; set; } + [EpplusTableColumn(Header = "操作人员")] + public string OperName { get; set; } /** 部门名称 */ - //@Excel(name = "部门名称") - public string deptName { get; set; } + [EpplusTableColumn(Header = "部门名称")] + public string DeptName { get; set; } /** 请求url */ - //@Excel(name = "请求地址") - public string operUrl { get; set; } + [EpplusTableColumn(Header = "请求地址")] + public string OperUrl { get; set; } /** 操作地址 */ - //@Excel(name = "操作地址") - public string operIp { get; set; } + [EpplusTableColumn(Header = "操作地址")] + public string OperIp { get; set; } /** 操作地点 */ - //@Excel(name = "操作地点") - public string operLocation { get; set; } + [EpplusTableColumn(Header = "操作地点")] + public string OperLocation { get; set; } /** 请求参数 */ - //@Excel(name = "请求参数") - public string operParam { get; set; } + [EpplusTableColumn(Header = "请求参数")] + public string OperParam { get; set; } /** 返回参数 */ - //@Excel(name = "返回参数") - public string jsonResult { get; set; } + [EpplusTableColumn(Header = "返回结果")] + public string JsonResult { get; set; } /** 操作状态(0正常 1异常) */ - //@Excel(name = "状态", readConverterExp = "0=正常,1=异常") - public int status { get; set; } + [EpplusTableColumn(Header = "状态")] + public int Status { get; set; } /// /// 错误消息 /// [EpplusTableColumn(Header = "错误消息")] - public string errorMsg { get; set; } + public string ErrorMsg { get; set; } /// /// 操作时间 /// [EpplusTableColumn(Header = "操作时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")] - public DateTime? operTime { get; set; } + public DateTime? OperTime { get; set; } /// /// 操作用时 /// diff --git a/ZR.Model/System/Vo/TreeSelectVo.cs b/ZR.Model/System/Vo/TreeSelectVo.cs index 83409c75..49a6e1b3 100644 --- a/ZR.Model/System/Vo/TreeSelectVo.cs +++ b/ZR.Model/System/Vo/TreeSelectVo.cs @@ -29,7 +29,7 @@ namespace ZR.Model.Vo.System //menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); java写法 List child = new List(); - foreach (var item in menu.children) + foreach (var item in menu.Children) { child.Add(new TreeSelectVo(item)); } diff --git a/ZR.Repository/System/SysLogininfoRepository.cs b/ZR.Repository/System/SysLogininfoRepository.cs index 55376644..5ab19fd4 100644 --- a/ZR.Repository/System/SysLogininfoRepository.cs +++ b/ZR.Repository/System/SysLogininfoRepository.cs @@ -20,13 +20,13 @@ namespace ZR.Repository.System public PagedInfo GetLoginLog(SysLogininfor logininfoDto, PagerInfo pager) { var exp = Expressionable.Create(); - exp.And(it => it.loginTime >= logininfoDto.BeginTime && it.loginTime <= logininfoDto.EndTime); - exp.AndIF(logininfoDto.ipaddr.IfNotEmpty(), f => f.ipaddr == logininfoDto.ipaddr); - exp.AndIF(logininfoDto.userName.IfNotEmpty(), f => f.userName.Contains(logininfoDto.userName)); - exp.AndIF(logininfoDto.status.IfNotEmpty(), f => f.status == logininfoDto.status); + exp.And(it => it.LoginTime >= logininfoDto.BeginTime && it.LoginTime <= logininfoDto.EndTime); + exp.AndIF(logininfoDto.Ipaddr.IfNotEmpty(), f => f.Ipaddr == logininfoDto.Ipaddr); + exp.AndIF(logininfoDto.UserName.IfNotEmpty(), f => f.UserName.Contains(logininfoDto.UserName)); + exp.AndIF(logininfoDto.Status.IfNotEmpty(), f => f.Status == logininfoDto.Status); var query = Context.Queryable() .Where(exp.ToExpression()) - .OrderBy(it => it.infoId, OrderByType.Desc); + .OrderBy(it => it.InfoId, OrderByType.Desc); return query.ToPage(pager); } diff --git a/ZR.Repository/System/SysMenuRepository.cs b/ZR.Repository/System/SysMenuRepository.cs index 945b7780..2e839a02 100644 --- a/ZR.Repository/System/SysMenuRepository.cs +++ b/ZR.Repository/System/SysMenuRepository.cs @@ -27,12 +27,12 @@ namespace ZR.Repository.System } var list = Context.Queryable() .WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName)) - .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.visible == menu.Visible) - .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.status == menu.Status) - .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), it => menu.MenuTypeIdArr.Contains(it.menuType)) - .WhereIF(menu.ParentId != null, it => it.parentId == menu.ParentId) - .OrderBy(it => new { it.parentId, it.orderNum }) - .ToTree(it => it.children, it => it.parentId, parentId); + .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.Visible == menu.Visible) + .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.Status == menu.Status) + .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), it => menu.MenuTypeIdArr.Contains(it.MenuType)) + .WhereIF(menu.ParentId != null, it => it.ParentId == menu.ParentId) + .OrderBy(it => new { it.ParentId, it.OrderNum }) + .ToTree(it => it.Children, it => it.ParentId, parentId); return list; } @@ -52,12 +52,12 @@ namespace ZR.Repository.System return Context.Queryable() .Where(c => roleMenus.Contains(c.MenuId)) .WhereIF(!string.IsNullOrEmpty(menu.MenuName), (c) => c.MenuName.Contains(menu.MenuName)) - .WhereIF(!string.IsNullOrEmpty(menu.Visible), (c) => c.visible == menu.Visible) - .WhereIF(!string.IsNullOrEmpty(menu.Status), (c) => c.status == menu.Status) - .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), c => menu.MenuTypeIdArr.Contains(c.menuType)) - .OrderBy((c) => new { c.parentId, c.orderNum }) + .WhereIF(!string.IsNullOrEmpty(menu.Visible), (c) => c.Visible == menu.Visible) + .WhereIF(!string.IsNullOrEmpty(menu.Status), (c) => c.Status == menu.Status) + .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), c => menu.MenuTypeIdArr.Contains(c.MenuType)) + .OrderBy((c) => new { c.ParentId, c.OrderNum }) .Select(c => c) - .ToTree(it => it.children, it => it.parentId, 0); + .ToTree(it => it.Children, it => it.ParentId, 0); } /// @@ -68,10 +68,10 @@ namespace ZR.Repository.System { return Context.Queryable() .WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName)) - .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.visible == menu.Visible) - .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.status == menu.Status) - .WhereIF(menu.ParentId != null, it => it.parentId == menu.ParentId) - .OrderBy(it => new { it.parentId, it.orderNum }) + .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.Visible == menu.Visible) + .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.Status == menu.Status) + .WhereIF(menu.ParentId != null, it => it.ParentId == menu.ParentId) + .OrderBy(it => new { it.ParentId, it.OrderNum }) .ToList(); } @@ -88,10 +88,10 @@ namespace ZR.Repository.System return Context.Queryable() .InnerJoin(roleMenus, (c, j) => c.MenuId == j.Menu_id) - .Where((c, j) => c.status == "0") + .Where((c, j) => c.Status == "0") .WhereIF(!string.IsNullOrEmpty(sysMenu.MenuName), (c, j) => c.MenuName.Contains(sysMenu.MenuName)) - .WhereIF(!string.IsNullOrEmpty(sysMenu.Visible), (c, j) => c.visible == sysMenu.Visible) - .OrderBy((c, j) => new { c.parentId, c.orderNum }) + .WhereIF(!string.IsNullOrEmpty(sysMenu.Visible), (c, j) => c.Visible == sysMenu.Visible) + .OrderBy((c, j) => new { c.ParentId, c.OrderNum }) .Select(c => c) .ToList(); } @@ -146,8 +146,8 @@ namespace ZR.Repository.System /// public int ChangeSortMenu(MenuDto menuDto) { - var result = Context.Updateable(new SysMenu() { MenuId = menuDto.MenuId, orderNum = menuDto.orderNum }) - .UpdateColumns(it => new { it.orderNum }).ExecuteCommand(); + var result = Context.Updateable(new SysMenu() { MenuId = menuDto.MenuId, OrderNum = menuDto.OrderNum }) + .UpdateColumns(it => new { it.OrderNum }).ExecuteCommand(); return result; } @@ -164,7 +164,7 @@ namespace ZR.Repository.System JoinType.Left, ur.RoleId == r.RoleId )) //.Distinct() - .Where((m, rm, ur, r) => m.status == "0" && r.Status == "0" && ur.UserId == userId) + .Where((m, rm, ur, r) => m.Status == "0" && r.Status == "0" && ur.UserId == userId) .Select((m, rm, ur, r) => m).ToList(); } @@ -176,7 +176,7 @@ namespace ZR.Repository.System public SysMenu CheckMenuNameUnique(SysMenu menu) { return Context.Queryable() - .Where(it => it.MenuName == menu.MenuName && it.parentId == menu.parentId).Single(); + .Where(it => it.MenuName == menu.MenuName && it.ParentId == menu.ParentId).Single(); } /// @@ -186,7 +186,7 @@ namespace ZR.Repository.System /// public int HasChildByMenuId(long menuId) { - return Context.Queryable().Where(it => it.parentId == menuId).Count(); + return Context.Queryable().Where(it => it.ParentId == menuId).Count(); } #region RoleMenu diff --git a/ZR.Repository/System/SysOperLogRepository.cs b/ZR.Repository/System/SysOperLogRepository.cs index 3050170a..81a11261 100644 --- a/ZR.Repository/System/SysOperLogRepository.cs +++ b/ZR.Repository/System/SysOperLogRepository.cs @@ -21,11 +21,11 @@ namespace ZR.Repository.System public PagedInfo GetSysOperLog(SysOperLogDto sysOper, PagerInfo pagerInfo) { var exp = Expressionable.Create(); - exp.And(it => it.operTime >= sysOper.BeginTime && it.operTime <= sysOper.EndTime); - exp.AndIF(sysOper.Title.IfNotEmpty(), it => it.title.Contains(sysOper.Title)); - exp.AndIF(sysOper.operName.IfNotEmpty(), it => it.operName.Contains(sysOper.operName)); - exp.AndIF(sysOper.BusinessType != -1, it => it.businessType == sysOper.BusinessType); - exp.AndIF(sysOper.Status != -1, it => it.status == sysOper.Status); + exp.And(it => it.OperTime >= sysOper.BeginTime && it.OperTime <= sysOper.EndTime); + exp.AndIF(sysOper.Title.IfNotEmpty(), it => it.Title.Contains(sysOper.Title)); + exp.AndIF(sysOper.operName.IfNotEmpty(), it => it.OperName.Contains(sysOper.operName)); + exp.AndIF(sysOper.BusinessType != -1, it => it.BusinessType == sysOper.BusinessType); + exp.AndIF(sysOper.Status != -1, it => it.Status == sysOper.Status); return GetPages(exp.ToExpression(), pagerInfo, x => x.OperId, OrderByType.Desc); } diff --git a/ZR.Service/System/SysLoginService.cs b/ZR.Service/System/SysLoginService.cs index 563bb116..48fa6fae 100644 --- a/ZR.Service/System/SysLoginService.cs +++ b/ZR.Service/System/SysLoginService.cs @@ -35,25 +35,25 @@ namespace ZR.Service.System loginBody.Password = NETCore.Encrypt.EncryptProvider.Md5(loginBody.Password); SysUser user = SysLogininfoRepository.Login(loginBody); - logininfor.userName = loginBody.Username; - logininfor.status = "1"; - logininfor.loginTime = DateTime.Now; + logininfor.UserName = loginBody.Username; + logininfor.Status = "1"; + logininfor.LoginTime = DateTime.Now; if (user == null || user.UserId <= 0) { - logininfor.msg = "用户名或密码错误"; + logininfor.Msg = "用户名或密码错误"; AddLoginInfo(logininfor); - throw new CustomException(ResultCode.LOGIN_ERROR ,logininfor.msg); + throw new CustomException(ResultCode.LOGIN_ERROR ,logininfor.Msg); } if (user.Status == "1") { - logininfor.msg = "该用户已禁用"; + logininfor.Msg = "该用户已禁用"; AddLoginInfo(logininfor); - throw new CustomException(ResultCode.LOGIN_ERROR, logininfor.msg); + throw new CustomException(ResultCode.LOGIN_ERROR, logininfor.Msg); } - logininfor.status = "0"; - logininfor.msg = "登录成功"; + logininfor.Status = "0"; + logininfor.Msg = "登录成功"; AddLoginInfo(logininfor); SysLogininfoRepository.UpdateLoginInfo(loginBody, user.UserId); return user; diff --git a/ZR.Service/System/SysMenuService.cs b/ZR.Service/System/SysMenuService.cs index e0d4631f..c2fba62b 100644 --- a/ZR.Service/System/SysMenuService.cs +++ b/ZR.Service/System/SysMenuService.cs @@ -84,10 +84,10 @@ namespace ZR.Service /// public List GetMenusByMenuId(int menuId) { - var list = MenuRepository.GetList(f => f.parentId == menuId).OrderBy(f => f.orderNum).ToList(); + var list = MenuRepository.GetList(f => f.ParentId == menuId).OrderBy(f => f.OrderNum).ToList(); Context.ThenMapper(list, item => { - item.SubNum = Context.Queryable().SetContext(x => x.parentId, () => item.MenuId, item).Count; + item.SubNum = Context.Queryable().SetContext(x => x.ParentId, () => item.MenuId, item).Count; }); return list; } @@ -109,7 +109,7 @@ namespace ZR.Service /// public int EditMenu(SysMenu menu) { - menu.icon = string.IsNullOrEmpty(menu.icon) ? "" : menu.icon; + menu.Icon = string.IsNullOrEmpty(menu.Icon) ? "" : menu.Icon; return MenuRepository.EditMenu(menu); } @@ -200,9 +200,9 @@ namespace ZR.Service /// public List SelectMenuPermsByUserId(long userId) { - var menuList = SelectMenuPermsListByUserId(userId).Where(f => !string.IsNullOrEmpty(f.perms)); + var menuList = SelectMenuPermsListByUserId(userId).Where(f => !string.IsNullOrEmpty(f.Perms)); - return menuList.Select(x => x.perms).Distinct().ToList(); + return menuList.Select(x => x.Perms).Distinct().ToList(); } #region RoleMenu @@ -250,7 +250,7 @@ namespace ZR.Service { //得到子节点列表 List childList = GetChildList(list, t); - t.children = childList; + t.Children = childList; foreach (var item in childList) { if (GetChildList(list, item).Count() > 0) @@ -268,7 +268,7 @@ namespace ZR.Service /// private List GetChildList(List list, SysMenu sysMenu) { - return list.Where(p => p.parentId == sysMenu.MenuId).ToList(); + return list.Where(p => p.ParentId == sysMenu.MenuId).ToList(); } /// @@ -284,16 +284,16 @@ namespace ZR.Service { RouterVo router = new() { - Hidden = "1".Equals(menu.visible), + Hidden = "1".Equals(menu.Visible), Name = GetRouteName(menu), Path = GetRoutePath(menu), Component = GetComponent(menu), - Meta = new Meta(menu.MenuName, menu.icon, "1".Equals(menu.isCache), menu.MenuNameKey, menu.path) + Meta = new Meta(menu.MenuName, menu.Icon, "1".Equals(menu.IsCache), menu.MenuNameKey, menu.Path) }; - List cMenus = menu.children; + List cMenus = menu.Children; //是目录并且有子菜单 - if (cMenus != null && cMenus.Count > 0 && (UserConstants.TYPE_DIR.Equals(menu.menuType))) + if (cMenus != null && cMenus.Count > 0 && (UserConstants.TYPE_DIR.Equals(menu.MenuType))) { router.AlwaysShow = true; router.Redirect = "noRedirect"; @@ -305,25 +305,25 @@ namespace ZR.Service List childrenList = new(); RouterVo children = new() { - Path = menu.path, - Component = menu.component, - Name = string.IsNullOrEmpty(menu.path) ? "" : menu.path.ToLower(), - Meta = new Meta(menu.MenuName, menu.icon, "1".Equals(menu.isCache), menu.MenuNameKey, menu.path) + Path = menu.Path, + Component = menu.Component, + Name = string.IsNullOrEmpty(menu.Path) ? "" : menu.Path.ToLower(), + Meta = new Meta(menu.MenuName, menu.Icon, "1".Equals(menu.IsCache), menu.MenuNameKey, menu.Path) }; childrenList.Add(children); router.Children = childrenList; } - else if (menu.parentId == 0 && IsInnerLink(menu)) + else if (menu.ParentId == 0 && IsInnerLink(menu)) { - router.Meta = new Meta(menu.MenuName, menu.icon); + router.Meta = new Meta(menu.MenuName, menu.Icon); router.Path = "/"; List childrenList = new(); RouterVo children = new(); - string routerPath = InnerLinkReplaceEach(menu.path); + string routerPath = InnerLinkReplaceEach(menu.Path); children.Path = routerPath; children.Component = UserConstants.INNER_LINK; children.Name = routerPath.ToLower(); - children.Meta = new Meta(menu.MenuName, menu.icon, menu.path); + children.Meta = new Meta(menu.MenuName, menu.Icon, menu.Path); childrenList.Add(children); router.Children = childrenList; } @@ -346,7 +346,7 @@ namespace ZR.Service foreach (var menu in menus) { // 如果是顶级节点, 遍历该父节点的所有子节点 - if (!tempList.Contains(menu.parentId)) + if (!tempList.Contains(menu.ParentId)) { RecursionFn(menus, menu); returnList.Add(menu); @@ -382,7 +382,7 @@ namespace ZR.Service /// 路由名称 public string GetRouteName(SysMenu menu) { - string routerName = menu.path.ToLower(); + string routerName = menu.Path.ToLower(); // 非外链并且是一级目录(类型为目录) if (IsMeunFrame(menu)) { @@ -398,17 +398,17 @@ namespace ZR.Service /// 路由地址 public string GetRoutePath(SysMenu menu) { - string routerPath = menu.path; + string routerPath = menu.Path; // 内链打开外网方式 - if (menu.parentId != 0 && IsInnerLink(menu)) + if (menu.ParentId != 0 && IsInnerLink(menu)) { routerPath = InnerLinkReplaceEach(routerPath); } // 非外链并且是一级目录(类型为目录) - if (0 == menu.parentId && UserConstants.TYPE_DIR.Equals(menu.menuType) - && UserConstants.NO_FRAME.Equals(menu.isFrame)) + if (0 == menu.ParentId && UserConstants.TYPE_DIR.Equals(menu.MenuType) + && UserConstants.NO_FRAME.Equals(menu.IsFrame)) { - routerPath = "/" + menu.path; + routerPath = "/" + menu.Path; } else if (IsMeunFrame(menu))// 非外链并且是一级目录(类型为菜单) { @@ -425,15 +425,15 @@ namespace ZR.Service public string GetComponent(SysMenu menu) { string component = UserConstants.LAYOUT; - if (!string.IsNullOrEmpty(menu.component) && !IsMeunFrame(menu)) + if (!string.IsNullOrEmpty(menu.Component) && !IsMeunFrame(menu)) { - component = menu.component; + component = menu.Component; } - else if (menu.component.IsEmpty() && menu.parentId != 0 && IsInnerLink(menu)) + else if (menu.Component.IsEmpty() && menu.ParentId != 0 && IsInnerLink(menu)) { component = UserConstants.INNER_LINK; } - else if (string.IsNullOrEmpty(menu.component) && IsParentView(menu)) + else if (string.IsNullOrEmpty(menu.Component) && IsParentView(menu)) { component = UserConstants.PARENT_VIEW; } @@ -447,8 +447,8 @@ namespace ZR.Service /// public bool IsMeunFrame(SysMenu menu) { - return menu.parentId == 0 && UserConstants.TYPE_MENU.Equals(menu.menuType) - && menu.isFrame.Equals(UserConstants.NO_FRAME); + return menu.ParentId == 0 && UserConstants.TYPE_MENU.Equals(menu.MenuType) + && menu.IsFrame.Equals(UserConstants.NO_FRAME); } /// @@ -458,7 +458,7 @@ namespace ZR.Service /// 结果 public bool IsInnerLink(SysMenu menu) { - return menu.isFrame.Equals(UserConstants.NO_FRAME) && Tools.IsUrl(menu.path); + return menu.IsFrame.Equals(UserConstants.NO_FRAME) && Tools.IsUrl(menu.Path); } /// @@ -469,7 +469,7 @@ namespace ZR.Service /// public bool IsParentView(SysMenu menu) { - return menu.parentId != 0 && UserConstants.TYPE_DIR.Equals(menu.menuType); + return menu.ParentId != 0 && UserConstants.TYPE_DIR.Equals(menu.MenuType); } /// diff --git a/ZR.Service/System/SysOperLogService.cs b/ZR.Service/System/SysOperLogService.cs index c17ed661..cefb0ff5 100644 --- a/ZR.Service/System/SysOperLogService.cs +++ b/ZR.Service/System/SysOperLogService.cs @@ -27,9 +27,9 @@ namespace ZR.Service.System /// 日志对象 public void InsertOperlog(SysOperLog operLog) { - if (operLog.operParam.Length >= 1000) + if (operLog.OperParam.Length >= 1000) { - operLog.operParam = operLog.operParam.Substring(0, 1000); + operLog.OperParam = operLog.OperParam[..1000]; } sysOperLogRepository.AddSysOperLog(operLog); } -- Gitee From 2080a04155d39883ab1ac51f52cfe3575c1ea46a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Wed, 14 Sep 2022 21:49:04 +0800 Subject: [PATCH 013/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/CommonController.cs | 2 +- .../Controllers/System/CodeGeneratorController.cs | 8 +++++--- ZR.Admin.WebApi/Extensions/SwaggerExtension.cs | 3 +-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs index a35deb4b..16d59752 100644 --- a/ZR.Admin.WebApi/Controllers/CommonController.cs +++ b/ZR.Admin.WebApi/Controllers/CommonController.cs @@ -48,7 +48,7 @@ namespace ZR.Admin.WebApi.Controllers public IActionResult Index() { return Ok("看到这里页面说明你已经成功启动了本项目:)\n\n" + - "如果觉得项目有用,打赏作者喝杯咖啡作为奖励\n☛☛http://www.izhaorui.cn/doc\n"); + "如果觉得项目有用,打赏作者喝杯咖啡作为奖励\n☛☛http://www.izhaorui.cn/doc/support.html\n"); } /// diff --git a/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs b/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs index 75621ad4..022c752f 100644 --- a/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs +++ b/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs @@ -227,9 +227,11 @@ namespace ZR.Admin.WebApi.Controllers [ActionPermissionFilter(Permission = "tool:gen:preview")] public IActionResult Preview(long tableId = 0, int VueVersion = 0) { - GenerateDto dto = new(); - dto.TableId = tableId; - dto.VueVersion = VueVersion; + GenerateDto dto = new() + { + TableId = tableId, + VueVersion = VueVersion + }; if (dto == null || dto.TableId <= 0) { throw new CustomException(ResultCode.CUSTOM_ERROR, "请求参数为空"); diff --git a/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs b/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs index 13598a42..82300974 100644 --- a/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs +++ b/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs @@ -27,8 +27,7 @@ namespace ZR.Admin.WebApi.Extensions var url = $"{httpReq.Scheme}://{httpReq.Host.Value}"; var referer = httpReq.Headers["Referer"].ToString(); if (referer.Contains(GlobalConstant.DevApiProxy)) - url = referer.Substring(0, - referer.IndexOf(GlobalConstant.DevApiProxy, StringComparison.InvariantCulture) + GlobalConstant.DevApiProxy.Length - 1); + url = referer[..(referer.IndexOf(GlobalConstant.DevApiProxy, StringComparison.InvariantCulture) + GlobalConstant.DevApiProxy.Length - 1)]; swaggerDoc.Servers = new List { -- Gitee From 535d7a3580ae88710bc5f1c5942e7fcca261b90b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 16 Sep 2022 08:17:00 +0800 Subject: [PATCH 014/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Model/System/SysFile.cs | 2 -- ZR.Model/System/SysLogininfor.cs | 3 +-- ZR.Model/System/SysNotice.cs | 4 +--- ZR.Model/System/SysTasksQz.cs | 2 -- 4 files changed, 2 insertions(+), 9 deletions(-) diff --git a/ZR.Model/System/SysFile.cs b/ZR.Model/System/SysFile.cs index 81c75beb..f0662659 100644 --- a/ZR.Model/System/SysFile.cs +++ b/ZR.Model/System/SysFile.cs @@ -1,8 +1,6 @@ using Newtonsoft.Json; using SqlSugar; using System; -using System.Collections.Generic; -using System.Text; namespace ZR.Model.System { diff --git a/ZR.Model/System/SysLogininfor.cs b/ZR.Model/System/SysLogininfor.cs index 471feb94..d470f978 100644 --- a/ZR.Model/System/SysLogininfor.cs +++ b/ZR.Model/System/SysLogininfor.cs @@ -1,5 +1,4 @@ -//using Dapper.Contrib.Extensions; -using OfficeOpenXml.Attributes; +using OfficeOpenXml.Attributes; using SqlSugar; using System; diff --git a/ZR.Model/System/SysNotice.cs b/ZR.Model/System/SysNotice.cs index 47facb71..61703b8d 100644 --- a/ZR.Model/System/SysNotice.cs +++ b/ZR.Model/System/SysNotice.cs @@ -1,5 +1,3 @@ -using System; -using System.Collections.Generic; using SqlSugar; using ZR.Model.System; @@ -19,7 +17,7 @@ namespace ZR.Model.Models /// 描述 : 公告ID /// 空值 : true /// - [SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "notice_id")] + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "notice_id")] public int NoticeId { get; set; } /// /// 描述 : 公告标题 diff --git a/ZR.Model/System/SysTasksQz.cs b/ZR.Model/System/SysTasksQz.cs index e2fdd10e..6de97938 100644 --- a/ZR.Model/System/SysTasksQz.cs +++ b/ZR.Model/System/SysTasksQz.cs @@ -1,9 +1,7 @@ using Newtonsoft.Json; using SqlSugar; using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Text; namespace ZR.Model.System { -- Gitee From 2d0cca2bf26f0ef107a7b4186b8fb3c3d917134a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 16 Sep 2022 08:20:09 +0800 Subject: [PATCH 015/122] =?UTF-8?q?feat=EF=BC=9A=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=AD=97=E5=85=B8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/System/SysDictDataController.cs | 4 ++++ ZR.Model/System/Dto/SysDictTypeDto.cs | 4 ++++ ZR.Model/System/SysDictData.cs | 9 ++------- ZR.Model/System/SysDictType.cs | 6 +++++- ZR.Repository/System/SysDictDataRepository.cs | 10 ++++++++++ ZR.Service/System/IService/ISysDictService.cs | 2 ++ ZR.Service/System/SysDictService.cs | 17 +++++++++++++++++ document/admin-mysql.sql | 1 + document/admin-sqlserver.sql | 1 + 9 files changed, 46 insertions(+), 8 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs b/ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs index b7b8c3e0..3d5b73ef 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs @@ -76,6 +76,10 @@ namespace ZR.Admin.WebApi.Controllers.System ColumnName = dic.ColumnName, List = list.FindAll(f => f.DictType == dic.DictType) }; + if (dic.DictType.StartsWith("cus_")) + { + vo.List = SysDictService.SelectDictDataByCustomSql(dic.DictType); + } dataVos.Add(vo); } return SUCCESS(dataVos); diff --git a/ZR.Model/System/Dto/SysDictTypeDto.cs b/ZR.Model/System/Dto/SysDictTypeDto.cs index 6ae5cf46..4a394305 100644 --- a/ZR.Model/System/Dto/SysDictTypeDto.cs +++ b/ZR.Model/System/Dto/SysDictTypeDto.cs @@ -20,5 +20,9 @@ namespace ZR.Model.System.Dto /// 系统内置 Y是 N否 /// public string Type { get; set; } + /// + /// 自定义sql + /// + public string CustomSql { get; set; } } } diff --git a/ZR.Model/System/SysDictData.cs b/ZR.Model/System/SysDictData.cs index 34510843..a2baabcd 100644 --- a/ZR.Model/System/SysDictData.cs +++ b/ZR.Model/System/SysDictData.cs @@ -1,8 +1,4 @@ -//using Dapper.Contrib.Extensions; -using System; -using System.Collections.Generic; -using System.Text; -using SqlSugar; +using SqlSugar; namespace ZR.Model.System { @@ -13,11 +9,10 @@ namespace ZR.Model.System [SugarTable("sys_dict_data")] public class SysDictData: SysBase { - //[Key] /// /// 字典主键 /// - [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//主键并且自增 (string不能设置自增) + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] public long DictCode{ get; set; } public int DictSort { get; set; } public string DictLabel { get; set; } diff --git a/ZR.Model/System/SysDictType.cs b/ZR.Model/System/SysDictType.cs index 744f0a41..5e549700 100644 --- a/ZR.Model/System/SysDictType.cs +++ b/ZR.Model/System/SysDictType.cs @@ -13,7 +13,7 @@ namespace ZR.Model.System /// /// 字典主键 /// - [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//主键并且自增 (string不能设置自增) + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] public long DictId { get; set; } /// /// 字典名称 @@ -32,5 +32,9 @@ namespace ZR.Model.System /// 系统内置 Y是 N否 /// public string Type { get; set; } + /// + /// 自定义sql + /// + public string CustomSql { get; set; } } } diff --git a/ZR.Repository/System/SysDictDataRepository.cs b/ZR.Repository/System/SysDictDataRepository.cs index 294e655b..c15ca6a2 100644 --- a/ZR.Repository/System/SysDictDataRepository.cs +++ b/ZR.Repository/System/SysDictDataRepository.cs @@ -110,5 +110,15 @@ namespace ZR.Repository.System .Where(f => f.DictType == old_dictType) .ExecuteCommand(); } + + /// + /// 根据字典类型查询自定义sql + /// + /// + /// + public List SelectDictDataByCustomSql(SysDictType sysDictType) + { + return Context.Ado.SqlQuery(sysDictType?.CustomSql).ToList(); + } } } diff --git a/ZR.Service/System/IService/ISysDictService.cs b/ZR.Service/System/IService/ISysDictService.cs index 7e4313f0..331d5f7f 100644 --- a/ZR.Service/System/IService/ISysDictService.cs +++ b/ZR.Service/System/IService/ISysDictService.cs @@ -47,5 +47,7 @@ namespace ZR.Service.System.IService /// /// SysDictType GetInfo(long dictId); + + List SelectDictDataByCustomSql(string dictType); } } diff --git a/ZR.Service/System/SysDictService.cs b/ZR.Service/System/SysDictService.cs index 0df06e53..8a668f9b 100644 --- a/ZR.Service/System/SysDictService.cs +++ b/ZR.Service/System/SysDictService.cs @@ -1,5 +1,6 @@ using Infrastructure; using Infrastructure.Attribute; +using System; using System.Collections.Generic; using System.Text; using ZR.Model; @@ -111,5 +112,21 @@ namespace ZR.Service.System { return DictRepository.GetFirst(f => f.DictId == dictId); } + + /// + /// 根据字典类型查询自定义sql + /// + /// + /// + public List SelectDictDataByCustomSql(string dictType) + { + var dictInfo = DictRepository.Queryable() + .Where(f => f.DictType == dictType).First(); + if (dictInfo == null || !dictInfo.CustomSql.StartsWith("select", StringComparison.OrdinalIgnoreCase)) + { + return null; + } + return DictDataRepository.SelectDictDataByCustomSql(dictInfo); + } } } diff --git a/document/admin-mysql.sql b/document/admin-mysql.sql index 098f5bf1..322592c0 100644 --- a/document/admin-mysql.sql +++ b/document/admin-mysql.sql @@ -181,6 +181,7 @@ CREATE TABLE `sys_dict_type` ( `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `customSql` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '自定义sql语句', PRIMARY KEY (`dictId`) USING BTREE, UNIQUE INDEX `dictType`(`dictType`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典类型表' ROW_FORMAT = Dynamic; diff --git a/document/admin-sqlserver.sql b/document/admin-sqlserver.sql index 35a56dbd..c3e6ac64 100644 --- a/document/admin-sqlserver.sql +++ b/document/admin-sqlserver.sql @@ -107,6 +107,7 @@ CREATE TABLE sys_dict_type ( update_by varchar(64) NULL DEFAULT '' ,-- '更新者', update_time datetime NULL DEFAULT NULL ,-- '更新时间', remark varchar(500) NULL DEFAULT NULL ,-- '备注', + customSql varchar(500) NULL DEFAULT NULL ,-- '自定义sql', ) GO CREATE UNIQUE INDEX dictType ON dbo.sys_dict_type(dictType) -- Gitee From 35e9d1de80b5ea006839669e1f0c471bb5b532d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=93=E5=BD=93?= <4019449@qq.com> Date: Mon, 19 Sep 2022 09:22:41 +0000 Subject: [PATCH 016/122] =?UTF-8?q?update=20document/admin-mysql.sql.=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E4=B8=80=E4=B8=AAcustomSql=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E6=8F=92=E5=85=A5=E8=AF=AD=E5=8F=A5=E4=B9=9F=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E5=A4=9A=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E4=B8=8D=E7=84=B6=E4=BC=9A=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 当当 <4019449@qq.com> --- document/admin-mysql.sql | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/document/admin-mysql.sql b/document/admin-mysql.sql index 322592c0..ee29b1cd 100644 --- a/document/admin-mysql.sql +++ b/document/admin-mysql.sql @@ -189,18 +189,18 @@ CREATE TABLE `sys_dict_type` ( -- ---------------------------- -- Records of sys_dict_type -- ---------------------------- -INSERT INTO `sys_dict_type` VALUES (1, '用户性别', 'sys_user_sex', '0', 'Y', 'admin', SYSDATE(), '', NULL, '用户性别列表'); -INSERT INTO `sys_dict_type` VALUES (2, '菜单状态', 'sys_show_hide', '0', 'Y', 'admin', SYSDATE(), '', NULL, '菜单状态列表'); -INSERT INTO `sys_dict_type` VALUES (3, '系统开关', 'sys_normal_disable', '0', 'Y', 'admin', SYSDATE(), '', NULL, '系统开关列表'); -INSERT INTO `sys_dict_type` VALUES (4, '任务状态', 'sys_job_status', '0', 'Y', 'admin', SYSDATE(), '', NULL, '任务状态列表'); -INSERT INTO `sys_dict_type` VALUES (5, '任务分组', 'sys_job_group', '0', 'Y', 'admin', SYSDATE(), '', NULL, '任务分组列表'); -INSERT INTO `sys_dict_type` VALUES (6, '系统是否', 'sys_yes_no', '0', 'Y', 'admin', SYSDATE(), '', NULL, '系统是否列表'); -INSERT INTO `sys_dict_type` VALUES (7, '通知类型', 'sys_notice_type', '0', 'Y', 'admin', SYSDATE(), '', NULL, '通知类型列表'); -INSERT INTO `sys_dict_type` VALUES (8, '通知状态', 'sys_notice_status', '0', 'Y', 'admin', SYSDATE(), '', NULL, '通知状态列表'); -INSERT INTO `sys_dict_type` VALUES (9, '操作类型', 'sys_oper_type', '0', 'Y', 'admin', SYSDATE(), '', NULL, '操作类型列表'); -INSERT INTO `sys_dict_type` VALUES (10, '系统状态', 'sys_common_status', '0', 'Y', 'admin', SYSDATE(), '', NULL, '登录状态列表'); -INSERT INTO `sys_dict_type` VALUES (11, '文章状态', 'sys_article_status', '0', 'Y', 'admin', SYSDATE(), '', NULL, NULL); -INSERT INTO `sys_dict_type` VALUES (12, '多语言类型', 'sys_lang_type', '0', 'Y', 'admin', SYSDATE(), '', NULL, '多语言字典类型'); +INSERT INTO `sys_dict_type` VALUES (1, '用户性别', 'sys_user_sex', '0', 'Y', 'admin', SYSDATE(), '', NULL, '用户性别列表',NULL); +INSERT INTO `sys_dict_type` VALUES (2, '菜单状态', 'sys_show_hide', '0', 'Y', 'admin', SYSDATE(), '', NULL, '菜单状态列表',NULL); +INSERT INTO `sys_dict_type` VALUES (3, '系统开关', 'sys_normal_disable', '0', 'Y', 'admin', SYSDATE(), '', NULL, '系统开关列表',NULL); +INSERT INTO `sys_dict_type` VALUES (4, '任务状态', 'sys_job_status', '0', 'Y', 'admin', SYSDATE(), '', NULL, '任务状态列表',NULL); +INSERT INTO `sys_dict_type` VALUES (5, '任务分组', 'sys_job_group', '0', 'Y', 'admin', SYSDATE(), '', NULL, '任务分组列表',NULL); +INSERT INTO `sys_dict_type` VALUES (6, '系统是否', 'sys_yes_no', '0', 'Y', 'admin', SYSDATE(), '', NULL, '系统是否列表',NULL); +INSERT INTO `sys_dict_type` VALUES (7, '通知类型', 'sys_notice_type', '0', 'Y', 'admin', SYSDATE(), '', NULL, '通知类型列表',NULL); +INSERT INTO `sys_dict_type` VALUES (8, '通知状态', 'sys_notice_status', '0', 'Y', 'admin', SYSDATE(), '', NULL, '通知状态列表',NULL); +INSERT INTO `sys_dict_type` VALUES (9, '操作类型', 'sys_oper_type', '0', 'Y', 'admin', SYSDATE(), '', NULL, '操作类型列表',NULL); +INSERT INTO `sys_dict_type` VALUES (10, '系统状态', 'sys_common_status', '0', 'Y', 'admin', SYSDATE(), '', NULL, '登录状态列表',NULL); +INSERT INTO `sys_dict_type` VALUES (11, '文章状态', 'sys_article_status', '0', 'Y', 'admin', SYSDATE(), '', NULL, NULL,NULL); +INSERT INTO `sys_dict_type` VALUES (12, '多语言类型', 'sys_lang_type', '0', 'Y', 'admin', SYSDATE(), '', NULL, '多语言字典类型',NULL); SET FOREIGN_KEY_CHECKS = 1; -- Gitee From 9c6a15cd253cd647e57e75a1a47f8f034cdd63ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 20 Sep 2022 08:32:34 +0800 Subject: [PATCH 017/122] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 6 +++--- ZR.CodeGenerator/ZR.CodeGenerator.csproj | 4 ++-- ZR.Common/ZR.Common.csproj | 6 +++--- ZR.Model/ZR.Model.csproj | 2 +- ZR.Repository/ZR.Repository.csproj | 2 +- ZR.Tasks/ZR.Tasks.csproj | 6 +++--- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 199b4ed9..99b016fb 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -24,12 +24,12 @@ - + - - + + diff --git a/ZR.CodeGenerator/ZR.CodeGenerator.csproj b/ZR.CodeGenerator/ZR.CodeGenerator.csproj index c9aa8430..88214bda 100644 --- a/ZR.CodeGenerator/ZR.CodeGenerator.csproj +++ b/ZR.CodeGenerator/ZR.CodeGenerator.csproj @@ -11,7 +11,7 @@ - - + + diff --git a/ZR.Common/ZR.Common.csproj b/ZR.Common/ZR.Common.csproj index 7104c6f8..16f1be78 100644 --- a/ZR.Common/ZR.Common.csproj +++ b/ZR.Common/ZR.Common.csproj @@ -6,10 +6,10 @@ - + - - + + diff --git a/ZR.Model/ZR.Model.csproj b/ZR.Model/ZR.Model.csproj index d9400efb..62c6feac 100644 --- a/ZR.Model/ZR.Model.csproj +++ b/ZR.Model/ZR.Model.csproj @@ -7,7 +7,7 @@ - + diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index 9d054798..2a355895 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -14,7 +14,7 @@ - + diff --git a/ZR.Tasks/ZR.Tasks.csproj b/ZR.Tasks/ZR.Tasks.csproj index 74022ac4..a7abce16 100644 --- a/ZR.Tasks/ZR.Tasks.csproj +++ b/ZR.Tasks/ZR.Tasks.csproj @@ -5,9 +5,9 @@ - - - + + + -- Gitee From b836e9e704117e9e14e7d42146f689749f31757f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 20 Sep 2022 08:35:12 +0800 Subject: [PATCH 018/122] update admin-sqlserver.sql --- document/admin-sqlserver.sql | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/document/admin-sqlserver.sql b/document/admin-sqlserver.sql index c3e6ac64..3ae42a57 100644 --- a/document/admin-sqlserver.sql +++ b/document/admin-sqlserver.sql @@ -113,18 +113,18 @@ GO CREATE UNIQUE INDEX dictType ON dbo.sys_dict_type(dictType) GO -INSERT INTO sys_dict_type VALUES ('用户性别', 'sys_user_sex', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '用户性别列表'); -INSERT INTO sys_dict_type VALUES ('菜单状态', 'sys_show_hide', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '菜单状态列表'); -INSERT INTO sys_dict_type VALUES ('系统开关', 'sys_normal_disable', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '系统开关列表'); -INSERT INTO sys_dict_type VALUES ('任务状态', 'sys_job_status', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '任务状态列表'); -INSERT INTO sys_dict_type VALUES ('任务分组', 'sys_job_group', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '任务分组列表'); -INSERT INTO sys_dict_type VALUES ('系统是否', 'sys_yes_no', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '系统是否列表'); -INSERT INTO sys_dict_type VALUES ('通知类型', 'sys_notice_type', 'Y', '0', 'admin', '2021-02-24 10:55:26', '', NULL, '通知类型列表'); -INSERT INTO sys_dict_type VALUES ('通知状态', 'sys_notice_status', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '通知状态列表'); -INSERT INTO sys_dict_type VALUES ('操作类型', 'sys_oper_type', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '操作类型列表'); -INSERT INTO sys_dict_type VALUES ('系统状态', 'sys_common_status', '0', 'Y', 'admin', '2021-02-24 10:55:27', '', NULL, '登录状态列表'); -INSERT INTO sys_dict_type VALUES ('文章状态', 'sys_article_status', '0', 'Y', 'admin', '2021-08-19 10:34:33', '', NULL, NULL); -INSERT INTO sys_dict_type VALUES ('多语言类型', 'sys_lang_type', '0', 'Y', 'admin', '2021-08-19 10:34:33', '', NULL, '多语言字典类型'); +INSERT INTO sys_dict_type VALUES ('用户性别', 'sys_user_sex', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '用户性别列表', NULL); +INSERT INTO sys_dict_type VALUES ('菜单状态', 'sys_show_hide', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '菜单状态列表', NULL); +INSERT INTO sys_dict_type VALUES ('系统开关', 'sys_normal_disable', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '系统开关列表', NULL); +INSERT INTO sys_dict_type VALUES ('任务状态', 'sys_job_status', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '任务状态列表', NULL); +INSERT INTO sys_dict_type VALUES ('任务分组', 'sys_job_group', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '任务分组列表', NULL); +INSERT INTO sys_dict_type VALUES ('系统是否', 'sys_yes_no', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '系统是否列表', NULL); +INSERT INTO sys_dict_type VALUES ('通知类型', 'sys_notice_type', 'Y', '0', 'admin', '2021-02-24 10:55:26', '', NULL, '通知类型列表', NULL); +INSERT INTO sys_dict_type VALUES ('通知状态', 'sys_notice_status', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '通知状态列表', NULL); +INSERT INTO sys_dict_type VALUES ('操作类型', 'sys_oper_type', '0', 'Y', 'admin', '2021-02-24 10:55:26', '', NULL, '操作类型列表', NULL); +INSERT INTO sys_dict_type VALUES ('系统状态', 'sys_common_status', '0', 'Y', 'admin', '2021-02-24 10:55:27', '', NULL, '登录状态列表', NULL); +INSERT INTO sys_dict_type VALUES ('文章状态', 'sys_article_status', '0', 'Y', 'admin', '2021-08-19 10:34:33', '', NULL, NULL, NULL); +INSERT INTO sys_dict_type VALUES ('多语言类型', 'sys_lang_type', '0', 'Y', 'admin', '2021-08-19 10:34:33', '', NULL, '多语言字典类型', NULL); GO if OBJECT_ID(N'sys_dict_data',N'U') is not NULL DROP TABLE sys_dict_data -- Gitee From 738cec299f1b3e7f2546f2d005bf317caeb02d69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 20 Sep 2022 21:17:25 +0800 Subject: [PATCH 019/122] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E4=B8=8D=E7=94=9F=E6=88=90=E4=BB=93=E5=82=A8?= =?UTF-8?q?=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wwwroot/CodeGenTemplate/TplService.txt | 20 +++++-------------- ZR.CodeGenerator/CodeGeneratorTool.cs | 5 ++++- ZR.Model/System/Generate/GenTable.cs | 10 +++++++--- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt index ce428f3c..6d7e9194 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt @@ -1,7 +1,4 @@ -using System; -using SqlSugar; -using System.Collections.Generic; -using Infrastructure; +using SqlSugar; using Infrastructure.Attribute; using ${options.ModelsNamespace}; using ${options.ModelsNamespace}.Dto; @@ -20,12 +17,6 @@ namespace ${options.ServicesNamespace}.${options.SubNamespace} [AppService(ServiceType = typeof(I${replaceDto.ModelTypeName}Service), ServiceLifetime = LifeTime.Transient)] public class ${replaceDto.ModelTypeName}Service : BaseService<${replaceDto.ModelTypeName}>, I${replaceDto.ModelTypeName}Service { - private readonly ${replaceDto.ModelTypeName}Repository _${replaceDto.ModelTypeName}Repository; - public ${replaceDto.ModelTypeName}Service(${replaceDto.ModelTypeName}Repository repository) - { - _${replaceDto.ModelTypeName}Repository = repository; - } - #region 业务逻辑代码 /// @@ -51,8 +42,7 @@ $elseif(column.CsharpType == "int" || column.CsharpType == "long") $end $end $end - var response = _${replaceDto.ModelTypeName}Repository - .Queryable() + var response = Queryable() $if(null != genTable.SubTableName && "" != genTable.SubTableName) .Includes(it => it.${genTable.SubTable.ClassName}.MappingField(z => z.${genTable.SubTableFkName}, () => it.${replaceDto.PKName})) $end @@ -87,7 +77,7 @@ $end $end $end - var response = _${replaceDto.ModelTypeName}Repository.Queryable().Where(predicate.ToExpression()) + var response = Queryable().Where(predicate.ToExpression()) .ToTree(it => it.Children, it => it.${genTable.Options.TreeParentCode}, 0); return response; @@ -100,7 +90,7 @@ $end /// public int Add${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} parm) { - var response = _${replaceDto.ModelTypeName}Repository.Insert(parm, it => new + var response = Insert(parm, it => new { ${foreach(item in genTable.Columns)} $if((item.IsInsert)) @@ -118,7 +108,7 @@ ${end} /// public int Update${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} parm) { - var response = _${replaceDto.ModelTypeName}Repository.Update(w => w.${replaceDto.PKName} == parm.${replaceDto.PKName}, it => new ${replaceDto.ModelTypeName}() + var response = Update(w => w.${replaceDto.PKName} == parm.${replaceDto.PKName}, it => new ${replaceDto.ModelTypeName}() { $foreach(item in genTable.Columns) $if((item.IsEdit)) diff --git a/ZR.CodeGenerator/CodeGeneratorTool.cs b/ZR.CodeGenerator/CodeGeneratorTool.cs index 30a4a4d6..6cb7364b 100644 --- a/ZR.CodeGenerator/CodeGeneratorTool.cs +++ b/ZR.CodeGenerator/CodeGeneratorTool.cs @@ -83,7 +83,6 @@ namespace ZR.CodeGenerator InitJntTemplate(dto, replaceDto); GenerateModels(replaceDto, dto); - GenerateRepository(replaceDto, dto); GenerateService(replaceDto, dto); GenerateControllers(replaceDto, dto); if (dto.VueVersion == 3) @@ -98,6 +97,10 @@ namespace ZR.CodeGenerator GenerateVueViews(replaceDto, dto); } + if (dto.GenTable.Options.GenerateRepo == 1) + { + GenerateRepository(replaceDto, dto); + } GenerateVueJs(replaceDto, dto); GenerateSql(replaceDto, dto); diff --git a/ZR.Model/System/Generate/GenTable.cs b/ZR.Model/System/Generate/GenTable.cs index 482ff3ef..68355b38 100644 --- a/ZR.Model/System/Generate/GenTable.cs +++ b/ZR.Model/System/Generate/GenTable.cs @@ -74,7 +74,7 @@ namespace ZR.Model.System.Generate /// [SqlSugar.SugarColumn(IsJson = true)] public Options Options { get; set; } - + #region 表额外字段 /** 表列信息 */ [SqlSugar.SugarColumn(IsIgnore = true)] @@ -88,7 +88,7 @@ namespace ZR.Model.System.Generate #endregion } - public class Options + public class Options { public long ParentMenuId { get; set; } = 0; public string SortType { get; set; } = "asc"; @@ -96,7 +96,7 @@ namespace ZR.Model.System.Generate public string TreeCode { get; set; } = string.Empty; public string TreeName { get; set; } = string.Empty; public string TreeParentCode { get; set; } = string.Empty; - public string PermissionPrefix { get; set; }= string.Empty; + public string PermissionPrefix { get; set; } = string.Empty; /// /// 额外参数字符串 /// @@ -105,5 +105,9 @@ namespace ZR.Model.System.Generate /// 列大小 12,24 /// public int ColNum { get; set; } = 12; + /// + /// 是否生成仓储层 + /// + public int GenerateRepo { get; set; } } } -- Gitee From b3c35bccd4a778ccc013d5ccc8df81df2c8b4d9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 20 Sep 2022 21:43:36 +0800 Subject: [PATCH 020/122] =?UTF-8?q?fix=EF=BC=9A=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=A4=8D=E9=80=89=E6=A1=86=E4=BF=9D=E5=AD=98=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9C=AA=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt index 7ebb75b5..6538eee1 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt @@ -475,6 +475,11 @@ $end function submitForm() { proxy.${refs}refs["formRef"].validate((valid) => { if (valid) { +$foreach(item in genTable.Columns) +$if(item.HtmlType == "checkbox") + form.value.${item.CsharpFieldFl} = form.value.${item.CsharpFieldFl}Checked.toString(); +$end +$end if (form.value.${replaceDto.FistLowerPk} != undefined && opertype.value === 2) { update${genTable.BusinessName}(form.value).then((res) => { proxy.${modal}modal.msgSuccess("修改成功") -- Gitee From 951083e097c973718ac763c15dedb3aacd2a48d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Wed, 21 Sep 2022 21:43:05 +0800 Subject: [PATCH 021/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=93=E5=82=A8?= =?UTF-8?q?=E3=80=81Service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Repository/BaseRepository.cs | 5 +- ZR.Repository/IBaseRepository.cs | 1 + ZR.Repository/System/ArticleRepository.cs | 29 -------- ZR.Repository/System/SysDeptRepository.cs | 25 ------- ZR.Repository/System/SysFileRepository.cs | 21 ------ ZR.Repository/System/SysUserRepository.cs | 26 ++++++- ZR.Repository/System/SysUserRoleRepository.cs | 40 ---------- ZR.Repository/ZR.Repository.csproj | 15 ++++ ZR.Service/System/ArticleCategoryService.cs | 16 +--- ZR.Service/System/CommonLangService.cs | 17 +---- ZR.Service/System/GenTableService.cs | 63 +++++++++------- ZR.Service/System/IService/ISysDeptService.cs | 10 ++- .../System/IService/ISysDictDataService.cs | 9 +-- .../System/IService/ISysUserRoleService.cs | 12 +-- ZR.Service/System/SysConfigService.cs | 9 +-- ZR.Service/System/SysDeptService.cs | 37 ++++++---- ZR.Service/System/SysDictDataService.cs | 73 ++++++++++++++----- ZR.Service/System/SysDictService.cs | 48 ++++++------ ZR.Service/System/SysLoginService.cs | 35 +++++---- ZR.Service/System/SysNoticeService.cs | 11 +-- ZR.Service/System/SysOperLogService.cs | 36 ++++----- ZR.Service/System/SysPostService.cs | 16 +--- ZR.Service/System/SysRoleService.cs | 1 - ZR.Service/System/SysUserPostService.cs | 33 +++++---- ZR.Service/System/SysUserRoleService.cs | 22 +++--- 25 files changed, 281 insertions(+), 329 deletions(-) delete mode 100644 ZR.Repository/System/ArticleRepository.cs delete mode 100644 ZR.Repository/System/SysFileRepository.cs diff --git a/ZR.Repository/BaseRepository.cs b/ZR.Repository/BaseRepository.cs index 16abe270..84ca0f72 100644 --- a/ZR.Repository/BaseRepository.cs +++ b/ZR.Repository/BaseRepository.cs @@ -203,7 +203,10 @@ namespace ZR.Repository { return Context.Deleteable().ExecuteCommand(); } - + public bool Truncate() + { + return Context.DbMaintenance.TruncateTable(); + } #endregion delete #region query diff --git a/ZR.Repository/IBaseRepository.cs b/ZR.Repository/IBaseRepository.cs index 6604d2ae..25aa8970 100644 --- a/ZR.Repository/IBaseRepository.cs +++ b/ZR.Repository/IBaseRepository.cs @@ -50,6 +50,7 @@ namespace ZR.Repository int Delete(object[] obj); int Delete(object id); int DeleteTable(); + bool Truncate(); #endregion delete diff --git a/ZR.Repository/System/ArticleRepository.cs b/ZR.Repository/System/ArticleRepository.cs deleted file mode 100644 index 718735ec..00000000 --- a/ZR.Repository/System/ArticleRepository.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Infrastructure.Attribute; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using ZR.Model.System.Dto; -using ZR.Model.System; - -namespace ZR.Repository.System -{ - /// - /// 文章管理 - /// - [AppService(ServiceLifetime = LifeTime.Transient)] - public class ArticleRepository : BaseRepository
- { - - } - - /// - /// 文章目录 - /// - [AppService(ServiceLifetime = LifeTime.Transient)] - public class ArticleCategoryRepository : BaseRepository - { - - } -} diff --git a/ZR.Repository/System/SysDeptRepository.cs b/ZR.Repository/System/SysDeptRepository.cs index 59b1cce8..d9adac0d 100644 --- a/ZR.Repository/System/SysDeptRepository.cs +++ b/ZR.Repository/System/SysDeptRepository.cs @@ -4,31 +4,6 @@ using ZR.Model.System; namespace ZR.Repository.System { - /// - /// 部门管理 - /// - [AppService(ServiceLifetime = LifeTime.Transient)] - public class SysDeptRepository : BaseRepository - { - /// - /// - /// - /// - /// - public List SelectChildrenDeptById(long deptId) - { - string sql = "select * from sys_dept where find_in_set(@deptId, ancestors)"; - - return Context.SqlQueryable(sql).AddParameters(new { @deptId = deptId }).ToList(); - } - - public int UdateDeptChildren(List dept) - { - return Context.Updateable(dept).WhereColumns(f => new { f.DeptId }) - .UpdateColumns(it => new { it.Ancestors }).ExecuteCommand(); - } - } - /// /// 角色部门 /// diff --git a/ZR.Repository/System/SysFileRepository.cs b/ZR.Repository/System/SysFileRepository.cs deleted file mode 100644 index 867dd5fe..00000000 --- a/ZR.Repository/System/SysFileRepository.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using Infrastructure.Attribute; -using ZR.Repository.System; -using ZR.Model.Models; -using ZR.Model.System; - -namespace ZR.Repository.System -{ - /// - /// 文件存储仓储 - /// - /// @author zz - /// @date 2021-12-15 - /// - [AppService(ServiceLifetime = LifeTime.Transient)] - public class SysFileRepository : BaseRepository - { - #region 业务逻辑代码 - #endregion - } -} \ No newline at end of file diff --git a/ZR.Repository/System/SysUserRepository.cs b/ZR.Repository/System/SysUserRepository.cs index 6b9fa615..f7b89170 100644 --- a/ZR.Repository/System/SysUserRepository.cs +++ b/ZR.Repository/System/SysUserRepository.cs @@ -2,11 +2,11 @@ using Infrastructure.Extensions; using SqlSugar; using System; -using System.Collections; using System.Collections.Generic; using System.Linq; using ZR.Model; using ZR.Model.System; +using ZR.Model.System.Dto; namespace ZR.Repository.System { @@ -161,5 +161,29 @@ namespace ZR.Repository.System }) .Where(f => f.UserId == user.UserId).ExecuteCommand(); } + + /// + /// 登录 + /// + /// 登录实体 + /// + public SysUser Login(LoginBodyDto user) + { + return GetFirst(it => it.UserName == user.Username && it.Password == user.Password); + } + + /// + /// 修改登录信息 + /// + /// + /// + /// + public void UpdateLoginInfo(LoginBodyDto user, long userId) + { + var db = Context; + db.Updateable(new SysUser() { LoginIP = user.LoginIP, LoginDate = db.GetDate(), UserId = userId }) + .UpdateColumns(it => new { it.LoginIP, it.LoginDate }) + .ExecuteCommand(); + } } } diff --git a/ZR.Repository/System/SysUserRoleRepository.cs b/ZR.Repository/System/SysUserRoleRepository.cs index ec71d725..21f0b1e9 100644 --- a/ZR.Repository/System/SysUserRoleRepository.cs +++ b/ZR.Repository/System/SysUserRoleRepository.cs @@ -11,16 +11,6 @@ namespace ZR.Repository.System [AppService(ServiceLifetime = LifeTime.Transient)] public class SysUserRoleRepository : BaseRepository { - /// - /// 删除用户角色 - /// - /// - /// - public int DeleteUserRoleByUserId(int userId) - { - return Context.Deleteable().Where(it => it.UserId == userId).ExecuteCommand(); - } - /// /// 批量删除角色对应用户 /// @@ -33,36 +23,6 @@ namespace ZR.Repository.System .ExecuteCommand(); } - /// - /// 添加用户角色 - /// - /// - /// - public int AddUserRole(List sysUsers) - { - return Context.Insertable(sysUsers).ExecuteCommand(); - } - - /// - /// 删除角色关联的用户 - /// - /// - /// - public int DeleteUserRoleByRoleId(int roleId) - { - return Context.Deleteable().In(roleId).ExecuteCommand(); - } - - /// - /// 获取角色分配个数 - /// - /// - /// - public int CountUserRoleByRoleId(long roleId) - { - return Context.Queryable().Where(it => it.RoleId == roleId).Count(); - } - /// /// 获取用户数据根据角色id /// diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index 2a355895..d9246679 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -4,6 +4,21 @@ net5.0 + + + + + + + + + + + + + + + diff --git a/ZR.Service/System/ArticleCategoryService.cs b/ZR.Service/System/ArticleCategoryService.cs index 3070624c..9f33e26e 100644 --- a/ZR.Service/System/ArticleCategoryService.cs +++ b/ZR.Service/System/ArticleCategoryService.cs @@ -1,13 +1,10 @@ using Infrastructure.Attribute; using SqlSugar; -using SqlSugar.IOC; using System.Collections.Generic; -using System.Linq; using ZR.Model; using ZR.Model.Dto; using ZR.Model.System; using ZR.Repository; -using ZR.Repository.System; using ZR.Service.System.IService; namespace ZR.Service.System @@ -18,12 +15,6 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(IArticleCategoryService), ServiceLifetime = LifeTime.Transient)] public class ArticleCategoryService : BaseService, IArticleCategoryService { - private readonly ArticleCategoryRepository _ArticleCategoryRepository; - public ArticleCategoryService(ArticleCategoryRepository repository) - { - _ArticleCategoryRepository = repository; - } - /// /// 查询文章目录列表 /// @@ -35,8 +26,7 @@ namespace ZR.Service.System var predicate = Expressionable.Create(); //搜索条件查询语法参考Sqlsugar - var response = _ArticleCategoryRepository - .Queryable() + var response = Queryable() .Where(predicate.ToExpression()) .ToPage(parm); @@ -55,7 +45,7 @@ namespace ZR.Service.System //搜索条件查询语法参考Sqlsugar - var response = _ArticleCategoryRepository.Queryable().Where(predicate.ToExpression()) + var response = Queryable().Where(predicate.ToExpression()) .ToTree(it => it.Children, it => it.ParentId, 0); return response; @@ -68,7 +58,7 @@ namespace ZR.Service.System /// public int AddArticleCategory(ArticleCategory parm) { - var response = _ArticleCategoryRepository.Insert(parm, it => new + var response = Insert(parm, it => new { it.Name, it.CreateTime, diff --git a/ZR.Service/System/CommonLangService.cs b/ZR.Service/System/CommonLangService.cs index 4abe0311..7e561222 100644 --- a/ZR.Service/System/CommonLangService.cs +++ b/ZR.Service/System/CommonLangService.cs @@ -20,12 +20,6 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(ICommonLangService), ServiceLifetime = LifeTime.Transient)] public class CommonLangService : BaseService, ICommonLangService { - private readonly CommonLangRepository _CommonLangrepository; - public CommonLangService(CommonLangRepository repository) - { - _CommonLangrepository = repository; - } - #region 业务逻辑代码 /// @@ -42,8 +36,7 @@ namespace ZR.Service.System predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LangCode), it => it.LangCode == parm.LangCode); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LangKey), it => it.LangKey.Contains(parm.LangKey)); predicate = predicate.AndIF(parm.BeginAddtime != null, it => it.Addtime >= parm.BeginAddtime && it.Addtime <= parm.EndAddtime); - var response = _CommonLangrepository - .Queryable() + var response = Queryable() .Where(predicate.ToExpression()) .ToPage(parm); return response; @@ -63,8 +56,7 @@ namespace ZR.Service.System predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LangCode), it => it.LangCode == parm.LangCode); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LangKey), it => it.LangKey.Contains(parm.LangKey)); predicate = predicate.AndIF(parm.BeginAddtime != null, it => it.Addtime >= parm.BeginAddtime && it.Addtime <= parm.EndAddtime); - var response = _CommonLangrepository - .Queryable() + var response = Queryable() .Where(predicate.ToExpression()) .ToPivotList(it => it.LangCode, it => it.LangKey, it => it.Max(f => f.LangName)); return response; @@ -78,8 +70,7 @@ namespace ZR.Service.System //搜索条件查询语法参考Sqlsugar predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LangCode), it => it.LangCode == parm.LangCode); //predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LangKey), it => it.LangKey.Contains(parm.LangKey)); - var response = _CommonLangrepository - .Queryable() + var response = Queryable() .Where(predicate.ToExpression()) .ToList(); return response; @@ -98,7 +89,7 @@ namespace ZR.Service.System LangName = item.LangName, }); } - var storage = _CommonLangrepository.Storageable(langs) + var storage = Storageable(langs) .WhereColumns(it => new { it.LangKey, it.LangCode }) .ToStorage(); diff --git a/ZR.Service/System/GenTableService.cs b/ZR.Service/System/GenTableService.cs index 6d90d278..99780efb 100644 --- a/ZR.Service/System/GenTableService.cs +++ b/ZR.Service/System/GenTableService.cs @@ -1,14 +1,11 @@ using Infrastructure.Attribute; using Infrastructure.Extensions; -using Newtonsoft.Json; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; -using ZR.Common; using ZR.Model; using ZR.Model.System.Generate; -using ZR.Repository.System; using ZR.Service.System.IService; namespace ZR.Service.System @@ -19,12 +16,10 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(IGenTableService), ServiceLifetime = LifeTime.Transient)] public class GenTableService : BaseService, IGenTableService { - private GenTableRepository GenTableRepository; private IGenTableColumnService GenTableColumnService; - public GenTableService(IGenTableColumnService genTableColumnService, GenTableRepository genTableRepository) + public GenTableService(IGenTableColumnService genTableColumnService) { GenTableColumnService = genTableColumnService; - GenTableRepository = genTableRepository; } /// @@ -34,7 +29,7 @@ namespace ZR.Service.System /// public int DeleteGenTableByIds(long[] tableIds) { - GenTableRepository.Delete(f => tableIds.Contains(f.TableId)); + Delete(f => tableIds.Contains(f.TableId)); return GenTableColumnService.DeleteGenTableColumn(tableIds); } @@ -45,7 +40,7 @@ namespace ZR.Service.System /// public int DeleteGenTableByTbName(string tableName) { - return GenTableRepository.Delete(f => f.TableName == tableName) ? 1 : 0; + return Delete(f => f.TableName == tableName) ? 1 : 0; } /// @@ -55,10 +50,10 @@ namespace ZR.Service.System /// public GenTable GetGenTableInfo(long tableId) { - var info = GenTableRepository.GetId(tableId); + var info = GetId(tableId); if (info != null && !info.SubTableName.IsEmpty()) { - info.SubTable = GenTableRepository.Queryable().Where(f => f.TableName == info.SubTableName).First(); + info.SubTable = Queryable().Where(f => f.TableName == info.SubTableName).First(); } return info; } @@ -69,7 +64,7 @@ namespace ZR.Service.System /// public List GetGenTableAll() { - return GenTableRepository.GetAll(); + return GetAll(); } /// @@ -83,7 +78,7 @@ namespace ZR.Service.System var predicate = Expressionable.Create(); predicate = predicate.AndIF(genTable.TableName.IfNotEmpty(), it => it.TableName.Contains(genTable.TableName)); - return GenTableRepository.GetPages(predicate.ToExpression(), pagerInfo, x => x.TableId, OrderByType.Desc); + return GetPages(predicate.ToExpression(), pagerInfo, x => x.TableId, OrderByType.Desc); } /// @@ -98,7 +93,7 @@ namespace ZR.Service.System //DeleteGenTableByIds(new long[] { table.TableId }); DeleteGenTableByTbName(table.TableName); - return GenTableRepository.Context.Insertable(table).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnIdentity(); + return Insertable(table).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnIdentity(); } /// @@ -113,7 +108,7 @@ namespace ZR.Service.System public int UpdateGenTable(GenTable genTable) { - var db = GenTableRepository.Context; + var db = Context; genTable.Update_time = db.GetDate(); return db.Updateable(genTable).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); } @@ -154,12 +149,6 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(IGenTableColumnService), ServiceLifetime = LifeTime.Transient)] public class GenTableColumnService : BaseService, IGenTableColumnService { - - private GenTableColumnRepository GetTableColumnRepository; - public GenTableColumnService(GenTableColumnRepository genTableColumnRepository) - { - GetTableColumnRepository = genTableColumnRepository; - } /// /// 删除表字段 /// @@ -167,8 +156,9 @@ namespace ZR.Service.System /// public int DeleteGenTableColumn(long tableId) { - return GetTableColumnRepository.DeleteGenTableColumn(new long[] { tableId }); + return Deleteable().Where(f => new long[] { tableId }.Contains(f.TableId)).ExecuteCommand(); } + /// /// 根据表id批量删除表字段 /// @@ -176,7 +166,7 @@ namespace ZR.Service.System /// public int DeleteGenTableColumn(long[] tableId) { - return GetTableColumnRepository.DeleteGenTableColumn(tableId); + return Deleteable().Where(f => tableId.Contains(f.TableId)).ExecuteCommand(); } /// @@ -186,7 +176,7 @@ namespace ZR.Service.System /// public int DeleteGenTableColumnByTableName(string tableName) { - return GetTableColumnRepository.DeleteGenTableColumnByTableName(tableName); + return Deleteable().Where(f => f.TableName == tableName).ExecuteCommand(); } /// @@ -196,7 +186,7 @@ namespace ZR.Service.System /// public List GenTableColumns(long tableId) { - return GetTableColumnRepository.GenTableColumns(tableId); + return Queryable().Where(f => f.TableId == tableId).OrderBy(x => x.Sort).ToList(); } /// @@ -206,7 +196,7 @@ namespace ZR.Service.System /// public int InsertGenTableColumn(List tableColumn) { - return GetTableColumnRepository.InsertGenTableColumn(tableColumn); + return Context.Insertable(tableColumn).IgnoreColumns(x => new { x.Remark }).ExecuteCommand(); } /// @@ -216,7 +206,28 @@ namespace ZR.Service.System /// public int UpdateGenTableColumn(List tableColumn) { - return GetTableColumnRepository.UpdateGenTableColumn(tableColumn); + return Context.Updateable(tableColumn) + .WhereColumns(it => new { it.ColumnId, it.TableId }) + .UpdateColumns(it => new + { + it.ColumnComment, + it.CsharpField, + it.CsharpType, + it.IsQuery, + it.IsEdit, + it.IsInsert, + it.IsList, + it.QueryType, + it.HtmlType, + it.IsRequired, + it.Sort, + it.Update_time, + it.DictType, + it.Update_by, + it.Remark, + it.IsSort + }) + .ExecuteCommand(); } } } diff --git a/ZR.Service/System/IService/ISysDeptService.cs b/ZR.Service/System/IService/ISysDeptService.cs index aed1d61c..e587c3ef 100644 --- a/ZR.Service/System/IService/ISysDeptService.cs +++ b/ZR.Service/System/IService/ISysDeptService.cs @@ -1,9 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Text; +using System.Collections.Generic; using ZR.Model.System; using ZR.Model.Vo.System; -using ZR.Repository; namespace ZR.Service.System.IService { @@ -23,4 +20,9 @@ namespace ZR.Service.System.IService bool DeleteRoleDeptByRoleId(long roleId); int InsertRoleDepts(SysRole role); } + + public interface ISysRoleDeptService : IBaseService + { + List SelectRoleDeptByRoleId(long roleId); + } } diff --git a/ZR.Service/System/IService/ISysDictDataService.cs b/ZR.Service/System/IService/ISysDictDataService.cs index 96c81f32..b0db87db 100644 --- a/ZR.Service/System/IService/ISysDictDataService.cs +++ b/ZR.Service/System/IService/ISysDictDataService.cs @@ -1,13 +1,10 @@ -using Infrastructure.Model; -using System; -using System.Collections.Generic; -using System.Text; +using System.Collections.Generic; using ZR.Model; using ZR.Model.System; namespace ZR.Service.System.IService { - public interface ISysDictDataService + public interface ISysDictDataService : IBaseService { public PagedInfo SelectDictDataList(SysDictData dictData, PagerInfo pagerInfo); public List SelectDictDataByType(string dictType); @@ -16,5 +13,7 @@ namespace ZR.Service.System.IService public long InsertDictData(SysDictData dict); public long UpdateDictData(SysDictData dict); public int DeleteDictDataByIds(long[] dictCodes); + int UpdateDictDataType(string old_dictType, string new_dictType); + List SelectDictDataByCustomSql(SysDictType sysDictType); } } diff --git a/ZR.Service/System/IService/ISysUserRoleService.cs b/ZR.Service/System/IService/ISysUserRoleService.cs index eb2bb495..e9de810c 100644 --- a/ZR.Service/System/IService/ISysUserRoleService.cs +++ b/ZR.Service/System/IService/ISysUserRoleService.cs @@ -1,15 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections.Generic; using ZR.Model; -using ZR.Model.System.Dto; using ZR.Model.System; +using ZR.Model.System.Dto; namespace ZR.Service.System.IService { - public interface ISysUserRoleService + public interface ISysUserRoleService : IBaseService { public int CountUserRoleByRoleId(long roleId); @@ -31,7 +27,7 @@ namespace ZR.Service.System.IService /// /// 添加用户角色 /// - /// + /// /// public int AddUserRole(List sysUsers); diff --git a/ZR.Service/System/SysConfigService.cs b/ZR.Service/System/SysConfigService.cs index 7e651bc6..bf59c298 100644 --- a/ZR.Service/System/SysConfigService.cs +++ b/ZR.Service/System/SysConfigService.cs @@ -1,6 +1,5 @@ using Infrastructure.Attribute; using ZR.Model.System; -using ZR.Repository; namespace ZR.Service.System { @@ -10,17 +9,11 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(ISysConfigService), ServiceLifetime = LifeTime.Transient)] public class SysConfigService : BaseService, ISysConfigService { - private readonly SysConfigRepository _SysConfigrepository; - public SysConfigService(SysConfigRepository repository) - { - _SysConfigrepository = repository; - } - #region 业务逻辑代码 public SysConfig GetSysConfigByKey(string key) { - return _SysConfigrepository.Queryable().First(f => f.ConfigKey == key); + return Queryable().First(f => f.ConfigKey == key); } #endregion diff --git a/ZR.Service/System/SysDeptService.cs b/ZR.Service/System/SysDeptService.cs index 5785b294..98400e99 100644 --- a/ZR.Service/System/SysDeptService.cs +++ b/ZR.Service/System/SysDeptService.cs @@ -20,11 +20,9 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(ISysDeptService), ServiceLifetime = LifeTime.Transient)] public class SysDeptService : BaseService, ISysDeptService { - public SysDeptRepository DeptRepository; - public SysRoleDeptRepository RoleDeptRepository; - public SysDeptService(SysDeptRepository deptRepository, SysRoleDeptRepository roleDeptRepository) + public ISysRoleDeptService RoleDeptRepository; + public SysDeptService(ISysRoleDeptService roleDeptRepository) { - DeptRepository = deptRepository; RoleDeptRepository = roleDeptRepository; } @@ -41,7 +39,7 @@ namespace ZR.Service.System predicate = predicate.AndIF(dept.DeptName.IfNotEmpty(), it => it.DeptName.Contains(dept.DeptName)); predicate = predicate.AndIF(dept.Status.IfNotEmpty(), it => it.Status == dept.Status); - var response = DeptRepository.GetList(predicate.ToExpression()); + var response = GetList(predicate.ToExpression()); return response; } @@ -54,7 +52,7 @@ namespace ZR.Service.System public string CheckDeptNameUnique(SysDept dept) { long deptId = dept.DeptId == 0 ? -1L : dept.DeptId; - SysDept info = DeptRepository.GetFirst(it => it.DeptName == dept.DeptName && it.ParentId == dept.ParentId); + SysDept info = GetFirst(it => it.DeptName == dept.DeptName && it.ParentId == dept.ParentId); if (info != null && info.DeptId != deptId) { return UserConstants.NOT_UNIQUE; @@ -69,7 +67,7 @@ namespace ZR.Service.System /// public int InsertDept(SysDept dept) { - SysDept info = DeptRepository.GetFirst(it => it.DeptId == dept.ParentId); + SysDept info = GetFirst(it => it.DeptId == dept.ParentId); //如果父节点不为正常状态,则不允许新增子节点 if (info != null && !UserConstants.DEPT_NORMAL.Equals(info?.Status)) { @@ -80,7 +78,7 @@ namespace ZR.Service.System { dept.Ancestors = info.Ancestors + "," + dept.ParentId; } - return DeptRepository.Add(dept); + return Add(dept); } /// @@ -90,8 +88,8 @@ namespace ZR.Service.System /// public int UpdateDept(SysDept dept) { - SysDept newParentDept = DeptRepository.GetFirst(it => it.DeptId == dept.ParentId); - SysDept oldDept = DeptRepository.GetFirst(m => m.DeptId == dept.DeptId); + SysDept newParentDept = GetFirst(it => it.DeptId == dept.ParentId); + SysDept oldDept = GetFirst(m => m.DeptId == dept.DeptId); if (newParentDept != null && oldDept != null) { string newAncestors = newParentDept.Ancestors + "," + newParentDept.DeptId; @@ -99,7 +97,7 @@ namespace ZR.Service.System dept.Ancestors = newAncestors; UpdateDeptChildren(dept.DeptId, newAncestors, oldAncestors); } - int result = DeptRepository.Context.Updateable(dept).ExecuteCommand(); + int result = Context.Updateable(dept).ExecuteCommand(); if (UserConstants.DEPT_NORMAL.Equals(dept.Status) && dept.Ancestors.IfNotEmpty() && !"0".Equals(dept.Ancestors)) { @@ -119,7 +117,7 @@ namespace ZR.Service.System dept.Status = "0"; dept.Update_time = DateTime.Now; - DeptRepository.Update(dept, it => new { it.Update_by, it.Update_time, it.Status }, f => depts.Contains(f.DeptId)); + Update(dept, it => new { it.Update_by, it.Update_time, it.Status }, f => depts.Contains(f.DeptId)); } /// @@ -140,7 +138,8 @@ namespace ZR.Service.System } if (children.Any()) { - DeptRepository.UdateDeptChildren(children); + Context.Updateable(children).WhereColumns(f => new { f.DeptId }) + .UpdateColumns(it => new { it.Ancestors }).ExecuteCommand(); } } @@ -285,4 +284,16 @@ namespace ZR.Service.System } #endregion } + + /// + /// 角色部门 + /// + [AppService(ServiceType = typeof(ISysRoleDeptService), ServiceLifetime = LifeTime.Transient)] + public class SysRoleDeptService : BaseService, ISysRoleDeptService + { + public List SelectRoleDeptByRoleId(long roleId) + { + return GetList(it => it.RoleId == roleId).ToList(); + } + } } diff --git a/ZR.Service/System/SysDictDataService.cs b/ZR.Service/System/SysDictDataService.cs index 2b44798e..06e003f6 100644 --- a/ZR.Service/System/SysDictDataService.cs +++ b/ZR.Service/System/SysDictDataService.cs @@ -1,12 +1,11 @@ using Infrastructure.Attribute; -using Infrastructure.Model; +using SqlSugar; using System; using System.Collections.Generic; -using System.Text; +using System.Linq; using ZR.Common; using ZR.Model; using ZR.Model.System; -using ZR.Repository.System; using ZR.Service.System.IService; namespace ZR.Service.System @@ -17,21 +16,20 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(ISysDictDataService), ServiceLifetime = LifeTime.Transient)] public class SysDictDataService : BaseService, ISysDictDataService { - - private readonly SysDictDataRepository SysDictDataRepository; - public SysDictDataService(SysDictDataRepository sysDictDataRepository) - { - SysDictDataRepository = sysDictDataRepository; - } - /// /// 查询字典数据 /// /// + /// /// public PagedInfo SelectDictDataList(SysDictData dictData, PagerInfo pagerInfo) { - return SysDictDataRepository.SelectDictDataList(dictData, pagerInfo); + //return SysDictDataRepository.SelectDictDataList(dictData, pagerInfo); + var exp = Expressionable.Create(); + exp.AndIF(!string.IsNullOrEmpty(dictData.DictLabel), it => it.DictLabel.Contains(dictData.DictLabel)); + exp.AndIF(!string.IsNullOrEmpty(dictData.Status), it => it.Status == dictData.Status); + exp.AndIF(!string.IsNullOrEmpty(dictData.DictType), it => it.DictType == dictData.DictType); + return GetPages(exp.ToExpression(), pagerInfo); } /// @@ -44,7 +42,9 @@ namespace ZR.Service.System string CK = $"SelectDictDataByType_{dictType}"; if (CacheHelper.GetCache(CK) is not List list) { - list = SysDictDataRepository.SelectDictDataByType(dictType); + list = Queryable().Where(f => f.Status == "0" && f.DictType == dictType) + .OrderBy(it => it.DictSort) + .ToList(); CacheHelper.SetCache(CK, list, 30); } return list; @@ -54,7 +54,9 @@ namespace ZR.Service.System string CK = $"SelectDictDataByTypes_{dictTypes}"; if (CacheHelper.GetCache(CK) is not List list) { - list = SysDictDataRepository.SelectDictDataByTypes(dictTypes); + list = Queryable().Where(f => f.Status == "0" && dictTypes.Contains(f.DictType)) + .OrderBy(it => it.DictSort) + .ToList(); //CacheHelper.SetCache(CK, list, 30); } return list; @@ -69,7 +71,7 @@ namespace ZR.Service.System string CK = $"SelectDictDataByCode_{dictCode}"; if (CacheHelper.GetCache(CK) is not SysDictData list) { - list = SysDictDataRepository.GetFirst(f => f.DictCode == dictCode); + list = GetFirst(f => f.DictCode == dictCode); CacheHelper.SetCache(CK, list, 5); } return list; @@ -82,7 +84,7 @@ namespace ZR.Service.System /// public long InsertDictData(SysDictData dict) { - return SysDictDataRepository.InsertDictData(dict); + return Insertable(dict).ExecuteReturnBigIdentity(); } /// @@ -92,7 +94,19 @@ namespace ZR.Service.System /// public long UpdateDictData(SysDictData dict) { - var result = SysDictDataRepository.UpdateDictData(dict); + var result = Updateable(dict) + .SetColumns(t => new SysDictData() + { + Remark = dict.Remark, + Update_time = DateTime.Now, + DictSort = dict.DictSort, + DictLabel = dict.DictLabel, + DictValue = dict.DictValue, + Status = dict.Status, + CssClass = dict.CssClass, + ListClass = dict.ListClass + }) + .Where(f => f.DictCode == dict.DictCode).ExecuteCommand(); CacheHelper.Remove($"SelectDictDataByCode_{dict.DictCode}"); return result; } @@ -104,7 +118,32 @@ namespace ZR.Service.System /// public int DeleteDictDataByIds(long[] dictCodes) { - return SysDictDataRepository.DeleteDictDataByIds(dictCodes); + return Delete(dictCodes); + } + + /// + /// 同步修改字典类型 + /// + /// 旧字典类型 + /// 新字典类型 + /// + public int UpdateDictDataType(string old_dictType, string new_dictType) + { + //只更新DictType字段根据where条件 + return Context.Updateable() + .SetColumns(t => new SysDictData() { DictType = new_dictType }) + .Where(f => f.DictType == old_dictType) + .ExecuteCommand(); + } + + /// + /// 根据字典类型查询自定义sql + /// + /// + /// + public List SelectDictDataByCustomSql(SysDictType sysDictType) + { + return Context.Ado.SqlQuery(sysDictType?.CustomSql).ToList(); } } } diff --git a/ZR.Service/System/SysDictService.cs b/ZR.Service/System/SysDictService.cs index 8a668f9b..f3ae9434 100644 --- a/ZR.Service/System/SysDictService.cs +++ b/ZR.Service/System/SysDictService.cs @@ -1,11 +1,10 @@ using Infrastructure; using Infrastructure.Attribute; +using SqlSugar; using System; using System.Collections.Generic; -using System.Text; using ZR.Model; using ZR.Model.System; -using ZR.Repository.System; using ZR.Service.System.IService; namespace ZR.Service.System @@ -16,27 +15,32 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(ISysDictService), ServiceLifetime = LifeTime.Transient)] public class SysDictService : BaseService, ISysDictService { - private SysDictRepository DictRepository; - private SysDictDataRepository DictDataRepository; + private ISysDictDataService DictDataService; - public SysDictService(SysDictRepository sysDictRepository, SysDictDataRepository dictDataRepository) + public SysDictService(ISysDictDataService dictDataRepository) { - this.DictRepository = sysDictRepository; - this.DictDataRepository = dictDataRepository; + this.DictDataService = dictDataRepository; } public List GetAll() { - return DictRepository.GetAll(); + return Queryable().ToList(); } /// /// 查询字段类型列表 /// /// 实体模型 + /// /// - public PagedInfo SelectDictTypeList(SysDictType dictType, Model.PagerInfo pager) + public PagedInfo SelectDictTypeList(SysDictType dictType, PagerInfo pager) { - return DictRepository.SelectDictTypeList(dictType, pager); + var exp = Expressionable.Create(); + exp.AndIF(!string.IsNullOrEmpty(dictType.DictName), it => it.DictName.Contains(dictType.DictName)); + exp.AndIF(!string.IsNullOrEmpty(dictType.Status), it => it.Status == dictType.Status); + exp.AndIF(!string.IsNullOrEmpty(dictType.DictType), it => it.DictType.Contains(dictType.DictType)); + exp.AndIF(!string.IsNullOrEmpty(dictType.Type), it => it.Type.Equals(dictType.Type)); + + return GetPages(exp.ToExpression(), pager, f => f.DictId, OrderByType.Desc); } /// @@ -46,7 +50,7 @@ namespace ZR.Service.System /// public string CheckDictTypeUnique(SysDictType dictType) { - SysDictType sysDictType = DictRepository.GetFirst(f => f.DictType == dictType.DictType); + SysDictType sysDictType = GetFirst(f => f.DictType == dictType.DictType); if (sysDictType != null && sysDictType.DictId != dictType.DictId) { return UserConstants.NOT_UNIQUE; @@ -57,19 +61,19 @@ namespace ZR.Service.System /// /// 批量删除字典数据信息 /// - /// + /// /// public int DeleteDictTypeByIds(long[] dictIds) { foreach (var dictId in dictIds) { - SysDictType dictType = DictRepository.GetFirst(x => x.DictId == dictId); - if (DictDataRepository.Count(f => f.DictType == dictType.DictType) > 0) + SysDictType dictType = GetFirst(x => x.DictId == dictId); + if (DictDataService.Count(f => f.DictType == dictType.DictType) > 0) { throw new CustomException($"{dictType.DictName}已分配,不能删除"); } } - int count = DictRepository.DeleteDictTypeByIds(dictIds); + int count = Context.Deleteable().In(dictIds).ExecuteCommand(); //if (count > 0) //{ // DictUtils.clearDictCache(); @@ -84,7 +88,7 @@ namespace ZR.Service.System /// public long InsertDictType(SysDictType sysDictType) { - return DictRepository.InsertReturnBigIdentity(sysDictType); + return InsertReturnBigIdentity(sysDictType); } /// @@ -94,13 +98,13 @@ namespace ZR.Service.System /// public int UpdateDictType(SysDictType sysDictType) { - SysDictType oldDict = DictRepository.GetFirst(x => x.DictId == sysDictType.DictId); + SysDictType oldDict = GetFirst(x => x.DictId == sysDictType.DictId); if (sysDictType.DictType != oldDict.DictType) { //同步修改 dict_data表里面的DictType值 - DictDataRepository.UpdateDictDataType(oldDict.DictType, sysDictType.DictType); + DictDataService.UpdateDictDataType(oldDict.DictType, sysDictType.DictType); } - return DictRepository.UpdateDictType(sysDictType); + return Context.Updateable(sysDictType).IgnoreColumns(it => new { sysDictType.Create_by }).ExecuteCommand(); } /// @@ -110,7 +114,7 @@ namespace ZR.Service.System /// public SysDictType GetInfo(long dictId) { - return DictRepository.GetFirst(f => f.DictId == dictId); + return GetFirst(f => f.DictId == dictId); } /// @@ -120,13 +124,13 @@ namespace ZR.Service.System /// public List SelectDictDataByCustomSql(string dictType) { - var dictInfo = DictRepository.Queryable() + var dictInfo = Queryable() .Where(f => f.DictType == dictType).First(); if (dictInfo == null || !dictInfo.CustomSql.StartsWith("select", StringComparison.OrdinalIgnoreCase)) { return null; } - return DictDataRepository.SelectDictDataByCustomSql(dictInfo); + return DictDataService.SelectDictDataByCustomSql(dictInfo); } } } diff --git a/ZR.Service/System/SysLoginService.cs b/ZR.Service/System/SysLoginService.cs index 48fa6fae..f4b573a8 100644 --- a/ZR.Service/System/SysLoginService.cs +++ b/ZR.Service/System/SysLoginService.cs @@ -1,11 +1,12 @@ using Infrastructure; using Infrastructure.Attribute; +using Infrastructure.Extensions; +using SqlSugar; using System; -using System.Collections.Generic; -using ZR.Common; using ZR.Model; -using ZR.Model.System.Dto; using ZR.Model.System; +using ZR.Model.System.Dto; +using ZR.Repository; using ZR.Repository.System; using ZR.Service.System.IService; @@ -17,11 +18,11 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(ISysLoginService), ServiceLifetime = LifeTime.Transient)] public class SysLoginService: BaseService, ISysLoginService { - private SysLogininfoRepository SysLogininfoRepository; + private readonly SysUserRepository SysUserRepository; - public SysLoginService(SysLogininfoRepository sysLogininfo) + public SysLoginService(SysUserRepository sysUserRepository) { - SysLogininfoRepository = sysLogininfo; + SysUserRepository = sysUserRepository; } /// @@ -34,7 +35,7 @@ namespace ZR.Service.System //密码md5 loginBody.Password = NETCore.Encrypt.EncryptProvider.Md5(loginBody.Password); - SysUser user = SysLogininfoRepository.Login(loginBody); + SysUser user = SysUserRepository.Login(loginBody); logininfor.UserName = loginBody.Username; logininfor.Status = "1"; logininfor.LoginTime = DateTime.Now; @@ -55,11 +56,10 @@ namespace ZR.Service.System logininfor.Status = "0"; logininfor.Msg = "登录成功"; AddLoginInfo(logininfor); - SysLogininfoRepository.UpdateLoginInfo(loginBody, user.UserId); + SysUserRepository.UpdateLoginInfo(loginBody, user.UserId); return user; } - /// /// 查询操作日志 /// @@ -71,8 +71,15 @@ namespace ZR.Service.System logininfoDto.BeginTime = DateTimeHelper.GetBeginTime(logininfoDto.BeginTime, -1); logininfoDto.EndTime = DateTimeHelper.GetBeginTime(logininfoDto.EndTime, 1); - var list = SysLogininfoRepository.GetLoginLog(logininfoDto, pager); - return list; + var exp = Expressionable.Create(); + exp.And(it => it.LoginTime >= logininfoDto.BeginTime && it.LoginTime <= logininfoDto.EndTime); + exp.AndIF(logininfoDto.Ipaddr.IfNotEmpty(), f => f.Ipaddr == logininfoDto.Ipaddr); + exp.AndIF(logininfoDto.UserName.IfNotEmpty(), f => f.UserName.Contains(logininfoDto.UserName)); + exp.AndIF(logininfoDto.Status.IfNotEmpty(), f => f.Status == logininfoDto.Status); + var query = Queryable().Where(exp.ToExpression()) + .OrderBy(it => it.InfoId, OrderByType.Desc); + + return query.ToPage(pager); } /// @@ -82,7 +89,7 @@ namespace ZR.Service.System /// public void AddLoginInfo(SysLogininfor sysLogininfor) { - SysLogininfoRepository.AddLoginInfo(sysLogininfor); + Insert(sysLogininfor); } /// @@ -90,7 +97,7 @@ namespace ZR.Service.System /// public void TruncateLogininfo() { - SysLogininfoRepository.TruncateLogininfo(); + Truncate(); } /// @@ -100,7 +107,7 @@ namespace ZR.Service.System /// public int DeleteLogininforByIds(long[] ids) { - return SysLogininfoRepository.DeleteLogininforByIds(ids); + return Delete(ids); } } } diff --git a/ZR.Service/System/SysNoticeService.cs b/ZR.Service/System/SysNoticeService.cs index df69da1d..ab6e9111 100644 --- a/ZR.Service/System/SysNoticeService.cs +++ b/ZR.Service/System/SysNoticeService.cs @@ -1,10 +1,7 @@ -using Infrastructure; using Infrastructure.Attribute; using SqlSugar; using System.Collections.Generic; using ZR.Model.Models; -using ZR.Repository; -using ZR.Repository.System; using ZR.Service.System.IService; namespace ZR.Service.System @@ -18,12 +15,6 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(ISysNoticeService), ServiceLifetime = LifeTime.Transient)] public class SysNoticeService : BaseService, ISysNoticeService { - private readonly SysNoticeRepository _SysNoticerepository; - public SysNoticeService(SysNoticeRepository repository) - { - _SysNoticerepository = repository; - } - #region 业务逻辑代码 /// @@ -37,7 +28,7 @@ namespace ZR.Service.System //搜索条件查询语法参考Sqlsugar predicate = predicate.And(m => m.Status == "0"); - return _SysNoticerepository.GetList(predicate.ToExpression()); + return GetList(predicate.ToExpression()); } #endregion diff --git a/ZR.Service/System/SysOperLogService.cs b/ZR.Service/System/SysOperLogService.cs index cefb0ff5..53cff44b 100644 --- a/ZR.Service/System/SysOperLogService.cs +++ b/ZR.Service/System/SysOperLogService.cs @@ -1,9 +1,10 @@ using Infrastructure; using Infrastructure.Attribute; +using Infrastructure.Extensions; +using SqlSugar; using ZR.Model; using ZR.Model.System; using ZR.Model.System.Dto; -using ZR.Repository.System; using ZR.Service.System.IService; namespace ZR.Service.System @@ -14,13 +15,6 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(ISysOperLogService), ServiceLifetime = LifeTime.Transient)] public class SysOperLogService : BaseService, ISysOperLogService { - public SysOperLogRepository sysOperLogRepository; - - public SysOperLogService(SysOperLogRepository sysOperLog) - { - sysOperLogRepository = sysOperLog; - } - /// /// 新增操作日志操作 /// @@ -31,28 +25,34 @@ namespace ZR.Service.System { operLog.OperParam = operLog.OperParam[..1000]; } - sysOperLogRepository.AddSysOperLog(operLog); + //sysOperLogRepository.AddSysOperLog(operLog); + Insert(operLog); } /// /// 查询系统操作日志集合 /// - /// 操作日志对象 + /// 操作日志对象 /// /// 操作日志集合 - public PagedInfo SelectOperLogList(SysOperLogDto operLog, PagerInfo pager) + public PagedInfo SelectOperLogList(SysOperLogDto sysOper, PagerInfo pager) { - operLog.BeginTime = DateTimeHelper.GetBeginTime(operLog.BeginTime, -1); - operLog.EndTime = DateTimeHelper.GetBeginTime(operLog.EndTime, 1); + sysOper.BeginTime = DateTimeHelper.GetBeginTime(sysOper.BeginTime, -1); + sysOper.EndTime = DateTimeHelper.GetBeginTime(sysOper.EndTime, 1); bool isDemoMode = AppSettings.GetAppConfig("DemoMode", false); if (isDemoMode) { return new PagedInfo(); } - var list = sysOperLogRepository.GetSysOperLog(operLog, pager); + var exp = Expressionable.Create(); + exp.And(it => it.OperTime >= sysOper.BeginTime && it.OperTime <= sysOper.EndTime); + exp.AndIF(sysOper.Title.IfNotEmpty(), it => it.Title.Contains(sysOper.Title)); + exp.AndIF(sysOper.operName.IfNotEmpty(), it => it.OperName.Contains(sysOper.operName)); + exp.AndIF(sysOper.BusinessType != -1, it => it.BusinessType == sysOper.BusinessType); + exp.AndIF(sysOper.Status != -1, it => it.Status == sysOper.Status); - return list; + return GetPages(exp.ToExpression(), pager, x => x.OperId, OrderByType.Desc); } /// @@ -60,7 +60,7 @@ namespace ZR.Service.System /// public void CleanOperLog() { - sysOperLogRepository.ClearOperLog(); + Truncate(); } /// @@ -70,7 +70,7 @@ namespace ZR.Service.System /// 结果 public int DeleteOperLogByIds(long[] operIds) { - return sysOperLogRepository.DeleteOperLogByIds(operIds); + return Context.Deleteable().In(operIds).ExecuteCommand(); } /// @@ -80,7 +80,7 @@ namespace ZR.Service.System /// 操作日志对象 public SysOperLog SelectOperLogById(long operId) { - return sysOperLogRepository.SelectOperLogById(operId); + return GetById(operId); } } } diff --git a/ZR.Service/System/SysPostService.cs b/ZR.Service/System/SysPostService.cs index a0abc0e7..245519d2 100644 --- a/ZR.Service/System/SysPostService.cs +++ b/ZR.Service/System/SysPostService.cs @@ -1,10 +1,6 @@ using Infrastructure.Attribute; -using System; using System.Collections.Generic; -using System.Text; using ZR.Model.System; -using ZR.Repository; -using ZR.Repository.System; using ZR.Service.System.IService; namespace ZR.Service.System @@ -15,12 +11,6 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(ISysPostService), ServiceLifetime = LifeTime.Transient)] public class SysPostService : BaseService, ISysPostService { - public SysPostRepository PostRepository; - public SysPostService(SysPostRepository postRepository) - { - PostRepository = postRepository; - } - /// /// 校验岗位编码是否唯一 /// @@ -28,7 +18,7 @@ namespace ZR.Service.System /// public string CheckPostCodeUnique(SysPost post) { - SysPost info = PostRepository.GetFirst(it => it.PostCode.Equals(post.PostCode)); + SysPost info = GetFirst(it => it.PostCode.Equals(post.PostCode)); if (info != null && info.PostId != post.PostId) { return UserConstants.NOT_UNIQUE; @@ -43,7 +33,7 @@ namespace ZR.Service.System /// public string CheckPostNameUnique(SysPost post) { - SysPost info = PostRepository.GetFirst(it => it.PostName.Equals(post.PostName)); + SysPost info = GetFirst(it => it.PostName.Equals(post.PostName)); if (info != null && info.PostId != post.PostId) { return UserConstants.NOT_UNIQUE; @@ -53,7 +43,7 @@ namespace ZR.Service.System public List GetAll() { - return PostRepository.GetAll(); + return GetAll(false); } } } diff --git a/ZR.Service/System/SysRoleService.cs b/ZR.Service/System/SysRoleService.cs index 74b705c6..17b54566 100644 --- a/ZR.Service/System/SysRoleService.cs +++ b/ZR.Service/System/SysRoleService.cs @@ -47,7 +47,6 @@ namespace ZR.Service /// /// 查询所有角色 /// - /// /// public List SelectRoleAll() { diff --git a/ZR.Service/System/SysUserPostService.cs b/ZR.Service/System/SysUserPostService.cs index f7c9ac81..97859448 100644 --- a/ZR.Service/System/SysUserPostService.cs +++ b/ZR.Service/System/SysUserPostService.cs @@ -1,10 +1,8 @@ using Infrastructure.Attribute; -using System; +using SqlSugar; using System.Collections.Generic; using System.Linq; -using System.Text; using ZR.Model.System; -using ZR.Repository.System; using ZR.Service.System.IService; namespace ZR.Service.System @@ -13,14 +11,8 @@ namespace ZR.Service.System /// 用户岗位 /// [AppService(ServiceType = typeof(ISysUserPostService), ServiceLifetime = LifeTime.Transient)] - public class SysUserPostService : ISysUserPostService + public class SysUserPostService : BaseService, ISysUserPostService { - private SysUserPostRepository UserPostRepository; - public SysUserPostService(SysUserPostRepository userPostRepository) - { - UserPostRepository = userPostRepository; - } - /// /// 新增用户岗位信息 /// @@ -33,7 +25,7 @@ namespace ZR.Service.System { list.Add(new SysUserPost() { PostId = item, UserId = user.UserId }); } - UserPostRepository.Insert(list); + Insert(list); } @@ -44,7 +36,7 @@ namespace ZR.Service.System /// public List GetUserPostsByUserId(long userId) { - var list = UserPostRepository.GetList(f => f.UserId == userId); + var list = GetList(f => f.UserId == userId); return list.Select(x => x.PostId).ToList(); } @@ -55,13 +47,26 @@ namespace ZR.Service.System /// public string GetPostsStrByUserId(long userId) { - var list = UserPostRepository.SelectPostsByUserId(userId); + var list = SelectPostsByUserId(userId); return string.Join(',', list.Select(x => x.PostName)); } public bool Delete(long userId) { - return UserPostRepository.Delete(x => x.UserId == userId); + return Delete(x => x.UserId == userId); + } + + /// + /// 获取用户岗位 + /// + /// + /// + public List SelectPostsByUserId(long userId) + { + return Context.Queryable((p, up) => new JoinQueryInfos( + JoinType.Left, up.PostId == p.PostId + )).Where((p, up) => up.UserId == userId) + .Select().ToList(); } } } diff --git a/ZR.Service/System/SysUserRoleService.cs b/ZR.Service/System/SysUserRoleService.cs index 0b9d993c..167a6317 100644 --- a/ZR.Service/System/SysUserRoleService.cs +++ b/ZR.Service/System/SysUserRoleService.cs @@ -1,10 +1,8 @@ using Infrastructure.Attribute; -using System; using System.Collections.Generic; -using System.Text; using ZR.Model; -using ZR.Model.System.Dto; using ZR.Model.System; +using ZR.Model.System.Dto; using ZR.Repository.System; using ZR.Service.System.IService; @@ -14,7 +12,7 @@ namespace ZR.Service.System /// 用户角色 /// [AppService(ServiceType = typeof(ISysUserRoleService), ServiceLifetime = LifeTime.Transient)] - public class SysUserRoleService : ISysUserRoleService + public class SysUserRoleService : BaseService, ISysUserRoleService { public SysUserRoleRepository SysUserRoleRepository; @@ -23,7 +21,6 @@ namespace ZR.Service.System SysUserRoleRepository = sysUserRoleRepository; } - /// /// 通过角色ID查询角色使用数量 /// @@ -31,7 +28,7 @@ namespace ZR.Service.System /// public int CountUserRoleByRoleId(long roleId) { - return SysUserRoleRepository.CountUserRoleByRoleId(roleId); + return Count(it => it.RoleId == roleId); } /// @@ -41,7 +38,7 @@ namespace ZR.Service.System /// public int DeleteUserRoleByUserId(int userId) { - return SysUserRoleRepository.DeleteUserRoleByUserId(userId); + return Deleteable().Where(it => it.UserId == userId).ExecuteCommand(); } /// @@ -58,11 +55,11 @@ namespace ZR.Service.System /// /// 添加用户角色 /// - /// + /// /// - public int AddUserRole(List sysUsers) + public int AddUserRole(List sysUserRoles) { - return SysUserRoleRepository.AddUserRole(sysUsers); + return Insert(sysUserRoles); } /// @@ -102,7 +99,7 @@ namespace ZR.Service.System /// public int InsertUserRole(SysUser user) { - List userRoles = new List(); + List userRoles = new(); foreach (var item in user.RoleIds) { userRoles.Add(new SysUserRole() { RoleId = item, UserId = user.UserId }); @@ -114,8 +111,7 @@ namespace ZR.Service.System /// /// 新增加角色用户 /// - /// 角色id - /// 用户ids + /// /// public int InsertRoleUser(RoleUsersCreateDto roleUsersCreateDto) { -- Gitee From 4f6b294a33fb7780a1cb6e390d76b46d323ab4cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 22 Sep 2022 09:57:32 +0800 Subject: [PATCH 022/122] =?UTF-8?q?fix=EF=BC=9Aservice=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=A8=A1=E6=9D=BF=E7=BC=BA=E5=B0=91=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt index 6d7e9194..57f9bfb2 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt @@ -1,4 +1,5 @@ -using SqlSugar; +using System; +using SqlSugar; using Infrastructure.Attribute; using ${options.ModelsNamespace}; using ${options.ModelsNamespace}.Dto; -- Gitee From 94a74db4aa1ccc5a82d13571ba20898abab15c37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 22 Sep 2022 15:08:14 +0800 Subject: [PATCH 023/122] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E6=94=B9=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E6=95=B0=E6=8D=AE=E8=AF=AD=E6=B3=95=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Service/System/SysDictDataService.cs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/ZR.Service/System/SysDictDataService.cs b/ZR.Service/System/SysDictDataService.cs index 06e003f6..41056329 100644 --- a/ZR.Service/System/SysDictDataService.cs +++ b/ZR.Service/System/SysDictDataService.cs @@ -94,19 +94,18 @@ namespace ZR.Service.System /// public long UpdateDictData(SysDictData dict) { - var result = Updateable(dict) - .SetColumns(t => new SysDictData() - { - Remark = dict.Remark, - Update_time = DateTime.Now, - DictSort = dict.DictSort, - DictLabel = dict.DictLabel, - DictValue = dict.DictValue, - Status = dict.Status, - CssClass = dict.CssClass, - ListClass = dict.ListClass - }) - .Where(f => f.DictCode == dict.DictCode).ExecuteCommand(); + var result = Update(w => w.DictCode == dict.DictCode, it => new SysDictData() + { + Remark = dict.Remark, + Update_time = DateTime.Now, + DictSort = dict.DictSort, + DictLabel = dict.DictLabel, + DictValue = dict.DictValue, + Status = dict.Status, + CssClass = dict.CssClass, + ListClass = dict.ListClass + }); + CacheHelper.Remove($"SelectDictDataByCode_{dict.DictCode}"); return result; } -- Gitee From 5830783370ce0dca09b811af6a97226dffc6d778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 23 Sep 2022 09:53:23 +0800 Subject: [PATCH 024/122] =?UTF-8?q?feat=EF=BC=9A=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=A8=A1=E6=9D=BF=E6=96=B0=E5=A2=9E=E6=B8=85?= =?UTF-8?q?=E7=A9=BA=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 1 + .../CodeGenTemplate/TplControllers.txt | 20 +++++++++++ .../wwwroot/CodeGenTemplate/TplIService.txt | 2 ++ .../wwwroot/CodeGenTemplate/TplService.txt | 9 +++++ .../wwwroot/CodeGenTemplate/TplVueApi.txt | 8 +++++ .../wwwroot/CodeGenTemplate/v3/Vue.txt | 34 +++++++++++++++++-- ZR.CodeGenerator/CodeGeneratorTool.cs | 3 +- ZR.CodeGenerator/Model/ReplaceDto.cs | 1 + 8 files changed, 75 insertions(+), 3 deletions(-) diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 99b016fb..0fdd1244 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -65,6 +65,7 @@ + diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt index 51d59833..1dc2dfe3 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt @@ -157,6 +157,26 @@ $if(replaceDto.ShowBtnExport) } $end +$if(replaceDto.ShowBtnTruncate) + /// + /// 清空${genTable.FunctionName} + /// + /// + [Log(Title = "${genTable.FunctionName}", BusinessType = BusinessType.CLEAN)] + [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:delete")] + [HttpDelete("clean")] + public ApiResult Clear() + { + if (!HttpContextExtension.IsAdmin(HttpContext)) + { + return ApiResult.Error("操作失败"); + } + _${replaceDto.ModelTypeName}Service.Truncate${replaceDto.ModelTypeName}(); + + return ToJson(1); + } +$end + $if(showCustomInput) /// /// 保存排序 diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt index f30aecd2..aebe0330 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt @@ -22,5 +22,7 @@ $end int Add${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} parm); int Update${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} parm); + + void Truncate${replaceDto.ModelTypeName}(); } } diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt index 57f9bfb2..cb16edfd 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt @@ -119,6 +119,15 @@ ${end} }); return response; } + + /// + /// 清空${genTable.FunctionName} + /// + /// + public void Truncate${replaceDto.ModelTypeName}() + { + Truncate(); + } #endregion } } \ No newline at end of file diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt index 48d25b92..be58e835 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt @@ -72,6 +72,14 @@ export function del${genTable.BusinessName}(pid) { }) } +// 清空${genTable.functionName} +export function clear${genTable.BusinessName}() { + return request({ + url: '${genTable.ModuleName}/${genTable.BusinessName}/clean', + method: 'delete' + }) +} + // 导出${genTable.functionName} export function export${genTable.BusinessName}(query) { return request({ diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt index 6538eee1..a910a5e0 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt @@ -84,6 +84,13 @@ $if(replaceDto.ShowBtnDelete) $end +$if(replaceDto.ShowBtnTruncate) + + + 清空 + + +$end $if(replaceDto.ShowBtnExport) @@ -270,9 +277,12 @@ $end - - -- Gitee From 4bdc497d27ba39357bc63019884f2ca4bea8045c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 20 Oct 2022 16:08:53 +0800 Subject: [PATCH 038/122] add commonLang/index.vue --- ZR.Vue/src/views/system/commonLang/index.vue | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ZR.Vue/src/views/system/commonLang/index.vue diff --git a/ZR.Vue/src/views/system/commonLang/index.vue b/ZR.Vue/src/views/system/commonLang/index.vue new file mode 100644 index 00000000..666b58f5 --- /dev/null +++ b/ZR.Vue/src/views/system/commonLang/index.vue @@ -0,0 +1,6 @@ + -- Gitee From 79dccdb347a0ebb0dc4625103c537ebca641352a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 20 Oct 2022 18:02:07 +0800 Subject: [PATCH 039/122] update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a9c3c93c..51714287 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Vue版前端技术栈 :基于vue2.x/vue3.x、vuex、vue-router 、vue-cli 、a 11. 在线构建器:拖动表单元素生成相应的 VUE 代码(仅支持vue2)。 12. 任务系统:基于 Quartz.NET,可以在线(添加、修改、删除、手动执行)任务调度包含执行结果日志。 13. 文章管理:可以写文章记录。 -14. 代码生成:可以一键生成前后端代码(.cs、.vue、.js、sql等)支持下载,自定义配置前端展示控件、让开发更快捷高效。 +14. 代码生成:可以一键生成前后端代码(.cs、.vue、.js、.sql等)支持下载,自定义配置前端展示控件、让开发更快捷高效(史上最强)。 15. 参数管理:对系统动态配置常用参数。 16. 发送邮件:可以对多个用户进行发送邮件。 17. 文件管理:可以进行上传文件管理,目前支持上传到本地、阿里云。 @@ -146,6 +146,7 @@ Vue版前端技术栈 :基于vue2.x/vue3.x、vuex、vue-router 、vue-cli 、a - 👉Ruoyi.vue:[Ruoyi](http://www.ruoyi.vip/) - 👉SqlSugar:[SqlSugar](https://gitee.com/dotnetchina/SqlSugar) - 👉vue-element-admin:[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) +- 👉Meiam.System:[Meiam.System](https://github.com/91270/Meiam.System) ## 🎀捐赠 如果你觉得这个项目帮助到了你,你可以请作者喝杯咖啡表示鼓励 ☕️ -- Gitee From 63eb99b787e7811b11e76e986b3df67cf1eeaa36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 20 Oct 2022 18:04:25 +0800 Subject: [PATCH 040/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B8=B8=E9=87=8F?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Extensions/DbExtension.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZR.Admin.WebApi/Extensions/DbExtension.cs b/ZR.Admin.WebApi/Extensions/DbExtension.cs index 8c1eeaf6..5a752563 100644 --- a/ZR.Admin.WebApi/Extensions/DbExtension.cs +++ b/ZR.Admin.WebApi/Extensions/DbExtension.cs @@ -97,7 +97,7 @@ namespace ZR.Admin.WebApi.Extensions var user = JwtUtil.GetLoginUser(App.HttpContext); if (user == null) return; //管理员不过滤 - if (user.RoleIds.Any(f => f.Equals("admin"))) return; + if (user.RoleIds.Any(f => f.Equals(GlobalConstant.AdminRole))) return; var db = DbScoped.SugarScope.GetConnectionScope(configId); foreach (var role in user.Roles.OrderBy(f => f.DataScope)) { -- Gitee From 518e9374b8c7dfdde68de68b9fd3b81b031caa9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 20 Oct 2022 18:05:48 +0800 Subject: [PATCH 041/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=93=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/System/SysMenuController.cs | 10 +- ZR.Repository/BaseRepository.cs | 18 +- ZR.Repository/System/SysMenuRepository.cs | 204 ----------------- ZR.Repository/System/SysRoleRepository.cs | 211 ------------------ ZR.Repository/System/SysUserRepository.cs | 189 ---------------- ZR.Repository/System/SysUserRoleRepository.cs | 72 ------ ZR.Repository/ZR.Repository.csproj | 1 + ZR.Service/System/ArticleService.cs | 2 - ZR.Service/System/IService/ISysMenuService.cs | 43 +++- ZR.Service/System/IService/ISysRoleService.cs | 2 + ZR.Service/System/IService/ISysUserService.cs | 4 + ZR.Service/System/SysDeptService.cs | 1 - ZR.Service/System/SysLoginService.cs | 11 +- ZR.Service/System/SysMenuService.cs | 151 +++++++++---- ZR.Service/System/SysRoleService.cs | 100 ++++++--- ZR.Service/System/SysUserRoleService.cs | 43 +++- ZR.Service/System/SysUserService.cs | 99 ++++++-- 17 files changed, 372 insertions(+), 789 deletions(-) delete mode 100644 ZR.Repository/System/SysMenuRepository.cs delete mode 100644 ZR.Repository/System/SysRoleRepository.cs delete mode 100644 ZR.Repository/System/SysUserRepository.cs delete mode 100644 ZR.Repository/System/SysUserRoleRepository.cs diff --git a/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs b/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs index 13fa1746..48f8063d 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs @@ -21,13 +21,16 @@ namespace ZR.Admin.WebApi.Controllers.System { private readonly ISysRoleService sysRoleService; private readonly ISysMenuService sysMenuService; + private readonly ISysRoleMenuService sysRoleMenuService; public SysMenuController( ISysRoleService sysRoleService, - ISysMenuService sysMenuService) + ISysMenuService sysMenuService, + ISysRoleMenuService sysRoleMenuService) { this.sysRoleService = sysRoleService; this.sysMenuService = sysMenuService; + this.sysRoleMenuService = sysRoleMenuService; } /// @@ -63,7 +66,8 @@ namespace ZR.Admin.WebApi.Controllers.System [ActionPermissionFilter(Permission = "system:menu:query")] public IActionResult GetMenuList(int menuId = 0) { - return SUCCESS(sysMenuService.GetMenusByMenuId(menuId), "yyyy-MM-dd HH:mm:ss"); + long userId = HttpContext.GetUId(); + return SUCCESS(sysMenuService.GetMenusByMenuId(menuId, userId), "yyyy-MM-dd HH:mm:ss"); } /// @@ -166,7 +170,7 @@ namespace ZR.Admin.WebApi.Controllers.System { return ToResponse(ResultCode.CUSTOM_ERROR, "存在子菜单,不允许删除"); } - if (sysMenuService.CheckMenuExistRole(menuId)) + if (sysRoleMenuService.CheckMenuExistRole(menuId)) { return ToResponse(ResultCode.CUSTOM_ERROR, "菜单已分配,不允许删除"); } diff --git a/ZR.Repository/BaseRepository.cs b/ZR.Repository/BaseRepository.cs index 84ca0f72..13decfa2 100644 --- a/ZR.Repository/BaseRepository.cs +++ b/ZR.Repository/BaseRepository.cs @@ -63,18 +63,34 @@ namespace ZR.Repository { return Context.Updateable(entity); } + + /// + /// 实体根据主键更新 + /// + /// + /// + /// public int Update(T entity, bool ignoreNullColumns = false) { return Context.Updateable(entity).IgnoreColumns(ignoreNullColumns).ExecuteCommand(); } + /// + /// 实体根据主键更新指定字段 + /// return Update(user, t => new { t.NickName, }, true); + /// + /// + /// + /// + /// public int Update(T entity, Expression> expression, bool ignoreAllNull = false) { return Context.Updateable(entity).UpdateColumns(expression).IgnoreColumns(ignoreAllNull).ExecuteCommand(); } /// - /// 根据实体类更新指定列 eg:Update(dept, it => new { it.Status }, f => depts.Contains(f.DeptId));只更新Status列,条件是包含 + /// 根据指定条件更新指定列 eg:Update(new SysUser(){ }, it => new { it.Status }, f => f.Userid == 1)); + /// 只更新Status列,条件是包含 /// /// /// diff --git a/ZR.Repository/System/SysMenuRepository.cs b/ZR.Repository/System/SysMenuRepository.cs deleted file mode 100644 index 5134dc5b..00000000 --- a/ZR.Repository/System/SysMenuRepository.cs +++ /dev/null @@ -1,204 +0,0 @@ -using Infrastructure.Attribute; -using SqlSugar; -using System; -using System.Collections.Generic; -using System.Linq; -using ZR.Model.System.Dto; -using ZR.Model.System; - -namespace ZR.Repository.System -{ - /// - /// 系统菜单 - /// - [AppService(ServiceLifetime = LifeTime.Transient)] - public class SysMenuRepository : BaseRepository - { - /// - /// 获取所有菜单(菜单管理) - /// - /// - public List SelectTreeMenuList(MenuQueryDto menu) - { - int parentId = 0; - if (menu.ParentId != null) - { - parentId = (int)menu.ParentId; - } - var list = Queryable() - .WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName)) - .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.Visible == menu.Visible) - .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.Status == menu.Status) - .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), it => menu.MenuTypeIdArr.Contains(it.MenuType)) - .WhereIF(menu.ParentId != null, it => it.ParentId == menu.ParentId) - .OrderBy(it => new { it.ParentId, it.OrderNum }) - .ToTree(it => it.Children, it => it.ParentId, parentId); - - return list; - } - - /// - /// 根据用户查询系统菜单列表 - /// - /// - /// 用户角色集合 - /// - public List SelectTreeMenuListByRoles(MenuQueryDto menu, List roles) - { - var roleMenus = Context.Queryable() - .Where(r => roles.Contains(r.Role_id)) - .Select(f => f.Menu_id).Distinct().ToList(); - - return Queryable() - .Where(c => roleMenus.Contains(c.MenuId)) - .WhereIF(!string.IsNullOrEmpty(menu.MenuName), (c) => c.MenuName.Contains(menu.MenuName)) - .WhereIF(!string.IsNullOrEmpty(menu.Visible), (c) => c.Visible == menu.Visible) - .WhereIF(!string.IsNullOrEmpty(menu.Status), (c) => c.Status == menu.Status) - .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), c => menu.MenuTypeIdArr.Contains(c.MenuType)) - .OrderBy((c) => new { c.ParentId, c.OrderNum }) - .Select(c => c) - .ToTree(it => it.Children, it => it.ParentId, 0); - } - - /// - /// 获取所有菜单 - /// - /// - public List SelectMenuList(MenuQueryDto menu) - { - return Queryable() - .WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName)) - .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.Visible == menu.Visible) - .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.Status == menu.Status) - .WhereIF(menu.ParentId != null, it => it.ParentId == menu.ParentId) - .OrderBy(it => new { it.ParentId, it.OrderNum }) - .ToList(); - } - - /// - /// 根据用户查询系统菜单列表 - /// - /// - /// 用户角色集合 - /// - public List SelectMenuListByRoles(MenuQueryDto sysMenu, List roles) - { - var roleMenus = Context.Queryable() - .Where(r => roles.Contains(r.Role_id)); - - return Queryable() - .InnerJoin(roleMenus, (c, j) => c.MenuId == j.Menu_id) - .Where((c, j) => c.Status == "0") - .WhereIF(!string.IsNullOrEmpty(sysMenu.MenuName), (c, j) => c.MenuName.Contains(sysMenu.MenuName)) - .WhereIF(!string.IsNullOrEmpty(sysMenu.Visible), (c, j) => c.Visible == sysMenu.Visible) - .OrderBy((c, j) => new { c.ParentId, c.OrderNum }) - .Select(c => c) - .ToList(); - } - - /// - /// 获取菜单详情 - /// - /// - /// - public SysMenu SelectMenuById(int menuId) - { - return GetFirst(it => it.MenuId == menuId); - } - - /// - /// 添加菜单 - /// - /// - /// - public int AddMenu(SysMenu menu) - { - menu.Create_time = DateTime.Now; - menu.MenuId = InsertReturnIdentity(menu); - return 1; - } - - /// - /// 编辑菜单 - /// - /// - /// - public int EditMenu(SysMenu menu) - { - return Update(menu, false); - } - - /// - /// 删除菜单 - /// - /// - /// - public int DeleteMenuById(int menuId) - { - return Delete(menuId); - } - - /// - /// 菜单排序 - /// - /// 菜单Dto - /// - public int ChangeSortMenu(MenuDto menuDto) - { - var result = Context.Updateable(new SysMenu() { MenuId = menuDto.MenuId, OrderNum = menuDto.OrderNum }) - .UpdateColumns(it => new { it.OrderNum }).ExecuteCommand(); - return result; - } - - /// - /// 查询菜单权限 - /// - /// - /// - public List SelectMenuPermsByUserId(long userId) - { - return Context.Queryable((m, rm, ur, r) => new JoinQueryInfos( - JoinType.Left, m.MenuId == rm.Menu_id, - JoinType.Left, rm.Role_id == ur.RoleId, - JoinType.Left, ur.RoleId == r.RoleId - )) - //.Distinct() - .Where((m, rm, ur, r) => m.Status == "0" && r.Status == "0" && ur.UserId == userId) - .Select((m, rm, ur, r) => m).ToList(); - } - - /// - /// 校验菜单名称是否唯一 - /// - /// - /// - public SysMenu CheckMenuNameUnique(SysMenu menu) - { - return GetFirst(it => it.MenuName == menu.MenuName && it.ParentId == menu.ParentId); - } - - /// - /// 是否存在菜单子节点 - /// - /// - /// - public int HasChildByMenuId(long menuId) - { - return Count(it => it.ParentId == menuId); - } - - #region RoleMenu - - /// - /// 查询菜单使用数量 - /// - /// - /// - public int CheckMenuExistRole(long menuId) - { - return Context.Queryable().Where(it => it.Menu_id == menuId).Count(); - } - - #endregion - } -} diff --git a/ZR.Repository/System/SysRoleRepository.cs b/ZR.Repository/System/SysRoleRepository.cs deleted file mode 100644 index 8d06189e..00000000 --- a/ZR.Repository/System/SysRoleRepository.cs +++ /dev/null @@ -1,211 +0,0 @@ -using Infrastructure.Attribute; -using Infrastructure.Model; -using SqlSugar; -using System; -using System.Collections.Generic; -using System.Linq; -using ZR.Model; -using ZR.Model.System; - -namespace ZR.Repository.System -{ - /// - /// 角色操作类 - /// - [AppService(ServiceLifetime = LifeTime.Transient)] - public class SysRoleRepository : BaseRepository - { - /// - /// 查询所有角色数据 - /// - /// - public List SelectRoleList() - { - return Context.Queryable() - .Where(role => role.DelFlag == "0") - .OrderBy(role => role.RoleSort) - .ToList(); - } - /// - /// 根据条件分页查询角色数据 - /// - /// - /// - /// - public PagedInfo SelectRoleList(SysRole sysRole, PagerInfo pager) - { - var exp = Expressionable.Create(); - exp.And(role => role.DelFlag == "0"); - exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleName), role => role.RoleName.Contains(sysRole.RoleName)); - exp.AndIF(!string.IsNullOrEmpty(sysRole.Status), role => role.Status == sysRole.Status); - exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleKey), role => role.RoleKey == sysRole.RoleKey); - - var query = Context.Queryable() - .Where(exp.ToExpression()) - .OrderBy(x => x.RoleSort) - .Select((role) => new SysRole - { - RoleId = role.RoleId.SelectAll(), - UserNum = SqlFunc.Subqueryable().Where(f => f.RoleId == role.RoleId).Count() - }); - - return query.ToPage(pager); - } - - /// - /// 根据用户查询 - /// - /// - /// - public List SelectRolePermissionByUserId(long userId) - { - return Context.Queryable() - .Where(role => role.DelFlag == "0") - .Where(it => SqlFunc.Subqueryable().Where(s => s.UserId == userId).Any()) - .OrderBy(role => role.RoleSort) - .ToList(); - } - - /// - /// 通过角色ID查询角色 - /// - /// 角色编号 - /// - public SysRole SelectRoleById(long roleId) - { - return GetId(roleId); - } - - /// - /// 通过角色ID删除角色 - /// - /// - /// - public int DeleteRoleByRoleIds(long[] roleId) - { - return Delete(roleId); - } - - /// - /// 获取用户所有角色信息 - /// - /// - /// - public List SelectUserRoleListByUserId(long userId) - { - return Context.Queryable((ur, r) => new JoinQueryInfos( - JoinType.Left, ur.RoleId == r.RoleId - )).Where((ur, r) => ur.UserId == userId) - .Select((ur, r) => r).ToList(); - } - - #region 用户角色对应菜单 用户N-1角色 - - /// - /// 根据角色获取菜单id - /// - /// - /// - public List SelectRoleMenuByRoleId(long roleId) - { - return Context.Queryable().Where(it => it.Role_id == roleId).ToList(); - } - - /// - /// 根据用户所有角色获取菜单 - /// - /// - /// - public List SelectRoleMenuByRoleIds(long[] roleIds) - { - return Context.Queryable().Where(it => roleIds.Contains(it.Role_id)).ToList(); - } - - /// - /// 批量插入用户菜单 - /// - /// - /// - public int AddRoleMenu(List sysRoleMenus) - { - return Context.Insertable(sysRoleMenus).ExecuteCommand(); - } - - /// - /// 删除角色与菜单关联 - /// - /// - /// - public int DeleteRoleMenuByRoleId(long roleId) - { - return Context.Deleteable().Where(it => it.Role_id == roleId).ExecuteCommand(); - } - - #endregion - - /// - /// 添加角色 - /// - /// - /// - public long InsertRole(SysRole sysRole) - { - sysRole.Create_time = DateTime.Now; - return InsertReturnBigIdentity(sysRole); - } - - /// - /// 修改用户角色 - /// - /// - /// - public int UpdateSysRole(SysRole sysRole) - { - var db = Context; - sysRole.Update_time = db.GetDate(); - - return db.Updateable() - .SetColumns(it => it.Update_time == sysRole.Update_time) - .SetColumns(it => it.DataScope == sysRole.DataScope) - .SetColumns(it => it.Remark == sysRole.Remark) - .SetColumns(it => it.Update_by == sysRole.Update_by) - //.SetColumns(it => it.MenuCheckStrictly == sysRole.MenuCheckStrictly) - .SetColumns(it => it.DeptCheckStrictly == sysRole.DeptCheckStrictly) - .SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleName), it => it.RoleName == sysRole.RoleName) - .SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleKey), it => it.RoleKey == sysRole.RoleKey) - .SetColumnsIF(sysRole.RoleSort >= 0, it => it.RoleSort == sysRole.RoleSort) - .Where(it => it.RoleId == sysRole.RoleId) - .ExecuteCommand(); - } - - /// - /// 更改角色权限状态 - /// - /// - /// - public int UpdateRoleStatus(SysRole role) - { - return Context.Updateable(role).UpdateColumns(t => new { t.Status }).ExecuteCommand(); - } - - /// - /// 检查角色权限是否存在 - /// - /// 角色权限 - /// - public SysRole CheckRoleKeyUnique(string roleKey) - { - return GetFirst(it => it.RoleKey == roleKey); - } - - /// - /// 校验角色名称是否唯一 - /// - /// 角色名称 - /// - public SysRole CheckRoleNameUnique(string roleName) - { - return GetFirst(it => it.RoleName == roleName); - } - } -} diff --git a/ZR.Repository/System/SysUserRepository.cs b/ZR.Repository/System/SysUserRepository.cs deleted file mode 100644 index f7b89170..00000000 --- a/ZR.Repository/System/SysUserRepository.cs +++ /dev/null @@ -1,189 +0,0 @@ -using Infrastructure.Attribute; -using Infrastructure.Extensions; -using SqlSugar; -using System; -using System.Collections.Generic; -using System.Linq; -using ZR.Model; -using ZR.Model.System; -using ZR.Model.System.Dto; - -namespace ZR.Repository.System -{ - /// - /// 用户管理 - /// - [AppService(ServiceLifetime = LifeTime.Transient)] - public class SysUserRepository : BaseRepository - { - /// - /// 根据条件分页查询用户列表 - /// - /// - /// - /// - public PagedInfo SelectUserList(SysUser user, PagerInfo pager) - { - var exp = Expressionable.Create(); - exp.AndIF(!string.IsNullOrEmpty(user.UserName), u => u.UserName.Contains(user.UserName)); - exp.AndIF(!string.IsNullOrEmpty(user.Status), u => u.Status == user.Status); - exp.AndIF(user.BeginTime != DateTime.MinValue && user.BeginTime != null, u => u.Create_time >= user.BeginTime); - exp.AndIF(user.EndTime != DateTime.MinValue && user.EndTime != null, u => u.Create_time <= user.EndTime); - exp.AndIF(!user.Phonenumber.IsEmpty(), u => u.Phonenumber == user.Phonenumber); - exp.And(u => u.DelFlag == "0"); - - if (user.DeptId != 0) - { - List depts = Context.Queryable().ToList(); - - var newDepts = depts.FindAll(delegate (SysDept dept) - { - string[] parentDeptId = dept.Ancestors.Split(",", StringSplitOptions.RemoveEmptyEntries); - return parentDeptId.Contains(user.DeptId.ToString()); - }); - string[] deptArr = newDepts.Select(x => x.DeptId.ToString()).ToArray(); - exp.AndIF(user.DeptId != 0, u => u.DeptId == user.DeptId || deptArr.Contains(u.DeptId.ToString())); - } - var query = Context.Queryable() - .LeftJoin((u, dept) => u.DeptId == dept.DeptId) - .Where(exp.ToExpression()) - .Select((u, dept) => new SysUser - { - UserId = u.UserId.SelectAll(), - DeptName = dept.DeptName, - }); - - return query.ToPage(pager); - } - - /// - /// 通过用户ID查询用户 - /// - /// - /// - public SysUser SelectUserById(long userId) - { - return Context.Queryable().Filter(null, true).Where(f => f.UserId == userId).First(); - } - - /// - /// 校验用户名是否存在 - /// - /// - /// - public int CheckUserNameUnique(string userName) - { - return Context.Queryable().Where(it => it.UserName == userName).Count(); - } - - /// - /// 添加用户 - /// - /// - /// - public int AddUser(SysUser sysUser) - { - sysUser.Create_time = DateTime.Now; - return Context.Insertable(sysUser).ExecuteReturnIdentity(); - } - - /// - /// 重置密码 - /// - /// - /// - /// - public int ResetPwd(long userid, string password) - { - return Context.Updateable(new SysUser() { UserId = userid, Password = password }) - .UpdateColumns(it => new { it.Password }).ExecuteCommand(); - } - - /// - /// 改变用户状态 - /// - /// - /// - public int ChangeUserStatus(SysUser user) - { - return Context.Updateable(user).UpdateColumns(t => new { t.Status }) - .ExecuteCommand(); - } - - /// - /// 删除用户(软删除) - /// - /// 用户id - /// - public int DeleteUser(long userid) - { - return Context.Updateable(new SysUser() { UserId = userid, DelFlag = "2" }) - .UpdateColumns(t => t.DelFlag) - .ExecuteCommand(); - } - - /// - /// 修改用户信息 - /// - /// - /// - public int UpdateUser(SysUser user) - { - return Context.Updateable(user) - .UpdateColumns(t => new - { - t.NickName, - t.Email, - t.Phonenumber, - t.DeptId, - t.Status, - t.Sex, - t.PostIds, - t.Remark, - t.Update_by, - t.Update_time - }) - .IgnoreColumns(ignoreAllNullColumns: true)//忽略所有为null - .Where(f => f.UserId == user.UserId).ExecuteCommand(); - } - - /// - /// 修改用户头像 - /// - /// - /// - public int UpdatePhoto(SysUser user) - { - return Context.Updateable() - .SetColumns(t => new SysUser() - { - Avatar = user.Avatar - }) - .Where(f => f.UserId == user.UserId).ExecuteCommand(); - } - - /// - /// 登录 - /// - /// 登录实体 - /// - public SysUser Login(LoginBodyDto user) - { - return GetFirst(it => it.UserName == user.Username && it.Password == user.Password); - } - - /// - /// 修改登录信息 - /// - /// - /// - /// - public void UpdateLoginInfo(LoginBodyDto user, long userId) - { - var db = Context; - db.Updateable(new SysUser() { LoginIP = user.LoginIP, LoginDate = db.GetDate(), UserId = userId }) - .UpdateColumns(it => new { it.LoginIP, it.LoginDate }) - .ExecuteCommand(); - } - } -} diff --git a/ZR.Repository/System/SysUserRoleRepository.cs b/ZR.Repository/System/SysUserRoleRepository.cs deleted file mode 100644 index 21f0b1e9..00000000 --- a/ZR.Repository/System/SysUserRoleRepository.cs +++ /dev/null @@ -1,72 +0,0 @@ -using Infrastructure.Attribute; -using Infrastructure.Extensions; -using SqlSugar; -using System.Collections.Generic; -using ZR.Model; -using ZR.Model.System; -using ZR.Model.System.Dto; - -namespace ZR.Repository.System -{ - [AppService(ServiceLifetime = LifeTime.Transient)] - public class SysUserRoleRepository : BaseRepository - { - /// - /// 批量删除角色对应用户 - /// - /// 角色id - /// 用户id集合 - /// - public int DeleteRoleUserByUserIds(long roleId, List userIds) - { - return Context.Deleteable().Where(it => it.RoleId == roleId && userIds.Contains(it.UserId)) - .ExecuteCommand(); - } - - /// - /// 获取用户数据根据角色id - /// - /// - /// - public List GetSysUsersByRoleId(long roleId) - { - return Context.Queryable((t1, u) => new JoinQueryInfos( - JoinType.Left, t1.UserId == u.UserId)) - .Where((t1, u) => t1.RoleId == roleId && u.DelFlag == "0") - .Select((t1, u) => u) - .ToList(); - } - - /// - /// 获取用户数据根据角色id - /// - /// - /// - public PagedInfo GetSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto) - { - var query = Context.Queryable((t1, u) => new JoinQueryInfos( - JoinType.Left, t1.UserId == u.UserId)) - .Where((t1, u) => t1.RoleId == roleUserQueryDto.RoleId && u.DelFlag == "0"); - if (!string.IsNullOrEmpty(roleUserQueryDto.UserName)) - { - query = query.Where((t1, u) => u.UserName.Contains(roleUserQueryDto.UserName)); - } - return query.Select((t1, u) => u).ToPage(roleUserQueryDto); - } - - /// - /// 获取尚未指派的用户数据根据角色id - /// - /// - /// - public PagedInfo GetExcludedSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto) - { - var query = Context.Queryable() - .Where(it => it.DelFlag == "0") - .Where(it => SqlFunc.Subqueryable().Where(s => s.UserId == it.UserId && s.RoleId == roleUserQueryDto.RoleId).NotAny()) - .WhereIF(roleUserQueryDto.UserName.IsNotEmpty(), it => it.UserName.Contains(roleUserQueryDto.UserName)); - - return query.ToPage(roleUserQueryDto); - } - } -} diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index 2a355895..d0d36d6b 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -19,5 +19,6 @@ + diff --git a/ZR.Service/System/ArticleService.cs b/ZR.Service/System/ArticleService.cs index 695676a8..7948e3b9 100644 --- a/ZR.Service/System/ArticleService.cs +++ b/ZR.Service/System/ArticleService.cs @@ -1,7 +1,5 @@ using Infrastructure.Attribute; -using SqlSugar; using ZR.Model.System; -using ZR.Repository.System; using ZR.Service.System.IService; namespace ZR.Service.System diff --git a/ZR.Service/System/IService/ISysMenuService.cs b/ZR.Service/System/IService/ISysMenuService.cs index c0294eaf..ebd45e5a 100644 --- a/ZR.Service/System/IService/ISysMenuService.cs +++ b/ZR.Service/System/IService/ISysMenuService.cs @@ -6,7 +6,7 @@ using ZR.Model.Vo.System; namespace ZR.Service.System.IService { - public interface ISysMenuService + public interface ISysMenuService : IBaseService { //List SelectMenuList(long userId); @@ -14,7 +14,7 @@ namespace ZR.Service.System.IService List SelectTreeMenuList(MenuQueryDto menu, long userId); SysMenu GetMenuByMenuId(int menuId); - List GetMenusByMenuId(int menuId); + List GetMenusByMenuId(int menuId, long userId); int AddMenu(SysMenu menu); int EditMenu(SysMenu menu); @@ -29,14 +29,49 @@ namespace ZR.Service.System.IService List SelectMenuTreeByUserId(long userId); - List SelectMenuPermsListByUserId(long userId); + //List SelectMenuPermsListByUserId(long userId); List SelectMenuPermsByUserId(long userId); - bool CheckMenuExistRole(long menuId); + //bool CheckMenuExistRole(long menuId); List BuildMenus(List menus); List BuildMenuTreeSelect(List menus); } + + /// + /// 角色菜单 + /// + public interface ISysRoleMenuService : IBaseService + { + bool CheckMenuExistRole(long menuId); + /// + /// 根据角色获取菜单id + /// + /// + /// + List SelectRoleMenuByRoleId(long roleId); + + /// + /// 根据用户所有角色获取菜单 + /// + /// + /// + List SelectRoleMenuByRoleIds(long[] roleIds); + + /// + /// 批量插入用户菜单 + /// + /// + /// + int AddRoleMenu(List sysRoleMenus); + + /// + /// 删除角色与菜单关联 + /// + /// + /// + int DeleteRoleMenuByRoleId(long roleId); + } } diff --git a/ZR.Service/System/IService/ISysRoleService.cs b/ZR.Service/System/IService/ISysRoleService.cs index a0dd9594..cff824d8 100644 --- a/ZR.Service/System/IService/ISysRoleService.cs +++ b/ZR.Service/System/IService/ISysRoleService.cs @@ -137,5 +137,7 @@ namespace ZR.Service.System.IService /// 角色信息 /// public int UpdateRole(SysRole sysRole); + + int UpdateSysRole(SysRole sysRole); } } diff --git a/ZR.Service/System/IService/ISysUserService.cs b/ZR.Service/System/IService/ISysUserService.cs index 9e6a99ae..1c04ddfe 100644 --- a/ZR.Service/System/IService/ISysUserService.cs +++ b/ZR.Service/System/IService/ISysUserService.cs @@ -78,5 +78,9 @@ namespace ZR.Service.System.IService /// /// string ImportUsers(List users); + + SysUser Login(LoginBodyDto user); + + void UpdateLoginInfo(LoginBodyDto user, long userId); } } diff --git a/ZR.Service/System/SysDeptService.cs b/ZR.Service/System/SysDeptService.cs index 98400e99..8d38e4e0 100644 --- a/ZR.Service/System/SysDeptService.cs +++ b/ZR.Service/System/SysDeptService.cs @@ -9,7 +9,6 @@ using System.Text; using ZR.Common; using ZR.Model.System; using ZR.Model.Vo.System; -using ZR.Repository.System; using ZR.Service.System.IService; namespace ZR.Service.System diff --git a/ZR.Service/System/SysLoginService.cs b/ZR.Service/System/SysLoginService.cs index f4b573a8..80487268 100644 --- a/ZR.Service/System/SysLoginService.cs +++ b/ZR.Service/System/SysLoginService.cs @@ -7,7 +7,6 @@ using ZR.Model; using ZR.Model.System; using ZR.Model.System.Dto; using ZR.Repository; -using ZR.Repository.System; using ZR.Service.System.IService; namespace ZR.Service.System @@ -18,11 +17,11 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(ISysLoginService), ServiceLifetime = LifeTime.Transient)] public class SysLoginService: BaseService, ISysLoginService { - private readonly SysUserRepository SysUserRepository; + private readonly ISysUserService SysUserService; - public SysLoginService(SysUserRepository sysUserRepository) + public SysLoginService(ISysUserService sysUserService) { - SysUserRepository = sysUserRepository; + SysUserService = sysUserService; } /// @@ -35,7 +34,7 @@ namespace ZR.Service.System //密码md5 loginBody.Password = NETCore.Encrypt.EncryptProvider.Md5(loginBody.Password); - SysUser user = SysUserRepository.Login(loginBody); + SysUser user = SysUserService.Login(loginBody); logininfor.UserName = loginBody.Username; logininfor.Status = "1"; logininfor.LoginTime = DateTime.Now; @@ -56,7 +55,7 @@ namespace ZR.Service.System logininfor.Status = "0"; logininfor.Msg = "登录成功"; AddLoginInfo(logininfor); - SysUserRepository.UpdateLoginInfo(loginBody, user.UserId); + SysUserService.UpdateLoginInfo(loginBody, user.UserId); return user; } diff --git a/ZR.Service/System/SysMenuService.cs b/ZR.Service/System/SysMenuService.cs index c2fba62b..88aec630 100644 --- a/ZR.Service/System/SysMenuService.cs +++ b/ZR.Service/System/SysMenuService.cs @@ -1,14 +1,15 @@ using Infrastructure.Attribute; +using Infrastructure.Extensions; +using SqlSugar; +using System; using System.Collections.Generic; using System.Linq; -using ZR.Model.System.Dto; +using ZR.Common; using ZR.Model.System; +using ZR.Model.System.Dto; using ZR.Model.System.Vo; using ZR.Model.Vo.System; -using ZR.Repository.System; using ZR.Service.System.IService; -using ZR.Common; -using Infrastructure.Extensions; namespace ZR.Service { @@ -18,14 +19,10 @@ namespace ZR.Service [AppService(ServiceType = typeof(ISysMenuService), ServiceLifetime = LifeTime.Transient)] public class SysMenuService : BaseService, ISysMenuService { - public SysMenuRepository MenuRepository; public ISysRoleService SysRoleService; - public SysMenuService( - SysMenuRepository menuRepository, - ISysRoleService sysRoleService) + public SysMenuService(ISysRoleService sysRoleService) { - MenuRepository = menuRepository; SysRoleService = sysRoleService; } @@ -38,12 +35,12 @@ namespace ZR.Service List menuList; if (SysRoleService.IsAdmin(userId)) { - menuList = MenuRepository.SelectTreeMenuList(menu); + menuList = SelectTreeMenuList(menu); } else { var userRoles = SysRoleService.SelectUserRoles(userId); - menuList = MenuRepository.SelectTreeMenuListByRoles(menu, userRoles); + menuList = SelectTreeMenuListByRoles(menu, userRoles); } return menuList; } @@ -57,12 +54,12 @@ namespace ZR.Service List menuList; if (SysRoleService.IsAdmin(userId)) { - menuList = MenuRepository.SelectMenuList(menu); + menuList = SelectAllMenuList(menu); } else { var userRoles = SysRoleService.SelectUserRoles(userId); - menuList = MenuRepository.SelectMenuListByRoles(menu, userRoles); + menuList = SelectMenuListByRoles(menu, userRoles); } return menuList; } @@ -74,17 +71,29 @@ namespace ZR.Service /// public SysMenu GetMenuByMenuId(int menuId) { - return MenuRepository.SelectMenuById(menuId); + return GetFirst(it => it.MenuId == menuId); } /// /// 根据菜单id获取菜单列表 /// /// + /// /// - public List GetMenusByMenuId(int menuId) + public List GetMenusByMenuId(int menuId, long userId) { - var list = MenuRepository.GetList(f => f.ParentId == menuId).OrderBy(f => f.OrderNum).ToList(); + var menuExpression = Expressionable.Create(); + menuExpression.And(c => c.ParentId == menuId); + + if (!SysRoleService.IsAdmin(userId)) + { + var userRoles = SysRoleService.SelectUserRoles(userId); + var roleMenus = Context.Queryable() + .Where(r => userRoles.Contains(r.Role_id)).Select(s => s.Menu_id).ToList(); + + menuExpression.And(c => roleMenus.Contains(c.MenuId)); + } + var list = GetList(menuExpression.ToExpression()).OrderBy(f => f.OrderNum).ToList(); Context.ThenMapper(list, item => { item.SubNum = Context.Queryable().SetContext(x => x.ParentId, () => item.MenuId, item).Count; @@ -99,7 +108,8 @@ namespace ZR.Service /// public int AddMenu(SysMenu menu) { - return MenuRepository.AddMenu(menu); + menu.Create_time = DateTime.Now; + return InsertReturnIdentity(menu); } /// @@ -110,7 +120,7 @@ namespace ZR.Service public int EditMenu(SysMenu menu) { menu.Icon = string.IsNullOrEmpty(menu.Icon) ? "" : menu.Icon; - return MenuRepository.EditMenu(menu); + return Update(menu, false); } /// @@ -120,7 +130,7 @@ namespace ZR.Service /// public int DeleteMenuById(int menuId) { - return MenuRepository.DeleteMenuById(menuId); + return Delete(menuId); } /// @@ -131,7 +141,7 @@ namespace ZR.Service public string CheckMenuNameUnique(SysMenu menu) { long menuId = menu.MenuId == 0 ? -1 : menu.MenuId; - SysMenu info = MenuRepository.CheckMenuNameUnique(menu); + SysMenu info = GetFirst(it => it.MenuName == menu.MenuName && it.ParentId == menu.ParentId); //if (info != null && menuId != info.menuId && menu.menuName.Equals(info.menuName)) //{ @@ -147,11 +157,11 @@ namespace ZR.Service /// /// 菜单排序 /// - /// + /// /// public int ChangeSortMenu(MenuDto menuDto) { - return MenuRepository.ChangeSortMenu(menuDto); + return Update(new SysMenu() { MenuId = menuDto.MenuId, OrderNum = menuDto.OrderNum }, it => new { it.OrderNum }); } /// @@ -161,7 +171,7 @@ namespace ZR.Service /// public bool HasChildByMenuId(long menuId) { - return MenuRepository.HasChildByMenuId(menuId) > 0; + return Count(it => it.ParentId == menuId) > 0; } /// @@ -174,51 +184,112 @@ namespace ZR.Service MenuQueryDto dto = new() { Status = "0", MenuTypeIds = "M,C" }; if (SysRoleService.IsAdmin(userId)) { - return MenuRepository.SelectTreeMenuList(dto); + return SelectTreeMenuList(dto); } else { List roleIds = SysRoleService.SelectUserRoles(userId); - return MenuRepository.SelectTreeMenuListByRoles(dto, roleIds); + return SelectTreeMenuListByRoles(dto, roleIds); } } /// - /// 查询菜单权限 + /// 查询精确到按钮的操作权限 /// /// /// - public List SelectMenuPermsListByUserId(long userId) + public List SelectMenuPermsByUserId(long userId) { - return MenuRepository.SelectMenuPermsByUserId(userId); + var menus = Context.Queryable((m, rm, ur, r) => new JoinQueryInfos( + JoinType.Left, m.MenuId == rm.Menu_id, + JoinType.Left, rm.Role_id == ur.RoleId, + JoinType.Left, ur.RoleId == r.RoleId + )) + .Where((m, rm, ur, r) => m.Status == "0" && r.Status == "0" && ur.UserId == userId) + .Select((m, rm, ur, r) => m).ToList(); + var menuList = menus.Where(f => !string.IsNullOrEmpty(f.Perms)); + + return menuList.Select(x => x.Perms).Distinct().ToList(); } /// - /// 查询精确到按钮的操作权限 + /// 根据用户查询系统菜单列表 /// - /// + /// + /// 用户角色集合 /// - public List SelectMenuPermsByUserId(long userId) + private List SelectTreeMenuListByRoles(MenuQueryDto menu, List roles) { - var menuList = SelectMenuPermsListByUserId(userId).Where(f => !string.IsNullOrEmpty(f.Perms)); - - return menuList.Select(x => x.Perms).Distinct().ToList(); + var roleMenus = Context.Queryable() + .Where(r => roles.Contains(r.Role_id)) + .Select(f => f.Menu_id).Distinct().ToList(); + + return Queryable() + .Where(c => roleMenus.Contains(c.MenuId)) + .WhereIF(!string.IsNullOrEmpty(menu.MenuName), (c) => c.MenuName.Contains(menu.MenuName)) + .WhereIF(!string.IsNullOrEmpty(menu.Visible), (c) => c.Visible == menu.Visible) + .WhereIF(!string.IsNullOrEmpty(menu.Status), (c) => c.Status == menu.Status) + .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), c => menu.MenuTypeIdArr.Contains(c.MenuType)) + .OrderBy((c) => new { c.ParentId, c.OrderNum }) + .Select(c => c) + .ToTree(it => it.Children, it => it.ParentId, 0); } - #region RoleMenu + /// + /// 获取所有菜单 + /// + /// + private List SelectAllMenuList(MenuQueryDto menu) + { + return Queryable() + .WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName)) + .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.Visible == menu.Visible) + .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.Status == menu.Status) + .WhereIF(menu.ParentId != null, it => it.ParentId == menu.ParentId) + .OrderBy(it => new { it.ParentId, it.OrderNum }) + .ToList(); + } /// - /// 查询菜单使用数量 + /// 根据用户查询系统菜单列表 /// - /// + /// + /// 用户角色集合 /// - public bool CheckMenuExistRole(long menuId) + private List SelectMenuListByRoles(MenuQueryDto sysMenu, List roles) { - return MenuRepository.CheckMenuExistRole(menuId) > 0; + var roleMenus = Context.Queryable() + .Where(r => roles.Contains(r.Role_id)); + + return Queryable() + .InnerJoin(roleMenus, (c, j) => c.MenuId == j.Menu_id) + .Where((c, j) => c.Status == "0") + .WhereIF(!string.IsNullOrEmpty(sysMenu.MenuName), (c, j) => c.MenuName.Contains(sysMenu.MenuName)) + .WhereIF(!string.IsNullOrEmpty(sysMenu.Visible), (c, j) => c.Visible == sysMenu.Visible) + .OrderBy((c, j) => new { c.ParentId, c.OrderNum }) + .Select(c => c) + .ToList(); } - #endregion + /// + /// 获取所有菜单(菜单管理) + /// + /// + public List SelectTreeMenuList(MenuQueryDto menu) + { + int parentId = menu.ParentId != null ? (int)menu.ParentId : 0; + + var list = Queryable() + .WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName)) + .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.Visible == menu.Visible) + .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.Status == menu.Status) + .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), it => menu.MenuTypeIdArr.Contains(it.MenuType)) + .WhereIF(menu.ParentId != null, it => it.ParentId == menu.ParentId) + .OrderBy(it => new { it.ParentId, it.OrderNum }) + .ToTree(it => it.Children, it => it.ParentId, parentId); + return list; + } #region 方法 ///// diff --git a/ZR.Service/System/SysRoleService.cs b/ZR.Service/System/SysRoleService.cs index f99787cb..fd7e7567 100644 --- a/ZR.Service/System/SysRoleService.cs +++ b/ZR.Service/System/SysRoleService.cs @@ -1,14 +1,13 @@ using Infrastructure; using Infrastructure.Attribute; -using Infrastructure.Model; +using SqlSugar; using System; using System.Collections; using System.Collections.Generic; using System.Linq; -using System.Text; using ZR.Model; using ZR.Model.System; -using ZR.Repository.System; +using ZR.Repository; using ZR.Service.System.IService; namespace ZR.Service @@ -19,29 +18,43 @@ namespace ZR.Service [AppService(ServiceType = typeof(ISysRoleService), ServiceLifetime = LifeTime.Transient)] public class SysRoleService : BaseService, ISysRoleService { - private SysRoleRepository SysRoleRepository; private ISysUserRoleService SysUserRoleService; private ISysDeptService DeptService; - + private ISysRoleMenuService RoleMenuService; public SysRoleService( - SysRoleRepository sysRoleRepository, ISysUserRoleService sysUserRoleService, - ISysDeptService deptService) + ISysDeptService deptService, + ISysRoleMenuService roleMenuService) { - SysRoleRepository = sysRoleRepository; SysUserRoleService = sysUserRoleService; DeptService = deptService; + RoleMenuService = roleMenuService; } /// /// 根据条件分页查询角色数据 /// - /// 角色信息 + /// 角色信息 /// 分页信息 /// 角色数据集合信息 - public PagedInfo SelectRoleList(SysRole role, PagerInfo pager) + public PagedInfo SelectRoleList(SysRole sysRole, PagerInfo pager) { - return SysRoleRepository.SelectRoleList(role, pager); + var exp = Expressionable.Create(); + exp.And(role => role.DelFlag == "0"); + exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleName), role => role.RoleName.Contains(sysRole.RoleName)); + exp.AndIF(!string.IsNullOrEmpty(sysRole.Status), role => role.Status == sysRole.Status); + exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleKey), role => role.RoleKey == sysRole.RoleKey); + + var query = Context.Queryable() + .Where(exp.ToExpression()) + .OrderBy(x => x.RoleSort) + .Select((role) => new SysRole + { + RoleId = role.RoleId.SelectAll(), + UserNum = SqlFunc.Subqueryable().Where(f => f.RoleId == role.RoleId).Count() + }); + + return query.ToPage(pager); } /// @@ -50,7 +63,10 @@ namespace ZR.Service /// public List SelectRoleAll() { - return SysRoleRepository.SelectRoleList(); + return Queryable() + .Where(role => role.DelFlag == "0") + .OrderBy(role => role.RoleSort) + .ToList(); } /// @@ -60,7 +76,11 @@ namespace ZR.Service /// public List SelectRolePermissionByUserId(long userId) { - return SysRoleRepository.SelectRolePermissionByUserId(userId); + return Queryable() + .Where(role => role.DelFlag == "0") + .Where(it => SqlFunc.Subqueryable().Where(s => s.UserId == userId).Any()) + .OrderBy(role => role.RoleSort) + .ToList(); } /// @@ -70,7 +90,7 @@ namespace ZR.Service /// 角色对象信息 public SysRole SelectRoleById(long roleId) { - return SysRoleRepository.SelectRoleById(roleId); + return GetId(roleId); } /// @@ -89,17 +109,17 @@ namespace ZR.Service throw new CustomException($"{role.RoleName}已分配,不能删除"); } } - return SysRoleRepository.DeleteRoleByRoleIds(roleIds); + return Delete(roleIds); } /// /// 更改角色权限状态 /// - /// + /// /// public int UpdateRoleStatus(SysRole roleDto) { - return SysRoleRepository.UpdateRoleStatus(roleDto); + return Update(roleDto, it => new { it.Status }, f => f.RoleId == roleDto.RoleId); } /// @@ -110,7 +130,7 @@ namespace ZR.Service public string CheckRoleKeyUnique(SysRole sysRole) { long roleId = 0 == sysRole.RoleId ? -1L : sysRole.RoleId; - SysRole info = SysRoleRepository.CheckRoleKeyUnique(sysRole.RoleKey); + SysRole info = GetFirst(it => it.RoleKey == sysRole.RoleKey); if (info != null && info.RoleId != roleId) { return UserConstants.NOT_UNIQUE; @@ -137,7 +157,8 @@ namespace ZR.Service /// public long InsertRole(SysRole sysRole) { - sysRole.RoleId = SysRoleRepository.InsertRole(sysRole); + sysRole.Create_time = DateTime.Now; + sysRole.RoleId = InsertReturnBigIdentity(sysRole); //插入角色部门数据 DeptService.InsertRoleDepts(sysRole); @@ -151,7 +172,7 @@ namespace ZR.Service /// public int DeleteRoleMenuByRoleId(long roleId) { - return SysRoleRepository.DeleteRoleMenuByRoleId(roleId); + return RoleMenuService.DeleteRoleMenuByRoleId(roleId); } /// @@ -195,7 +216,7 @@ namespace ZR.Service //添加角色菜单 if (sysRoleMenus.Count > 0) { - rows = SysRoleRepository.AddRoleMenu(sysRoleMenus); + rows = RoleMenuService.AddRoleMenu(sysRoleMenus); } return rows; @@ -210,7 +231,7 @@ namespace ZR.Service { List roles = SelectUserRoleKeys(userid); - return ((IList)roles).Contains("admin"); + return ((IList)roles).Contains(GlobalConstant.AdminRole); } /// @@ -232,7 +253,7 @@ namespace ZR.Service /// public List SelectUserRoleMenus(long roleId) { - var list = SysRoleRepository.SelectRoleMenuByRoleId(roleId); + var list = RoleMenuService.SelectRoleMenuByRoleId(roleId); return list.Select(x => x.Menu_id).Distinct().ToList(); } @@ -244,7 +265,7 @@ namespace ZR.Service /// public List SelectRoleMenuByRoleIds(long[] roleIds) { - return SysRoleRepository.SelectRoleMenuByRoleIds(roleIds) + return RoleMenuService.SelectRoleMenuByRoleIds(roleIds) .Select(x => x.Menu_id) .Distinct().ToList(); } @@ -256,7 +277,10 @@ namespace ZR.Service /// public List SelectUserRoleListByUserId(long userId) { - return SysRoleRepository.SelectUserRoleListByUserId(userId); + return Context.Queryable((ur, r) => new JoinQueryInfos( + JoinType.Left, ur.RoleId == r.RoleId + )).Where((ur, r) => ur.UserId == userId) + .Select((ur, r) => r).ToList(); } /// @@ -304,7 +328,7 @@ namespace ZR.Service var result = UseTran(() => { //修改角色信息 - SysRoleRepository.UpdateSysRole(sysRole); + UpdateSysRole(sysRole); //删除角色与部门管理 DeptService.DeleteRoleDeptByRoleId(sysRole.RoleId); //插入角色部门数据 @@ -313,5 +337,29 @@ namespace ZR.Service return result.IsSuccess ? 1 : 0; } + + /// + /// 修改用户角色 + /// + /// + /// + public int UpdateSysRole(SysRole sysRole) + { + var db = Context; + sysRole.Update_time = db.GetDate(); + + return db.Updateable() + .SetColumns(it => it.Update_time == sysRole.Update_time) + .SetColumns(it => it.DataScope == sysRole.DataScope) + .SetColumns(it => it.Remark == sysRole.Remark) + .SetColumns(it => it.Update_by == sysRole.Update_by) + //.SetColumns(it => it.MenuCheckStrictly == sysRole.MenuCheckStrictly) + .SetColumns(it => it.DeptCheckStrictly == sysRole.DeptCheckStrictly) + .SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleName), it => it.RoleName == sysRole.RoleName) + .SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleKey), it => it.RoleKey == sysRole.RoleKey) + .SetColumnsIF(sysRole.RoleSort >= 0, it => it.RoleSort == sysRole.RoleSort) + .Where(it => it.RoleId == sysRole.RoleId) + .ExecuteCommand(); + } } } diff --git a/ZR.Service/System/SysUserRoleService.cs b/ZR.Service/System/SysUserRoleService.cs index 167a6317..35f7ba15 100644 --- a/ZR.Service/System/SysUserRoleService.cs +++ b/ZR.Service/System/SysUserRoleService.cs @@ -1,9 +1,11 @@ using Infrastructure.Attribute; +using Infrastructure.Extensions; +using SqlSugar; using System.Collections.Generic; using ZR.Model; using ZR.Model.System; using ZR.Model.System.Dto; -using ZR.Repository.System; +using ZR.Repository; using ZR.Service.System.IService; namespace ZR.Service.System @@ -14,12 +16,12 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(ISysUserRoleService), ServiceLifetime = LifeTime.Transient)] public class SysUserRoleService : BaseService, ISysUserRoleService { - public SysUserRoleRepository SysUserRoleRepository; + //public SysUserRoleRepository SysUserRoleRepository; - public SysUserRoleService(SysUserRoleRepository sysUserRoleRepository) - { - SysUserRoleRepository = sysUserRoleRepository; - } + //public SysUserRoleService(SysUserRoleRepository sysUserRoleRepository) + //{ + // SysUserRoleRepository = sysUserRoleRepository; + //} /// /// 通过角色ID查询角色使用数量 @@ -38,7 +40,7 @@ namespace ZR.Service.System /// public int DeleteUserRoleByUserId(int userId) { - return Deleteable().Where(it => it.UserId == userId).ExecuteCommand(); + return Delete(it => it.UserId == userId) ? 1 : 0; } /// @@ -49,7 +51,7 @@ namespace ZR.Service.System /// public int DeleteRoleUserByUserIds(long roleId, List userIds) { - return SysUserRoleRepository.DeleteRoleUserByUserIds(roleId, userIds); + return Delete(it => it.RoleId == roleId && userIds.Contains(it.UserId)) ? 1 : 0; } /// @@ -69,7 +71,11 @@ namespace ZR.Service.System /// public List GetSysUsersByRoleId(long roleId) { - return SysUserRoleRepository.GetSysUsersByRoleId(roleId); + return Context.Queryable ((t1, u) => new JoinQueryInfos( + JoinType.Left, t1.UserId == u.UserId)) + .Where((t1, u) => t1.RoleId == roleId && u.DelFlag == "0") + .Select((t1, u) => u) + .ToList(); } /// @@ -79,7 +85,15 @@ namespace ZR.Service.System /// public PagedInfo GetSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto) { - return SysUserRoleRepository.GetSysUsersByRoleId(roleUserQueryDto); + //return SysUserRoleRepository.GetSysUsersByRoleId(roleUserQueryDto); + var query = Context.Queryable((t1, u) => new JoinQueryInfos( + JoinType.Left, t1.UserId == u.UserId)) + .Where((t1, u) => t1.RoleId == roleUserQueryDto.RoleId && u.DelFlag == "0"); + if (!string.IsNullOrEmpty(roleUserQueryDto.UserName)) + { + query = query.Where((t1, u) => u.UserName.Contains(roleUserQueryDto.UserName)); + } + return query.Select((t1, u) => u).ToPage(roleUserQueryDto); } /// @@ -89,7 +103,12 @@ namespace ZR.Service.System /// public PagedInfo GetExcludedSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto) { - return SysUserRoleRepository.GetExcludedSysUsersByRoleId(roleUserQueryDto); + var query = Context.Queryable() + .Where(it => it.DelFlag == "0") + .Where(it => SqlFunc.Subqueryable().Where(s => s.UserId == it.UserId && s.RoleId == roleUserQueryDto.RoleId).NotAny()) + .WhereIF(roleUserQueryDto.UserName.IsNotEmpty(), it => it.UserName.Contains(roleUserQueryDto.UserName)); + + return query.ToPage(roleUserQueryDto); } /// @@ -115,7 +134,7 @@ namespace ZR.Service.System /// public int InsertRoleUser(RoleUsersCreateDto roleUsersCreateDto) { - List userRoles = new List(); + List userRoles = new(); foreach (var item in roleUsersCreateDto.UserIds) { userRoles.Add(new SysUserRole() { RoleId = roleUsersCreateDto.RoleId, UserId = item }); diff --git a/ZR.Service/System/SysUserService.cs b/ZR.Service/System/SysUserService.cs index e8fbb9fc..6cbd6496 100644 --- a/ZR.Service/System/SysUserService.cs +++ b/ZR.Service/System/SysUserService.cs @@ -1,17 +1,16 @@ using Infrastructure; using Infrastructure.Attribute; using Infrastructure.Extensions; -using Microsoft.AspNetCore.Http; +using SqlSugar; using System; using System.Collections; using System.Collections.Generic; using System.Linq; -using System.Text; using ZR.Common; using ZR.Model; using ZR.Model.System; using ZR.Model.System.Dto; -using ZR.Repository.System; +using ZR.Repository; using ZR.Service.System.IService; namespace ZR.Service @@ -22,18 +21,15 @@ namespace ZR.Service [AppService(ServiceType = typeof(ISysUserService), ServiceLifetime = LifeTime.Transient)] public class SysUserService : BaseService, ISysUserService { - private readonly SysUserRepository UserRepository; private readonly ISysRoleService RoleService; private readonly ISysUserRoleService UserRoleService; private readonly ISysUserPostService UserPostService; public SysUserService( - SysUserRepository userRepository, ISysRoleService sysRoleService, ISysUserRoleService userRoleService, ISysUserPostService userPostService) { - UserRepository = userRepository; RoleService = sysRoleService; UserRoleService = userRoleService; UserPostService = userPostService; @@ -45,9 +41,36 @@ namespace ZR.Service /// public PagedInfo SelectUserList(SysUser user, PagerInfo pager) { - var list = UserRepository.SelectUserList(user, pager); + var exp = Expressionable.Create(); + exp.AndIF(!string.IsNullOrEmpty(user.UserName), u => u.UserName.Contains(user.UserName)); + exp.AndIF(!string.IsNullOrEmpty(user.Status), u => u.Status == user.Status); + exp.AndIF(user.BeginTime != DateTime.MinValue && user.BeginTime != null, u => u.Create_time >= user.BeginTime); + exp.AndIF(user.EndTime != DateTime.MinValue && user.EndTime != null, u => u.Create_time <= user.EndTime); + exp.AndIF(!user.Phonenumber.IsEmpty(), u => u.Phonenumber == user.Phonenumber); + exp.And(u => u.DelFlag == "0"); - return list; + if (user.DeptId != 0) + { + List depts = Context.Queryable().ToList(); + + var newDepts = depts.FindAll(delegate (SysDept dept) + { + string[] parentDeptId = dept.Ancestors.Split(",", StringSplitOptions.RemoveEmptyEntries); + return parentDeptId.Contains(user.DeptId.ToString()); + }); + string[] deptArr = newDepts.Select(x => x.DeptId.ToString()).ToArray(); + exp.AndIF(user.DeptId != 0, u => u.DeptId == user.DeptId || deptArr.Contains(u.DeptId.ToString())); + } + var query = Queryable() + .LeftJoin((u, dept) => u.DeptId == dept.DeptId) + .Where(exp.ToExpression()) + .Select((u, dept) => new SysUser + { + UserId = u.UserId.SelectAll(), + DeptName = dept.DeptName, + }); + + return query.ToPage(pager); } /// @@ -57,7 +80,7 @@ namespace ZR.Service /// public SysUser SelectUserById(long userId) { - var user = UserRepository.SelectUserById(userId); + var user = Queryable().Filter(null, true).Where(f => f.UserId == userId).First(); if (user != null && user.UserId > 0) { user.Roles = RoleService.SelectUserRoleListByUserId(userId); @@ -73,7 +96,7 @@ namespace ZR.Service /// public string CheckUserNameUnique(string userName) { - int count = UserRepository.CheckUserNameUnique(userName); + int count = Count(it => it.UserName == userName); if (count > 0) { return UserConstants.NOT_UNIQUE; @@ -88,7 +111,8 @@ namespace ZR.Service /// public long InsertUser(SysUser sysUser) { - long userId = UserRepository.AddUser(sysUser); + sysUser.Create_time = DateTime.Now; + long userId = Insertable(sysUser).ExecuteReturnIdentity(); sysUser.UserId = userId; //新增用户角色信息 UserRoleService.InsertUserRole(sysUser); @@ -119,12 +143,25 @@ namespace ZR.Service UserPostService.Delete(user.UserId); // 新增用户与岗位管理 UserPostService.InsertUserPost(user); - return UserRepository.UpdateUser(user); + return ChangeUser(user); } public int ChangeUser(SysUser user) { - return UserRepository.UpdateUser(user); + user.Update_time = DateTime.Now; + return Update(user, t => new + { + t.NickName, + t.Email, + t.Phonenumber, + t.DeptId, + t.Status, + t.Sex, + t.PostIds, + t.Remark, + t.Update_by, + t.Update_time + }, true); } /// @@ -135,12 +172,17 @@ namespace ZR.Service /// public int ResetPwd(long userid, string password) { - return UserRepository.ResetPwd(userid, password); + return Update(new SysUser() { UserId = userid, Password = password }, it => new { it.Password }, f => f.UserId == userid); } + /// + /// 修改用户状态 + /// + /// + /// public int ChangeUserStatus(SysUser user) { - return UserRepository.ChangeUserStatus(user); + return Update(user, it => new { it.Status }, f => f.UserId == user.UserId); } /// @@ -155,7 +197,7 @@ namespace ZR.Service UserRoleService.DeleteUserRoleByUserId((int)userid); // 删除用户与岗位关联 UserPostService.Delete(userid); - return UserRepository.DeleteUser(userid); + return Update(new SysUser() { UserId = userid, DelFlag = "2" }, it => new { it.DelFlag }, f => f.UserId == userid); } /// @@ -165,7 +207,7 @@ namespace ZR.Service /// public int UpdatePhoto(SysUser user) { - return UserRepository.UpdatePhoto(user); + return Update(user, it => new { it.Avatar }, f => f.UserId == user.UserId); ; } /// @@ -192,7 +234,7 @@ namespace ZR.Service Remark = "用户注册" }; - user.UserId = UserRepository.AddUser(user); + user.UserId = Insertable(user).ExecuteReturnIdentity(); return user; } @@ -265,5 +307,26 @@ namespace ZR.Service return msg; } + + /// + /// 登录 + /// + /// 登录实体 + /// + public SysUser Login(LoginBodyDto user) + { + return GetFirst(it => it.UserName == user.Username && it.Password == user.Password); + } + + /// + /// 修改登录信息 + /// + /// + /// + /// + public void UpdateLoginInfo(LoginBodyDto user, long userId) + { + Update(new SysUser() { LoginIP = user.LoginIP, LoginDate = DateTime.Now, UserId = userId },it => new { it.LoginIP, it.LoginDate }); + } } } -- Gitee From 8724de10e6ebe5757da07605543739a626daeb57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 20 Oct 2022 18:30:05 +0800 Subject: [PATCH 042/122] add SysRoleMenuService.cs --- ZR.Service/System/SysRoleMenuService.cs | 50 +++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 ZR.Service/System/SysRoleMenuService.cs diff --git a/ZR.Service/System/SysRoleMenuService.cs b/ZR.Service/System/SysRoleMenuService.cs new file mode 100644 index 00000000..7327937a --- /dev/null +++ b/ZR.Service/System/SysRoleMenuService.cs @@ -0,0 +1,50 @@ +using Infrastructure.Attribute; +using System.Collections.Generic; +using System.Linq; +using ZR.Model.System; +using ZR.Service.System.IService; + +namespace ZR.Service.System +{ + /// + /// 角色菜单 + /// + [AppService(ServiceType = typeof(ISysRoleMenuService), ServiceLifetime = LifeTime.Transient)] + public class SysRoleMenuService : BaseService, ISysRoleMenuService + { + public int AddRoleMenu(List sysRoleMenus) + { + return Insert(sysRoleMenus); + } + + public bool CheckMenuExistRole(long menuId) + { + return Count(it => it.Menu_id == menuId) > 0; + } + + public int DeleteRoleMenuByRoleId(long roleId) + { + return Delete(roleId); + } + + /// + /// 根据角色获取菜单id + /// + /// + /// + public List SelectRoleMenuByRoleId(long roleId) + { + return GetList(f => f.Role_id == roleId); + } + + /// + /// 根据用户所有角色获取菜单 + /// + /// + /// + public List SelectRoleMenuByRoleIds(long[] roleIds) + { + return GetList(it => roleIds.Contains(it.Role_id)); + } + } +} -- Gitee From e4a4994bff73510326a805fd6925bc00e88a3a1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 20 Oct 2022 21:31:35 +0800 Subject: [PATCH 043/122] =?UTF-8?q?sql=E8=AF=AD=E5=8F=A5=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=96=B0=E5=A2=9Esql=5F=E5=BC=80=E5=A4=B4?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=8C=B9=E9=85=8D=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs b/ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs index 3d5b73ef..56cd8856 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs @@ -76,7 +76,7 @@ namespace ZR.Admin.WebApi.Controllers.System ColumnName = dic.ColumnName, List = list.FindAll(f => f.DictType == dic.DictType) }; - if (dic.DictType.StartsWith("cus_")) + if (dic.DictType.StartsWith("cus_") || dic.DictType.StartsWith("sql_")) { vo.List = SysDictService.SelectDictDataByCustomSql(dic.DictType); } -- Gitee From b8d8490033804c6ebcb487ecf3cedd93b2833503 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 25 Oct 2022 07:51:35 +0800 Subject: [PATCH 044/122] =?UTF-8?q?=E4=BC=98=E5=8C=96IP=E9=99=90=E6=B5=81?= =?UTF-8?q?=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/appsettings.json | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json index b0123b02..78a1abcf 100644 --- a/ZR.Admin.WebApi/appsettings.json +++ b/ZR.Admin.WebApi/appsettings.json @@ -87,14 +87,7 @@ "Limit": 5 }, { - "Endpoint": "post:*", - //时间段,格式:{数字}{单位};可使用单位:s, m, h, d - "Period": "3s", - "Limit": 1 - }, - { - "Endpoint": "put:*", - //时间段,格式:{数字}{单位};可使用单位:s, m, h, d + "Endpoint": "((post)|(put)):*", "Period": "3s", "Limit": 1 } @@ -107,6 +100,6 @@ }, //验证码配置 "CaptchaOptions": { - "length": 4 + "length": 4//验证码长度 } } -- Gitee From 09882baa3f5b672bb063f2939959d6d15c9e2fc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 25 Oct 2022 07:52:03 +0800 Subject: [PATCH 045/122] =?UTF-8?q?=E4=BF=AE=E6=94=B9IsAdmin=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Extensions/HttpContextExtension.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ZR.Admin.WebApi/Extensions/HttpContextExtension.cs b/ZR.Admin.WebApi/Extensions/HttpContextExtension.cs index 9ebea274..96253256 100644 --- a/ZR.Admin.WebApi/Extensions/HttpContextExtension.cs +++ b/ZR.Admin.WebApi/Extensions/HttpContextExtension.cs @@ -1,4 +1,5 @@ -using Infrastructure.Extensions; +using Infrastructure; +using Infrastructure.Extensions; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Http; @@ -95,8 +96,8 @@ namespace ZR.Admin.WebApi.Extensions /// public static bool IsAdmin(this HttpContext context) { - long id = GetUId(context); - return id == 1; + var userName = GetName(context); + return userName == GlobalConstant.AdminRole; } /// -- Gitee From 4834e8bccf94b04e9b96ac7ffac7eb81a5b9f634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 25 Oct 2022 07:52:43 +0800 Subject: [PATCH 046/122] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=B5=8F=E8=A7=88=E5=99=A8=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/System/SysLoginController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs index 90cd54b2..180e09c7 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs @@ -206,13 +206,13 @@ namespace ZR.Admin.WebApi.Controllers.System ClientInfo clientInfo = context.GetClientInfo(); SysLogininfor sysLogininfor = new() { - Browser = clientInfo.Device.Family, + Browser = clientInfo.ToString(), Os = clientInfo.OS.ToString(), Ipaddr = ipAddr, UserName = context.GetName(), LoginLocation = ip_info?.Province + "-" + ip_info?.City }; - + return sysLogininfor; } -- Gitee From 147632df91038c2e7fa6373b9868e04552e62aa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 28 Oct 2022 21:40:53 +0800 Subject: [PATCH 047/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/System/SysLoginController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs index 180e09c7..fab6993e 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs @@ -160,7 +160,7 @@ namespace ZR.Admin.WebApi.Controllers.System byte[] imgByte = GenerateCaptcha(captchaOff, code); string base64Str = Convert.ToBase64String(imgByte); CacheHelper.SetCache(uuid, code); - var obj = new { uuid, img = base64Str };// File(stream, "image/png") + var obj = new { captchaOff, uuid, img = base64Str };// File(stream, "image/png") return ToJson(1, obj); } -- Gitee From 8457fbad37de4e4cc9a1118a7dc1c8e41cb65d3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 14 Nov 2022 14:03:10 +0800 Subject: [PATCH 048/122] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 4 ++-- ZR.CodeGenerator/ZR.CodeGenerator.csproj | 4 ++-- ZR.Common/ZR.Common.csproj | 4 ++-- ZR.Model/ZR.Model.csproj | 2 +- ZR.Repository/ZR.Repository.csproj | 2 +- ZR.Tasks/ZR.Tasks.csproj | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 44242cb1..93cfd82e 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -28,8 +28,8 @@ - - + + diff --git a/ZR.CodeGenerator/ZR.CodeGenerator.csproj b/ZR.CodeGenerator/ZR.CodeGenerator.csproj index 88214bda..9d7d005e 100644 --- a/ZR.CodeGenerator/ZR.CodeGenerator.csproj +++ b/ZR.CodeGenerator/ZR.CodeGenerator.csproj @@ -11,7 +11,7 @@ - - + + diff --git a/ZR.Common/ZR.Common.csproj b/ZR.Common/ZR.Common.csproj index 16f1be78..9ed116dd 100644 --- a/ZR.Common/ZR.Common.csproj +++ b/ZR.Common/ZR.Common.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/ZR.Model/ZR.Model.csproj b/ZR.Model/ZR.Model.csproj index 62c6feac..29d1a05a 100644 --- a/ZR.Model/ZR.Model.csproj +++ b/ZR.Model/ZR.Model.csproj @@ -7,7 +7,7 @@ - + diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index d0d36d6b..5141f8bb 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -14,7 +14,7 @@ - + diff --git a/ZR.Tasks/ZR.Tasks.csproj b/ZR.Tasks/ZR.Tasks.csproj index a7abce16..7177e87c 100644 --- a/ZR.Tasks/ZR.Tasks.csproj +++ b/ZR.Tasks/ZR.Tasks.csproj @@ -5,7 +5,7 @@ - + -- Gitee From f53227e24eb9dac9b5a162c1467043e5306e5faf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 15 Nov 2022 18:10:02 +0800 Subject: [PATCH 049/122] =?UTF-8?q?=E5=AF=BC=E5=87=BAExcel=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/BaseController.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ZR.Admin.WebApi/Controllers/BaseController.cs b/ZR.Admin.WebApi/Controllers/BaseController.cs index 2038e6ab..b1eeaef3 100644 --- a/ZR.Admin.WebApi/Controllers/BaseController.cs +++ b/ZR.Admin.WebApi/Controllers/BaseController.cs @@ -112,6 +112,13 @@ namespace ZR.Admin.WebApi.Controllers /// /// protected string ExportExcel(List list, string sheetName, string fileName) + { + var fileInfo = ExportExcelNew(list, sheetName, fileName); + + return fileInfo.Item1; + } + + protected (string, string) ExportExcelNew(List list, string sheetName, string fileName) { IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment)); string sFileName = $"{fileName}{DateTime.Now:MMddHHmmss}.xlsx"; @@ -130,7 +137,7 @@ namespace ZR.Admin.WebApi.Controllers package.Save(); } - return sFileName; + return (sFileName, newFileName); } /// -- Gitee From 9d6304d8e3c9e5a9007d313554a4c1bb944c28a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 17 Nov 2022 10:47:43 +0800 Subject: [PATCH 050/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E8=BF=94=E5=9B=9E=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Model/System/UserConstants.cs | 4 ++++ ZR.Model/System/Vo/RouterVo.cs | 11 ++++------- ZR.Service/System/SysMenuService.cs | 6 +++++- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ZR.Model/System/UserConstants.cs b/ZR.Model/System/UserConstants.cs index 87512698..7914ab2c 100644 --- a/ZR.Model/System/UserConstants.cs +++ b/ZR.Model/System/UserConstants.cs @@ -71,5 +71,9 @@ namespace ZR.Model.System /// https请求 /// public static string HTTPS = "https://"; + /// + /// www主域 + /// + public static string WWW = "www."; } } diff --git a/ZR.Model/System/Vo/RouterVo.cs b/ZR.Model/System/Vo/RouterVo.cs index b48fa2f3..30f982c5 100644 --- a/ZR.Model/System/Vo/RouterVo.cs +++ b/ZR.Model/System/Vo/RouterVo.cs @@ -52,19 +52,16 @@ namespace ZR.Model.System.Vo Icon = icon; Link = path; } - public Meta(string title, string icon, bool noCache) - { - Title = title; - Icon = icon; - NoCache = noCache; - } public Meta(string title, string icon, bool noCache, string titleKey, string path) { Title = title; Icon = icon; NoCache = noCache; TitleKey = titleKey; - Link = path; + if (!string.IsNullOrEmpty(path) && (path.StartsWith(UserConstants.HTTP) || path.StartsWith(UserConstants.HTTPS))) + { + Link = path; + } } } } diff --git a/ZR.Service/System/SysMenuService.cs b/ZR.Service/System/SysMenuService.cs index 88aec630..5106cb26 100644 --- a/ZR.Service/System/SysMenuService.cs +++ b/ZR.Service/System/SysMenuService.cs @@ -550,7 +550,11 @@ namespace ZR.Service /// < returns > public string InnerLinkReplaceEach(string path) { - return path.IsNotEmpty() ? path.Replace(UserConstants.HTTP, "").Replace(UserConstants.HTTPS, "") : path; + return path.IsNotEmpty() ? path + .Replace(UserConstants.HTTP, "") + .Replace(UserConstants.HTTPS, "") + .Replace(UserConstants.WWW, "") + .Replace(".", "/") : path; } #endregion -- Gitee From 9d71a89711c4aa97df2fd3458a30ea80aed03460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 18 Nov 2022 13:40:27 +0800 Subject: [PATCH 051/122] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Vue/src/views/login.vue | 66 ++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/ZR.Vue/src/views/login.vue b/ZR.Vue/src/views/login.vue index 0003354e..c82eb201 100644 --- a/ZR.Vue/src/views/login.vue +++ b/ZR.Vue/src/views/login.vue @@ -1,7 +1,7 @@ @@ -54,42 +61,38 @@ export default { password: '', rememberMe: false, code: '', - uuid: '' + uuid: '', }, title: defaultSettings.title, loginRules: { - username: [ - { required: true, trigger: 'blur', message: '用户名不能为空' } - ], - password: [ - { required: true, trigger: 'blur', message: '密码不能为空' } - ], - code: [{ required: true, trigger: 'change', message: '验证码不能为空' }] + username: [{ required: true, trigger: 'blur', message: '用户名不能为空' }], + password: [{ required: true, trigger: 'blur', message: '密码不能为空' }], + code: [{ required: true, trigger: 'change', message: '验证码不能为空' }], }, showCaptcha: '', loading: false, - redirect: undefined + redirect: undefined, } }, computed: { - copyRight: function() { + copyRight: function () { return defaultSettings.copyRight - } + }, }, watch: { $route: { - handler: function(route) { + handler: function (route) { this.redirect = route.query && route.query.redirect }, - immediate: true - } + immediate: true, + }, }, created() { this.getCode() this.getCookie() - this.getConfigKey('sys.account.captchaOnOff').then((response) => { - this.showCaptcha = response.data - }) + // this.getConfigKey('sys.account.captchaOnOff').then((response) => { + // this.showCaptcha = response.data + // }) }, methods: { getCode() { @@ -97,6 +100,7 @@ export default { getCodeImg().then((res) => { this.codeUrl = 'data:image/gif;base64,' + res.data.img this.loginForm.uuid = res.data.uuid + this.showCaptcha = res.data.captchaOff this.$forceUpdate() }) }, @@ -108,7 +112,7 @@ export default { this.loginForm = { username: username === undefined ? this.loginForm.username : username, password: password === undefined ? this.loginForm.password : password, - rememberMe: rememberMe === undefined ? false : Boolean(rememberMe) + rememberMe: rememberMe === undefined ? false : Boolean(rememberMe), } }, handleLogin() { @@ -118,10 +122,10 @@ export default { if (this.loginForm.rememberMe) { Cookies.set('username', this.loginForm.username, { expires: 30 }) Cookies.set('password', this.loginForm.password, { - expires: 30 + expires: 30, }) Cookies.set('rememberMe', this.loginForm.rememberMe, { - expires: 30 + expires: 30, }) } else { Cookies.remove('username') @@ -135,7 +139,7 @@ export default { this.$router.push({ path: this.redirect || '/' }) }) .catch((error) => { - this.msgError(error.msg); + this.msgError(error.msg) this.loading = false this.getCode() this.$refs.codeTxt.focus() @@ -144,8 +148,8 @@ export default { console.log('未完成') } }) - } - } + }, + }, } @@ -155,7 +159,7 @@ export default { justify-content: center; align-items: center; height: 100%; - background-image: url("../assets/image/login-background.jpg"); + background-image: url('../assets/image/login-background.jpg'); background-size: cover; // background-color: rgba(56, 157, 170, 0.82); } -- Gitee From 99cb54c4d31f1d5b0faf950f3a6d3bfc7429c3a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 18 Nov 2022 13:40:38 +0800 Subject: [PATCH 052/122] add article/articleCategory.vue --- ZR.Vue/src/views/system/article/articleCategory.vue | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 ZR.Vue/src/views/system/article/articleCategory.vue diff --git a/ZR.Vue/src/views/system/article/articleCategory.vue b/ZR.Vue/src/views/system/article/articleCategory.vue new file mode 100644 index 00000000..7ec72d46 --- /dev/null +++ b/ZR.Vue/src/views/system/article/articleCategory.vue @@ -0,0 +1,9 @@ + -- Gitee From 84601ad2a87dca89e84d7b885bd734c1f0dee4be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 18 Nov 2022 14:02:48 +0800 Subject: [PATCH 053/122] =?UTF-8?q?=E7=A7=BB=E9=99=A4system=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Repository/ZR.Repository.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index 5141f8bb..97fe39e5 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -19,6 +19,5 @@ - -- Gitee From 5c9e8ef451819865178cf9455cadb3dd7c627920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 22 Nov 2022 11:56:00 +0800 Subject: [PATCH 054/122] update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 51714287..b20a457b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -

ZRAdmin.NET后台管理系统

-

基于.NET5/.NET6 + vue2.x/vue3.x前后端分离的.net快速开发框架

+

ZR.Admin.NET后台管理系统

+

基于.NET5/.NET6/.Net7 + vue2.x/vue3.x前后端分离的.net快速开发框架

@@ -35,13 +35,14 @@ | ----------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | | Vue2 + Net5 | | [克隆/下载](https://gitee.com/izory/ZrAdminNetCore/) | | Vue2 + Net6 | [克隆/下载](https://github.com/izhaorui/ZrAdmin.NET/tree/net6.0) | [克隆/下载](https://gitee.com/izory/ZrAdminNetCore/tree/net6.0/) | -| Vue3 | | [克隆/下载](https://gitee.com/izory/ZRAdmin-vue) +| Vue3 | | [克隆/下载](https://gitee.com/izory/ZRAdmin-vue) | +| Net7 | | [克隆/下载](https://gitee.com/izory/ZrAdminNetCore/tree/net7.0/) | ## 🍁前端技术 Vue版前端技术栈 :基于vue2.x/vue3.x、vuex、vue-router 、vue-cli 、axios、 element-ui、echats、i18n国际化等,前端采用vscode工具开发 ## 🍀后端技术 -- 核心框架:.Net5.0/.Net6.0 + Web API + sqlsugar + swagger + signalR + IpRateLimit + Quartz.net + Redis +- 核心框架:.Net5.0/.Net6.0/.Net7.0 + Web API + sqlsugar + swagger + signalR + IpRateLimit + Quartz.net + Redis - 定时计划任务:Quartz.Net组件,支持执行程序集或者http网络请求 - 安全支持:过滤器(数据权限过滤)、Sql注入、请求伪造 - 日志管理:NLog、登录日志、操作日志、定时任务日志 -- Gitee From 0fe102b146e37b962676d21fea651fbcbc9fccfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 22 Nov 2022 18:27:51 +0800 Subject: [PATCH 055/122] =?UTF-8?q?add=E6=8F=90=E9=97=AE=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitee/ISSUE_TEMPLATE.zh-CN.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .gitee/ISSUE_TEMPLATE.zh-CN.md diff --git a/.gitee/ISSUE_TEMPLATE.zh-CN.md b/.gitee/ISSUE_TEMPLATE.zh-CN.md new file mode 100644 index 00000000..2c87cb9e --- /dev/null +++ b/.gitee/ISSUE_TEMPLATE.zh-CN.md @@ -0,0 +1,22 @@ +### ôģ + + + +### + + + +### Vue汾 + + + +### .NetCore汾 + + + +### Ϣ + + + + +### ȡʱ -- Gitee From 219d0eadca871bf18e83e223d6428081c3400338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 29 Nov 2022 11:05:22 +0800 Subject: [PATCH 056/122] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.CodeGenerator/ZR.CodeGenerator.csproj | 2 +- ZR.Model/ZR.Model.csproj | 2 +- ZR.Repository/ZR.Repository.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ZR.CodeGenerator/ZR.CodeGenerator.csproj b/ZR.CodeGenerator/ZR.CodeGenerator.csproj index 9d7d005e..e4d57c90 100644 --- a/ZR.CodeGenerator/ZR.CodeGenerator.csproj +++ b/ZR.CodeGenerator/ZR.CodeGenerator.csproj @@ -12,6 +12,6 @@ - + diff --git a/ZR.Model/ZR.Model.csproj b/ZR.Model/ZR.Model.csproj index 29d1a05a..5489226c 100644 --- a/ZR.Model/ZR.Model.csproj +++ b/ZR.Model/ZR.Model.csproj @@ -7,7 +7,7 @@ - + diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index 97fe39e5..86afcf23 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -14,7 +14,7 @@ - + -- Gitee From 77c798c21b71518ce72ab940938036d3beafe8eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 29 Nov 2022 11:43:39 +0800 Subject: [PATCH 057/122] =?UTF-8?q?=E4=BC=98=E5=8C=96Vue3&=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=B1=82=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CodeGenTemplate/TplControllers.txt | 7 +- .../wwwroot/CodeGenTemplate/TplDto.txt | 2 - .../wwwroot/CodeGenTemplate/TplIService.txt | 2 +- .../wwwroot/CodeGenTemplate/TplService.txt | 3 +- .../wwwroot/CodeGenTemplate/v3/Vue.txt | 164 +++++++++--------- ZR.CodeGenerator/CodeGeneratorTool.cs | 6 +- 6 files changed, 97 insertions(+), 87 deletions(-) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt index 1dc2dfe3..f6a67384 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt @@ -149,9 +149,12 @@ $if(replaceDto.ShowBtnExport) [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:export")] public IActionResult Export([FromQuery] ${replaceDto.ModelTypeName}QueryDto parm) { - parm.PageSize = 10000; + parm.PageSize = 100000; var list = _${replaceDto.ModelTypeName}Service.GetList(parm).Result; - + if (list == null || list.Count <= 0) + { + return ToResponse(ResultCode.FAIL, "没有要导出的数据"); + } string sFileName = ExportExcel(list, "${replaceDto.ModelTypeName}", "${genTable.FunctionName}"); return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); } diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt index e7067710..5acedd92 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt @@ -31,12 +31,10 @@ $end public class ${replaceDto.ModelTypeName}Dto { $foreach(item in genTable.Columns) -$if((item.IsInsert || item.IsEdit || item.IsPk || item.IsIncrement)) $if(item.IsRequired) [Required(ErrorMessage = "${item.ColumnComment}不能为空")] $end public $item.CsharpType$item.RequiredStr $item.CsharpField { get; set; } -$end $end } } diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt index aebe0330..bc227965 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt @@ -14,7 +14,7 @@ namespace ${options.IServicsNamespace}.${options.SubNamespace}.I${options.SubNam ///

public interface I${replaceDto.ModelTypeName}Service : IBaseService<${replaceDto.ModelTypeName}> { - PagedInfo<${replaceDto.ModelTypeName}> GetList(${replaceDto.ModelTypeName}QueryDto parm); + PagedInfo<${replaceDto.ModelTypeName}Dto> GetList(${replaceDto.ModelTypeName}QueryDto parm); $if(genTable.TplCategory == "tree") List<${replaceDto.ModelTypeName}> GetTreeList(${replaceDto.ModelTypeName}QueryDto parm); diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt index 6568c467..8a090acd 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt @@ -26,7 +26,7 @@ namespace ${options.ServicesNamespace}.${options.SubNamespace} ///
/// /// - public PagedInfo<${replaceDto.ModelTypeName}> GetList(${replaceDto.ModelTypeName}QueryDto parm) + public PagedInfo<${replaceDto.ModelTypeName}Dto> GetList(${replaceDto.ModelTypeName}QueryDto parm) { //开始拼装查询条件 var predicate = Expressionable.Create<${replaceDto.ModelTypeName}>(); @@ -54,6 +54,7 @@ $if(genTable.Options.SortField != "" && genTable.Options.SortField != null) .OrderBy("${genTable.Options.SortField} ${genTable.Options.SortType}") $end .Where(predicate.ToExpression()) + .Select<${replaceDto.ModelTypeName}Dto>() .ToPage(parm); return response; diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt index c7d9fc2e..ff3b2c7c 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt @@ -27,13 +27,13 @@ $if(column.HtmlType == "datetime") @@ -289,9 +289,7 @@ from '@/api/${tool.FirstLowerCase(genTable.ModuleName)}/${genTable.BusinessName. const { proxy } = getCurrentInstance() // 选中${replaceDto.FistLowerPk}数组数组 const ids = ref([]) -// 非单选禁用 const single = ref(true) -// 非多个禁用 const multiple = ref(true) const loading = ref(false) const showSearch = ref(true) @@ -315,35 +313,11 @@ $if(column.IsList) $end $end ]) -const title = ref("") -// 操作类型 1、add 2、edit 3、view -const opertype = ref(0) -const open = ref(false) -const state = reactive({ - form: {}, - rules: { -$foreach(column in genTable.Columns) -$if(column.IsRequired && column.IsIncrement == false) - ${column.CsharpFieldFl}: [{ required: true, message: "${column.ColumnComment}不能为空", trigger: $if(column.htmlType == "select")"change"$else"blur"$end -$if(column.CsharpType == "int" || column.CsharpType == "long"), type: "number"$end }], -$end -$end - }, - options: { -$foreach(column in genTable.Columns) -$if(column.HtmlType == "radio" || column.HtmlType == "select" || column.HtmlType == "checkbox" || column.HtmlType == "selectMulti") - //$if(column.ColumnComment != "") ${column.ColumnComment} $else ${column.CsharpFieldFl}$end选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'} - $if(column.DictType != "")${column.DictType}$else${column.CsharpFieldFl}Options$end: [], -$end -$end - } -}) - -const { form, rules, options } = toRefs(state) const total = ref(0) const dataList = ref([]) const queryRef = ref() -const formRef = ref() +const defaultTime = ref([new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]) + $foreach(item in genTable.Columns) $if(item.HtmlType == "datetime" && item.IsQuery == true) // ${item.ColumnComment}时间范围 @@ -410,14 +384,82 @@ $end $end loading.value = true list${genTable.BusinessName}(queryParams).then(res => { - if (res.code == 200) { - dataList.value = res.data.result - total.value = res.data.totalNum + const { code, data } = res + if (code == 200) { + dataList.value = data.result + total.value = data.totalNum loading.value = false } }) } +// 查询 +function handleQuery() { + queryParams.pageNum = 1 + getList() +} + +// 重置查询操作 +function resetQuery(){ +$foreach(item in genTable.Columns) +$if(item.HtmlType == "datetime" && item.IsQuery == true) + // ${item.ColumnComment}时间范围 + dateRange${item.CsharpField}.value = [] +$end +$end + proxy.resetForm("queryRef") + handleQuery() +} + +// 多选框选中数据 +function handleSelectionChange(selection) { + ids.value = selection.map((item) => item.${replaceDto.FistLowerPk}); + single.value = selection.length != 1 + multiple.value = !selection.length; +} + +// 自定义排序 +function sortChange(column) { + if (column.prop == null || column.order == null) { + queryParams.sort = undefined + queryParams.sortType = undefined + } else { + queryParams.sort = column.prop + queryParams.sortType = column.order + } + + handleQuery() +} + + +/*************** form操作 ***************/ +const formRef = ref() +const title = ref("") +// 操作类型 1、add 2、edit 3、view +const opertype = ref(0) +const open = ref(false) +const state = reactive({ + form: {}, + rules: { +$foreach(column in genTable.Columns) +$if(column.IsRequired && column.IsIncrement == false) + ${column.CsharpFieldFl}: [{ required: true, message: "${column.ColumnComment}不能为空", trigger: $if(column.htmlType == "select")"change"$else"blur"$end +$if(column.CsharpType == "int" || column.CsharpType == "long"), type: "number"$end }], +$end +$end + }, + options: { +$foreach(column in genTable.Columns) +$if(column.HtmlType == "radio" || column.HtmlType == "select" || column.HtmlType == "checkbox" || column.HtmlType == "selectMulti") + //$if(column.ColumnComment != "") ${column.ColumnComment} $else ${column.CsharpFieldFl}$end选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'} + $if(column.DictType != "")${column.DictType}$else${column.CsharpFieldFl}Options$end: [], +$end +$end + } +}) + +const { form, rules, options } = toRefs(state) + // 关闭dialog function cancel(){ open.value = false @@ -439,20 +481,6 @@ $end proxy.resetForm("formRef") } -// 查询 -function handleQuery() { - queryParams.pageNum = 1 - getList() -} - -// 添加 -function handleAdd() { - reset(); - open.value = true - title.value = '添加' - opertype.value = 1 -} - // 删除按钮操作 function handleDelete(row) { const Ids = row.${replaceDto.FistLowerPk} || ids.value @@ -468,6 +496,14 @@ function handleDelete(row) { .catch(() => {}) } +// 添加按钮操作 +function handleAdd() { + reset(); + open.value = true + title.value = '添加' + opertype.value = 1 +} + // 修改按钮操作 function handleUpdate(row) { reset() @@ -491,7 +527,7 @@ $end }) } -// 表单提交 +// 添加&修改 表单提交 function submitForm() { proxy.${refs}refs["formRef"].validate((valid) => { if (valid) { @@ -521,17 +557,6 @@ $end }) } -// 重置查询操作 -function resetQuery(){ -$foreach(item in genTable.Columns) -$if(item.HtmlType == "datetime" && item.IsQuery == true) - // ${item.ColumnComment}时间范围 - dateRange${item.CsharpField}.value = [] -$end -$end - proxy.resetForm("queryRef") - handleQuery() -} $if(replaceDto.ShowBtnExport) // 导出按钮操作 function handleExport() { @@ -549,6 +574,7 @@ function handleExport() { }) } $end + $if(replaceDto.ShowBtnView) /** * 预览 @@ -561,6 +587,7 @@ function handlePreview(row) { form.value = row } $end + $if(replaceDto.ShowBtnTruncate) /** * 清空 @@ -581,25 +608,6 @@ function handleClear() { }) } $end -// 多选框选中数据 -function handleSelectionChange(selection) { - ids.value = selection.map((item) => item.${replaceDto.FistLowerPk}); - single.value = selection.length != 1 - multiple.value = !selection.length; -} - -// 自定义排序 -function sortChange(column) { - if (column.prop == null || column.order == null) { - queryParams.sort = undefined - queryParams.sortType = undefined - } else { - queryParams.sort = column.prop - queryParams.sortType = column.order - } - - handleQuery() -} handleQuery() \ No newline at end of file diff --git a/ZR.CodeGenerator/CodeGeneratorTool.cs b/ZR.CodeGenerator/CodeGeneratorTool.cs index 9f54bf2d..e35e003e 100644 --- a/ZR.CodeGenerator/CodeGeneratorTool.cs +++ b/ZR.CodeGenerator/CodeGeneratorTool.cs @@ -257,7 +257,7 @@ namespace ZR.CodeGenerator string fileName; if (generateDto.VueVersion == 3) { - fileName = generateDto.GenTable.BusinessName.ToLower() + ".js"; + fileName = generateDto.GenTable.BusinessName.ToLower() + ".js";//vue3 api引用目前只能小写 } else { @@ -310,7 +310,7 @@ namespace ZR.CodeGenerator /// public static string GenerateVueTableList() { - return JnHelper.ReadTemplate(CodeTemplateDir, "TableList.txt").Render(); + return JnHelper.ReadTemplate(CodeTemplateDir, "TableList.txt").Render(); } /// @@ -370,7 +370,7 @@ namespace ZR.CodeGenerator { try { - return string.IsNullOrEmpty(str) ? str : str.Substring(0, 1).ToLower() + str[1..]; + return string.IsNullOrEmpty(str) ? str : str[..1].ToLower() + str[1..]; } catch (Exception ex) { -- Gitee From 34cb8c6c987700fdb32037489b9ada6e60104fc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 29 Nov 2022 17:30:04 +0800 Subject: [PATCH 058/122] =?UTF-8?q?=E4=BC=98=E5=8C=96Vue3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wwwroot/CodeGenTemplate/TplDto.txt | 21 ++++++++++++- .../wwwroot/CodeGenTemplate/TplModel.txt | 13 ++------ .../wwwroot/CodeGenTemplate/TplService.txt | 12 +++++--- .../wwwroot/CodeGenTemplate/v3/TreeVue.txt | 4 +-- .../wwwroot/CodeGenTemplate/v3/Vue.txt | 4 +-- ZR.Repository/BaseRepository.cs | 30 +++++++++++++++++-- ZR.Repository/ZR.Repository.csproj | 1 + 7 files changed, 63 insertions(+), 22 deletions(-) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt index 5acedd92..51677917 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt @@ -3,6 +3,9 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using ${options.ModelsNamespace}.Dto; using ${options.ModelsNamespace}.Models; +$if(replaceDto.ShowBtnExport) +using OfficeOpenXml.Attributes; +$end namespace ${options.DtosNamespace}.Dto { @@ -26,15 +29,31 @@ $end } /// - /// ${genTable.FunctionName}输入对象 + /// ${genTable.FunctionName}输入输出对象 /// public class ${replaceDto.ModelTypeName}Dto { $foreach(item in genTable.Columns) $if(item.IsRequired) [Required(ErrorMessage = "${item.ColumnComment}不能为空")] +$end +$if(replaceDto.ShowBtnExport) +$if(item.IsExport) + [EpplusTableColumn(Header = "$if(item.ColumnComment == "")${item.CsharpField}${else}${item.ColumnComment}${end}"$if(item.CsharpType == "DateTime"), NumberFormat = "yyyy-MM-dd HH:mm:ss"$end)] +$else + [EpplusIgnore] +$end $end public $item.CsharpType$item.RequiredStr $item.CsharpField { get; set; } + +$end + +$if(genTable.TplCategory == "subNav" && genTable.SubTable != null) + public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName} { get; set; } +$end + +$if(genTable.TplCategory == "subNavMore" && genTable.SubTable != null) + public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName} { get; set; } $end } } diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt index 82e6efbb..bd81ff1e 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt @@ -1,8 +1,6 @@ using System; using SqlSugar; -$if(replaceDto.ShowBtnExport) -using OfficeOpenXml.Attributes; -$end +using System.Collections.Generic; namespace ${options.ModelsNamespace}.Models { @@ -20,13 +18,6 @@ $foreach(item in genTable.Columns) /// 描述 :${item.ColumnComment} ${item.Remark} /// 空值 :$if(item.IsRequired == "True")false${else}true${end} /// -$if(replaceDto.ShowBtnExport) -$if(item.IsExport) - [EpplusTableColumn(Header = "$if(item.ColumnComment == "")${item.CsharpField}${else}${item.ColumnComment}${end}"$if(item.CsharpType == "DateTime"), NumberFormat = "yyyy-MM-dd HH:mm:ss"$end)] -$else - [EpplusIgnore] -$end -$end $if(item.IsPk || item.IsIncrement) [SugarColumn(IsPrimaryKey = ${item.IsPk.ToString().ToLower()}, IsIdentity = ${item.IsIncrement.ToString().ToLower()}$if(item.CsharpField.ToLower() != item.ColumnName.ToLower()), ColumnName = "$item.ColumnName"$end)] $elseif(item.CsharpField.ToLower() != item.ColumnName.ToLower()) @@ -35,8 +26,8 @@ $end public $item.CsharpType$item.RequiredStr $item.CsharpField { get; set; } ${end} -$if(genTable.TplCategory == "tree") +$if(genTable.TplCategory == "tree") [SugarColumn(IsIgnore = true)] public List<${replaceDto.ModelTypeName}> Children { get; set; } $end diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt index 8a090acd..c744b4b7 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt @@ -7,6 +7,9 @@ using ${options.ModelsNamespace}.Models; using ${options.IRepositoriesNamespace}; using ${options.IServicsNamespace}.${options.SubNamespace}.I${options.SubNamespace}Service; using System.Linq; +$if(genTable.TplCategory == "tree") +using System.Collections.Generic; +$end namespace ${options.ServicesNamespace}.${options.SubNamespace} { @@ -51,11 +54,10 @@ $if(null != genTable.SubTableName && "" != genTable.SubTableName) .Includes(it => it.${genTable.SubTable.ClassName}.MappingField(z => z.${genTable.SubTableFkName}, () => it.${replaceDto.PKName})) $end $if(genTable.Options.SortField != "" && genTable.Options.SortField != null) - .OrderBy("${genTable.Options.SortField} ${genTable.Options.SortType}") + //.OrderBy("${genTable.Options.SortField} ${genTable.Options.SortType}") $end .Where(predicate.ToExpression()) - .Select<${replaceDto.ModelTypeName}Dto>() - .ToPage(parm); + .ToPage<${replaceDto.ModelTypeName}, ${replaceDto.ModelTypeName}Dto>(parm); return response; } @@ -82,12 +84,14 @@ $end $end $end - var response = Queryable().Where(predicate.ToExpression()) + var response = Queryable() + .Where(predicate.ToExpression()) .ToTree(it => it.Children, it => it.${genTable.Options.TreeParentCode}, 0); return response; } $end + /// /// 添加${genTable.FunctionName} /// diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt index 6e91504f..d63099d2 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt @@ -317,8 +317,8 @@ const showSearch = ref(true) const queryParams = reactive({ pageNum: 1, pageSize: 10, - sort: undefined, - sortType: undefined, + sort: '${genTable.Options.SortField}', + sortType: '${genTable.Options.SortType}', $foreach(item in genTable.Columns) $if(item.IsQuery == true) ${item.CsharpFieldFl}: undefined, diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt index ff3b2c7c..d5ce0759 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt @@ -296,8 +296,8 @@ const showSearch = ref(true) const queryParams = reactive({ pageNum: 1, pageSize: 10, - sort: undefined, - sortType: undefined, + sort: '${genTable.Options.SortField}', + sortType: '${genTable.Options.SortType}', $foreach(item in genTable.Columns) $if(item.IsQuery == true) ${item.CsharpFieldFl}: undefined, diff --git a/ZR.Repository/BaseRepository.cs b/ZR.Repository/BaseRepository.cs index 13decfa2..a2489dd8 100644 --- a/ZR.Repository/BaseRepository.cs +++ b/ZR.Repository/BaseRepository.cs @@ -1,11 +1,15 @@ -using SqlSugar; +using Infrastructure.Extensions; +using Mapster; +using SqlSugar; using SqlSugar.IOC; using System; using System.Collections.Generic; using System.Data; using System.Linq.Expressions; using System.Reflection; +using Ubiety.Dns.Core; using ZR.Model; +using ZR.Model.Dto; namespace ZR.Repository { @@ -365,11 +369,33 @@ namespace ZR.Repository page.PageSize = parm.PageSize; page.PageIndex = parm.PageNum; - page.Result = source.OrderByIF(!string.IsNullOrEmpty(parm.Sort), $"{parm.Sort} {(parm.SortType.Contains("desc") ? "desc" : "asc")}") + page.Result = source.OrderByIF(parm.Sort.IsNotEmpty(), $"{parm.Sort} {(parm.SortType.Contains("desc") ? "desc" : "asc")}") .ToPageList(parm.PageNum, parm.PageSize, ref total); page.TotalNum = total; return page; } + /// + /// 转指定实体类Dto + /// + /// + /// + /// + /// + /// + public static PagedInfo ToPage(this ISugarQueryable source, PagerInfo parm) + { + var page = new PagedInfo(); + var total = 0; + page.PageSize = parm.PageSize; + page.PageIndex = parm.PageNum; + + var result = source.OrderByIF(parm.Sort.IsNotEmpty(), $"{parm.Sort} {(parm.SortType.Contains("desc") ? "desc" : "asc")}") + .ToPageList(parm.PageNum, parm.PageSize, ref total); + page.TotalNum = total; + + page.Result = result.Adapt>(); + return page; + } } } diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index 86afcf23..e4ef4f2d 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -10,6 +10,7 @@ + -- Gitee From 555c4768fc4b5cdd439fa97babb0d78705dff8f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 1 Dec 2022 17:00:49 +0800 Subject: [PATCH 059/122] update CodeGenTemplate/TplDto.txt --- ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt index 51677917..3e799238 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt @@ -49,10 +49,16 @@ $end $end $if(genTable.TplCategory == "subNav" && genTable.SubTable != null) +$if(replaceDto.ShowBtnExport) + [EpplusIgnore] +$end public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName} { get; set; } $end $if(genTable.TplCategory == "subNavMore" && genTable.SubTable != null) +$if(replaceDto.ShowBtnExport) + [EpplusIgnore] +$end public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName} { get; set; } $end } -- Gitee From d38b4b1d4493ba2d21dd3f75b88db91661b33df0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 1 Dec 2022 17:01:15 +0800 Subject: [PATCH 060/122] update HttpHelper.cs --- Infrastructure/Helper/HttpHelper.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Infrastructure/Helper/HttpHelper.cs b/Infrastructure/Helper/HttpHelper.cs index a42482b7..f9c042c3 100644 --- a/Infrastructure/Helper/HttpHelper.cs +++ b/Infrastructure/Helper/HttpHelper.cs @@ -109,7 +109,6 @@ namespace Infrastructure ///
/// /// - /// /// public static async Task HttpGetAsync(string url, Dictionary headers = null) { -- Gitee From 5fb5963ffb8d53dd5dc601d6deeee22623ce7ef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 1 Dec 2022 17:01:41 +0800 Subject: [PATCH 061/122] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=89=A7=E8=A1=8CSQL=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/System/TasksController.cs | 19 ++- ZR.Model/System/Dto/TasksDto.cs | 114 ++---------------- ZR.Model/System/SysTasks.cs | 7 +- ZR.Service/System/SysTasksQzService.cs | 1 + ZR.Tasks/TaskScheduler/Job_SqlExecute.cs | 45 +++++++ document/admin-mysql.sql | 1 + document/admin-sqlserver.sql | 5 +- 7 files changed, 80 insertions(+), 112 deletions(-) create mode 100644 ZR.Tasks/TaskScheduler/Job_SqlExecute.cs diff --git a/ZR.Admin.WebApi/Controllers/System/TasksController.cs b/ZR.Admin.WebApi/Controllers/System/TasksController.cs index 30a9a529..ef005b3b 100644 --- a/ZR.Admin.WebApi/Controllers/System/TasksController.cs +++ b/ZR.Admin.WebApi/Controllers/System/TasksController.cs @@ -42,7 +42,7 @@ namespace ZR.Admin.WebApi.Controllers /// [HttpGet("list")] [ActionPermissionFilter(Permission = "monitor:job:list")] - public IActionResult Query([FromQuery] TasksQueryDto parm, [FromQuery] PagerInfo pager) + public IActionResult ListTask([FromQuery] TasksQueryDto parm, [FromQuery] PagerInfo pager) { //开始拼装查询条件 var predicate = Expressionable.Create(); @@ -51,6 +51,7 @@ namespace ZR.Admin.WebApi.Controllers m => m.Name.Contains(parm.QueryText) || m.JobGroup.Contains(parm.QueryText) || m.AssemblyName.Contains(parm.QueryText)); + predicate.AndIF(parm.TaskType != null, m => m.TaskType == parm.TaskType); var response = _tasksQzService.GetPages(predicate.ToExpression(), pager, f => f.IsStart, OrderByType.Desc); @@ -94,6 +95,15 @@ namespace ZR.Admin.WebApi.Controllers { throw new CustomException($"地址不能为空"); } + if (string.IsNullOrEmpty(parm.SqlText) && parm.TaskType == 3) + { + throw new CustomException($"sql语句不能为空"); + } + if (parm.SqlText.IfNotEmpty() && parm.TaskType == 3) + { + parm.AssemblyName = "ZR.Tasks"; + parm.ClassName = "TaskScheduler.Job_SqlExecute"; + } if (parm.TaskType == 1 && (parm.AssemblyName.IsEmpty() || parm.ClassName.IsEmpty())) { throw new CustomException($"程序集或者类名不能为空"); @@ -113,7 +123,7 @@ namespace ZR.Admin.WebApi.Controllers [HttpPost("update")] [ActionPermissionFilter(Permission = "monitor:job:edit")] [Log(Title = "修改任务", BusinessType = BusinessType.UPDATE)] - public async Task Update([FromBody] TasksUpdateDto parm) + public async Task Update([FromBody] TasksCreateDto parm) { //判断是否已经存在 if (_tasksQzService.Any(m => m.Name == parm.Name && m.ID != parm.ID)) @@ -138,6 +148,11 @@ namespace ZR.Admin.WebApi.Controllers parm.AssemblyName = "ZR.Tasks"; parm.ClassName = "TaskScheduler.Job_HttpRequest"; } + if (parm.SqlText.IfNotEmpty() && parm.TaskType == 3) + { + parm.AssemblyName = "ZR.Tasks"; + parm.ClassName = "TaskScheduler.Job_SqlExecute"; + } if (tasksQz.IsStart) { throw new CustomException($"该任务正在运行中,请先停止在更新"); diff --git a/ZR.Model/System/Dto/TasksDto.cs b/ZR.Model/System/Dto/TasksDto.cs index bffb5476..65a0871c 100644 --- a/ZR.Model/System/Dto/TasksDto.cs +++ b/ZR.Model/System/Dto/TasksDto.cs @@ -14,115 +14,14 @@ namespace ZR.Model.System.Dto ///
[Display(Name = "查询字符串")] public string QueryText { get; set; } + public int? TaskType { get; set; } + public int? TriggerType { get; set; } } /// /// 添加任务 /// public class TasksCreateDto - { - /// - /// 描述 : 任务名称 - /// 空值 : False - /// 默认 : - /// - [Display(Name = "任务名称")] - [Required(ErrorMessage = "任务名称不能为空")] - public string Name { get; set; } - - /// - /// 描述 : 任务分组 - /// 空值 : False - /// 默认 : - /// - [Display(Name = "任务分组")] - [Required(ErrorMessage = "任务分组不能为空")] - public string JobGroup { get; set; } - - /// - /// 描述 : 运行时间表达式 - /// 空值 : False - /// 默认 : - /// - [Display(Name = "运行时间表达式")] - public string Cron { get; set; } - - /// - /// 描述 : 程序集名称 - /// 空值 : False - /// 默认 : - /// - [Display(Name = "程序集名称")] - //[Required(ErrorMessage = "程序集名称不能为空")] - public string AssemblyName { get; set; } - - /// - /// 描述 : 任务所在类 - /// 空值 : False - /// 默认 : - /// - [Display(Name = "任务所在类")] - //[Required(ErrorMessage = "任务所在类不能为空")] - public string ClassName { get; set; } - - /// - /// 描述 : 任务描述 - /// 空值 : True - /// 默认 : - /// - [Display(Name = "任务描述")] - public string Remark { get; set; } - - /// - /// 描述 : 开始时间 - /// 空值 : True - /// 默认 : - /// - [Display(Name = "开始时间")] - public DateTime? BeginTime { get; set; } - - /// - /// 描述 : 结束时间 - /// 空值 : True - /// 默认 : - /// - [Display(Name = "结束时间")] - public DateTime? EndTime { get; set; } - - /// - /// 描述 : 触发器类型(0、simple 1、cron) - /// 空值 : False - /// 默认 : - /// - [Display(Name = "触发器类型(0、simple 1、cron)")] - public int TriggerType { get; set; } - - /// - /// 描述 : 执行间隔时间(单位:秒) - /// 空值 : False - /// 默认 : 0 - /// - [Display(Name = "执行间隔时间(单位:秒)")] - public int IntervalSecond { get; set; } - - /// - /// 描述 : 传入参数 - /// 空值 : True - /// 默认 : - /// - [Display(Name = "传入参数")] - public string JobParams { get; set; } - public string ApiUrl { get; set; } - /// - /// 1、程序集任务 2、apiUrl任务 - /// - public int TaskType { get; set; } - } - - /// - /// 更新任务 - /// - public class TasksUpdateDto { /// /// 描述 : 任务id @@ -130,7 +29,7 @@ namespace ZR.Model.System.Dto /// 默认 : /// [Display(Name = "任务id")] - [Required(ErrorMessage = "任务不能为空")] + //[Required(ErrorMessage = "任务不能为空")] public string ID { get; set; } /// @@ -165,7 +64,7 @@ namespace ZR.Model.System.Dto /// 默认 : /// [Display(Name = "程序集名称")] - [Required(ErrorMessage = "程序集名称不能为空")] + //[Required(ErrorMessage = "程序集名称不能为空")] public string AssemblyName { get; set; } /// @@ -174,7 +73,7 @@ namespace ZR.Model.System.Dto /// 默认 : /// [Display(Name = "任务所在类")] - [Required(ErrorMessage = "任务所在类不能为空")] + //[Required(ErrorMessage = "任务所在类不能为空")] public string ClassName { get; set; } /// @@ -226,8 +125,9 @@ namespace ZR.Model.System.Dto public string JobParams { get; set; } public string ApiUrl { get; set; } /// - /// 1、程序集任务 2、apiUrl任务 + /// 1、程序集任务 2、apiUrl任务 3、SQL语句 /// public int TaskType { get; set; } + public string SqlText { get; set; } } } diff --git a/ZR.Model/System/SysTasks.cs b/ZR.Model/System/SysTasks.cs index 971ae410..263307f2 100644 --- a/ZR.Model/System/SysTasks.cs +++ b/ZR.Model/System/SysTasks.cs @@ -161,8 +161,13 @@ namespace ZR.Model.System /// public string ApiUrl { get; set; } /// - /// 任务类型 1程序集2网络请求 + /// 任务类型 1、程序集 2、网络请求 3、SQL语句 /// public int TaskType { get; set; } + + /// + /// SQL语句 + /// + public string SqlText { get; set; } } } diff --git a/ZR.Service/System/SysTasksQzService.cs b/ZR.Service/System/SysTasksQzService.cs index 8c4e1c64..69c01a78 100644 --- a/ZR.Service/System/SysTasksQzService.cs +++ b/ZR.Service/System/SysTasksQzService.cs @@ -53,6 +53,7 @@ namespace ZR.Service.System EndTime = parm.EndTime, TaskType = parm.TaskType, ApiUrl = parm.ApiUrl, + SqlText = parm.SqlText, }); } } diff --git a/ZR.Tasks/TaskScheduler/Job_SqlExecute.cs b/ZR.Tasks/TaskScheduler/Job_SqlExecute.cs new file mode 100644 index 00000000..4296aef0 --- /dev/null +++ b/ZR.Tasks/TaskScheduler/Job_SqlExecute.cs @@ -0,0 +1,45 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Extensions; +using Quartz; +using Quartz.Impl; +using Quartz.Impl.Triggers; +using SqlSugar.IOC; +using System; +using System.Threading.Tasks; +using ZR.Service.System.IService; + +namespace ZR.Tasks.TaskScheduler +{ + [AppService(ServiceType = typeof(Job_SqlExecute), ServiceLifetime = LifeTime.Scoped)] + public class Job_SqlExecute : JobBase, IJob + { + private readonly ISysTasksQzService tasksQzService; + private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + + public Job_SqlExecute(ISysTasksQzService tasksQzService) + { + this.tasksQzService = tasksQzService; + } + public async Task Execute(IJobExecutionContext context) + { + await ExecuteJob(context, async () => await Run(context)); + } + public async Task Run(IJobExecutionContext context) + { + AbstractTrigger trigger = (context as JobExecutionContextImpl).Trigger as AbstractTrigger; + + var info = await tasksQzService.GetByIdAsync(trigger.JobName); + + if (info != null && info.SqlText.IsNotEmpty()) + { + var result = DbScoped.SugarScope.Ado.ExecuteCommandWithGo(info.SqlText); + logger.Info($"任务【{info.Name}】sql请求执行结果=" + result); + } + else + { + throw new CustomException($"任务{trigger?.JobName}执行失败,任务不存在"); + } + } + } +} diff --git a/document/admin-mysql.sql b/document/admin-mysql.sql index 2cfb08ef..552ff202 100644 --- a/document/admin-mysql.sql +++ b/document/admin-mysql.sql @@ -28,6 +28,7 @@ CREATE TABLE `sys_tasks` ( `lastRunTime` datetime(0) NULL DEFAULT NULL COMMENT '最后执行时间', `apiUrl` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'api执行地址', `taskType` int(4) NULL DEFAULT 1 COMMENT '任务类型1程序集任务 2网络请求', + `sqlText` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'SQL语句', PRIMARY KEY (`ID`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '计划任务' ROW_FORMAT = Dynamic; diff --git a/document/admin-sqlserver.sql b/document/admin-sqlserver.sql index 9ca30e05..f3077f4b 100644 --- a/document/admin-sqlserver.sql +++ b/document/admin-sqlserver.sql @@ -26,10 +26,11 @@ CREATE TABLE sys_tasks update_by varchar(50) NULL DEFAULT NULL , --'更新人编码', lastRunTime datetime , --最后执行时间 taskType int null , --任务类型 1程序集 2网络请求 - apiUrl varchar(200) --网络请求地址 + apiUrl varchar(200), --网络请求地址 + sqlText VARCHAR(1000) --sql语句 ) GO -INSERT INTO sys_tasks VALUES ('1410905433996136448', '测试任务', 'SYSTEM', '0 0/10 * * * ? ', 'ZR.Tasks', 'TaskScheduler.Job_SyncTest', NULL, 0, '2021-07-02 18:17:31', '9999-12-31 00:00:00', 1, 1, 1, NULL, '2021-07-02 18:17:23', '2021-07-02 18:17:31', 'admin', NULL, NULL, 1, ''); +INSERT INTO sys_tasks VALUES ('1410905433996136448', '测试任务', 'SYSTEM', '0 0/10 * * * ? ', 'ZR.Tasks', 'TaskScheduler.Job_SyncTest', NULL, 0, '2021-07-02 18:17:31', '9999-12-31 00:00:00', 1, 1, 1, NULL, '2021-07-02 18:17:23', '2021-07-02 18:17:31', 'admin', NULL, NULL, 1, '', ''); GO if OBJECT_ID(N'sys_tasks_log',N'U') is not NULL DROP TABLE sys_tasks_log GO -- Gitee From 768880328f8a4c7fb6c21dee4eab84dff5019ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Sat, 3 Dec 2022 17:26:59 +0800 Subject: [PATCH 062/122] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=96=B9=E6=B3=95=E5=B1=9E=E6=80=A7=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt index f6a67384..3001bb0b 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt @@ -144,7 +144,7 @@ $if(replaceDto.ShowBtnExport) /// 导出${genTable.FunctionName} ///
/// - [Log(Title = "${genTable.FunctionName}", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] + [Log(Title = "${genTable.FunctionName}", BusinessType = BusinessType.EXPORT)] [HttpGet("export")] [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:export")] public IActionResult Export([FromQuery] ${replaceDto.ModelTypeName}QueryDto parm) -- Gitee From a972dd6a860c453dc9dd4c16c18e6b4a2f0a14be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 5 Dec 2022 12:03:28 +0800 Subject: [PATCH 063/122] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E8=AF=B7=E6=B1=82=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Model/System/Dto/TasksDto.cs | 5 +++++ ZR.Model/System/SysTasks.cs | 4 ++++ ZR.Tasks/TaskScheduler/Job_HttpRequest.cs | 23 +++++++++++++++++++---- document/admin-mysql.sql | 23 ++++++++++++----------- document/admin-sqlserver.sql | 5 +++-- 5 files changed, 43 insertions(+), 17 deletions(-) diff --git a/ZR.Model/System/Dto/TasksDto.cs b/ZR.Model/System/Dto/TasksDto.cs index 65a0871c..fb3a0b41 100644 --- a/ZR.Model/System/Dto/TasksDto.cs +++ b/ZR.Model/System/Dto/TasksDto.cs @@ -129,5 +129,10 @@ namespace ZR.Model.System.Dto ///
public int TaskType { get; set; } public string SqlText { get; set; } + + /// + /// 网络请求方式 + /// + public string RequestMethod { get; set; } } } diff --git a/ZR.Model/System/SysTasks.cs b/ZR.Model/System/SysTasks.cs index 263307f2..150ca662 100644 --- a/ZR.Model/System/SysTasks.cs +++ b/ZR.Model/System/SysTasks.cs @@ -169,5 +169,9 @@ namespace ZR.Model.System /// SQL语句 ///
public string SqlText { get; set; } + /// + /// 网络请求方式 + /// + public string RequestMethod { get; set; } } } diff --git a/ZR.Tasks/TaskScheduler/Job_HttpRequest.cs b/ZR.Tasks/TaskScheduler/Job_HttpRequest.cs index c6a65df3..e878a633 100644 --- a/ZR.Tasks/TaskScheduler/Job_HttpRequest.cs +++ b/ZR.Tasks/TaskScheduler/Job_HttpRequest.cs @@ -30,15 +30,30 @@ namespace ZR.Tasks.TaskScheduler { AbstractTrigger trigger = (context as JobExecutionContextImpl).Trigger as AbstractTrigger; var info = await tasksQzService.GetByIdAsync(trigger.JobName); - if (info != null) + if (info == null) { - var result = await HttpHelper.HttpGetAsync("http://" + info.ApiUrl); - logger.Info($"任务【{info.Name}】网络请求执行结果=" + result); + throw new CustomException($"任务{trigger?.JobName}网络请求执行失败,任务不存在"); + } + string result; + if (info.RequestMethod != null && info.RequestMethod.Equals("POST", StringComparison.OrdinalIgnoreCase)) + { + result = await HttpHelper.HttpPostAsync(info.ApiUrl, info.JobParams); } else { - throw new CustomException($"任务{trigger?.JobName}网络请求执行失败,任务不存在"); + var url = info.ApiUrl; + if (url.IndexOf("?") > -1) + { + url += "&" + info.JobParams; + } + else + { + url += "?" + info.JobParams; + } + result = await HttpHelper.HttpGetAsync(url); } + + logger.Info($"任务【{info.Name}】网络请求执行结果=" + result); } } } diff --git a/document/admin-mysql.sql b/document/admin-mysql.sql index 552ff202..aec8bada 100644 --- a/document/admin-mysql.sql +++ b/document/admin-mysql.sql @@ -7,17 +7,17 @@ SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- DROP TABLE IF EXISTS `sys_tasks`; CREATE TABLE `sys_tasks` ( - `Id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'UID', - `Name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务名称', - `JobGroup` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务分组', - `Cron` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '运行时间表达式', - `AssemblyName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '程序集名称', - `ClassName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务所在类', - `Remark` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '任务描述', - `RunTimes` int(11) NOT NULL COMMENT '执行次数', - `BeginTime` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `EndTime` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', - `TriggerType` int(11) NOT NULL COMMENT '触发器类型(0、simple 1、cron)', + `id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'UID', + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务名称', + `jobGroup` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务分组', + `cron` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '运行时间表达式', + `assemblyName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '程序集名称', + `className` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务所在类', + `remark` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '任务描述', + `runTimes` int(11) NOT NULL COMMENT '执行次数', + `beginTime` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', + `endTime` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', + `triggerType` int(11) NOT NULL COMMENT '触发器类型(0、simple 1、cron)', `IntervalSecond` int(11) NOT NULL COMMENT '执行间隔时间(单位:秒)', `IsStart` tinyint(4) NOT NULL COMMENT '是否启动', `JobParams` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '传入参数', @@ -29,6 +29,7 @@ CREATE TABLE `sys_tasks` ( `apiUrl` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'api执行地址', `taskType` int(4) NULL DEFAULT 1 COMMENT '任务类型1程序集任务 2网络请求', `sqlText` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'SQL语句', + `requestMethod` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'http请求方法', PRIMARY KEY (`ID`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '计划任务' ROW_FORMAT = Dynamic; diff --git a/document/admin-sqlserver.sql b/document/admin-sqlserver.sql index f3077f4b..4a699824 100644 --- a/document/admin-sqlserver.sql +++ b/document/admin-sqlserver.sql @@ -27,10 +27,11 @@ CREATE TABLE sys_tasks lastRunTime datetime , --最后执行时间 taskType int null , --任务类型 1程序集 2网络请求 apiUrl varchar(200), --网络请求地址 - sqlText VARCHAR(1000) --sql语句 + sqlText VARCHAR(1000), --sql语句 + requestMethod VARCHAR(10) --请求方法 ) GO -INSERT INTO sys_tasks VALUES ('1410905433996136448', '测试任务', 'SYSTEM', '0 0/10 * * * ? ', 'ZR.Tasks', 'TaskScheduler.Job_SyncTest', NULL, 0, '2021-07-02 18:17:31', '9999-12-31 00:00:00', 1, 1, 1, NULL, '2021-07-02 18:17:23', '2021-07-02 18:17:31', 'admin', NULL, NULL, 1, '', ''); +INSERT INTO sys_tasks VALUES ('1410905433996136448', '测试任务', 'SYSTEM', '0 0/10 * * * ? ', 'ZR.Tasks', 'TaskScheduler.Job_SyncTest', NULL, 0, '2021-07-02 18:17:31', '9999-12-31 00:00:00', 1, 1, 1, NULL, '2021-07-02 18:17:23', '2021-07-02 18:17:31', 'admin', NULL, NULL, 1, '', '', ''); GO if OBJECT_ID(N'sys_tasks_log',N'U') is not NULL DROP TABLE sys_tasks_log GO -- Gitee From 8efed2b27cc281576db3b6a8e8c4eb4cde5ea94e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 5 Dec 2022 18:36:16 +0800 Subject: [PATCH 064/122] =?UTF-8?q?fix=EF=BC=9ATreeVue=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=A8=A1=E6=9D=BF=E7=94=9F=E6=88=90=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wwwroot/CodeGenTemplate/v3/TreeVue.txt | 55 ++++++++++--------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt index d63099d2..43950e56 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt @@ -31,10 +31,13 @@ $if(column.HtmlType == "datetime") -$elseif(column.HtmlType == "select" || column.HtmlType == "radio") +$elseif(column.HtmlType == "select" || column.HtmlType == "radio" || column.HtmlType == "selectMulti") - - + + + {{ item.dictLabel }} + {{ item.dictValue }} + $else @@ -125,9 +128,9 @@ $elseif(column.HtmlType == "checkbox" || column.HtmlType == "select" || column.H @@ -233,7 +236,7 @@ $elseif(column.HtmlType == "radio") - {{item.dictLabel}} + {{item.dictLabel}} @@ -249,11 +252,11 @@ $elseif(column.HtmlType == "editor") -$elseif(column.HtmlType == "select") +$elseif(column.HtmlType == "select" || column.HtmlType == "selectMulti") - - + + @@ -261,7 +264,7 @@ $elseif(column.HtmlType == "checkbox") - {{item.dictLabel}} + {{item.dictLabel}} @@ -335,28 +338,31 @@ const open = ref(false) const state = reactive({ form: {}, rules: { - $foreach(column in genTable.Columns) +$foreach(column in genTable.Columns) $if(column.IsRequired && column.IsIncrement == false) - ${column.CsharpFieldFl}: [ - { required: true, message: "${column.ColumnComment}不能为空", trigger: $if(column.htmlType == "select")"change"$else"blur"$end -$if(column.CsharpType == "int" || column.CsharpType == "long"), type: "number"$end } - ], + ${column.CsharpFieldFl}: [{ required: true, message: "${column.ColumnComment}不能为空", trigger: $if(column.htmlType == "select")"change"$else"blur"$end +$if(column.CsharpType == "int" || column.CsharpType == "long"), type: "number"$end }], +$end +$end + }, + options: { +$foreach(column in genTable.Columns) +$if(column.HtmlType == "radio" || column.HtmlType == "select" || column.HtmlType == "checkbox" || column.HtmlType == "selectMulti") + //$if(column.ColumnComment != "") ${column.ColumnComment} $else ${column.CsharpFieldFl}$end选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'} + $if(column.DictType != "")${column.DictType}$else${column.CsharpFieldFl}Options$end: [], $end $end } }) -const { form, rules } = toRefs(state) +const { form, rules, options } = toRefs(state) // 总记录数 const total = ref(0) const dataList = ref([]) const queryRef = ref() const formRef = ref() $foreach(item in genTable.Columns) -$if((item.HtmlType == "radio" || item.HtmlType == "select" || item.HtmlType == "checkbox")) -// ${item.ColumnComment}选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'} -const $if(item.DictType != "") ${item.DictType} $else ${item.CsharpFieldFl}Options$end = ref([]) -$elseif(item.HtmlType == "datetime" && item.IsQuery == true) +$if(item.HtmlType == "datetime" && item.IsQuery == true) // ${item.ColumnComment}时间范围 const dateRange${item.CsharpField} = ref([]) @@ -402,7 +408,7 @@ $end $if(index > 0) proxy.getDicts(dictParams).then((response) => { response.data.forEach((element) => { - proxy[element.dictType] = element.list + state.options[element.dictType] = element.list }) }) $end @@ -532,11 +538,8 @@ function handleExport() { cancelButtonText: "取消", type: "warning", }) - .then(function () { - return export${genTable.BusinessName}(queryParams) - }) - .then((response) => { - proxy.download(response.data.path) + .then(async () => { + await export${genTable.BusinessName}(queryParams) }) } $end -- Gitee From 35ba3f82ed28307622a02fe44422fa6ab4f086c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 5 Dec 2022 18:37:40 +0800 Subject: [PATCH 065/122] =?UTF-8?q?feat=EF=BC=9A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E6=95=B0=E6=8D=AE=E6=94=B9=E4=B8=BA=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/BaseController.cs | 17 +++++++++++++++++ .../Controllers/System/SysUserController.cs | 2 +- .../wwwroot/CodeGenTemplate/TplControllers.txt | 2 +- .../wwwroot/CodeGenTemplate/TplVueApi.txt | 12 ++++++------ .../wwwroot/CodeGenTemplate/v3/Vue.txt | 7 ++----- 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/BaseController.cs b/ZR.Admin.WebApi/Controllers/BaseController.cs index b1eeaef3..fd3e5db6 100644 --- a/ZR.Admin.WebApi/Controllers/BaseController.cs +++ b/ZR.Admin.WebApi/Controllers/BaseController.cs @@ -8,6 +8,8 @@ using OfficeOpenXml; using System; using System.Collections.Generic; using System.IO; +using System.Web; +using ff = System.IO; namespace ZR.Admin.WebApi.Controllers { @@ -53,6 +55,21 @@ namespace ZR.Admin.WebApi.Controllers return ToResponse(GetApiResult(resultCode, msg)); } + /// + /// 导出Excel + /// + /// + /// + /// + protected IActionResult ExportExcel(string path, string fileName) + { + IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment)); + string fileDir = Path.Combine(webHostEnvironment.WebRootPath, path, fileName); + + var stream = ff.File.OpenRead(fileDir); //创建文件流 + return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", HttpUtility.UrlEncode(fileName)); + } + #region 方法 /// diff --git a/ZR.Admin.WebApi/Controllers/System/SysUserController.cs b/ZR.Admin.WebApi/Controllers/System/SysUserController.cs index 2237ce84..45ff3338 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysUserController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysUserController.cs @@ -220,7 +220,7 @@ namespace ZR.Admin.WebApi.Controllers.System //调试模式需要加上 string sFileName = ExportExcel(list.Result, "user", "用户列表"); - return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + return ExportExcel("export", sFileName); } } } diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt index 3001bb0b..784108a3 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt @@ -156,7 +156,7 @@ $if(replaceDto.ShowBtnExport) return ToResponse(ResultCode.FAIL, "没有要导出的数据"); } string sFileName = ExportExcel(list, "${replaceDto.ModelTypeName}", "${genTable.FunctionName}"); - return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + return ExportExcel("export", sFileName); } $end diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt index c85abb30..1e1678fc 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt @@ -2,6 +2,10 @@ $if(replaceDto.SelectMulti == 1) import QS from 'qs' $end +$if(replaceDto.ShowBtnExport) +import { downFile } from '@/utils/request' +$end + /** * ${genTable.functionName}分页查询 * @param {查询条件} data @@ -88,12 +92,8 @@ export function clear${genTable.BusinessName}() { } // 导出${genTable.functionName} -export function export${genTable.BusinessName}(query) { - return request({ - url: '${genTable.ModuleName}/${genTable.BusinessName}/export', - method: 'get', - params: query - }) +export async function export${genTable.BusinessName}(query) { + await downFile('${genTable.ModuleName}/${genTable.BusinessName}/export', { ...query }) } $if(showCustomInput) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt index d5ce0759..206a2dea 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt @@ -566,11 +566,8 @@ function handleExport() { cancelButtonText: "取消", type: "warning", }) - .then(function () { - return export${genTable.BusinessName}(queryParams) - }) - .then((response) => { - proxy.download(response.data.path) + .then(async () => { + await export${genTable.BusinessName}(queryParams) }) } $end -- Gitee From 98ba8086c22149ae47f94913e7e00e9ccf31ada6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 6 Dec 2022 12:23:45 +0800 Subject: [PATCH 066/122] =?UTF-8?q?fix=EF=BC=9AVue3=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E8=87=AA=E5=AE=9A=E4=B9=89=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E5=88=97=E5=90=8D=E4=B8=8D=E4=B8=80=E8=87=B4=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 1 + .../wwwroot/CodeGenTemplate/v3/TreeVue.txt | 23 +++++++++++++------ .../wwwroot/CodeGenTemplate/v3/Vue.txt | 23 +++++++++++++------ 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 93cfd82e..7b4e4ef4 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -66,6 +66,7 @@ + diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt index 43950e56..803e58bf 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt @@ -553,14 +553,23 @@ function handleSelectionChange(selection) { // 自定义排序 function sortChange(column) { - if (column.prop == null || column.order == null) { - queryParams.sort = undefined - queryParams.sortType = undefined - } else { - queryParams.sort = column.prop - queryParams.sortType = column.order - } + var sort = undefined + var sortType = undefined + + if (column.prop != null && column.order != null) { + sort = column.prop + sortType = column.order +$foreach(item in genTable.Columns) +$if(item.IsSort && item.CsharpField.ToLower() != item.ColumnName.ToLower()) + if (column.prop == '${item.CsharpFieldFl}') { + sort = '${item.ColumnName}' + } +$end +${end} + } + queryParams.sort = sort + queryParams.sortType = sortType handleQuery() } diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt index 206a2dea..1a87548d 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt @@ -420,14 +420,23 @@ function handleSelectionChange(selection) { // 自定义排序 function sortChange(column) { - if (column.prop == null || column.order == null) { - queryParams.sort = undefined - queryParams.sortType = undefined - } else { - queryParams.sort = column.prop - queryParams.sortType = column.order - } + var sort = undefined + var sortType = undefined + + if (column.prop != null && column.order != null) { + sort = column.prop + sortType = column.order +$foreach(item in genTable.Columns) +$if(item.IsSort && item.CsharpField.ToLower() != item.ColumnName.ToLower()) + if (column.prop == '${item.CsharpFieldFl}') { + sort = '${item.ColumnName}' + } +$end +${end} + } + queryParams.sort = sort + queryParams.sortType = sortType handleQuery() } -- Gitee From 1c25fe5f29754ed1df0ad60b67559b68b5ffb9b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 6 Dec 2022 18:15:35 +0800 Subject: [PATCH 067/122] =?UTF-8?q?fix=EF=BC=9A=E7=BD=91=E7=BB=9C=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E8=AF=B7=E6=B1=82=E6=96=B9=E6=B3=95=E6=B2=A1=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E5=88=B0db?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/System/TasksController.cs | 18 ++---------------- ZR.Service/System/SysTasksQzService.cs | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/System/TasksController.cs b/ZR.Admin.WebApi/Controllers/System/TasksController.cs index ef005b3b..fa85010e 100644 --- a/ZR.Admin.WebApi/Controllers/System/TasksController.cs +++ b/ZR.Admin.WebApi/Controllers/System/TasksController.cs @@ -53,7 +53,7 @@ namespace ZR.Admin.WebApi.Controllers m.AssemblyName.Contains(parm.QueryText)); predicate.AndIF(parm.TaskType != null, m => m.TaskType == parm.TaskType); - var response = _tasksQzService.GetPages(predicate.ToExpression(), pager, f => f.IsStart, OrderByType.Desc); + var response = _tasksQzService.GetPages(predicate.ToExpression(), pager); return SUCCESS(response, TIME_FORMAT_FULL); } @@ -99,11 +99,6 @@ namespace ZR.Admin.WebApi.Controllers { throw new CustomException($"sql语句不能为空"); } - if (parm.SqlText.IfNotEmpty() && parm.TaskType == 3) - { - parm.AssemblyName = "ZR.Tasks"; - parm.ClassName = "TaskScheduler.Job_SqlExecute"; - } if (parm.TaskType == 1 && (parm.AssemblyName.IsEmpty() || parm.ClassName.IsEmpty())) { throw new CustomException($"程序集或者类名不能为空"); @@ -143,16 +138,7 @@ namespace ZR.Admin.WebApi.Controllers { throw new CustomException($"api地址不能为空"); } - if (parm.ApiUrl.IfNotEmpty() && parm.TaskType == 2) - { - parm.AssemblyName = "ZR.Tasks"; - parm.ClassName = "TaskScheduler.Job_HttpRequest"; - } - if (parm.SqlText.IfNotEmpty() && parm.TaskType == 3) - { - parm.AssemblyName = "ZR.Tasks"; - parm.ClassName = "TaskScheduler.Job_SqlExecute"; - } + if (tasksQz.IsStart) { throw new CustomException($"该任务正在运行中,请先停止在更新"); diff --git a/ZR.Service/System/SysTasksQzService.cs b/ZR.Service/System/SysTasksQzService.cs index 69c01a78..ddb796dd 100644 --- a/ZR.Service/System/SysTasksQzService.cs +++ b/ZR.Service/System/SysTasksQzService.cs @@ -21,12 +21,24 @@ namespace ZR.Service.System { parm.IsStart = false; + SetAssembleName(parm); + + return Add(parm); + } + + private void SetAssembleName(SysTasks parm) + { if (parm.ApiUrl.IfNotEmpty() && parm.TaskType == 2) { parm.AssemblyName = "ZR.Tasks"; parm.ClassName = "TaskScheduler.Job_HttpRequest"; } - return Add(parm); + + if (parm.SqlText.IfNotEmpty() && parm.TaskType == 3) + { + parm.AssemblyName = "ZR.Tasks"; + parm.ClassName = "TaskScheduler.Job_SqlExecute"; + } } /// @@ -36,6 +48,8 @@ namespace ZR.Service.System /// public int UpdateTasks(SysTasks parm) { + SetAssembleName(parm); + return Update(f => f.ID == parm.ID, f => new SysTasks { ID = parm.ID, @@ -54,6 +68,7 @@ namespace ZR.Service.System TaskType = parm.TaskType, ApiUrl = parm.ApiUrl, SqlText = parm.SqlText, + RequestMethod = parm.RequestMethod, }); } } -- Gitee From fef14c31f72b9c2fa888139c4594c74ebefb5de9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 6 Dec 2022 20:40:18 +0800 Subject: [PATCH 068/122] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 8 -------- ZR.Model/ZR.Model.csproj | 6 ------ ZR.Repository/ZR.Repository.csproj | 4 ---- ZR.Service/ZR.Service.csproj | 6 ------ 4 files changed, 24 deletions(-) diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 7b4e4ef4..666f03f5 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -12,13 +12,6 @@ 1701;1702;1591;1570 - - - - - - - @@ -64,7 +57,6 @@ - diff --git a/ZR.Model/ZR.Model.csproj b/ZR.Model/ZR.Model.csproj index 5489226c..60abf505 100644 --- a/ZR.Model/ZR.Model.csproj +++ b/ZR.Model/ZR.Model.csproj @@ -11,10 +11,4 @@ - - - - - - diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index e4ef4f2d..70638484 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -17,8 +17,4 @@ - - - - diff --git a/ZR.Service/ZR.Service.csproj b/ZR.Service/ZR.Service.csproj index 4ad09857..89bad29e 100644 --- a/ZR.Service/ZR.Service.csproj +++ b/ZR.Service/ZR.Service.csproj @@ -8,10 +8,4 @@ - - - - - - -- Gitee From e9cd6976ebfe95a49482689c78b9a6a3c8bfbc4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 6 Dec 2022 20:40:32 +0800 Subject: [PATCH 069/122] update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b20a457b..0e90a628 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ | 仓库 | Github | Gitee | | ----------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | | Vue2 + Net5 | | [克隆/下载](https://gitee.com/izory/ZrAdminNetCore/) | -| Vue2 + Net6 | [克隆/下载](https://github.com/izhaorui/ZrAdmin.NET/tree/net6.0) | [克隆/下载](https://gitee.com/izory/ZrAdminNetCore/tree/net6.0/) | +| Vue2 + Net6(停更) | [克隆/下载](https://github.com/izhaorui/ZrAdmin.NET/tree/net6.0) | [克隆/下载](https://gitee.com/izory/ZrAdminNetCore/tree/net6.0/) | | Vue3 | | [克隆/下载](https://gitee.com/izory/ZRAdmin-vue) | | Net7 | | [克隆/下载](https://gitee.com/izory/ZrAdminNetCore/tree/net7.0/) | -- Gitee From fb23b4c49546941f381fcc483d113dc20947cd68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 6 Dec 2022 18:33:54 +0800 Subject: [PATCH 070/122] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=AF=BC=E5=87=BA=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt | 2 +- ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt index 784108a3..ffe5a51b 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt @@ -155,7 +155,7 @@ $if(replaceDto.ShowBtnExport) { return ToResponse(ResultCode.FAIL, "没有要导出的数据"); } - string sFileName = ExportExcel(list, "${replaceDto.ModelTypeName}", "${genTable.FunctionName}"); + string sFileName = ExportExcel(list, "${genTable.FunctionName}", "${genTable.FunctionName}"); return ExportExcel("export", sFileName); } $end diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt index 1a87548d..e57794dc 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt @@ -281,7 +281,6 @@ $end \ No newline at end of file diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt index e57794dc..e444b90d 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt @@ -202,7 +202,7 @@ $else $if(column.HtmlType == "inputNumber" || column.HtmlType == "customInput") - + $elseif(column.HtmlType == "datetime") @@ -439,7 +439,6 @@ ${end} handleQuery() } - /*************** form操作 ***************/ const formRef = ref() const title = ref("") @@ -489,21 +488,6 @@ $end proxy.resetForm("formRef") } -// 删除按钮操作 -function handleDelete(row) { - const Ids = row.${replaceDto.FistLowerPk} || ids.value - - proxy.${confirm}confirm('是否确认删除参数编号为"' + Ids + '"的数据项?') - .then(function () { - return del${genTable.BusinessName}(Ids) - }) - .then(() => { - handleQuery() - proxy.${modal}modal.msgSuccess("删除成功") - }) - .catch(() => {}) -} - // 添加按钮操作 function handleAdd() { reset(); @@ -557,59 +541,70 @@ $end open.value = false getList() }) - .catch((err) => { - //TODO 错误逻辑 - }) + .catch(() => {}) } } }) } -$if(replaceDto.ShowBtnExport) -// 导出按钮操作 -function handleExport() { +// 删除按钮操作 +function handleDelete(row) { + const Ids = row.${replaceDto.FistLowerPk} || ids.value + + proxy.${confirm}confirm('是否确认删除参数编号为"' + Ids + '"的数据项?') + .then(function () { + return del${genTable.BusinessName}(Ids) + }) + .then(() => { + getList() + proxy.${modal}modal.msgSuccess("删除成功") + }) + .catch(() => {}) +} + +$if(replaceDto.ShowBtnTruncate) +// 清空 +function handleClear() { proxy - .${confirm}confirm("是否确认导出${genTable.functionName}数据项?", "警告", { + .${confirm}confirm("是否确认清空所有数据项?", "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", }) - .then(async () => { - await proxy.downFile('/${genTable.ModuleName}/${genTable.BusinessName}/export', { ...queryParams }) + .then(function () { + return clear${genTable.BusinessName}() + }) + .then(() => { + handleQuery() + proxy.${modal}modal.msgSuccess('清空成功') }) } $end $if(replaceDto.ShowBtnView) /** - * 预览 + * 查看 * @param {*} row */ function handlePreview(row) { open.value = true - title.value = '预览' + title.value = '查看' opertype.value = 3 form.value = row } $end -$if(replaceDto.ShowBtnTruncate) -/** - * 清空 - */ -function handleClear() { +$if(replaceDto.ShowBtnExport) +// 导出按钮操作 +function handleExport() { proxy - .${confirm}confirm("是否确认清空所有数据项?", "警告", { + .${confirm}confirm("是否确认导出${genTable.functionName}数据项?", "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", }) - .then(function () { - return clear${genTable.BusinessName}() - }) - .then(() => { - handleQuery() - proxy.${modal}modal.msgSuccess('清空成功') + .then(async () => { + await proxy.downFile('/${genTable.ModuleName}/${genTable.BusinessName}/export', { ...queryParams }) }) } $end -- Gitee From 7d8d58b0e48ebaf928fae726b58f0018d24e329e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 13 Dec 2022 09:57:10 +0800 Subject: [PATCH 075/122] =?UTF-8?q?=E7=A7=BB=E9=99=A4demo=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E5=88=A4=E6=96=AD=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Filters/ActionPermissionFilter.cs | 2 +- ZR.Admin.WebApi/Hubs/MessageHub.cs | 7 +------ ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 6 ------ ZR.Service/System/SysOperLogService.cs | 5 ----- 4 files changed, 2 insertions(+), 18 deletions(-) diff --git a/ZR.Admin.WebApi/Filters/ActionPermissionFilter.cs b/ZR.Admin.WebApi/Filters/ActionPermissionFilter.cs index 3c596c1a..194618b5 100644 --- a/ZR.Admin.WebApi/Filters/ActionPermissionFilter.cs +++ b/ZR.Admin.WebApi/Filters/ActionPermissionFilter.cs @@ -61,7 +61,7 @@ namespace ZR.Admin.WebApi.Filters bool isDemoMode = AppSettings.GetAppConfig("DemoMode", false); var url = context.HttpContext.Request.Path; //演示公开环境屏蔽权限 - string[] denyPerms = new string[] { "update", "add", "remove", "add", "edit", "delete", "import", "run", "start", "stop", "clear", "send", "export", "upload", "common" }; + string[] denyPerms = new string[] { "update", "add", "remove", "add", "edit", "delete", "import", "run", "start", "stop", "clear", "send", "export", "upload", "common", "gencode" }; if (isDemoMode && denyPerms.Any(f => Permission.ToLower().Contains(f))) { context.Result = new JsonResult(new { code = ResultCode.FORBIDDEN, msg = "演示模式 , 不允许操作" }); diff --git a/ZR.Admin.WebApi/Hubs/MessageHub.cs b/ZR.Admin.WebApi/Hubs/MessageHub.cs index 6ffa95e9..d67335c1 100644 --- a/ZR.Admin.WebApi/Hubs/MessageHub.cs +++ b/ZR.Admin.WebApi/Hubs/MessageHub.cs @@ -97,12 +97,7 @@ namespace ZR.Admin.WebApi.Hubs public async Task SendMessage(string connectId, string userName, string message) { Console.WriteLine($"{connectId},message={message}"); - bool isDemoMode = AppSettings.GetAppConfig("DemoMode", true); - if (isDemoMode) - { - await Clients.Caller.SendAsync("receiveChat", new { userName, message = "当前环境为演示环境,消息不会发送给对方" }); - return; - } + await Clients.Client(connectId).SendAsync("receiveChat", new { userName, message }); } } diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 98066fde..32aec3b9 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -56,12 +56,6 @@ - - - - - - diff --git a/ZR.Service/System/SysOperLogService.cs b/ZR.Service/System/SysOperLogService.cs index 53cff44b..dc4d9ec1 100644 --- a/ZR.Service/System/SysOperLogService.cs +++ b/ZR.Service/System/SysOperLogService.cs @@ -40,11 +40,6 @@ namespace ZR.Service.System sysOper.BeginTime = DateTimeHelper.GetBeginTime(sysOper.BeginTime, -1); sysOper.EndTime = DateTimeHelper.GetBeginTime(sysOper.EndTime, 1); - bool isDemoMode = AppSettings.GetAppConfig("DemoMode", false); - if (isDemoMode) - { - return new PagedInfo(); - } var exp = Expressionable.Create(); exp.And(it => it.OperTime >= sysOper.BeginTime && it.OperTime <= sysOper.EndTime); exp.AndIF(sysOper.Title.IfNotEmpty(), it => it.Title.Contains(sysOper.Title)); -- Gitee From 77b7fbcdded3e184edde11d4e7e56a377465c27f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Wed, 14 Dec 2022 18:45:30 +0800 Subject: [PATCH 076/122] =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AF=B7=E6=B1=82=E5=8F=82=E6=95=B0=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../System/monitor/SysOperlogController.cs | 8 ++++---- ZR.Model/System/Dto/SysOperLogDto.cs | 15 +++++++-------- ZR.Model/System/SysOperLog.cs | 4 ++-- ZR.Service/System/SysOperLogService.cs | 3 ++- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/System/monitor/SysOperlogController.cs b/ZR.Admin.WebApi/Controllers/System/monitor/SysOperlogController.cs index 77120449..a013624b 100644 --- a/ZR.Admin.WebApi/Controllers/System/monitor/SysOperlogController.cs +++ b/ZR.Admin.WebApi/Controllers/System/monitor/SysOperlogController.cs @@ -36,9 +36,9 @@ namespace ZR.Admin.WebApi.Controllers.monitor [HttpGet("list")] public IActionResult OperList([FromQuery] SysOperLogDto sysOperLog) { - PagerInfo pagerInfo = new(sysOperLog.pageNum, sysOperLog.PageSize); + PagerInfo pagerInfo = new(sysOperLog.PageNum, sysOperLog.PageSize); - sysOperLog.operName = !HttpContextExtension.IsAdmin(HttpContext) ? HttpContextExtension.GetName(HttpContext) : sysOperLog.operName; + sysOperLog.OperName = !HttpContextExtension.IsAdmin(HttpContext) ? HttpContextExtension.GetName(HttpContext) : sysOperLog.OperName; var list = sysOperLogService.SelectOperLogList(sysOperLog, pagerInfo); return SUCCESS(list, "MM/dd HH:mm"); @@ -90,8 +90,8 @@ namespace ZR.Admin.WebApi.Controllers.monitor public IActionResult Export([FromQuery] SysOperLogDto sysOperLog) { var list = sysOperLogService.SelectOperLogList(sysOperLog, new PagerInfo(1, 10000)); - string sFileName = ExportExcel(list.Result, "operlog", "操作日志"); - return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + var result = ExportExcelMini(list.Result, "操作日志", "操作日志"); + return ExportExcel(result.Item2, result.Item1); } } diff --git a/ZR.Model/System/Dto/SysOperLogDto.cs b/ZR.Model/System/Dto/SysOperLogDto.cs index 586a4205..0131ac12 100644 --- a/ZR.Model/System/Dto/SysOperLogDto.cs +++ b/ZR.Model/System/Dto/SysOperLogDto.cs @@ -1,21 +1,16 @@ -using System; -using System.Collections.Generic; -using System.Text; -using ZR.Model.System; - -namespace ZR.Model.System.Dto +namespace ZR.Model.System.Dto { public class SysOperLogDto : SysBase { /// /// 页码 /// - public int pageNum { get; set; } + public int PageNum { get; set; } public int PageSize { get; set; } /// /// 操作人员 /// - public string operName { get; set; } + public string OperName { get; set; } /// /// 业务类型 0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据 /// @@ -28,5 +23,9 @@ namespace ZR.Model.System.Dto /// 操作模块 /// public string Title { get; set; } + /// + /// 请求参数 + /// + public string OperParam { get; set; } } } diff --git a/ZR.Model/System/SysOperLog.cs b/ZR.Model/System/SysOperLog.cs index 233ba262..65d75e18 100644 --- a/ZR.Model/System/SysOperLog.cs +++ b/ZR.Model/System/SysOperLog.cs @@ -43,8 +43,8 @@ namespace ZR.Model.System public string OperName { get; set; } /** 部门名称 */ - [DisplayName("部门名称")] - public string DeptName { get; set; } + //[DisplayName("部门名称")] + //public string DeptName { get; set; } /** 请求url */ [DisplayName("请求地址")] diff --git a/ZR.Service/System/SysOperLogService.cs b/ZR.Service/System/SysOperLogService.cs index dc4d9ec1..076653d7 100644 --- a/ZR.Service/System/SysOperLogService.cs +++ b/ZR.Service/System/SysOperLogService.cs @@ -43,9 +43,10 @@ namespace ZR.Service.System var exp = Expressionable.Create(); exp.And(it => it.OperTime >= sysOper.BeginTime && it.OperTime <= sysOper.EndTime); exp.AndIF(sysOper.Title.IfNotEmpty(), it => it.Title.Contains(sysOper.Title)); - exp.AndIF(sysOper.operName.IfNotEmpty(), it => it.OperName.Contains(sysOper.operName)); + exp.AndIF(sysOper.OperName.IfNotEmpty(), it => it.OperName.Contains(sysOper.OperName)); exp.AndIF(sysOper.BusinessType != -1, it => it.BusinessType == sysOper.BusinessType); exp.AndIF(sysOper.Status != -1, it => it.Status == sysOper.Status); + exp.AndIF(sysOper.OperParam != null, it => it.OperParam.Contains(sysOper.OperParam)); return GetPages(exp.ToExpression(), pager, x => x.OperId, OrderByType.Desc); } -- Gitee From c0fd6fdfd829bdc56f843d816d130b8da62bc9f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 15 Dec 2022 10:58:38 +0800 Subject: [PATCH 077/122] =?UTF-8?q?Excel=E5=AF=BC=E5=87=BA=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=A4=9Asheet=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/BaseController.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/ZR.Admin.WebApi/Controllers/BaseController.cs b/ZR.Admin.WebApi/Controllers/BaseController.cs index cada36da..4b98568b 100644 --- a/ZR.Admin.WebApi/Controllers/BaseController.cs +++ b/ZR.Admin.WebApi/Controllers/BaseController.cs @@ -145,6 +145,24 @@ namespace ZR.Admin.WebApi.Controllers return (sFileName, fullPath); } + /// + /// 导出多个工作表(Sheet) + /// + /// + /// + /// + protected (string, string) ExportExcelMini(Dictionary sheets, string fileName) + { + IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment)); + string sFileName = $"{fileName}{DateTime.Now:MM-dd-HHmmss}.xlsx"; + string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "export", sFileName); + + Directory.CreateDirectory(Path.GetDirectoryName(fullPath)); + + MiniExcel.SaveAs(fullPath, sheets); + return (sFileName, fullPath); + } + /// /// 下载导入模板 /// -- Gitee From 7f5c83361e32e0679bca70e41444e501da7f266d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 15 Dec 2022 10:59:09 +0800 Subject: [PATCH 078/122] =?UTF-8?q?SysUser=E6=9C=80=E5=90=8E=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=97=B6=E9=97=B4=E6=94=B9=E4=B8=BA=E5=8F=AF=E4=B8=BA?= =?UTF-8?q?null?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Model/System/SysUser.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZR.Model/System/SysUser.cs b/ZR.Model/System/SysUser.cs index 1520c289..3a60cb7a 100644 --- a/ZR.Model/System/SysUser.cs +++ b/ZR.Model/System/SysUser.cs @@ -67,7 +67,7 @@ namespace ZR.Model.System /// [SugarColumn(IsOnlyIgnoreInsert = true)] [ExcelColumn(Name = "登录日期", Format = "yyyy-MM-dd HH:mm:ss")] - public DateTime LoginDate { get; set; } + public DateTime? LoginDate { get; set; } /// /// 部门Id -- Gitee From 5f6f746b8e026111fd4fd513e8a94e5e0737d736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 16 Dec 2022 15:52:35 +0800 Subject: [PATCH 079/122] =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=8F=B0=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0logo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Extensions/LogoExtension.cs | 23 +++++++++++++++++++++ ZR.Admin.WebApi/Startup.cs | 3 +++ ZR.Admin.WebApi/wwwroot/logo.txt | 7 +++++++ 3 files changed, 33 insertions(+) create mode 100644 ZR.Admin.WebApi/Extensions/LogoExtension.cs create mode 100644 ZR.Admin.WebApi/wwwroot/logo.txt diff --git a/ZR.Admin.WebApi/Extensions/LogoExtension.cs b/ZR.Admin.WebApi/Extensions/LogoExtension.cs new file mode 100644 index 00000000..27f21266 --- /dev/null +++ b/ZR.Admin.WebApi/Extensions/LogoExtension.cs @@ -0,0 +1,23 @@ +using JinianNet.JNTemplate; +using Microsoft.Extensions.DependencyInjection; +using System; +using ZR.Common; + +namespace ZR.Admin.WebApi.Extensions +{ + public static class LogoExtension + { + public static void AddLogo(this IServiceCollection services) + { + Console.ForegroundColor = ConsoleColor.Blue; + var contentTpl = JnHelper.ReadTemplate("", "logo.txt"); + var content = contentTpl.Render(); + + Console.WriteLine(content); + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("源码地址: https://gitee.com/izory/ZrAdminNetCore"); + Console.WriteLine("官方文档:http://www.izhaorui.cn/doc"); + Console.WriteLine("打赏作者:http://www.izhaorui.cn/doc/support.html"); + } + } +} diff --git a/ZR.Admin.WebApi/Startup.cs b/ZR.Admin.WebApi/Startup.cs index d1263efc..5b9f78b5 100644 --- a/ZR.Admin.WebApi/Startup.cs +++ b/ZR.Admin.WebApi/Startup.cs @@ -89,6 +89,9 @@ namespace ZR.Admin.WebApi }); services.AddSwaggerConfig(); + + // 显示logo + services.AddLogo(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/ZR.Admin.WebApi/wwwroot/logo.txt b/ZR.Admin.WebApi/wwwroot/logo.txt new file mode 100644 index 00000000..8b06c934 --- /dev/null +++ b/ZR.Admin.WebApi/wwwroot/logo.txt @@ -0,0 +1,7 @@ + ___________ _ _ _ _ ______ _______ + |___ / __ \ /\ | | (_) | \ | | ____|__ __| + / /| |__) | / \ __| |_ __ ___ _ _ __ | \| | |__ | | + / / | _ / / /\ \ / _` | '_ ` _ \| | '_ \ | . ` | __| | | + / /__| | \ \ / ____ \ (_| | | | | | | | | | |_| |\ | |____ | | + /_____|_| \_\/_/ \_\__,_|_| |_| |_|_|_| |_(_)_| \_|______| |_| + \ No newline at end of file -- Gitee From 8b8fc9efba3376c578eacba642150a96bf0bc918 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 16 Dec 2022 16:02:12 +0800 Subject: [PATCH 080/122] =?UTF-8?q?=E7=A7=BB=E9=99=A4launchBrowser?= =?UTF-8?q?=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Properties/launchSettings.json | 1 - 1 file changed, 1 deletion(-) diff --git a/ZR.Admin.WebApi/Properties/launchSettings.json b/ZR.Admin.WebApi/Properties/launchSettings.json index 7f6746e6..20453539 100644 --- a/ZR.Admin.WebApi/Properties/launchSettings.json +++ b/ZR.Admin.WebApi/Properties/launchSettings.json @@ -2,7 +2,6 @@ "profiles": { "ZRAdmin": { "commandName": "Project", - "launchBrowser": false, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "" }, -- Gitee From 66442e92f876b2cde72857e52a9351935988880e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 16 Dec 2022 16:08:09 +0800 Subject: [PATCH 081/122] =?UTF-8?q?nlog=E6=97=A5=E5=BF=97=E5=86=99?= =?UTF-8?q?=E5=85=A5=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/NLog.config | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/ZR.Admin.WebApi/NLog.config b/ZR.Admin.WebApi/NLog.config index f96caf96..83502809 100644 --- a/ZR.Admin.WebApi/NLog.config +++ b/ZR.Admin.WebApi/NLog.config @@ -32,7 +32,7 @@ keepFileOpen="true" layout="${longdate} | ${event-properties:item=EventId_Id} | ${uppercase:${level}} | ${logger} | ${aspnet-request-iP:CheckForwardedForHeader=true} | ${event-properties:item=user} | ${aspnet-request-url} | ${message} | ${event-properties:item=requestParam} | ${event-properties:item=jsonResult} | ${onexception:${exception:format=tostring}"/> - + + layout="${longdate} ${aspnet-request-iP} ${aspnet-request-headers:HeaderNames=userid} ${aspnet-request-url} ${newline} ${message}"/> - - + + + + + + + + + - @@ -62,10 +69,9 @@ - - - - + + + -- Gitee From 0a78c98dfeb0b8a329d6ab8a3a469b6689922d80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 16 Dec 2022 16:08:39 +0800 Subject: [PATCH 082/122] =?UTF-8?q?=E4=BC=98=E5=8C=96Sqlsugar=20IOC?= =?UTF-8?q?=E6=B3=A8=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Extensions/DbExtension.cs | 65 +++++++++++------------ 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/ZR.Admin.WebApi/Extensions/DbExtension.cs b/ZR.Admin.WebApi/Extensions/DbExtension.cs index 5a752563..486abd48 100644 --- a/ZR.Admin.WebApi/Extensions/DbExtension.cs +++ b/ZR.Admin.WebApi/Extensions/DbExtension.cs @@ -29,7 +29,7 @@ namespace ZR.Admin.WebApi.Extensions string connStr = Configuration.GetConnectionString("conn_db"); int dbType = Convert.ToInt32(Configuration.GetConnectionString("conn_db_type")); - SugarIocServices.AddSqlSugar(new List() { + var iocList = new List() { new IocConfig() { ConfigId = "0",//默认db ConnectionString = connStr, @@ -38,51 +38,46 @@ namespace ZR.Admin.WebApi.Extensions }, new IocConfig() { ConfigId = "1", - ConnectionString = "替换成你的字符串", - DbType = IocDbType.MySql, + ConnectionString = connStr, + DbType = (IocDbType)dbType, IsAutoCloseConnection = true } //...增加其他数据库 - }); + }; + SugarIocServices.AddSqlSugar(iocList); SugarIocServices.ConfigurationSugar(db => { //db0数据过滤 FilterData(0); - - #region db0 - db.GetConnectionScope(0).Aop.OnLogExecuting = (sql, pars) => - { - var param = db.GetConnectionScope(0).Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)); - logger.Info($"【sql语句】{sql},{param}\n"); - }; - - db.GetConnectionScope(0).Aop.OnError = (e) => - { - logger.Error(e, $"执行SQL出错:{e.Message}"); - }; - //SQL执行完 - db.GetConnectionScope(0).Aop.OnLogExecuted = (sql, pars) => + iocList.ForEach(iocConfig => { - //执行完了可以输出SQL执行时间 (OnLogExecutedDelegate) - }; - #endregion + SetSugarAop(db, iocConfig); + }); + }); + } - #region db1 - //Db1 - db.GetConnection(1).Aop.OnLogExecuting = (sql, pars) => - { - var param = db.GetConnection(1).Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)); + private static void SetSugarAop(SqlSugarClient db, IocConfig iocConfig) + { + var config = db.GetConnection(iocConfig.ConfigId).CurrentConnectionConfig; + + string configId = config.ConfigId; + db.GetConnectionScope(configId).Aop.OnLogExecuting = (sql, pars) => + { + string log = $"【sql语句】{UtilMethods.GetSqlString(config.DbType, sql, pars)}\n"; + if (sql.StartsWith("SELECT", StringComparison.OrdinalIgnoreCase)) + logger.Info(log); + if (sql.StartsWith("UPDATE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("INSERT", StringComparison.OrdinalIgnoreCase)) + logger.Warn(log); + if (sql.StartsWith("DELETE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("TRUNCATE", StringComparison.OrdinalIgnoreCase)) + logger.Error(log); + }; - logger.Info($"【sql语句】{sql}, {param}"); - }; - //Db1错误日志 - db.GetConnection(1).Aop.OnError = (e) => - { - logger.Error($"执行Sql语句失败:{e.Sql},原因:{e.Message}"); - }; - #endregion - }); + db.GetConnectionScope(configId).Aop.OnError = (e) => + { + Console.ForegroundColor = ConsoleColor.Red; + logger.Error(e, $"执行SQL出错:{e.Message}"); + }; } /// -- Gitee From d22da28a30ecc5e4c29e6c546d99bf6e22427727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 20 Dec 2022 16:06:59 +0800 Subject: [PATCH 083/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Extensions/DbExtension.cs | 2 +- ZR.Admin.WebApi/Extensions/LogoExtension.cs | 4 ++-- ZR.Admin.WebApi/NLog.config | 2 +- ZR.Common/JnHelper.cs | 2 ++ 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ZR.Admin.WebApi/Extensions/DbExtension.cs b/ZR.Admin.WebApi/Extensions/DbExtension.cs index 486abd48..e7fed348 100644 --- a/ZR.Admin.WebApi/Extensions/DbExtension.cs +++ b/ZR.Admin.WebApi/Extensions/DbExtension.cs @@ -64,7 +64,7 @@ namespace ZR.Admin.WebApi.Extensions string configId = config.ConfigId; db.GetConnectionScope(configId).Aop.OnLogExecuting = (sql, pars) => { - string log = $"【sql语句】{UtilMethods.GetSqlString(config.DbType, sql, pars)}\n"; + string log = $"【db{configId} SQL语句】{UtilMethods.GetSqlString(config.DbType, sql, pars)}\n"; if (sql.StartsWith("SELECT", StringComparison.OrdinalIgnoreCase)) logger.Info(log); if (sql.StartsWith("UPDATE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("INSERT", StringComparison.OrdinalIgnoreCase)) diff --git a/ZR.Admin.WebApi/Extensions/LogoExtension.cs b/ZR.Admin.WebApi/Extensions/LogoExtension.cs index 27f21266..46f7ddd3 100644 --- a/ZR.Admin.WebApi/Extensions/LogoExtension.cs +++ b/ZR.Admin.WebApi/Extensions/LogoExtension.cs @@ -11,10 +11,10 @@ namespace ZR.Admin.WebApi.Extensions { Console.ForegroundColor = ConsoleColor.Blue; var contentTpl = JnHelper.ReadTemplate("", "logo.txt"); - var content = contentTpl.Render(); + var content = contentTpl?.Render(); Console.WriteLine(content); - Console.ForegroundColor = ConsoleColor.Red; + Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine("源码地址: https://gitee.com/izory/ZrAdminNetCore"); Console.WriteLine("官方文档:http://www.izhaorui.cn/doc"); Console.WriteLine("打赏作者:http://www.izhaorui.cn/doc/support.html"); diff --git a/ZR.Admin.WebApi/NLog.config b/ZR.Admin.WebApi/NLog.config index 83502809..f52f6b31 100644 --- a/ZR.Admin.WebApi/NLog.config +++ b/ZR.Admin.WebApi/NLog.config @@ -51,7 +51,7 @@ - + Date: Tue, 20 Dec 2022 20:03:57 +0800 Subject: [PATCH 084/122] update README.md --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0e90a628..82725162 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

ZR.Admin.NET后台管理系统

-

基于.NET5/.NET6/.Net7 + vue2.x/vue3.x前后端分离的.net快速开发框架

+

基于.NET5/.Net7 + vue2.x/vue3.x前后端分离的.net快速开发框架

@@ -9,7 +9,7 @@ ## 🍟概述 * 本项目适合有一定NetCore和 vue基础的开发人员 -* 基于.NET5/.NET6实现的通用权限管理平台(RBAC模式)。整合最新技术高效快速开发,前后端分离模式,开箱即用。 +* 基于.NET5/.NET7实现的通用权限管理平台(RBAC模式)。整合最新技术高效快速开发,前后端分离模式,开箱即用。 * 代码量少、学习简单、通俗易懂、功能强大、易扩展、轻量级,让web开发更快速、简单高效(从此告别996),解决70%的重复工作,专注您的业务,轻松开发从现在开始! * 提供了技术栈(Ant Design Vue)版[Ant Design Vue](https://gitee.com/billzh/mc-dull.git) * 七牛云通用云产品优惠券:[点我进入](https://s.qiniu.com/FzEfay)。 @@ -34,7 +34,6 @@ | 仓库 | Github | Gitee | | ----------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | | Vue2 + Net5 | | [克隆/下载](https://gitee.com/izory/ZrAdminNetCore/) | -| Vue2 + Net6(停更) | [克隆/下载](https://github.com/izhaorui/ZrAdmin.NET/tree/net6.0) | [克隆/下载](https://gitee.com/izory/ZrAdminNetCore/tree/net6.0/) | | Vue3 | | [克隆/下载](https://gitee.com/izory/ZRAdmin-vue) | | Net7 | | [克隆/下载](https://gitee.com/izory/ZrAdminNetCore/tree/net7.0/) | @@ -42,7 +41,7 @@ Vue版前端技术栈 :基于vue2.x/vue3.x、vuex、vue-router 、vue-cli 、axios、 element-ui、echats、i18n国际化等,前端采用vscode工具开发 ## 🍀后端技术 -- 核心框架:.Net5.0/.Net6.0/.Net7.0 + Web API + sqlsugar + swagger + signalR + IpRateLimit + Quartz.net + Redis +- 核心框架:.Net5.0/.Net7.0 + Web API + sqlsugar + swagger + signalR + IpRateLimit + Quartz.net + Redis - 定时计划任务:Quartz.Net组件,支持执行程序集或者http网络请求 - 安全支持:过滤器(数据权限过滤)、Sql注入、请求伪造 - 日志管理:NLog、登录日志、操作日志、定时任务日志 -- Gitee From f9dc25a2f13a37c9b721a6966bb9bc2a9e528dd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 20 Dec 2022 20:04:19 +0800 Subject: [PATCH 085/122] =?UTF-8?q?=E6=96=B0=E5=A2=9EPgSql=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/appsettings.json | 2 +- document/admin-pg15.sql | 1535 ++++++++++++++++++++++++++++++ 2 files changed, 1536 insertions(+), 1 deletion(-) create mode 100644 document/admin-pg15.sql diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json index ce2fdd6c..43cfb1ba 100644 --- a/ZR.Admin.WebApi/appsettings.json +++ b/ZR.Admin.WebApi/appsettings.json @@ -8,7 +8,7 @@ }, "ConnectionStrings": { "conn_db": "Data Source=LAPTOP-STKF2M8H\\SQLEXPRESS;User ID=sa;Password=zradmin123;Initial Catalog=ZrAdmin;Integrated Security=SSPI", //其他连接字符串请看官方文档 - "conn_db_type": "1" //数据库类型 MySql = 0, SqlServer = 1, Oracle = 3 + "conn_db_type": "1" //数据库类型 MySql = 0, SqlServer = 1, Oracle = 3,PgSql = 4 }, "urls": "http://localhost:8888", //项目启动url,如果改动端口前端对应devServer也需要进行修改 "corsUrls": "http://localhost:8887", //跨域地址(前端启动项目,前后端分离单独部署需要设置),多个用","隔开 diff --git a/document/admin-pg15.sql b/document/admin-pg15.sql new file mode 100644 index 00000000..5edcced2 --- /dev/null +++ b/document/admin-pg15.sql @@ -0,0 +1,1535 @@ +/* + Navicat Premium Data Transfer + + Source Server Type : PostgreSQL + Source Server Version : 150001 (150001) + Source Schema : public + + Target Server Type : PostgreSQL + Target Server Version : 150001 (150001) + File Encoding : 65001 + + Date: 20/12/2022 16:07:00 +*/ + + +-- ---------------------------- +-- Sequence structure for articlecategoryid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."articlecategoryid_seq"; +CREATE SEQUENCE "public"."articlecategoryid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for articleid +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."articleid"; +CREATE SEQUENCE "public"."articleid" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for gen_demoid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."gen_demoid_seq"; +CREATE SEQUENCE "public"."gen_demoid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for gen_table_columnid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."gen_table_columnid_seq"; +CREATE SEQUENCE "public"."gen_table_columnid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for gen_tableid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."gen_tableid_seq"; +CREATE SEQUENCE "public"."gen_tableid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for sys_configid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."sys_configid_seq"; +CREATE SEQUENCE "public"."sys_configid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for sys_deptid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."sys_deptid_seq"; +CREATE SEQUENCE "public"."sys_deptid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for sys_dict_dataid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."sys_dict_dataid_seq"; +CREATE SEQUENCE "public"."sys_dict_dataid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for sys_dict_typeid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."sys_dict_typeid_seq"; +CREATE SEQUENCE "public"."sys_dict_typeid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for sys_logininforid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."sys_logininforid_seq"; +CREATE SEQUENCE "public"."sys_logininforid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for sys_menuid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."sys_menuid_seq"; +CREATE SEQUENCE "public"."sys_menuid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for sys_noticeid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."sys_noticeid_seq"; +CREATE SEQUENCE "public"."sys_noticeid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for sys_oper_logid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."sys_oper_logid_seq"; +CREATE SEQUENCE "public"."sys_oper_logid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for sys_postid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."sys_postid_seq"; +CREATE SEQUENCE "public"."sys_postid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for sys_roleid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."sys_roleid_seq"; +CREATE SEQUENCE "public"."sys_roleid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for sys_tasks_logid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."sys_tasks_logid_seq"; +CREATE SEQUENCE "public"."sys_tasks_logid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for sys_userid_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."sys_userid_seq"; +CREATE SEQUENCE "public"."sys_userid_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 999999999999 +START 4 +CACHE 1; + +-- ---------------------------- +-- Table structure for article +-- ---------------------------- +DROP TABLE IF EXISTS "public"."article"; +CREATE TABLE "public"."article" ( + "cid" int4 NOT NULL DEFAULT nextval('articleid'::regclass), + "title" varchar(254) COLLATE "pg_catalog"."default", + "content" text COLLATE "pg_catalog"."default", + "userid" int8, + "status" varchar(20) COLLATE "pg_catalog"."default", + "fmt_type" varchar(20) COLLATE "pg_catalog"."default", + "tags" varchar(100) COLLATE "pg_catalog"."default", + "hits" int4, + "category_id" int4, + "createtime" timestamp(6), + "updatetime" timestamp(6), + "authorname" varchar(20) COLLATE "pg_catalog"."default", + "coverurl" varchar(255) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."article"."title" IS '文章标题'; +COMMENT ON COLUMN "public"."article"."content" IS '文章内容'; +COMMENT ON COLUMN "public"."article"."userid" IS '用户id'; +COMMENT ON COLUMN "public"."article"."status" IS '文章状态1、已发布 2、草稿'; +COMMENT ON COLUMN "public"."article"."fmt_type" IS '编辑器类型markdown,html'; +COMMENT ON COLUMN "public"."article"."tags" IS '文章标签'; +COMMENT ON COLUMN "public"."article"."hits" IS '点击量'; +COMMENT ON COLUMN "public"."article"."category_id" IS '目录id'; +COMMENT ON COLUMN "public"."article"."createtime" IS '创建时间'; +COMMENT ON COLUMN "public"."article"."updatetime" IS '修改时间'; +COMMENT ON COLUMN "public"."article"."authorname" IS '作者名'; +COMMENT ON COLUMN "public"."article"."coverurl" IS '封面'; + +-- ---------------------------- +-- Records of article +-- ---------------------------- + +-- ---------------------------- +-- Table structure for articlecategory +-- ---------------------------- +DROP TABLE IF EXISTS "public"."articlecategory"; +CREATE TABLE "public"."articlecategory" ( + "category_id" int4 NOT NULL DEFAULT nextval('articlecategoryid_seq'::regclass), + "name" varchar(20) COLLATE "pg_catalog"."default" NOT NULL, + "create_time" timestamp(6), + "parentid" int8 +) +; +COMMENT ON COLUMN "public"."articlecategory"."category_id" IS '目录id'; +COMMENT ON COLUMN "public"."articlecategory"."name" IS '目录名'; +COMMENT ON COLUMN "public"."articlecategory"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."articlecategory"."parentid" IS '父级ID'; + +-- ---------------------------- +-- Records of articlecategory +-- ---------------------------- + +-- ---------------------------- +-- Table structure for gen_demo +-- ---------------------------- +DROP TABLE IF EXISTS "public"."gen_demo"; +CREATE TABLE "public"."gen_demo" ( + "id" int4 NOT NULL DEFAULT nextval('gen_demoid_seq'::regclass), + "name" varchar(20) COLLATE "pg_catalog"."default" NOT NULL, + "icon" varchar(255) COLLATE "pg_catalog"."default", + "showstatus" int4 NOT NULL, + "addtime" timestamp(6), + "sex" int4, + "sort" int4, + "remark" varchar(200) COLLATE "pg_catalog"."default", + "begintime" timestamp(6), + "endtime" timestamp(6), + "feature" varchar(100) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."gen_demo"."id" IS '自增id'; +COMMENT ON COLUMN "public"."gen_demo"."name" IS '名称'; +COMMENT ON COLUMN "public"."gen_demo"."icon" IS '图片'; +COMMENT ON COLUMN "public"."gen_demo"."showstatus" IS '显示状态'; +COMMENT ON COLUMN "public"."gen_demo"."addtime" IS '添加时间'; +COMMENT ON COLUMN "public"."gen_demo"."sex" IS '用户性别'; +COMMENT ON COLUMN "public"."gen_demo"."sort" IS '排序'; +COMMENT ON COLUMN "public"."gen_demo"."remark" IS '备注'; +COMMENT ON COLUMN "public"."gen_demo"."begintime" IS '开始时间'; +COMMENT ON COLUMN "public"."gen_demo"."endtime" IS '结束时间'; +COMMENT ON COLUMN "public"."gen_demo"."feature" IS '特征'; + +-- ---------------------------- +-- Records of gen_demo +-- ---------------------------- + +-- ---------------------------- +-- Table structure for gen_table +-- ---------------------------- +DROP TABLE IF EXISTS "public"."gen_table"; +CREATE TABLE "public"."gen_table" ( + "tableid" int8 NOT NULL DEFAULT nextval('gen_tableid_seq'::regclass), + "tablename" varchar(200) COLLATE "pg_catalog"."default", + "tablecomment" varchar(500) COLLATE "pg_catalog"."default", + "subtablename" varchar(64) COLLATE "pg_catalog"."default", + "subtablefkname" varchar(64) COLLATE "pg_catalog"."default", + "classname" varchar(100) COLLATE "pg_catalog"."default", + "tplcategory" varchar(200) COLLATE "pg_catalog"."default", + "basenamespace" varchar(100) COLLATE "pg_catalog"."default", + "modulename" varchar(30) COLLATE "pg_catalog"."default", + "businessname" varchar(30) COLLATE "pg_catalog"."default", + "functionname" varchar(50) COLLATE "pg_catalog"."default", + "functionauthor" varchar(50) COLLATE "pg_catalog"."default", + "gentype" char(1) COLLATE "pg_catalog"."default", + "genpath" varchar(200) COLLATE "pg_catalog"."default", + "options" varchar(1000) COLLATE "pg_catalog"."default", + "create_by" varchar(64) COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "update_by" varchar(64) COLLATE "pg_catalog"."default", + "update_time" timestamp(6), + "remark" varchar(500) COLLATE "pg_catalog"."default", + "dbname" varchar(100) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."gen_table"."tableid" IS '编号'; +COMMENT ON COLUMN "public"."gen_table"."tablename" IS '表名称'; +COMMENT ON COLUMN "public"."gen_table"."tablecomment" IS '表描述'; +COMMENT ON COLUMN "public"."gen_table"."subtablename" IS '关联子表的表名'; +COMMENT ON COLUMN "public"."gen_table"."subtablefkname" IS '子表关联的外键名'; +COMMENT ON COLUMN "public"."gen_table"."classname" IS '实体类名称'; +COMMENT ON COLUMN "public"."gen_table"."tplcategory" IS '使用的模板(crud单表操作 tree树表操作)'; +COMMENT ON COLUMN "public"."gen_table"."basenamespace" IS '生成命名空间前缀'; +COMMENT ON COLUMN "public"."gen_table"."modulename" IS '生成模块名'; +COMMENT ON COLUMN "public"."gen_table"."businessname" IS '生成业务名'; +COMMENT ON COLUMN "public"."gen_table"."functionname" IS '生成功能名'; +COMMENT ON COLUMN "public"."gen_table"."functionauthor" IS '生成功能作者'; +COMMENT ON COLUMN "public"."gen_table"."gentype" IS '生成代码方式(0zip压缩包 1自定义路径)'; +COMMENT ON COLUMN "public"."gen_table"."genpath" IS '生成路径(不填默认项目路径)'; +COMMENT ON COLUMN "public"."gen_table"."options" IS '其它生成选项'; +COMMENT ON COLUMN "public"."gen_table"."create_by" IS '创建者'; +COMMENT ON COLUMN "public"."gen_table"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."gen_table"."update_by" IS '更新者'; +COMMENT ON COLUMN "public"."gen_table"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."gen_table"."remark" IS '备注'; +COMMENT ON COLUMN "public"."gen_table"."dbname" IS '数据库名'; +COMMENT ON TABLE "public"."gen_table" IS '代码生成业务表'; + +-- ---------------------------- +-- Records of gen_table +-- ---------------------------- + +-- ---------------------------- +-- Table structure for gen_table_column +-- ---------------------------- +DROP TABLE IF EXISTS "public"."gen_table_column"; +CREATE TABLE "public"."gen_table_column" ( + "columnid" int8 NOT NULL DEFAULT nextval('gen_table_columnid_seq'::regclass), + "tablename" varchar(200) COLLATE "pg_catalog"."default", + "tableid" int8, + "columnname" varchar(200) COLLATE "pg_catalog"."default", + "columncomment" varchar(500) COLLATE "pg_catalog"."default", + "columntype" varchar(100) COLLATE "pg_catalog"."default", + "csharptype" varchar(100) COLLATE "pg_catalog"."default", + "csharpfield" varchar(100) COLLATE "pg_catalog"."default", + "ispk" int2, + "isincrement" int2, + "isrequired" int2, + "isinsert" int2, + "isedit" int2, + "islist" int2, + "isquery" int2, + "issort" int2, + "isexport" int2, + "querytype" varchar(200) COLLATE "pg_catalog"."default", + "htmltype" varchar(200) COLLATE "pg_catalog"."default", + "dicttype" varchar(200) COLLATE "pg_catalog"."default", + "sort" int4, + "create_by" varchar(64) COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "update_by" varchar(64) COLLATE "pg_catalog"."default", + "update_time" timestamp(6), + "remark" varchar(200) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."gen_table_column"."columnid" IS '编号'; +COMMENT ON COLUMN "public"."gen_table_column"."tablename" IS '表名'; +COMMENT ON COLUMN "public"."gen_table_column"."tableid" IS '归属表编号'; +COMMENT ON COLUMN "public"."gen_table_column"."columnname" IS '列名称'; +COMMENT ON COLUMN "public"."gen_table_column"."columncomment" IS '列描述'; +COMMENT ON COLUMN "public"."gen_table_column"."columntype" IS '列类型'; +COMMENT ON COLUMN "public"."gen_table_column"."csharptype" IS 'C#类型'; +COMMENT ON COLUMN "public"."gen_table_column"."csharpfield" IS 'C#字段名'; +COMMENT ON COLUMN "public"."gen_table_column"."ispk" IS '是否主键(1是)'; +COMMENT ON COLUMN "public"."gen_table_column"."isincrement" IS '是否自增(1是)'; +COMMENT ON COLUMN "public"."gen_table_column"."isrequired" IS '是否必填(1是)'; +COMMENT ON COLUMN "public"."gen_table_column"."isinsert" IS '是否为插入字段(1是)'; +COMMENT ON COLUMN "public"."gen_table_column"."isedit" IS '是否编辑字段(1是)'; +COMMENT ON COLUMN "public"."gen_table_column"."islist" IS '是否列表字段(1是)'; +COMMENT ON COLUMN "public"."gen_table_column"."isquery" IS '是否查询字段(1是)'; +COMMENT ON COLUMN "public"."gen_table_column"."issort" IS '是否排序字段(1是)'; +COMMENT ON COLUMN "public"."gen_table_column"."isexport" IS '是否导出字段(1是)'; +COMMENT ON COLUMN "public"."gen_table_column"."querytype" IS '查询方式(等于、不等于、大于、小于、范围)'; +COMMENT ON COLUMN "public"."gen_table_column"."htmltype" IS '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)'; +COMMENT ON COLUMN "public"."gen_table_column"."dicttype" IS '字典类型'; +COMMENT ON COLUMN "public"."gen_table_column"."sort" IS '排序'; +COMMENT ON COLUMN "public"."gen_table_column"."create_by" IS '创建者'; +COMMENT ON COLUMN "public"."gen_table_column"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."gen_table_column"."update_by" IS '更新者'; +COMMENT ON COLUMN "public"."gen_table_column"."update_time" IS '更新时间'; +COMMENT ON TABLE "public"."gen_table_column" IS '代码生成业务表字段'; + +-- ---------------------------- +-- Records of gen_table_column +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_common_lang +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_common_lang"; +CREATE TABLE "public"."sys_common_lang" ( + "id" int8 NOT NULL, + "lang_code" varchar(10) COLLATE "pg_catalog"."default" NOT NULL, + "lang_key" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, + "lang_name" varchar(2000) COLLATE "pg_catalog"."default" NOT NULL, + "addtime" timestamp(6) +) +; +COMMENT ON COLUMN "public"."sys_common_lang"."id" IS 'id'; +COMMENT ON COLUMN "public"."sys_common_lang"."lang_code" IS '语言code eg:zh-cn'; +COMMENT ON COLUMN "public"."sys_common_lang"."lang_key" IS '翻译key值'; +COMMENT ON COLUMN "public"."sys_common_lang"."lang_name" IS '翻译内容'; +COMMENT ON COLUMN "public"."sys_common_lang"."addtime" IS '添加时间'; + +-- ---------------------------- +-- Records of sys_common_lang +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_config +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_config"; +CREATE TABLE "public"."sys_config" ( + "configid" int4 NOT NULL DEFAULT nextval('sys_configid_seq'::regclass), + "configname" varchar(100) COLLATE "pg_catalog"."default", + "configkey" varchar(100) COLLATE "pg_catalog"."default", + "configvalue" varchar(500) COLLATE "pg_catalog"."default", + "configtype" char(1) COLLATE "pg_catalog"."default", + "create_by" varchar(64) COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "update_by" varchar(64) COLLATE "pg_catalog"."default", + "update_time" timestamp(6), + "remark" varchar(500) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."sys_config"."configid" IS '参数主键'; +COMMENT ON COLUMN "public"."sys_config"."configname" IS '参数名称'; +COMMENT ON COLUMN "public"."sys_config"."configkey" IS '参数键名'; +COMMENT ON COLUMN "public"."sys_config"."configvalue" IS '参数键值'; +COMMENT ON COLUMN "public"."sys_config"."configtype" IS '系统内置(Y是 N否)'; +COMMENT ON COLUMN "public"."sys_config"."create_by" IS '创建者'; +COMMENT ON COLUMN "public"."sys_config"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."sys_config"."update_by" IS '更新者'; +COMMENT ON COLUMN "public"."sys_config"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."sys_config"."remark" IS '备注'; +COMMENT ON TABLE "public"."sys_config" IS '参数配置表'; + +-- ---------------------------- +-- Records of sys_config +-- ---------------------------- +INSERT INTO "public"."sys_config" VALUES (1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2021-12-26 13:14:57', '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow'); +INSERT INTO "public"."sys_config" VALUES (2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2021-12-26 13:14:57', '', NULL, '初始化密码 123456'); +INSERT INTO "public"."sys_config" VALUES (3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2021-12-26 13:14:57', '', NULL, '深色主题theme-dark,浅色主题theme-light'); +INSERT INTO "public"."sys_config" VALUES (5, '本地文件上传访问域名', 'sys.file.uploadurl', 'http://localhost:8888', 'Y', '', '2022-12-19 10:12:37', '', NULL, NULL); +INSERT INTO "public"."sys_config" VALUES (6, '开启注册功能', 'sys.account.register', 'true', 'Y', 'admin', '2022-12-19 10:12:37', 'admin', NULL, NULL); +INSERT INTO "public"."sys_config" VALUES (7, '文章预览地址', 'sys.article.preview.url', 'http://www.izhaorui.cn/article/details/', 'Y', 'admin', '2022-12-19 10:12:37', '', NULL, '格式:http://www.izhaorui.cn/article/details/{aid},其中{aid}为文章的id'); +INSERT INTO "public"."sys_config" VALUES (4, '账号自助-验证码开关', 'sys.account.captchaOnOff', 'off', 'Y', 'admin', '2021-12-26 13:14:57', 'admin', '2022-03-30 12:43:48', '是否开启验证码功能(off、关闭,1、动态验证码 2、动态gif泡泡 3、泡泡 4、静态验证码)'); + +-- ---------------------------- +-- Table structure for sys_dept +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_dept"; +CREATE TABLE "public"."sys_dept" ( + "deptid" int8 NOT NULL DEFAULT nextval('sys_deptid_seq'::regclass), + "parentid" int8, + "ancestors" varchar(50) COLLATE "pg_catalog"."default", + "deptname" varchar(30) COLLATE "pg_catalog"."default", + "ordernum" int4, + "leader" varchar(20) COLLATE "pg_catalog"."default", + "phone" varchar(11) COLLATE "pg_catalog"."default", + "email" varchar(50) COLLATE "pg_catalog"."default", + "status" char(1) COLLATE "pg_catalog"."default", + "delflag" char(1) COLLATE "pg_catalog"."default", + "create_by" varchar(64) COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "update_by" varchar(64) COLLATE "pg_catalog"."default", + "update_time" timestamp(6), + "remark" varchar(255) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."sys_dept"."deptid" IS '部门id'; +COMMENT ON COLUMN "public"."sys_dept"."parentid" IS '父部门id'; +COMMENT ON COLUMN "public"."sys_dept"."ancestors" IS '祖级列表'; +COMMENT ON COLUMN "public"."sys_dept"."deptname" IS '部门名称'; +COMMENT ON COLUMN "public"."sys_dept"."ordernum" IS '显示顺序'; +COMMENT ON COLUMN "public"."sys_dept"."leader" IS '负责人'; +COMMENT ON COLUMN "public"."sys_dept"."phone" IS '联系电话'; +COMMENT ON COLUMN "public"."sys_dept"."email" IS '邮箱'; +COMMENT ON COLUMN "public"."sys_dept"."status" IS '部门状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."sys_dept"."delflag" IS '删除标志(0代表存在 2代表删除)'; +COMMENT ON COLUMN "public"."sys_dept"."create_by" IS '创建者'; +COMMENT ON COLUMN "public"."sys_dept"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."sys_dept"."update_by" IS '更新者'; +COMMENT ON COLUMN "public"."sys_dept"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."sys_dept"."remark" IS '备注'; +COMMENT ON TABLE "public"."sys_dept" IS '部门表'; + +-- ---------------------------- +-- Records of sys_dept +-- ---------------------------- +INSERT INTO "public"."sys_dept" VALUES (100, 0, '0', 'A公司', 0, 'zr', '', '', '0', '0', 'admin', NULL, '', NULL, NULL); +INSERT INTO "public"."sys_dept" VALUES (101, 100, '0,100', '研发部门', 1, 'zr', '', '', '0', '0', 'admin', NULL, '', NULL, NULL); +INSERT INTO "public"."sys_dept" VALUES (102, 100, '0,100', '市场部门', 2, 'zr', '', '', '0', '0', 'admin', NULL, '', NULL, NULL); +INSERT INTO "public"."sys_dept" VALUES (103, 100, '0,100', '测试部门', 3, 'zr', '', '', '0', '0', 'admin', NULL, '', NULL, NULL); +INSERT INTO "public"."sys_dept" VALUES (104, 100, '0,100', '财务部门', 4, 'zr', '', '', '0', '0', 'admin', NULL, '', NULL, NULL); +INSERT INTO "public"."sys_dept" VALUES (200, 0, '0', 'B公司', 0, 'zr', '', '', '0', '0', 'admin', NULL, '', NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_dict_data +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_dict_data"; +CREATE TABLE "public"."sys_dict_data" ( + "dictcode" int8 NOT NULL DEFAULT nextval('sys_dict_dataid_seq'::regclass), + "dictsort" int4, + "dictlabel" varchar(100) COLLATE "pg_catalog"."default", + "dictvalue" varchar(100) COLLATE "pg_catalog"."default", + "dicttype" varchar(100) COLLATE "pg_catalog"."default", + "cssclass" varchar(100) COLLATE "pg_catalog"."default", + "listclass" varchar(100) COLLATE "pg_catalog"."default", + "isdefault" char(1) COLLATE "pg_catalog"."default", + "status" char(1) COLLATE "pg_catalog"."default", + "create_by" varchar(64) COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "update_by" varchar(64) COLLATE "pg_catalog"."default", + "update_time" timestamp(6), + "remark" varchar(500) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."sys_dict_data"."dictcode" IS '字典编码'; +COMMENT ON COLUMN "public"."sys_dict_data"."dictsort" IS '字典排序'; +COMMENT ON COLUMN "public"."sys_dict_data"."dictlabel" IS '字典标签'; +COMMENT ON COLUMN "public"."sys_dict_data"."dictvalue" IS '字典键值'; +COMMENT ON COLUMN "public"."sys_dict_data"."dicttype" IS '字典类型'; +COMMENT ON COLUMN "public"."sys_dict_data"."cssclass" IS '样式属性(其他样式扩展)'; +COMMENT ON COLUMN "public"."sys_dict_data"."listclass" IS '表格回显样式'; +COMMENT ON COLUMN "public"."sys_dict_data"."isdefault" IS '是否默认(Y是 N否)'; +COMMENT ON COLUMN "public"."sys_dict_data"."status" IS '状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."sys_dict_data"."create_by" IS '创建者'; +COMMENT ON COLUMN "public"."sys_dict_data"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."sys_dict_data"."update_by" IS '更新者'; +COMMENT ON COLUMN "public"."sys_dict_data"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."sys_dict_data"."remark" IS '备注'; +COMMENT ON TABLE "public"."sys_dict_data" IS '字典数据表'; + +-- ---------------------------- +-- Records of sys_dict_data +-- ---------------------------- +INSERT INTO "public"."sys_dict_data" VALUES (1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '性别男'); +INSERT INTO "public"."sys_dict_data" VALUES (2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '性别女'); +INSERT INTO "public"."sys_dict_data" VALUES (3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '性别未知'); +INSERT INTO "public"."sys_dict_data" VALUES (4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '显示菜单'); +INSERT INTO "public"."sys_dict_data" VALUES (5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '隐藏菜单'); +INSERT INTO "public"."sys_dict_data" VALUES (6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '正常状态'); +INSERT INTO "public"."sys_dict_data" VALUES (7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '停用状态'); +INSERT INTO "public"."sys_dict_data" VALUES (8, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '正常状态'); +INSERT INTO "public"."sys_dict_data" VALUES (9, 2, '异常', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', '2021-07-02 14:09:09', '停用状态'); +INSERT INTO "public"."sys_dict_data" VALUES (10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '默认分组'); +INSERT INTO "public"."sys_dict_data" VALUES (11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '系统分组'); +INSERT INTO "public"."sys_dict_data" VALUES (12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '系统默认是'); +INSERT INTO "public"."sys_dict_data" VALUES (13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:21', '', NULL, '系统默认否'); +INSERT INTO "public"."sys_dict_data" VALUES (14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '通知'); +INSERT INTO "public"."sys_dict_data" VALUES (15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '公告'); +INSERT INTO "public"."sys_dict_data" VALUES (16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '正常状态'); +INSERT INTO "public"."sys_dict_data" VALUES (17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '关闭状态'); +INSERT INTO "public"."sys_dict_data" VALUES (18, 0, '其他', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '其他操作'); +INSERT INTO "public"."sys_dict_data" VALUES (19, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '新增操作'); +INSERT INTO "public"."sys_dict_data" VALUES (20, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '修改操作'); +INSERT INTO "public"."sys_dict_data" VALUES (21, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '删除操作'); +INSERT INTO "public"."sys_dict_data" VALUES (22, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '授权操作'); +INSERT INTO "public"."sys_dict_data" VALUES (23, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '导出操作'); +INSERT INTO "public"."sys_dict_data" VALUES (24, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '导入操作'); +INSERT INTO "public"."sys_dict_data" VALUES (25, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '强退操作'); +INSERT INTO "public"."sys_dict_data" VALUES (26, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '生成操作'); +INSERT INTO "public"."sys_dict_data" VALUES (27, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:22', '', NULL, '清空操作'); +INSERT INTO "public"."sys_dict_data" VALUES (28, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2021-02-24 10:56:23', '', NULL, '正常状态'); +INSERT INTO "public"."sys_dict_data" VALUES (29, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2021-02-24 10:56:23', '', NULL, '停用状态'); +INSERT INTO "public"."sys_dict_data" VALUES (30, 1, '发布', '1', 'sys_article_status', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:34:56', '', NULL, NULL); +INSERT INTO "public"."sys_dict_data" VALUES (31, 2, '草稿', '2', 'sys_article_status', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL); +INSERT INTO "public"."sys_dict_data" VALUES (32, 1, '中文', 'zh-cn', 'sys_lang_type', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL); +INSERT INTO "public"."sys_dict_data" VALUES (33, 2, '英文', 'en', 'sys_lang_type', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL); +INSERT INTO "public"."sys_dict_data" VALUES (34, 3, '繁体', 'zh-tw', 'sys_lang_type', NULL, NULL, NULL, '0', 'admin', '2021-08-19 10:35:06', '', NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_dict_type +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_dict_type"; +CREATE TABLE "public"."sys_dict_type" ( + "dictid" int8 NOT NULL DEFAULT nextval('sys_dict_typeid_seq'::regclass), + "dictname" varchar(100) COLLATE "pg_catalog"."default", + "dicttype" varchar(100) COLLATE "pg_catalog"."default", + "status" char(1) COLLATE "pg_catalog"."default", + "type" char(1) COLLATE "pg_catalog"."default", + "create_by" varchar(64) COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "update_by" varchar(64) COLLATE "pg_catalog"."default", + "update_time" timestamp(6), + "remark" varchar(500) COLLATE "pg_catalog"."default", + "customsql" varchar(500) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."sys_dict_type"."dictid" IS '字典主键'; +COMMENT ON COLUMN "public"."sys_dict_type"."dictname" IS '字典名称'; +COMMENT ON COLUMN "public"."sys_dict_type"."dicttype" IS '字典类型'; +COMMENT ON COLUMN "public"."sys_dict_type"."status" IS '状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."sys_dict_type"."type" IS '系统内置(Y是 N否)'; +COMMENT ON COLUMN "public"."sys_dict_type"."create_by" IS '创建者'; +COMMENT ON COLUMN "public"."sys_dict_type"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."sys_dict_type"."update_by" IS '更新者'; +COMMENT ON COLUMN "public"."sys_dict_type"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."sys_dict_type"."remark" IS '备注'; +COMMENT ON COLUMN "public"."sys_dict_type"."customsql" IS '自定义sql语句'; +COMMENT ON TABLE "public"."sys_dict_type" IS '字典类型表'; + +-- ---------------------------- +-- Records of sys_dict_type +-- ---------------------------- +INSERT INTO "public"."sys_dict_type" VALUES (1, '用户性别', 'sys_user_sex', '0', 'Y', 'admin', '2022-12-19 10:12:34', '', NULL, '用户性别列表', NULL); +INSERT INTO "public"."sys_dict_type" VALUES (2, '菜单状态', 'sys_show_hide', '0', 'Y', 'admin', '2022-12-19 10:12:34', '', NULL, '菜单状态列表', NULL); +INSERT INTO "public"."sys_dict_type" VALUES (3, '系统开关', 'sys_normal_disable', '0', 'Y', 'admin', '2022-12-19 10:12:34', '', NULL, '系统开关列表', NULL); +INSERT INTO "public"."sys_dict_type" VALUES (4, '任务状态', 'sys_job_status', '0', 'Y', 'admin', '2022-12-19 10:12:34', '', NULL, '任务状态列表', NULL); +INSERT INTO "public"."sys_dict_type" VALUES (5, '任务分组', 'sys_job_group', '0', 'Y', 'admin', '2022-12-19 10:12:34', '', NULL, '任务分组列表', NULL); +INSERT INTO "public"."sys_dict_type" VALUES (6, '系统是否', 'sys_yes_no', '0', 'Y', 'admin', '2022-12-19 10:12:34', '', NULL, '系统是否列表', NULL); +INSERT INTO "public"."sys_dict_type" VALUES (7, '通知类型', 'sys_notice_type', '0', 'Y', 'admin', '2022-12-19 10:12:34', '', NULL, '通知类型列表', NULL); +INSERT INTO "public"."sys_dict_type" VALUES (8, '通知状态', 'sys_notice_status', '0', 'Y', 'admin', '2022-12-19 10:12:34', '', NULL, '通知状态列表', NULL); +INSERT INTO "public"."sys_dict_type" VALUES (9, '操作类型', 'sys_oper_type', '0', 'Y', 'admin', '2022-12-19 10:12:34', '', NULL, '操作类型列表', NULL); +INSERT INTO "public"."sys_dict_type" VALUES (10, '系统状态', 'sys_common_status', '0', 'Y', 'admin', '2022-12-19 10:12:34', '', NULL, '登录状态列表', NULL); +INSERT INTO "public"."sys_dict_type" VALUES (11, '文章状态', 'sys_article_status', '0', 'Y', 'admin', '2022-12-19 10:12:34', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_dict_type" VALUES (12, '多语言类型', 'sys_lang_type', '0', 'Y', 'admin', '2022-12-19 10:12:34', '', NULL, '多语言字典类型', NULL); + +-- ---------------------------- +-- Table structure for sys_file +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_file"; +CREATE TABLE "public"."sys_file" ( + "id" int8 NOT NULL, + "realname" varchar(50) COLLATE "pg_catalog"."default", + "filename" varchar(50) COLLATE "pg_catalog"."default", + "fileurl" varchar(500) COLLATE "pg_catalog"."default", + "storepath" varchar(50) COLLATE "pg_catalog"."default", + "accessurl" varchar(300) COLLATE "pg_catalog"."default", + "filesize" varchar(20) COLLATE "pg_catalog"."default", + "filetype" varchar(200) COLLATE "pg_catalog"."default", + "fileext" varchar(10) COLLATE "pg_catalog"."default", + "create_by" varchar(50) COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "storetype" int4 +) +; +COMMENT ON COLUMN "public"."sys_file"."realname" IS '文件真实名'; +COMMENT ON COLUMN "public"."sys_file"."filename" IS '文件名'; +COMMENT ON COLUMN "public"."sys_file"."fileurl" IS '文件存储地址'; +COMMENT ON COLUMN "public"."sys_file"."storepath" IS '仓库位置'; +COMMENT ON COLUMN "public"."sys_file"."accessurl" IS '访问路径'; +COMMENT ON COLUMN "public"."sys_file"."filesize" IS '文件大小'; +COMMENT ON COLUMN "public"."sys_file"."filetype" IS '文件类型'; +COMMENT ON COLUMN "public"."sys_file"."fileext" IS '文件扩展名'; +COMMENT ON COLUMN "public"."sys_file"."create_by" IS '创建人'; +COMMENT ON COLUMN "public"."sys_file"."create_time" IS '上传时间'; +COMMENT ON COLUMN "public"."sys_file"."storetype" IS '存储类型'; + +-- ---------------------------- +-- Records of sys_file +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_logininfor +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_logininfor"; +CREATE TABLE "public"."sys_logininfor" ( + "infoid" int8 NOT NULL DEFAULT nextval('sys_logininforid_seq'::regclass), + "username" varchar(50) COLLATE "pg_catalog"."default", + "ipaddr" varchar(50) COLLATE "pg_catalog"."default", + "loginlocation" varchar(255) COLLATE "pg_catalog"."default", + "browser" varchar(50) COLLATE "pg_catalog"."default", + "os" varchar(50) COLLATE "pg_catalog"."default", + "status" char(1) COLLATE "pg_catalog"."default", + "msg" varchar(255) COLLATE "pg_catalog"."default", + "logintime" timestamp(6) +) +; +COMMENT ON COLUMN "public"."sys_logininfor"."infoid" IS '访问ID'; +COMMENT ON COLUMN "public"."sys_logininfor"."username" IS '用户账号'; +COMMENT ON COLUMN "public"."sys_logininfor"."ipaddr" IS '登录IP地址'; +COMMENT ON COLUMN "public"."sys_logininfor"."loginlocation" IS '登录地点'; +COMMENT ON COLUMN "public"."sys_logininfor"."browser" IS '浏览器类型'; +COMMENT ON COLUMN "public"."sys_logininfor"."os" IS '操作系统'; +COMMENT ON COLUMN "public"."sys_logininfor"."status" IS '登录状态(0成功 1失败)'; +COMMENT ON COLUMN "public"."sys_logininfor"."msg" IS '提示消息'; +COMMENT ON COLUMN "public"."sys_logininfor"."logintime" IS '访问时间'; +COMMENT ON TABLE "public"."sys_logininfor" IS '系统访问记录'; + +-- ---------------------------- +-- Records of sys_logininfor +-- ---------------------------- +INSERT INTO "public"."sys_logininfor" VALUES (1, 'admin', '127.0.0.1', '0-内网IP', 'Windows 10 Other Chrome 86.0.4240', 'Windows 10', '1', '用户名或密码错误', '2022-12-20 15:04:17.41581'); +INSERT INTO "public"."sys_logininfor" VALUES (2, 'admin', '127.0.0.1', '0-内网IP', 'Windows 10 Other Chrome 86.0.4240', 'Windows 10', '1', '用户名或密码错误', '2022-12-20 15:06:07.623798'); +INSERT INTO "public"."sys_logininfor" VALUES (3, 'admin', '127.0.0.1', '0-内网IP', 'Windows 10 Other Chrome 86.0.4240', 'Windows 10', '0', '登录成功', '2022-12-20 15:07:46.94624'); +INSERT INTO "public"."sys_logininfor" VALUES (4, 'admin', '127.0.0.1', '0-内网IP', 'Windows 10 Other Chrome 86.0.4240', 'Windows 10', '0', '登录成功', '2022-12-20 15:07:58.713711'); + +-- ---------------------------- +-- Table structure for sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_menu"; +CREATE TABLE "public"."sys_menu" ( + "menuid" int8 NOT NULL DEFAULT nextval('sys_menuid_seq'::regclass), + "menuname" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "parentid" int8, + "ordernum" int4, + "path" varchar(200) COLLATE "pg_catalog"."default", + "component" varchar(255) COLLATE "pg_catalog"."default", + "isframe" int4, + "iscache" int4, + "menutype" char(1) COLLATE "pg_catalog"."default", + "visible" char(1) COLLATE "pg_catalog"."default", + "status" char(1) COLLATE "pg_catalog"."default", + "perms" varchar(100) COLLATE "pg_catalog"."default", + "icon" varchar(100) COLLATE "pg_catalog"."default", + "create_by" varchar(64) COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "update_by" varchar(64) COLLATE "pg_catalog"."default", + "update_time" timestamp(6), + "remark" varchar(500) COLLATE "pg_catalog"."default", + "menuname_key" varchar(100) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."sys_menu"."menuid" IS '菜单ID'; +COMMENT ON COLUMN "public"."sys_menu"."menuname" IS '菜单名称'; +COMMENT ON COLUMN "public"."sys_menu"."parentid" IS '父菜单ID'; +COMMENT ON COLUMN "public"."sys_menu"."ordernum" IS '显示顺序'; +COMMENT ON COLUMN "public"."sys_menu"."path" IS '路由地址'; +COMMENT ON COLUMN "public"."sys_menu"."component" IS '组件路径'; +COMMENT ON COLUMN "public"."sys_menu"."isframe" IS '是否外链(0 否 1 是)'; +COMMENT ON COLUMN "public"."sys_menu"."iscache" IS '是否缓存(0缓存 1不缓存)'; +COMMENT ON COLUMN "public"."sys_menu"."menutype" IS '菜单类型(M目录 C菜单 F按钮 L链接)'; +COMMENT ON COLUMN "public"."sys_menu"."visible" IS '菜单状态(0显示 1隐藏)'; +COMMENT ON COLUMN "public"."sys_menu"."status" IS '菜单状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."sys_menu"."perms" IS '权限标识'; +COMMENT ON COLUMN "public"."sys_menu"."icon" IS '菜单图标'; +COMMENT ON COLUMN "public"."sys_menu"."create_by" IS '创建者'; +COMMENT ON COLUMN "public"."sys_menu"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."sys_menu"."update_by" IS '更新者'; +COMMENT ON COLUMN "public"."sys_menu"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."sys_menu"."remark" IS '备注'; +COMMENT ON COLUMN "public"."sys_menu"."menuname_key" IS '菜单名翻译字典名'; +COMMENT ON TABLE "public"."sys_menu" IS '菜单权限表'; + +-- ---------------------------- +-- Records of sys_menu +-- ---------------------------- +INSERT INTO "public"."sys_menu" VALUES (1, '系统管理', 0, 1, 'system', NULL, 0, 0, 'M', '0', '0', '', 'system', '', '2022-12-19 10:12:35', '', NULL, '系统管理目录', 'menu.system'); +INSERT INTO "public"."sys_menu" VALUES (2, '系统监控', 0, 2, 'monitor', NULL, 0, 0, 'M', '0', '0', '', 'monitor', '', '2022-12-19 10:12:35', '', NULL, '系统监控目录', 'menu.monitoring'); +INSERT INTO "public"."sys_menu" VALUES (3, '系统工具', 0, 3, 'tool', NULL, 0, 0, 'M', '0', '0', '', 'tool', '', '2022-12-19 10:12:35', '', NULL, '系统工具目录', 'menu.systemTools'); +INSERT INTO "public"."sys_menu" VALUES (6, '控制台', 0, 0, 'dashboard', 'index_v1', 0, 0, 'C', '0', '0', '', 'dashboard', '', '2022-12-19 10:12:35', '', NULL, '', 'menu.dashboard'); +INSERT INTO "public"."sys_menu" VALUES (100, '用户管理', 1, 1, 'user', 'system/user/index', 0, 0, 'C', '0', '0', 'system:user:list', 'user', '', '2022-12-19 10:12:35', '', NULL, '用户管理菜单', 'menu.systemUser'); +INSERT INTO "public"."sys_menu" VALUES (101, '角色管理', 1, 2, 'role', 'system/role/index', 0, 0, 'C', '0', '0', 'system:role:list', 'peoples', '', '2022-12-19 10:12:35', '', NULL, '角色管理菜单', 'menu.systemRole'); +INSERT INTO "public"."sys_menu" VALUES (102, '菜单管理', 1, 3, 'menu', 'system/menu/index', 0, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', '', '2022-12-19 10:12:35', '', NULL, '菜单管理菜单', 'menu.systemMenu'); +INSERT INTO "public"."sys_menu" VALUES (103, '部门管理', 1, 4, 'dept', 'system/dept/index', 0, 0, 'C', '0', '0', 'system:dept:list', 'tree', '', '2022-12-19 10:12:35', '', NULL, '部门管理菜单', 'menu.systemDept'); +INSERT INTO "public"."sys_menu" VALUES (104, '岗位管理', 1, 5, 'post', 'system/post/index', 0, 0, 'C', '0', '0', 'system:post:list', 'post', '', '2022-12-19 10:12:35', '', NULL, '岗位管理菜单', 'menu.systemPost'); +INSERT INTO "public"."sys_menu" VALUES (105, '字典管理', 1, 6, 'dict', 'system/dict/index', 0, 0, 'C', '0', '0', 'system:dict:list', 'dict', '', '2022-12-19 10:12:35', '', NULL, '', 'menu.systemDic'); +INSERT INTO "public"."sys_menu" VALUES (106, '角色分配', 1, 2, 'roleusers', 'system/roleusers/index', 0, 0, 'C', '1', '0', 'system:roleusers:list', 'people', '', '2022-12-19 10:12:35', '', NULL, NULL, ''); +INSERT INTO "public"."sys_menu" VALUES (107, '参数设置', 1, 8, 'config', 'system/config/index', 0, 0, 'C', '0', '0', 'system:config:list', 'edit', '', '2022-12-19 10:12:35', '', NULL, '', 'menu.systemParam'); +INSERT INTO "public"."sys_menu" VALUES (108, '日志管理', 1, 10, 'log', '', 0, 0, 'M', '0', '0', '', 'log', '', '2022-12-19 10:12:35', '', NULL, '日志管理菜单', 'menu.systemLog'); +INSERT INTO "public"."sys_menu" VALUES (109, '通知公告', 1, 9, 'notice', 'system/notice/index', 0, 0, 'C', '0', '0', 'system:notice:list', 'message', '', '2022-12-19 10:12:35', '', NULL, '通知公告菜单', 'menu.systemNotice'); +INSERT INTO "public"."sys_menu" VALUES (110, '定时任务', 2, 10, 'job', 'monitor/job/index', 0, 0, 'C', '0', '0', '', 'job', '', '2022-12-19 10:12:35', '', NULL, '定时任务菜单', 'menu.timedTask'); +INSERT INTO "public"."sys_menu" VALUES (112, '服务监控', 2, 11, 'server', 'monitor/server/index', 0, 0, 'C', '0', '0', 'monitor:server:list', 'server', '', '2022-12-19 10:12:35', '', NULL, '服务监控菜单', 'menu.serviceMonitor'); +INSERT INTO "public"."sys_menu" VALUES (113, '缓存监控', 2, 12, 'cache', 'monitor/cache/index', 0, 0, 'C', '1', '1', 'monitor:cache:list', 'redis', '', '2022-12-19 10:12:35', '', NULL, '缓存监控菜单', 'menu.cacheMonitor'); +INSERT INTO "public"."sys_menu" VALUES (114, '表单构建', 3, 13, 'build', 'tool/build/index', 0, 0, 'C', '0', '0', 'tool:build:list', 'build', '', '2022-12-19 10:12:35', '', NULL, '表单构建菜单', 'menu.formBuild'); +INSERT INTO "public"."sys_menu" VALUES (115, '代码生成', 3, 14, 'gen', 'tool/gen/index', 0, 0, 'C', '0', '0', 'tool:gen:list', 'code', '', '2022-12-19 10:12:35', '', NULL, '代码生成菜单', 'menu.codeGeneration'); +INSERT INTO "public"."sys_menu" VALUES (116, '系统接口', 3, 15, 'swagger', 'tool/swagger/index', 0, 0, 'C', '0', '0', 'tool:swagger:list', 'swagger', '', '2022-12-19 10:12:35', '', NULL, '系统接口菜单', 'menu.systemInterface'); +INSERT INTO "public"."sys_menu" VALUES (117, '发送邮件', 3, 16, 'sendEmail', 'tool/email/sendEmail', 0, 0, 'C', '0', '0', 'tool:email:send', 'email', '', '2022-12-19 10:12:35', '', NULL, '发送邮件菜单', 'menu.sendEmail'); +INSERT INTO "public"."sys_menu" VALUES (118, '文章管理', 3, 18, 'article', NULL, 0, 0, 'M', '0', '0', NULL, 'documentation', '', '2022-12-19 10:12:35', '', NULL, NULL, 'menu.systemArticle'); +INSERT INTO "public"."sys_menu" VALUES (119, '文章列表', 118, 1, 'index', 'system/article/manager', 0, 0, 'C', '0', '0', 'system:article:list', 'list', '', '2022-12-19 10:12:35', '', NULL, NULL, 'menu.articleList'); +INSERT INTO "public"."sys_menu" VALUES (500, '操作日志', 108, 1, 'operlog', 'monitor/operlog/index', 0, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', '', '2022-12-19 10:12:35', '', NULL, '操作日志菜单', 'menu.operLog'); +INSERT INTO "public"."sys_menu" VALUES (501, '登录日志', 108, 2, 'logininfor', 'monitor/logininfor/index', 0, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', '', '2022-12-19 10:12:35', '', NULL, '登录日志菜单', 'menu.loginLog'); +INSERT INTO "public"."sys_menu" VALUES (1001, '用户查询', 100, 1, '', '', 0, 0, 'F', '0', '0', 'system:user:query', '', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1002, '用户添加', 100, 2, '', '', 0, 0, 'F', '0', '0', 'system:user:add', '', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1003, '用户修改', 100, 3, '', '', 0, 0, 'F', '0', '0', 'system:user:edit', '', '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1004, '用户删除', 100, 4, '', '', 0, 0, 'F', '0', '0', 'system:user:delete', '', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1005, '用户导出', 100, 5, '', '', 0, 0, 'F', '0', '0', 'system:user:export', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1006, '用户导入', 100, 6, '', '', 0, 0, 'F', '0', '0', 'system:user:import', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1007, '重置密码', 100, 7, '', '', 0, 0, 'F', '0', '0', 'system:user:resetPwd', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1008, '角色查询', 101, 1, '', '', 0, 0, 'F', '0', '0', 'system:role:query', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1009, '角色新增', 101, 2, '', '', 0, 0, 'F', '0', '0', 'system:role:add', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1010, '角色修改', 101, 3, '', '', 0, 0, 'F', '0', '0', 'system:role:edit', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1011, '角色删除', 101, 4, '', '', 0, 0, 'F', '0', '0', 'system:role:remove', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1012, '角色授权', 101, 5, '', '', 0, 0, 'F', '0', '0', 'system:role:authorize', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1013, '菜单查询', 102, 1, '', '', 0, 0, 'F', '0', '0', 'system:menu:query', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1014, '菜单新增', 102, 2, '', '', 0, 0, 'F', '0', '0', 'system:menu:add', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1015, '菜单修改', 102, 3, '', '', 0, 0, 'F', '0', '0', 'system:menu:edit', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1016, '菜单删除', 102, 4, '', '', 0, 0, 'F', '0', '0', 'system:menu:remove', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1017, '修改排序', 102, 5, '', '', 0, 0, 'F', '0', '0', 'system:menu:changeSort', '', '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1018, '部门查询', 103, 1, '', '', 0, 0, 'F', '0', '0', 'system:dept:query', '', '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1019, '部门新增', 103, 2, '', '', 0, 0, 'F', '0', '0', 'system:dept:add', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1020, '部门修改', 103, 3, '', '', 0, 0, 'F', '0', '0', 'system:dept:update', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1021, '部门删除', 103, 4, '', '', 0, 0, 'F', '0', '0', 'system:dept:remove', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1022, '岗位查询', 104, 1, '', '', 0, 0, 'F', '0', '0', 'system:post:list', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1023, '岗位添加', 104, 2, '', '', 0, 0, 'F', '0', '0', 'system:post:add', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1024, '岗位删除', 104, 3, '', '', 0, 0, 'F', '0', '0', 'system:post:remove', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1025, '岗位编辑', 104, 4, '', '', 0, 0, 'F', '0', '0', 'system:post:edit', '', '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1026, '字典新增', 105, 1, '', '', 0, 0, 'F', '0', '0', 'system:dict:add', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1027, '字典修改', 105, 2, '', '', 0, 0, 'F', '0', '0', 'system:dict:edit', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1028, '字典删除', 105, 3, '', '', 0, 0, 'F', '0', '0', 'system:dict:remove', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1029, '新增用户', 106, 2, '', '', 0, 0, 'F', '0', '0', 'system:roleusers:add', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1030, '删除用户', 106, 3, '', '', 0, 0, 'F', '0', '0', 'system:roleusers:remove', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1032, '任务查询', 110, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:list', '#', '', '2022-12-19 10:12:35', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (1033, '任务新增', 110, 2, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:add', '', '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1034, '任务删除', 110, 3, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:delete', '', '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1035, '任务修改', 110, 4, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:edit', '', '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1036, '任务启动', 110, 5, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:start', '', '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1037, '任务运行', 110, 7, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:run', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1038, '任务停止', 110, 8, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:stop', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1039, '任务日志', 2, 0, 'job/log', 'monitor/job/log', 0, 0, 'C', '1', '0', 'monitor:job:query', 'log', '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1040, '任务导出', 110, 10, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:job:export', NULL, '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1041, '操作查询', 500, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:operlog:query', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1042, '操作删除', 500, 2, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:operlog:remove', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1043, '操作日志导出', 500, 3, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:operlog:export', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1044, '登录查询', 501, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:logininfor:query', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1045, '登录删除', 501, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:logininfor:remove', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1046, '登录日志导出', 501, 1, '#', NULL, 0, 0, 'F', '0', '0', 'monitor:logininfor:export', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1047, '发布文章', 3, 2, '/article/publish', 'system/article/publish', 0, 0, 'C', '1', '0', 'system:article:publish', 'log', '', '2022-12-19 10:12:35', '', NULL, NULL, ''); +INSERT INTO "public"."sys_menu" VALUES (1048, '文章新增', 118, 3, '#', NULL, 0, 0, 'F', '0', '0', 'system:article:add', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1049, '文章修改', 118, 4, '#', NULL, 0, 0, 'F', '0', '0', 'system:article:update', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1050, '文章删除', 118, 5, '#', NULL, 0, 0, 'F', '0', '0', 'system:article:delete', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1051, '查询公告', 109, 1, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:query', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1052, '新增公告', 109, 2, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:add', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1053, '删除公告', 109, 3, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:delete', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1054, '修改公告', 109, 4, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:update', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1055, '导出公告', 109, 5, '#', NULL, 0, 0, 'F', '0', '0', 'system:notice:export', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1060, '生成修改', 3, 1, '/gen/editTable', 'tool/gen/editTable', 0, 0, 'C', '1', '0', 'tool:gen:edit', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1061, '生成查询', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:query', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1062, '生成删除', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:remove', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1063, '导入代码', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:import', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1064, '生成代码', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:code', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1065, '预览代码', 115, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:gen:preview', '', '', '2022-12-19 10:12:36', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1070, '岗位导出', 104, 4, '', '', 0, 0, 'F', '0', '0', 'system:post:export', '', '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (1071, '字典导出', 105, 3, '', '', 0, 0, 'F', '0', '0', 'system:dict:export', NULL, '', '2022-12-19 10:12:35', '', NULL, NULL, NULL); +INSERT INTO "public"."sys_menu" VALUES (2000, '文件存储', 3, 17, 'file', 'tool/file/index', 0, 0, 'C', '0', '0', 'tool:file:list', 'upload', '', '2022-12-19 10:12:36', '', NULL, '文件存储菜单', 'menu.fileStorage'); +INSERT INTO "public"."sys_menu" VALUES (2001, '查询', 2000, 1, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:query', '', '', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2002, '新增', 2000, 2, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:add', '', '', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2003, '删除', 2000, 3, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:delete', '', '', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2004, '修改', 2000, 4, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:update', '', '', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2005, '导出', 2000, 5, '#', NULL, 0, 0, 'F', '0', '0', 'tool:file:export', '', '', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2006, '多语言配置', 1, 20, 'CommonLang', 'system/commonLang/index', 0, 0, 'C', '0', '0', 'system:lang:list', 'language', 'system', '2022-12-19 10:12:36', '', NULL, '', 'menu.systemLang'); +INSERT INTO "public"."sys_menu" VALUES (2007, '查询', 2006, 1, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:query', '', 'system', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2008, '新增', 2006, 2, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:add', '', 'system', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2009, '删除', 2006, 3, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:delete', '', 'system', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2010, '修改', 2006, 4, '#', NULL, 0, 0, 'F', '0', '0', 'system:lang:edit', '', 'system', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2011, '文章目录', 118, 999, 'ArticleCategory', 'system/article/articleCategory', 0, 0, 'C', '0', '0', 'articlecategory:list', 'tree-table', 'system', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2012, '查询', 2011, 1, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:query', '', 'system', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2013, '新增', 2011, 2, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:add', '', 'system', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2014, '删除', 2011, 3, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:delete', '', 'system', '2022-12-19 10:12:36', '', NULL, '', NULL); +INSERT INTO "public"."sys_menu" VALUES (2015, '修改', 2011, 4, '#', NULL, 0, 0, 'F', '0', '0', 'articlecategory:edit', '', 'system', '2022-12-19 10:12:36', '', NULL, '', NULL); + +-- ---------------------------- +-- Table structure for sys_notice +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_notice"; +CREATE TABLE "public"."sys_notice" ( + "notice_id" int4 NOT NULL DEFAULT nextval('sys_noticeid_seq'::regclass), + "notice_title" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "notice_type" char(1) COLLATE "pg_catalog"."default" NOT NULL, + "notice_content" varchar(500) COLLATE "pg_catalog"."default", + "status" char(1) COLLATE "pg_catalog"."default", + "create_by" varchar(64) COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "update_by" varchar(64) COLLATE "pg_catalog"."default", + "update_time" timestamp(6), + "remark" varchar(255) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."sys_notice"."notice_id" IS '公告ID'; +COMMENT ON COLUMN "public"."sys_notice"."notice_title" IS '公告标题'; +COMMENT ON COLUMN "public"."sys_notice"."notice_type" IS '公告类型(1通知 2公告)'; +COMMENT ON COLUMN "public"."sys_notice"."notice_content" IS '公告内容'; +COMMENT ON COLUMN "public"."sys_notice"."status" IS '公告状态(0正常 1关闭)'; +COMMENT ON COLUMN "public"."sys_notice"."create_by" IS '创建者'; +COMMENT ON COLUMN "public"."sys_notice"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."sys_notice"."update_by" IS '更新者'; +COMMENT ON COLUMN "public"."sys_notice"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."sys_notice"."remark" IS '备注'; +COMMENT ON TABLE "public"."sys_notice" IS '通知公告表'; + +-- ---------------------------- +-- Records of sys_notice +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_oper_log +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_oper_log"; +CREATE TABLE "public"."sys_oper_log" ( + "operid" int8 NOT NULL DEFAULT nextval('sys_oper_logid_seq'::regclass), + "title" varchar(50) COLLATE "pg_catalog"."default", + "businesstype" int4, + "method" varchar(100) COLLATE "pg_catalog"."default", + "requestmethod" varchar(10) COLLATE "pg_catalog"."default", + "operatortype" int4, + "opername" varchar(50) COLLATE "pg_catalog"."default", + "deptname" varchar(50) COLLATE "pg_catalog"."default", + "operurl" varchar(255) COLLATE "pg_catalog"."default", + "operip" varchar(50) COLLATE "pg_catalog"."default", + "operlocation" varchar(255) COLLATE "pg_catalog"."default", + "operparam" varchar(2000) COLLATE "pg_catalog"."default", + "jsonresult" varchar(5000) COLLATE "pg_catalog"."default", + "status" int4, + "errormsg" varchar(2000) COLLATE "pg_catalog"."default", + "opertime" timestamp(6), + "elapsed" int8 +) +; +COMMENT ON COLUMN "public"."sys_oper_log"."operid" IS '日志主键'; +COMMENT ON COLUMN "public"."sys_oper_log"."title" IS '模块标题'; +COMMENT ON COLUMN "public"."sys_oper_log"."businesstype" IS '业务类型(0其它 1新增 2修改 3删除)'; +COMMENT ON COLUMN "public"."sys_oper_log"."method" IS '方法名称'; +COMMENT ON COLUMN "public"."sys_oper_log"."requestmethod" IS '请求方式'; +COMMENT ON COLUMN "public"."sys_oper_log"."operatortype" IS '操作类别(0其它 1后台用户 2手机端用户)'; +COMMENT ON COLUMN "public"."sys_oper_log"."opername" IS '操作人员'; +COMMENT ON COLUMN "public"."sys_oper_log"."deptname" IS '部门名称'; +COMMENT ON COLUMN "public"."sys_oper_log"."operurl" IS '请求URL'; +COMMENT ON COLUMN "public"."sys_oper_log"."operip" IS '主机地址'; +COMMENT ON COLUMN "public"."sys_oper_log"."operlocation" IS '操作地点'; +COMMENT ON COLUMN "public"."sys_oper_log"."operparam" IS '请求参数'; +COMMENT ON COLUMN "public"."sys_oper_log"."jsonresult" IS '返回参数'; +COMMENT ON COLUMN "public"."sys_oper_log"."status" IS '操作状态(0正常 1异常)'; +COMMENT ON COLUMN "public"."sys_oper_log"."errormsg" IS '错误消息'; +COMMENT ON COLUMN "public"."sys_oper_log"."opertime" IS '操作时间'; +COMMENT ON COLUMN "public"."sys_oper_log"."elapsed" IS '请求用时'; +COMMENT ON TABLE "public"."sys_oper_log" IS '操作日志记录'; + +-- ---------------------------- +-- Records of sys_oper_log +-- ---------------------------- +INSERT INTO "public"."sys_oper_log" VALUES (1, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/login', '127.0.0.1', '0 内网IP', '{"username":"admin","password":"123456","code":"2t37","uuid":"8ef694174eb94ce6ba45cbd341996c8e"}', '{ + "code": 105, + "msg": "用户名或密码错误", + "data": null +}', 1, '用户名或密码错误', '2022-12-20 15:04:23.595226', 0); +INSERT INTO "public"."sys_oper_log" VALUES (2, NULL, 0, NULL, 'POST', 0, NULL, NULL, '/login', '127.0.0.1', '0 内网IP', '{"username":"admin","password":"123456","code":"5ewk","uuid":"88429631d73244cd8e001b480cb191d4"}', '{ + "code": 105, + "msg": "用户名或密码错误", + "data": null +}', 1, '用户名或密码错误', '2022-12-20 15:06:08.377878', 0); +INSERT INTO "public"."sys_oper_log" VALUES (3, '操作日志', 5, 'SysOperlog.Export()', 'GET', 0, 'admin', NULL, '/monitor/OperLog/export', '127.0.0.1', '0 内网IP', '?pageNum=1&pageSize=20', '{ "code": 200, "msg": "SUCCESS", "data": { "path": "/export/操作日志12-20-155331.xlsx", "fileName": "操作日志12-20-155331.xlsx" }}', 0, NULL, '2022-12-20 15:53:31.155256', 0); +INSERT INTO "public"."sys_oper_log" VALUES (4, '操作日志', 5, 'SysOperlog.Export()', 'GET', 0, 'admin', NULL, '/monitor/OperLog/export', '127.0.0.1', '0 内网IP', '?pageNum=1&pageSize=20', '{ "code": 200, "msg": "SUCCESS", "data": { "path": "/export/操作日志12-20-155348.xlsx", "fileName": "操作日志12-20-155348.xlsx" }}', 0, NULL, '2022-12-20 15:53:48.062228', 0); +INSERT INTO "public"."sys_oper_log" VALUES (5, '操作日志', 5, 'SysOperlog.Export()', 'GET', 0, 'admin', NULL, '/monitor/OperLog/export', '127.0.0.1', '0 内网IP', '?pageNum=1&pageSize=20', '{ "code": 200, "msg": "SUCCESS", "data": { "path": "/export/操作日志12-20-155716.xlsx", "fileName": "操作日志12-20-155716.xlsx" }}', 0, NULL, '2022-12-20 15:57:29.892171', 0); + +-- ---------------------------- +-- Table structure for sys_post +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_post"; +CREATE TABLE "public"."sys_post" ( + "postid" int8 NOT NULL DEFAULT nextval('sys_postid_seq'::regclass), + "postcode" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "postname" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "postsort" int4 NOT NULL, + "status" char(1) COLLATE "pg_catalog"."default" NOT NULL, + "create_by" varchar(64) COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "update_by" varchar(64) COLLATE "pg_catalog"."default", + "update_time" timestamp(6), + "remark" varchar(500) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."sys_post"."postid" IS '岗位ID'; +COMMENT ON COLUMN "public"."sys_post"."postcode" IS '岗位编码'; +COMMENT ON COLUMN "public"."sys_post"."postname" IS '岗位名称'; +COMMENT ON COLUMN "public"."sys_post"."postsort" IS '显示顺序'; +COMMENT ON COLUMN "public"."sys_post"."status" IS '状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."sys_post"."create_by" IS '创建者'; +COMMENT ON COLUMN "public"."sys_post"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."sys_post"."update_by" IS '更新者'; +COMMENT ON COLUMN "public"."sys_post"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."sys_post"."remark" IS '备注'; +COMMENT ON TABLE "public"."sys_post" IS '岗位信息表'; + +-- ---------------------------- +-- Records of sys_post +-- ---------------------------- +INSERT INTO "public"."sys_post" VALUES (1, 'CEO', '董事长', 1, '0', '', '2022-12-19 10:12:36', '', NULL, ''); +INSERT INTO "public"."sys_post" VALUES (2, 'SE', '项目经理', 2, '0', '', '2022-12-19 10:12:36', '', NULL, ''); +INSERT INTO "public"."sys_post" VALUES (3, 'HR', '人力资源', 3, '0', '', '2022-12-19 10:12:36', '', NULL, ''); +INSERT INTO "public"."sys_post" VALUES (4, 'USER', '普通员工', 4, '0', '', '2022-12-19 10:12:36', '', NULL, ''); +INSERT INTO "public"."sys_post" VALUES (6, 'PM', '人事经理', 0, '0', NULL, '2022-12-19 10:12:36', '', NULL, NULL); +INSERT INTO "public"."sys_post" VALUES (7, 'GM', '总经理', 0, '0', NULL, '2022-12-19 10:12:36', '', NULL, NULL); +INSERT INTO "public"."sys_post" VALUES (8, 'COO', '首席运营官', 0, '0', NULL, '2022-12-19 10:12:36', '', NULL, NULL); +INSERT INTO "public"."sys_post" VALUES (9, 'CFO', '首席财务官', 0, '0', NULL, '2022-12-19 10:12:36', '', NULL, NULL); +INSERT INTO "public"."sys_post" VALUES (10, 'CTO', '首席技术官', 0, '0', NULL, '2022-12-19 10:12:36', '', NULL, NULL); +INSERT INTO "public"."sys_post" VALUES (11, 'HRD', '人力资源总监', 0, '0', NULL, '2022-12-19 10:12:36', '', NULL, NULL); +INSERT INTO "public"."sys_post" VALUES (12, 'VP', '副总裁', 0, '0', NULL, '2022-12-19 10:12:36', '', NULL, NULL); +INSERT INTO "public"."sys_post" VALUES (13, 'OD', '运营总监', 0, '0', NULL, '2022-12-19 10:12:36', '', NULL, NULL); +INSERT INTO "public"."sys_post" VALUES (14, 'MD', '市场总监', 0, '0', NULL, '2022-12-19 10:12:36', '', NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_role +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_role"; +CREATE TABLE "public"."sys_role" ( + "roleid" int8 NOT NULL DEFAULT nextval('sys_roleid_seq'::regclass), + "rolename" varchar(30) COLLATE "pg_catalog"."default" NOT NULL, + "rolekey" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, + "rolesort" int4 NOT NULL, + "datascope" char(1) COLLATE "pg_catalog"."default", + "menu_check_strictly" int2, + "dept_check_strictly" int2 NOT NULL, + "status" char(1) COLLATE "pg_catalog"."default" NOT NULL, + "delflag" char(1) COLLATE "pg_catalog"."default" NOT NULL, + "create_by" varchar(64) COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "update_by" varchar(64) COLLATE "pg_catalog"."default", + "update_time" timestamp(6), + "remark" varchar(500) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."sys_role"."roleid" IS '角色ID'; +COMMENT ON COLUMN "public"."sys_role"."rolename" IS '角色名称'; +COMMENT ON COLUMN "public"."sys_role"."rolekey" IS '角色权限字符串'; +COMMENT ON COLUMN "public"."sys_role"."rolesort" IS '显示顺序'; +COMMENT ON COLUMN "public"."sys_role"."datascope" IS '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 )'; +COMMENT ON COLUMN "public"."sys_role"."menu_check_strictly" IS '菜单树选择项是否关联显示'; +COMMENT ON COLUMN "public"."sys_role"."dept_check_strictly" IS '部门树选择项是否关联显示'; +COMMENT ON COLUMN "public"."sys_role"."status" IS '角色状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."sys_role"."delflag" IS '删除标志(0代表存在 2代表删除)'; +COMMENT ON COLUMN "public"."sys_role"."create_by" IS '创建者'; +COMMENT ON COLUMN "public"."sys_role"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."sys_role"."update_by" IS '更新者'; +COMMENT ON COLUMN "public"."sys_role"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."sys_role"."remark" IS '备注'; +COMMENT ON TABLE "public"."sys_role" IS '角色信息表'; + +-- ---------------------------- +-- Records of sys_role +-- ---------------------------- +INSERT INTO "public"."sys_role" VALUES (1, '超级管理员', 'admin', 1, '1', 1, 0, '0', '0', 'admin', '2022-12-19 10:12:36', 'system', NULL, '超级管理员'); +INSERT INTO "public"."sys_role" VALUES (2, '普通角色', 'common', 2, '2', 1, 0, '0', '0', 'admin', '2022-12-19 10:12:36', 'system', NULL, '普通角色'); + +-- ---------------------------- +-- Table structure for sys_role_dept +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_role_dept"; +CREATE TABLE "public"."sys_role_dept" ( + "roleid" int8 NOT NULL, + "deptid" int8 NOT NULL +) +; +COMMENT ON COLUMN "public"."sys_role_dept"."roleid" IS '角色ID'; +COMMENT ON COLUMN "public"."sys_role_dept"."deptid" IS '部门ID'; +COMMENT ON TABLE "public"."sys_role_dept" IS '角色和部门关联表'; + +-- ---------------------------- +-- Records of sys_role_dept +-- ---------------------------- +INSERT INTO "public"."sys_role_dept" VALUES (2, 100); +INSERT INTO "public"."sys_role_dept" VALUES (2, 101); +INSERT INTO "public"."sys_role_dept" VALUES (2, 105); + +-- ---------------------------- +-- Table structure for sys_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_role_menu"; +CREATE TABLE "public"."sys_role_menu" ( + "role_id" int8 NOT NULL, + "menu_id" int8 NOT NULL, + "create_by" varchar(20) COLLATE "pg_catalog"."default", + "create_time" timestamp(6) +) +; +COMMENT ON COLUMN "public"."sys_role_menu"."role_id" IS '角色ID'; +COMMENT ON COLUMN "public"."sys_role_menu"."menu_id" IS '菜单ID'; +COMMENT ON TABLE "public"."sys_role_menu" IS '角色和菜单关联表'; + +-- ---------------------------- +-- Records of sys_role_menu +-- ---------------------------- +INSERT INTO "public"."sys_role_menu" VALUES (2, 1, NULL, '2022-12-19 10:12:36'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 3, NULL, '2022-12-19 10:12:36'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 5, NULL, '2022-12-19 10:12:36'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 6, NULL, '2022-12-19 10:12:36'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 100, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 101, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 102, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 103, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 104, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 106, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 108, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 109, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 114, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 500, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 501, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 1001, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 1008, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 1013, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 1018, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 1022, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 1031, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 1044, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (2, 1051, 'admin', '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (3, 4, NULL, '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (3, 118, NULL, '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (3, 1047, NULL, '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (3, 1048, NULL, '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (3, 1049, NULL, '2022-12-19 10:12:37'); +INSERT INTO "public"."sys_role_menu" VALUES (3, 1050, NULL, '2022-12-19 10:12:37'); + +-- ---------------------------- +-- Table structure for sys_tasks +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_tasks"; +CREATE TABLE "public"."sys_tasks" ( + "id" varchar(20) COLLATE "pg_catalog"."default" NOT NULL, + "name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "jobgroup" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "cron" varchar(255) COLLATE "pg_catalog"."default", + "assemblyname" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "classname" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "remark" text COLLATE "pg_catalog"."default", + "runtimes" int4 NOT NULL, + "begintime" timestamp(6), + "endtime" timestamp(6), + "triggertype" int4 NOT NULL, + "intervalsecond" int4 NOT NULL, + "isstart" int2 NOT NULL, + "jobparams" text COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "update_time" timestamp(6), + "create_by" varchar(50) COLLATE "pg_catalog"."default", + "update_by" varchar(50) COLLATE "pg_catalog"."default", + "lastruntime" timestamp(6), + "apiurl" varchar(255) COLLATE "pg_catalog"."default", + "tasktype" int4, + "sqltext" varchar(1000) COLLATE "pg_catalog"."default" NOT NULL, + "requestmethod" varchar(20) COLLATE "pg_catalog"."default" NOT NULL +) +; +COMMENT ON COLUMN "public"."sys_tasks"."id" IS 'UID'; +COMMENT ON COLUMN "public"."sys_tasks"."name" IS '任务名称'; +COMMENT ON COLUMN "public"."sys_tasks"."jobgroup" IS '任务分组'; +COMMENT ON COLUMN "public"."sys_tasks"."cron" IS '运行时间表达式'; +COMMENT ON COLUMN "public"."sys_tasks"."assemblyname" IS '程序集名称'; +COMMENT ON COLUMN "public"."sys_tasks"."classname" IS '任务所在类'; +COMMENT ON COLUMN "public"."sys_tasks"."remark" IS '任务描述'; +COMMENT ON COLUMN "public"."sys_tasks"."runtimes" IS '执行次数'; +COMMENT ON COLUMN "public"."sys_tasks"."begintime" IS '开始时间'; +COMMENT ON COLUMN "public"."sys_tasks"."endtime" IS '结束时间'; +COMMENT ON COLUMN "public"."sys_tasks"."triggertype" IS '触发器类型(0、simple 1、cron)'; +COMMENT ON COLUMN "public"."sys_tasks"."intervalsecond" IS '执行间隔时间(单位:秒)'; +COMMENT ON COLUMN "public"."sys_tasks"."isstart" IS '是否启动'; +COMMENT ON COLUMN "public"."sys_tasks"."jobparams" IS '传入参数'; +COMMENT ON COLUMN "public"."sys_tasks"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."sys_tasks"."update_time" IS '最后更新时间'; +COMMENT ON COLUMN "public"."sys_tasks"."create_by" IS '创建人编码'; +COMMENT ON COLUMN "public"."sys_tasks"."update_by" IS '更新人编码'; +COMMENT ON COLUMN "public"."sys_tasks"."lastruntime" IS '最后执行时间'; +COMMENT ON COLUMN "public"."sys_tasks"."apiurl" IS 'api执行地址'; +COMMENT ON COLUMN "public"."sys_tasks"."tasktype" IS '任务类型1程序集任务 2网络请求'; +COMMENT ON COLUMN "public"."sys_tasks"."sqltext" IS 'SQL语句'; +COMMENT ON COLUMN "public"."sys_tasks"."requestmethod" IS 'http请求方法'; +COMMENT ON TABLE "public"."sys_tasks" IS '计划任务'; + +-- ---------------------------- +-- Records of sys_tasks +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_tasks_log +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_tasks_log"; +CREATE TABLE "public"."sys_tasks_log" ( + "joblogid" int8 NOT NULL DEFAULT nextval('sys_tasks_logid_seq'::regclass), + "jobid" varchar(20) COLLATE "pg_catalog"."default" NOT NULL, + "jobname" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "jobgroup" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "jobmessage" varchar(500) COLLATE "pg_catalog"."default", + "status" char(1) COLLATE "pg_catalog"."default", + "exception" varchar(2000) COLLATE "pg_catalog"."default", + "createtime" timestamp(6), + "invoketarget" varchar(200) COLLATE "pg_catalog"."default", + "elapsed" float8 +) +; +COMMENT ON COLUMN "public"."sys_tasks_log"."joblogid" IS '任务日志ID'; +COMMENT ON COLUMN "public"."sys_tasks_log"."jobid" IS '任务id'; +COMMENT ON COLUMN "public"."sys_tasks_log"."jobname" IS '任务名称'; +COMMENT ON COLUMN "public"."sys_tasks_log"."jobgroup" IS '任务组名'; +COMMENT ON COLUMN "public"."sys_tasks_log"."jobmessage" IS '日志信息'; +COMMENT ON COLUMN "public"."sys_tasks_log"."status" IS '执行状态(0正常 1失败)'; +COMMENT ON COLUMN "public"."sys_tasks_log"."exception" IS '异常信息'; +COMMENT ON COLUMN "public"."sys_tasks_log"."createtime" IS '创建时间'; +COMMENT ON COLUMN "public"."sys_tasks_log"."invoketarget" IS '调用目标'; +COMMENT ON COLUMN "public"."sys_tasks_log"."elapsed" IS '作业用时'; +COMMENT ON TABLE "public"."sys_tasks_log" IS '定时任务调度日志表'; + +-- ---------------------------- +-- Records of sys_tasks_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_user"; +CREATE TABLE "public"."sys_user" ( + "userid" int8 NOT NULL DEFAULT nextval('sys_userid_seq'::regclass), + "deptid" int8, + "username" varchar(30) COLLATE "pg_catalog"."default" NOT NULL, + "nickname" varchar(30) COLLATE "pg_catalog"."default" NOT NULL, + "usertype" varchar(2) COLLATE "pg_catalog"."default", + "email" varchar(50) COLLATE "pg_catalog"."default", + "phonenumber" varchar(11) COLLATE "pg_catalog"."default", + "sex" char(1) COLLATE "pg_catalog"."default", + "avatar" varchar(400) COLLATE "pg_catalog"."default", + "password" varchar(100) COLLATE "pg_catalog"."default", + "status" char(1) COLLATE "pg_catalog"."default", + "delflag" char(1) COLLATE "pg_catalog"."default", + "loginip" varchar(50) COLLATE "pg_catalog"."default", + "logindate" timestamp(6), + "create_by" varchar(64) COLLATE "pg_catalog"."default", + "create_time" timestamp(6), + "update_by" varchar(64) COLLATE "pg_catalog"."default", + "update_time" timestamp(6), + "remark" varchar(500) COLLATE "pg_catalog"."default" +) +; +COMMENT ON COLUMN "public"."sys_user"."userid" IS '用户ID'; +COMMENT ON COLUMN "public"."sys_user"."deptid" IS '部门ID'; +COMMENT ON COLUMN "public"."sys_user"."username" IS '用户账号'; +COMMENT ON COLUMN "public"."sys_user"."nickname" IS '用户昵称'; +COMMENT ON COLUMN "public"."sys_user"."usertype" IS '用户类型(00系统用户)'; +COMMENT ON COLUMN "public"."sys_user"."email" IS '用户邮箱'; +COMMENT ON COLUMN "public"."sys_user"."phonenumber" IS '手机号码'; +COMMENT ON COLUMN "public"."sys_user"."sex" IS '用户性别(0男 1女 2未知)'; +COMMENT ON COLUMN "public"."sys_user"."avatar" IS '头像地址'; +COMMENT ON COLUMN "public"."sys_user"."password" IS '密码'; +COMMENT ON COLUMN "public"."sys_user"."status" IS '帐号状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."sys_user"."delflag" IS '删除标志(0代表存在 2代表删除)'; +COMMENT ON COLUMN "public"."sys_user"."loginip" IS '最后登录IP'; +COMMENT ON COLUMN "public"."sys_user"."logindate" IS '最后登录时间'; +COMMENT ON COLUMN "public"."sys_user"."create_by" IS '创建者'; +COMMENT ON COLUMN "public"."sys_user"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."sys_user"."update_by" IS '更新者'; +COMMENT ON COLUMN "public"."sys_user"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."sys_user"."remark" IS '备注'; +COMMENT ON TABLE "public"."sys_user" IS '用户信息表'; + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO "public"."sys_user" VALUES (3, 100, 'editor', '编辑人员', '0', NULL, NULL, '2', '', 'E10ADC3949BA59ABBE56E057F20F883E', '0', '0', '127.0.0.1', '2021-08-19 09:27:46', 'admin', '2021-08-18 18:24:53', '', NULL, NULL); +INSERT INTO "public"."sys_user" VALUES (2, 0, 'zr', 'zr', '0', NULL, NULL, '0', '', 'E10ADC3949BA59ABBE56E057F20F883E', '0', '0', '', '0001-01-01 00:00:00', 'admin', '2021-07-05 17:29:13', 'admin', '2021-08-02 16:53:04', '普通用户'); +INSERT INTO "public"."sys_user" VALUES (1, 0, 'admin', '管理员', '0', '', '', '0', '', 'E10ADC3949BA59ABBE56E057F20F883E', '0', '0', '127.0.0.1', '2022-12-20 15:07:58.729401', 'admin', '2020-11-26 11:52:59', 'admin', '2021-08-03 10:11:24', '管理员'); + +-- ---------------------------- +-- Table structure for sys_user_post +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_user_post"; +CREATE TABLE "public"."sys_user_post" ( + "userid" int8 NOT NULL, + "postid" int8 NOT NULL +) +; +COMMENT ON COLUMN "public"."sys_user_post"."userid" IS '用户ID'; +COMMENT ON COLUMN "public"."sys_user_post"."postid" IS '岗位ID'; +COMMENT ON TABLE "public"."sys_user_post" IS '用户与岗位关联表'; + +-- ---------------------------- +-- Records of sys_user_post +-- ---------------------------- +INSERT INTO "public"."sys_user_post" VALUES (1, 1); +INSERT INTO "public"."sys_user_post" VALUES (4, 4); + +-- ---------------------------- +-- Table structure for sys_user_role +-- ---------------------------- +DROP TABLE IF EXISTS "public"."sys_user_role"; +CREATE TABLE "public"."sys_user_role" ( + "user_id" int8 NOT NULL, + "role_id" int8 NOT NULL +) +; +COMMENT ON COLUMN "public"."sys_user_role"."user_id" IS '用户ID'; +COMMENT ON COLUMN "public"."sys_user_role"."role_id" IS '角色ID'; +COMMENT ON TABLE "public"."sys_user_role" IS '用户和角色关联表'; + +-- ---------------------------- +-- Records of sys_user_role +-- ---------------------------- +INSERT INTO "public"."sys_user_role" VALUES (1, 1); +INSERT INTO "public"."sys_user_role" VALUES (2, 2); +INSERT INTO "public"."sys_user_role" VALUES (3, 3); +INSERT INTO "public"."sys_user_role" VALUES (4, 2); +INSERT INTO "public"."sys_user_role" VALUES (101, 2); +INSERT INTO "public"."sys_user_role" VALUES (109, 116); +INSERT INTO "public"."sys_user_role" VALUES (110, 2); + +-- ---------------------------- +-- Function structure for exec +-- ---------------------------- +DROP FUNCTION IF EXISTS "public"."exec"("sqlstring" varchar); +CREATE OR REPLACE FUNCTION "public"."exec"("sqlstring" varchar) + RETURNS "pg_catalog"."varchar" AS $BODY$ + declare + res varchar(50); + BEGIN + EXECUTE sqlstring; + RETURN 'ok'; + END +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."articlecategoryid_seq"', 1, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."articleid"', 1, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."gen_demoid_seq"', 1, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."gen_table_columnid_seq"', 1, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."gen_tableid_seq"', 1, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."sys_configid_seq"', 7, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."sys_deptid_seq"', 200, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."sys_dict_dataid_seq"', 34, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."sys_dict_typeid_seq"', 12, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."sys_logininforid_seq"', 4, true); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."sys_menuid_seq"', 2015, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."sys_noticeid_seq"', 1, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."sys_oper_logid_seq"', 5, true); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."sys_postid_seq"', 14, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."sys_roleid_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."sys_tasks_logid_seq"', 1, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."sys_userid_seq"', 1, false); + +-- ---------------------------- +-- Primary Key structure for table article +-- ---------------------------- +ALTER TABLE "public"."article" ADD CONSTRAINT "article_pkey" PRIMARY KEY ("cid"); + +-- ---------------------------- +-- Primary Key structure for table articlecategory +-- ---------------------------- +ALTER TABLE "public"."articlecategory" ADD CONSTRAINT "_copy_23" PRIMARY KEY ("category_id"); + +-- ---------------------------- +-- Primary Key structure for table gen_demo +-- ---------------------------- +ALTER TABLE "public"."gen_demo" ADD CONSTRAINT "_copy_22" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table gen_table +-- ---------------------------- +ALTER TABLE "public"."gen_table" ADD CONSTRAINT "_copy_21" PRIMARY KEY ("tableid"); + +-- ---------------------------- +-- Primary Key structure for table gen_table_column +-- ---------------------------- +ALTER TABLE "public"."gen_table_column" ADD CONSTRAINT "_copy_20" PRIMARY KEY ("columnid"); + +-- ---------------------------- +-- Primary Key structure for table sys_common_lang +-- ---------------------------- +ALTER TABLE "public"."sys_common_lang" ADD CONSTRAINT "_copy_19" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table sys_config +-- ---------------------------- +ALTER TABLE "public"."sys_config" ADD CONSTRAINT "_copy_18" PRIMARY KEY ("configid"); + +-- ---------------------------- +-- Primary Key structure for table sys_dept +-- ---------------------------- +ALTER TABLE "public"."sys_dept" ADD CONSTRAINT "_copy_17" PRIMARY KEY ("deptid"); + +-- ---------------------------- +-- Primary Key structure for table sys_dict_data +-- ---------------------------- +ALTER TABLE "public"."sys_dict_data" ADD CONSTRAINT "_copy_16" PRIMARY KEY ("dictcode"); + +-- ---------------------------- +-- Indexes structure for table sys_dict_type +-- ---------------------------- +CREATE UNIQUE INDEX "dictType" ON "public"."sys_dict_type" USING btree ( + "dicttype" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table sys_dict_type +-- ---------------------------- +ALTER TABLE "public"."sys_dict_type" ADD CONSTRAINT "_copy_15" PRIMARY KEY ("dictid"); + +-- ---------------------------- +-- Primary Key structure for table sys_file +-- ---------------------------- +ALTER TABLE "public"."sys_file" ADD CONSTRAINT "_copy_14" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table sys_logininfor +-- ---------------------------- +ALTER TABLE "public"."sys_logininfor" ADD CONSTRAINT "_copy_13" PRIMARY KEY ("infoid"); + +-- ---------------------------- +-- Primary Key structure for table sys_menu +-- ---------------------------- +ALTER TABLE "public"."sys_menu" ADD CONSTRAINT "_copy_12" PRIMARY KEY ("menuid"); + +-- ---------------------------- +-- Primary Key structure for table sys_notice +-- ---------------------------- +ALTER TABLE "public"."sys_notice" ADD CONSTRAINT "_copy_11" PRIMARY KEY ("notice_id"); + +-- ---------------------------- +-- Primary Key structure for table sys_oper_log +-- ---------------------------- +ALTER TABLE "public"."sys_oper_log" ADD CONSTRAINT "_copy_10" PRIMARY KEY ("operid"); + +-- ---------------------------- +-- Primary Key structure for table sys_post +-- ---------------------------- +ALTER TABLE "public"."sys_post" ADD CONSTRAINT "_copy_9" PRIMARY KEY ("postid"); + +-- ---------------------------- +-- Primary Key structure for table sys_role +-- ---------------------------- +ALTER TABLE "public"."sys_role" ADD CONSTRAINT "_copy_8" PRIMARY KEY ("roleid"); + +-- ---------------------------- +-- Primary Key structure for table sys_role_dept +-- ---------------------------- +ALTER TABLE "public"."sys_role_dept" ADD CONSTRAINT "_copy_7" PRIMARY KEY ("roleid", "deptid"); + +-- ---------------------------- +-- Primary Key structure for table sys_role_menu +-- ---------------------------- +ALTER TABLE "public"."sys_role_menu" ADD CONSTRAINT "_copy_6" PRIMARY KEY ("role_id", "menu_id"); + +-- ---------------------------- +-- Primary Key structure for table sys_tasks +-- ---------------------------- +ALTER TABLE "public"."sys_tasks" ADD CONSTRAINT "_copy_5" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table sys_tasks_log +-- ---------------------------- +ALTER TABLE "public"."sys_tasks_log" ADD CONSTRAINT "_copy_4" PRIMARY KEY ("joblogid"); + +-- ---------------------------- +-- Primary Key structure for table sys_user +-- ---------------------------- +ALTER TABLE "public"."sys_user" ADD CONSTRAINT "_copy_3" PRIMARY KEY ("userid"); + +-- ---------------------------- +-- Primary Key structure for table sys_user_post +-- ---------------------------- +ALTER TABLE "public"."sys_user_post" ADD CONSTRAINT "_copy_2" PRIMARY KEY ("userid", "postid"); + +-- ---------------------------- +-- Primary Key structure for table sys_user_role +-- ---------------------------- +ALTER TABLE "public"."sys_user_role" ADD CONSTRAINT "_copy_1" PRIMARY KEY ("user_id", "role_id"); -- Gitee From cc0d0b8f6b93ebf741905974b74b1522970251b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 6 Jan 2023 16:56:27 +0800 Subject: [PATCH 086/122] update index.vue --- ZR.Vue/src/views/tool/gen/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZR.Vue/src/views/tool/gen/index.vue b/ZR.Vue/src/views/tool/gen/index.vue index 74ae14ca..890cf1ca 100644 --- a/ZR.Vue/src/views/tool/gen/index.vue +++ b/ZR.Vue/src/views/tool/gen/index.vue @@ -147,7 +147,7 @@ export default { */ handleEditTable(row) { this.queryParams.tableName = row.tableName - this.handleSearch() + // this.handleSearch() this.$router.push({ path: '/gen/editTable', -- Gitee From 1096dc92ea678bd70fda0222d3714cd8c08f87ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 30 Jan 2023 17:40:14 +0800 Subject: [PATCH 087/122] =?UTF-8?q?Vue2=E5=AF=BC=E5=87=BA=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E4=BF=AE=E6=94=B9=E6=88=90=E6=96=87=E4=BB=B6=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/System/SysPostController.cs | 4 ++-- ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt | 8 ++------ ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVue.txt | 8 ++------ ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueSelect.txt | 8 ++------ 4 files changed, 8 insertions(+), 20 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/System/SysPostController.cs b/ZR.Admin.WebApi/Controllers/System/SysPostController.cs index a69dfebd..5527c811 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysPostController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysPostController.cs @@ -134,8 +134,8 @@ namespace ZR.Admin.WebApi.Controllers.System { var list = PostService.GetAll(); - string sFileName = ExportExcel(list, "syspost", "岗位"); - return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + var result = ExportExcelMini(list, "post", "岗位列表"); + return ExportExcel(result.Item2, result.Item1); } } } diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt index 72cfae30..ded7dbfa 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt @@ -372,13 +372,9 @@ $if(replaceDto.ShowBtnExport) confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", + }).then(async () => { + await export${genTable.BusinessName}(queryParams); }) - .then(function () { - return export${genTable.BusinessName}(queryParams); - }) - .then((response) => { - this.download(response.data.path); - }); }, $end //展开/折叠操作 diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVue.txt index f4f5d5ac..211d22cb 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVue.txt @@ -376,13 +376,9 @@ $if(replaceDto.ShowBtnExport) confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", + }).then(async () => { + await export${genTable.BusinessName}(queryParams); }) - .then(function () { - return export${genTable.BusinessName}(queryParams); - }) - .then((response) => { - this.download(response.data.path); - }); }, $end }, diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueSelect.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueSelect.txt index 8849f459..7d19a6f8 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueSelect.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueSelect.txt @@ -249,13 +249,9 @@ $if(replaceDto.ShowBtnExport) confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", + }).then(async () => { + await export${genTable.BusinessName}(queryParams); }) - .then(function () { - return export${genTable.BusinessName}(queryParams); - }) - .then((response) => { - this.download(response.data.path); - }); }, $end }, -- Gitee From 96e14edf409bb2df3dc1bc035f1f20c82cdb30b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 30 Jan 2023 17:40:46 +0800 Subject: [PATCH 088/122] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=88=90=E6=96=87=E4=BB=B6=E6=B5=81=E5=BD=A2?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Vue/src/api/monitor/operlog.js | 20 +- ZR.Vue/src/api/system/post.js | 26 +- ZR.Vue/src/api/system/user.js | 46 +-- ZR.Vue/src/main.js | 2 + ZR.Vue/src/utils/request.js | 173 +++++---- ZR.Vue/src/views/monitor/operlog/index.vue | 193 +++++----- ZR.Vue/src/views/system/post/index.vue | 181 +++++---- ZR.Vue/src/views/system/user/index.vue | 421 +++++++++++---------- 8 files changed, 563 insertions(+), 499 deletions(-) diff --git a/ZR.Vue/src/api/monitor/operlog.js b/ZR.Vue/src/api/monitor/operlog.js index 07e27ab2..b612153d 100644 --- a/ZR.Vue/src/api/monitor/operlog.js +++ b/ZR.Vue/src/api/monitor/operlog.js @@ -1,11 +1,12 @@ import request from '@/utils/request' +import { downFile } from '@/utils/request' // 查询操作日志列表 export function list(query) { return request({ url: '/monitor/operlog/list', method: 'get', - params: query + params: query, }) } @@ -13,7 +14,7 @@ export function list(query) { export function delOperlog(operId) { return request({ url: '/monitor/operlog/' + operId, - method: 'delete' + method: 'delete', }) } @@ -21,15 +22,16 @@ export function delOperlog(operId) { export function cleanOperlog() { return request({ url: '/monitor/operlog/clean', - method: 'delete' + method: 'delete', }) } // 导出操作日志 -export function exportOperlog(query) { - return request({ - url: '/monitor/operlog/export', - method: 'get', - params: query - }) +export async function exportOperlog(query) { + // return request({ + // url: '/monitor/operlog/export', + // method: 'get', + // params: query + // }) + await downFile('/monitor/operlog/export', query) } diff --git a/ZR.Vue/src/api/system/post.js b/ZR.Vue/src/api/system/post.js index 434cd351..7f86c87a 100644 --- a/ZR.Vue/src/api/system/post.js +++ b/ZR.Vue/src/api/system/post.js @@ -1,11 +1,12 @@ import request from '@/utils/request' +import { downFile } from '@/utils/request' // 查询岗位列表 export function listPost(query) { return request({ url: '/system/post/list', method: 'get', - params: query + params: query, }) } @@ -13,7 +14,7 @@ export function listPost(query) { export function getPost(postId) { return request({ url: '/system/post/' + postId, - method: 'get' + method: 'get', }) } @@ -22,7 +23,7 @@ export function addPost(data) { return request({ url: '/system/post', method: 'post', - data: data + data: data, }) } @@ -31,7 +32,7 @@ export function updatePost(data) { return request({ url: '/system/post', method: 'put', - data: data + data: data, }) } @@ -39,15 +40,16 @@ export function updatePost(data) { export function delPost(postId) { return request({ url: '/system/post/' + postId, - method: 'delete' + method: 'delete', }) } // 导出岗位 -export function exportPost(query) { - return request({ - url: '/system/post/export', - method: 'get', - params: query - }) -} \ No newline at end of file +export async function exportPost(query) { + // return request({ + // url: '/system/post/export', + // method: 'get', + // params: query + // }) + await downFile('/system/post/export', { ...query }) +} diff --git a/ZR.Vue/src/api/system/user.js b/ZR.Vue/src/api/system/user.js index 0d3cf9bf..b87809b2 100644 --- a/ZR.Vue/src/api/system/user.js +++ b/ZR.Vue/src/api/system/user.js @@ -1,12 +1,13 @@ import request from '@/utils/request' -import { praseStrZero } from "@/utils/ruoyi"; +import { praseStrZero } from '@/utils/ruoyi' +import { downFile } from '@/utils/request' // 查询用户列表 export function listUser(query) { return request({ url: '/system/user/list', method: 'get', - params: query + params: query, }) } @@ -14,7 +15,7 @@ export function listUser(query) { export function getUser(userId) { return request({ url: '/system/user/' + praseStrZero(userId), - method: 'get' + method: 'get', }) } @@ -23,7 +24,7 @@ export function addUser(data) { return request({ url: '/system/user/edit', method: 'post', - data: data + data: data, }) } @@ -32,7 +33,7 @@ export function updateUser(data) { return request({ url: '/system/user/edit', method: 'put', - data: data + data: data, }) } @@ -40,29 +41,30 @@ export function updateUser(data) { export function delUser(userId) { return request({ url: '/system/user/' + userId, - method: 'delete' + method: 'delete', }) } // 导出用户 -export function exportUser(query) { - return request({ - url: '/system/User/export', - method: 'get', - params: query - }) +export async function exportUser(query) { + // return request({ + // url: '/system/User/export', + // method: 'get', + // params: query + // }) + await downFile('/system/user/export', { ...query }) } // 用户密码重置 export function resetUserPwd(userId, password) { const data = { userId, - password + password, } return request({ url: '/system/user/resetPwd', method: 'put', - data: data + data: data, }) } @@ -70,12 +72,12 @@ export function resetUserPwd(userId, password) { export function changeUserStatus(userId, status) { const data = { userId, - status + status, } return request({ url: '/system/user/changeStatus', method: 'put', - data: data + data: data, }) } @@ -83,7 +85,7 @@ export function changeUserStatus(userId, status) { export function getUserProfile() { return request({ url: '/system/user/Profile', - method: 'get' + method: 'get', }) } @@ -92,7 +94,7 @@ export function updateUserProfile(data) { return request({ url: '/system/user/profile', method: 'put', - data: data + data: data, }) } @@ -100,12 +102,12 @@ export function updateUserProfile(data) { export function updateUserPwd(oldPassword, newPassword) { const data = { oldPassword, - newPassword + newPassword, } return request({ url: '/system/user/profile/updatePwd', method: 'put', - params: data + params: data, }) } @@ -114,7 +116,7 @@ export function uploadAvatar(data) { return request({ url: '/system/user/profile/avatar', method: 'post', - data: data + data: data, }) } @@ -123,6 +125,6 @@ export function importTemplate() { return request({ url: '/system/user/importTemplate', method: 'get', - responseType: 'blob'//1.首先设置responseType对象格式为 blob: + responseType: 'blob', //1.首先设置responseType对象格式为 blob: }) } diff --git a/ZR.Vue/src/main.js b/ZR.Vue/src/main.js index 6b2b1fd3..9f5d1d41 100644 --- a/ZR.Vue/src/main.js +++ b/ZR.Vue/src/main.js @@ -13,6 +13,7 @@ import router from './router' import permission from './directive/permission' import plugins from './plugins' // plugins import signalR from '@/utils/signalR' +import { downFile } from '@/utils/request' import './assets/icons' // icon import './permission' // permission control @@ -43,6 +44,7 @@ Vue.prototype.selectDictLabels = selectDictLabels Vue.prototype.download = download Vue.prototype.handleTree = handleTree Vue.prototype.handleDict = handleDict +Vue.prototype.downFile = downFile Vue.prototype.msgSuccess = function (msg) { this.$message({ showClose: true, message: msg, type: "success" }); diff --git a/ZR.Vue/src/utils/request.js b/ZR.Vue/src/utils/request.js index 58a02621..44f705ea 100644 --- a/ZR.Vue/src/utils/request.js +++ b/ZR.Vue/src/utils/request.js @@ -1,11 +1,12 @@ import axios from 'axios' -import { MessageBox, Message } from 'element-ui' +import { MessageBox, Message, Loading } from 'element-ui' import store from '@/store' import { getToken } from '@/utils/auth' -// import { blobValidate } from "@/utils/ruoyi"; -// import errorCode from '@/utils/errorCode' -// import { saveAs } from 'file-saver' +import { blobValidate } from '@/utils/ruoyi' +import errorCode from '@/utils/errorCode' +import { saveAs } from 'file-saver' +let downloadLoadingInstance // 解决后端跨域获取不到cookie问题 axios.defaults.withCredentials = true axios.defaults.headers['Content-Type'] = 'application/json' @@ -14,45 +15,49 @@ const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 baseURL: process.env.VUE_APP_BASE_API, // 超时 - timeout: 30000 + timeout: 30000, }) // request拦截器 -service.interceptors.request.use(config => { - // 是否需要设置 token - if (getToken()) { - //将token放到请求头发送给服务器,将tokenkey放在请求头中 - config.headers['Authorization'] = 'Bearer ' + getToken(); - config.headers['userid'] = store.getters.userId; - } else { - // console.log(config) - } - return config; -}, error => { - console.log(error) - Promise.reject(error) -}) +service.interceptors.request.use( + (config) => { + // 是否需要设置 token + if (getToken()) { + //将token放到请求头发送给服务器,将tokenkey放在请求头中 + config.headers['Authorization'] = 'Bearer ' + getToken() + config.headers['userid'] = store.getters.userId + } else { + // console.log(config) + } + return config + }, + (error) => { + console.log(error) + Promise.reject(error) + }, +) // 响应拦截器 -service.interceptors.response.use(res => { +service.interceptors.response.use( + (res) => { if (res.status !== 200) { - Promise.reject('network error'); - return; + Promise.reject('network error') + return } // 未设置状态码则默认成功状态 - const { code, msg } = res.data; + const { code, msg } = res.data // 二进制数据则直接返回 if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { - return res.data + return res } if (code == 401) { MessageBox.confirm('登录状态已过期,请重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', - type: 'warning' + type: 'warning', }).then(() => { store.dispatch('LogOut').then(() => { - location.href = process.env.VUE_APP_ROUTER_PREFIX + 'index'; + location.href = process.env.VUE_APP_ROUTER_PREFIX + 'index' }) }) @@ -60,33 +65,33 @@ service.interceptors.response.use(res => { } else if (code == 0 || code == 1 || code == 110 || code == 101 || code == 403 || code == 500 || code == 429) { Message({ message: msg, - type: 'error' + type: 'error', }) return Promise.reject(res.data) } else { //返回标准 code/msg/data字段 - return res.data; + return res.data } }, - error => { + (error) => { console.log('err' + error) - let { message } = error; - if (message == "Network Error") { - message = "后端接口连接异常"; - } else if (message.includes("timeout")) { - message = "系统接口请求超时"; - } else if (message.includes("Request failed with status code 429")) { - message = "请求过于频繁,请稍后再试"; - } else if (message.includes("Request failed with status code")) { - message = "系统接口" + message.substr(message.length - 3) + "异常"; + let { message } = error + if (message == 'Network Error') { + message = '后端接口连接异常' + } else if (message.includes('timeout')) { + message = '系统接口请求超时' + } else if (message.includes('Request failed with status code 429')) { + message = '请求过于频繁,请稍后再试' + } else if (message.includes('Request failed with status code')) { + message = '系统接口' + message.substr(message.length - 3) + '异常' } Message({ message: message, type: 'error', - duration: 5 * 1000 + duration: 5 * 1000, }) return Promise.reject(error) - } + }, ) /** @@ -98,12 +103,12 @@ export function get(url, params) { return new Promise((resolve, reject) => { axios .get(url, { - params: params + params: params, }) - .then(res => { + .then((res) => { resolve(res.data) }) - .catch(err => { + .catch((err) => { reject(err) }) }) @@ -113,12 +118,12 @@ export function post(url, params) { return new Promise((resolve, reject) => { axios .post(url, { - params: params + params: params, }) - .then(res => { + .then((res) => { resolve(res.data) }) - .catch(err => { + .catch((err) => { reject(err) }) }) @@ -131,39 +136,53 @@ export function post(url, params) { */ export function postForm(url, data, config) { return new Promise((resolve, reject) => { - axios.post(url, data, config).then(res => { - resolve(res.data) - }).catch(err => { - reject(err) - }) + axios + .post(url, data, config) + .then((res) => { + resolve(res.data) + }) + .catch((err) => { + reject(err) + }) }) } - // 通用下载方法 -// export function download(url, params, filename) { -// //downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) -// return service.post(url, params, { -// //transformRequest: [(params) => { return tansParams(params) }], -// headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, -// responseType: 'blob' -// }).then(async (data) => { -// const isLogin = await blobValidate(data); -// if (isLogin) { -// const blob = new Blob([data]) -// saveAs(blob, filename) -// } else { -// const resText = await data.text(); -// const rspObj = JSON.parse(resText); -// const errMsg = "出錯了";// errorCode[rspObj.code] || rspObj.msg || errorCode['default'] -// Message.error(errMsg); -// } -// // downloadLoadingInstance.close(); -// }).catch((r) => { -// console.error(r) -// Message.error('下载文件出现错误,请联系管理员!') -// // downloadLoadingInstance.close(); -// }) -// } +export async function downFile(url, params, config) { + downloadLoadingInstance = Loading.service({ text: '正在下载数据,请稍候', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)' }) + return service + .get(url, { + params, + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + responseType: 'blob', + ...config, + }) + .then(async (resp) => { + const { data } = resp + + const isLogin = await blobValidate(data) + if (isLogin) { + var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*') + var contentDisposition = decodeURI(resp.headers['content-disposition']) + var result = patt.exec(contentDisposition) + var fileName = result[1] + fileName = fileName.replace(/\"/g, '') + + const blob = new Blob([data]) + saveAs(blob, fileName) + } else { + const resText = await data.text() + const rspObj = JSON.parse(resText) + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg) + } + downloadLoadingInstance.close() + }) + .catch((r) => { + console.error(r) + Message.error('下载文件出现错误,请联系管理员!') + downloadLoadingInstance.close() + }) +} -export default service \ No newline at end of file +export default service diff --git a/ZR.Vue/src/views/monitor/operlog/index.vue b/ZR.Vue/src/views/monitor/operlog/index.vue index 8cdc0709..5aca84fe 100644 --- a/ZR.Vue/src/views/monitor/operlog/index.vue +++ b/ZR.Vue/src/views/monitor/operlog/index.vue @@ -2,10 +2,24 @@

- + - + @@ -18,7 +32,16 @@ - + 搜索 @@ -28,13 +51,25 @@ - 删除 + 删除 - 清空 + 清空 - 导出 + 导出 @@ -54,14 +89,15 @@ - - diff --git a/ZR.Vue/src/views/system/post/index.vue b/ZR.Vue/src/views/system/post/index.vue index 67f2d36d..0d0138b1 100644 --- a/ZR.Vue/src/views/system/post/index.vue +++ b/ZR.Vue/src/views/system/post/index.vue @@ -23,13 +23,26 @@ 新增 - 修改 + 修改 - 删除 + 删除 - 导出 + 导出 @@ -53,12 +66,14 @@ - + @@ -74,7 +89,7 @@ - {{dict.dictLabel}} + {{ dict.dictLabel }} @@ -90,17 +105,10 @@ diff --git a/ZR.Vue/src/views/system/user/index.vue b/ZR.Vue/src/views/system/user/index.vue index c49e72e7..c113ed24 100644 --- a/ZR.Vue/src/views/system/user/index.vue +++ b/ZR.Vue/src/views/system/user/index.vue @@ -4,23 +4,49 @@
- +
- +
- + - + @@ -28,8 +54,16 @@ - + 搜索 @@ -46,10 +80,13 @@ v-hasPermi="['system:user:edit']">修改 --> - 导入 + 导入 - 导出 + 导出 @@ -80,11 +117,15 @@ - -- Gitee From e62aaa45511e1de2766fc97ee4fb42dcfa4518a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 2 Feb 2023 10:07:04 +0800 Subject: [PATCH 089/122] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Infrastructure/Infrastructure.csproj | 2 +- ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 4 ++++ ZR.CodeGenerator/ZR.CodeGenerator.csproj | 2 +- ZR.Common/ZR.Common.csproj | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Infrastructure/Infrastructure.csproj b/Infrastructure/Infrastructure.csproj index c6964607..7cab6c86 100644 --- a/Infrastructure/Infrastructure.csproj +++ b/Infrastructure/Infrastructure.csproj @@ -9,7 +9,7 @@ - + diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 32aec3b9..5570e221 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -60,4 +60,8 @@ + + + + diff --git a/ZR.CodeGenerator/ZR.CodeGenerator.csproj b/ZR.CodeGenerator/ZR.CodeGenerator.csproj index e4d57c90..55fef8f2 100644 --- a/ZR.CodeGenerator/ZR.CodeGenerator.csproj +++ b/ZR.CodeGenerator/ZR.CodeGenerator.csproj @@ -11,7 +11,7 @@ - + diff --git a/ZR.Common/ZR.Common.csproj b/ZR.Common/ZR.Common.csproj index 108553dd..4797bb03 100644 --- a/ZR.Common/ZR.Common.csproj +++ b/ZR.Common/ZR.Common.csproj @@ -7,7 +7,7 @@ - + -- Gitee From e6abbfa8f0d8a9eccaaeeecbbc5d8345dcdfcf43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 13 Feb 2023 21:40:38 +0800 Subject: [PATCH 090/122] =?UTF-8?q?swagger=E6=96=B0=E5=A2=9E=E6=9F=A5?= =?UTF-8?q?=E7=9C=8BModel=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + ZR.Admin.WebApi/Extensions/SwaggerExtension.cs | 5 ++++- ZR.Model/PagerInfo.cs | 4 ++++ ZR.Model/System/Article.cs | 6 +++--- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 91c5d327..82f0e6ab 100644 --- a/.gitignore +++ b/.gitignore @@ -271,3 +271,4 @@ __pycache__/ /ZR.Admin.WebApi/DataProtection /Quartz.NET.WindowsService /ZRAdmin-vue +/ZR.Admin.WebApi/ZRModel.xml diff --git a/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs b/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs index 82300974..e0b57887 100644 --- a/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs +++ b/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs @@ -56,8 +56,11 @@ namespace ZR.Admin.WebApi.Extensions }); try { + var tempPath = hostEnvironment.ContentRootPath; //添加文档注释 - c.IncludeXmlComments(Path.Combine(hostEnvironment.ContentRootPath, "ZRAdmin.xml"), true); + c.IncludeXmlComments(Path.Combine(tempPath, "ZRAdmin.xml"), true); + c.IncludeXmlComments(Path.Combine(tempPath, "ZRModel.xml"), true); + //c.IncludeXmlComments(Path.Combine(Directory.GetParent(tempPath).FullName, "ZR.Model", "ZRModel.xml"), true); } catch (Exception ex) { diff --git a/ZR.Model/PagerInfo.cs b/ZR.Model/PagerInfo.cs index 721ca55a..a29420b0 100644 --- a/ZR.Model/PagerInfo.cs +++ b/ZR.Model/PagerInfo.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Text; namespace ZR.Model @@ -10,6 +11,9 @@ namespace ZR.Model /// 当前页码 ///
public int PageNum { get; set; } + /// + /// 每页显示多少条 + /// public int PageSize { get; set; } /// /// 总记录数 diff --git a/ZR.Model/System/Article.cs b/ZR.Model/System/Article.cs index 0ea7c103..9efa057c 100644 --- a/ZR.Model/System/Article.cs +++ b/ZR.Model/System/Article.cs @@ -27,9 +27,9 @@ namespace ZR.Model.System /// public string AuthorName { get; set; } public long UserId { get; set; } - /// - /// - /// + ///// + ///// + ///// //public string Type { get; set; } /// /// 文章状态 1、发布 2、草稿 -- Gitee From 4a3bb361ac6aed02c6dfa936d635a629cc5c213c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 13 Feb 2023 21:41:08 +0800 Subject: [PATCH 091/122] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=94=9F=E6=88=90=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 1 + ZR.Model/ZR.Model.csproj | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 5570e221..02606086 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -5,6 +5,7 @@ bc51af00-60b6-4e2a-935e-267c368c890a false zh-Hans + True diff --git a/ZR.Model/ZR.Model.csproj b/ZR.Model/ZR.Model.csproj index 1529103a..a9e7bc13 100644 --- a/ZR.Model/ZR.Model.csproj +++ b/ZR.Model/ZR.Model.csproj @@ -1,14 +1,17 @@  - - net5.0 - + + net5.0 + True + ../ZR.Admin.WebApi/ZRModel.xml + 1701;1702;1591;1570 + - - - - - - + + + + + + -- Gitee From 70aa722ee3ca62e004eb51af72f9fa0aaa0a94d3 Mon Sep 17 00:00:00 2001 From: xbzhu <5430389+xbzhu@user.noreply.gitee.com> Date: Wed, 1 Feb 2023 11:52:52 +0000 Subject: [PATCH 092/122] =?UTF-8?q?update=20ZR.Admin.WebApi/wwwroot/CodeGe?= =?UTF-8?q?nTemplate/TplControllers.txt.=20=E5=BD=93=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E6=9C=892=E9=A1=B5=E4=BB=A5=E4=B8=8A?= =?UTF-8?q?=EF=BC=8C=E4=B8=94=E5=BD=93=E5=89=8D=E9=A1=B5=E4=B8=8D=E6=98=AF?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E9=A1=B5=E6=97=B6=EF=BC=8C=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E4=B8=8D=E5=AE=8C=E6=95=B4=EF=BC=8C?= =?UTF-8?q?=E5=8F=AA=E8=83=BD=E5=AF=BC=E5=87=BA=E5=BD=93=E5=89=8D=E9=A1=B5?= =?UTF-8?q?=E5=8F=8A=E4=B9=8B=E5=90=8E=E7=9A=84=E6=95=B0=E6=8D=AE=E3=80=82?= =?UTF-8?q?=E5=B0=86=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E5=99=A8=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=AF=BC=E5=87=BA=E6=96=B9=E6=B3=95=E9=87=8C=E9=A1=B5?= =?UTF-8?q?=E7=A0=81=E5=9B=BA=E5=AE=9A=E4=BB=8E=E7=AC=AC1=E9=A1=B5?= =?UTF-8?q?=E5=BC=80=E5=A7=8B=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xbzhu <5430389+xbzhu@user.noreply.gitee.com> --- ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt index a33e04e7..3e9a7a41 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt @@ -1,4 +1,4 @@ -using Infrastructure; +using Infrastructure; using Infrastructure.Attribute; using Infrastructure.Enums; using Infrastructure.Model; @@ -149,6 +149,7 @@ $if(replaceDto.ShowBtnExport) [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:export")] public IActionResult Export([FromQuery] ${replaceDto.ModelTypeName}QueryDto parm) { + parm.PageNum = 1; parm.PageSize = 100000; var list = _${replaceDto.ModelTypeName}Service.GetList(parm).Result; if (list == null || list.Count <= 0) -- Gitee From af28ee9d687f459a62eb641492bc9b35668bc3c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 13 Feb 2023 11:10:50 +0800 Subject: [PATCH 093/122] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=A0=E5=AD=90?= =?UTF-8?q?=E8=A1=A8=E5=88=97=E6=9F=A5=E8=AF=A2=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Service/System/GenTableService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ZR.Service/System/GenTableService.cs b/ZR.Service/System/GenTableService.cs index b98b6cc3..6195d571 100644 --- a/ZR.Service/System/GenTableService.cs +++ b/ZR.Service/System/GenTableService.cs @@ -50,10 +50,11 @@ namespace ZR.Service.System /// public GenTable GetGenTableInfo(long tableId) { - var info = GetId(tableId); + GenTable info = GetId(tableId); if (info != null && !info.SubTableName.IsEmpty()) { info.SubTable = Queryable().Where(f => f.TableName == info.SubTableName).First(); + info.SubTable.Columns = GenTableColumnService.GenTableColumns(info.SubTable.TableId); } return info; } -- Gitee From 945e20bdc89ab89d4bc66586f91d2292dbbe1f56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 14 Feb 2023 11:37:29 +0800 Subject: [PATCH 094/122] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Infrastructure/Infrastructure.csproj | 24 ++++++++++++------------ ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 12 ++++++------ ZR.CodeGenerator/ZR.CodeGenerator.csproj | 2 +- ZR.Model/ZR.Model.csproj | 3 +-- ZR.Repository/ZR.Repository.csproj | 6 +++--- ZR.Tasks/ZR.Tasks.csproj | 6 +++--- 6 files changed, 26 insertions(+), 27 deletions(-) diff --git a/Infrastructure/Infrastructure.csproj b/Infrastructure/Infrastructure.csproj index 7cab6c86..bb06ce94 100644 --- a/Infrastructure/Infrastructure.csproj +++ b/Infrastructure/Infrastructure.csproj @@ -1,18 +1,18 @@ - - net5.0 - + + net5.0 + - - - + + + - - - - - - + + + + + + diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 02606086..b7b6780b 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -21,12 +21,12 @@ - - - - - - + + + + + + diff --git a/ZR.CodeGenerator/ZR.CodeGenerator.csproj b/ZR.CodeGenerator/ZR.CodeGenerator.csproj index 55fef8f2..bb70b8a3 100644 --- a/ZR.CodeGenerator/ZR.CodeGenerator.csproj +++ b/ZR.CodeGenerator/ZR.CodeGenerator.csproj @@ -12,6 +12,6 @@ - + diff --git a/ZR.Model/ZR.Model.csproj b/ZR.Model/ZR.Model.csproj index a9e7bc13..497bc5c7 100644 --- a/ZR.Model/ZR.Model.csproj +++ b/ZR.Model/ZR.Model.csproj @@ -9,8 +9,7 @@ - - + diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index 70638484..e213149b 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -13,8 +13,8 @@ - - - + + + diff --git a/ZR.Tasks/ZR.Tasks.csproj b/ZR.Tasks/ZR.Tasks.csproj index 7177e87c..28bd215f 100644 --- a/ZR.Tasks/ZR.Tasks.csproj +++ b/ZR.Tasks/ZR.Tasks.csproj @@ -5,9 +5,9 @@ - - - + + + -- Gitee From 4a3ca526583d9264db627f6d897d5f42e6bcd1df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 17 Feb 2023 10:53:28 +0800 Subject: [PATCH 095/122] update copyright 2023 --- ZR.Vue/src/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZR.Vue/src/settings.js b/ZR.Vue/src/settings.js index ea42c85b..beb84da0 100644 --- a/ZR.Vue/src/settings.js +++ b/ZR.Vue/src/settings.js @@ -48,5 +48,5 @@ module.exports = { * If you want to also use it in dev, you can pass ['production', 'development'] */ errorLog: 'production', - copyRight: 'Copyright ©2022 izhaorui.cn All Rights Reserved.' + copyRight: 'Copyright ©2023 www.izhaorui.cn All Rights Reserved.' } \ No newline at end of file -- Gitee From c80a9acaadf0c5115c84f288688dd1116067ea1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 17 Feb 2023 10:54:18 +0800 Subject: [PATCH 096/122] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=93=E5=82=A8Add?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Repository/BaseRepository.cs | 4 ++-- ZR.Repository/IBaseRepository.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ZR.Repository/BaseRepository.cs b/ZR.Repository/BaseRepository.cs index a5c3f17b..26dcf404 100644 --- a/ZR.Repository/BaseRepository.cs +++ b/ZR.Repository/BaseRepository.cs @@ -41,9 +41,9 @@ namespace ZR.Repository /// /// /// - public int Add(T t) + public int Add(T t, bool ignoreNull = true) { - return Context.Insertable(t).IgnoreColumns(true).ExecuteCommand(); + return Context.Insertable(t).IgnoreColumns(ignoreNullColumn: ignoreNull).ExecuteCommand(); } public int Insert(List t) diff --git a/ZR.Repository/IBaseRepository.cs b/ZR.Repository/IBaseRepository.cs index 25aa8970..640612f1 100644 --- a/ZR.Repository/IBaseRepository.cs +++ b/ZR.Repository/IBaseRepository.cs @@ -10,7 +10,7 @@ namespace ZR.Repository public interface IBaseRepository : ISimpleClient where T : class, new() { #region add - int Add(T t); + int Add(T t, bool ignoreNull = true); int Insert(List t); int Insert(T parm, Expression> iClumns = null, bool ignoreNull = true); -- Gitee From 51f90427689de7e9694033eee5e70159b1bcb40b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 17 Feb 2023 11:00:26 +0800 Subject: [PATCH 097/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Infrastructure/Constant/HttpStatus.cs | 48 ++++++++-------- Infrastructure/Enums/BusinessType.cs | 74 +++++++++++------------- ZR.CodeGenerator/GenConstants.cs | 32 ++++++++--- ZR.Model/System/SysOperLog.cs | 21 +++++-- ZR.Model/System/UserConstants.cs | 82 ++++++++++++++++++++------- 5 files changed, 158 insertions(+), 99 deletions(-) diff --git a/Infrastructure/Constant/HttpStatus.cs b/Infrastructure/Constant/HttpStatus.cs index 3643b823..34fe7dc4 100644 --- a/Infrastructure/Constant/HttpStatus.cs +++ b/Infrastructure/Constant/HttpStatus.cs @@ -40,9 +40,9 @@ namespace Infrastructure.Constant ///
public static readonly int NOT_MODIFIED = 304; - /** - * 参数列表错误(缺少,格式不匹配) - */ + /// + /// 参数列表错误(缺少,格式不匹配) + /// public static readonly int BAD_REQUEST = 400; /// @@ -50,39 +50,39 @@ namespace Infrastructure.Constant /// public static readonly int UNAUTHORIZED = 401; - /** - * 访问受限,授权过期 - */ + /// + /// 访问受限,授权过期 + /// public static readonly int FORBIDDEN = 403; - /** - * 资源,服务未找到 - */ + /// + /// 资源,服务未找到 + /// public static readonly int NOT_FOUND = 404; - /** - * 不允许的http方法 - */ + /// + /// 不允许的http方法 + /// public static readonly int BAD_METHOD = 405; - /** - * 资源冲突,或者资源被锁 - */ + /// + /// 资源冲突,或者资源被锁 + /// public static readonly int CONFLICT = 409; - /** - * 不支持的数据,媒体类型 - */ + /// + /// 不支持的数据,媒体类型 + /// public static readonly int UNSUPPORTED_TYPE = 415; - /** - * 系统内部错误 - */ + /// + /// 系统内部错误 + /// public static readonly int ERROR = 500; - /** - * 接口未实现 - */ + /// + /// 接口未实现 + /// public static readonly int NOT_IMPLEMENTED = 501; } } diff --git a/Infrastructure/Enums/BusinessType.cs b/Infrastructure/Enums/BusinessType.cs index 5f4195a7..a4f09e1c 100644 --- a/Infrastructure/Enums/BusinessType.cs +++ b/Infrastructure/Enums/BusinessType.cs @@ -1,64 +1,58 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Infrastructure.Enums +namespace Infrastructure.Enums { - /** - * 业务操作类型 - * 0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据 - * @author zrry - */ + /// + /// 业务操作类型 0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据 + /// public enum BusinessType { - /** - * 其它 - */ + /// + /// 其它 + /// OTHER = 0, - /** - * 新增 - */ + /// + /// 新增 + /// INSERT = 1, - /** - * 修改 - */ + /// + /// 修改 + /// UPDATE = 2, - /** - * 删除 - */ + /// + /// 删除 + /// DELETE = 3, - /** - * 授权 - */ + /// + /// 授权 + /// GRANT = 4, - /** - * 导出 - */ + /// + /// 导出 + /// EXPORT = 5, - /** - * 导入 - */ + /// + /// 导入 + /// IMPORT = 6, - /** - * 强退 - */ + /// + /// 强退 + /// FORCE = 7, - /** - * 生成代码 - */ + /// + /// 生成代码 + /// GENCODE = 8, - /** - * 清空数据 - */ + /// + /// 清空数据 + /// CLEAN = 9, } } diff --git a/ZR.CodeGenerator/GenConstants.cs b/ZR.CodeGenerator/GenConstants.cs index 83a35e49..f9e54988 100644 --- a/ZR.CodeGenerator/GenConstants.cs +++ b/ZR.CodeGenerator/GenConstants.cs @@ -31,28 +31,44 @@ namespace ZR.CodeGenerator public static readonly string[] radioFiled = new string[] { "status", "state", "is"}; - /** 单表(增删改查) */ + /// + /// 单表(增删改查) + /// public static string TPL_CRUD = "crud"; - /** 树表(增删改查) */ + /// + /// 树表(增删改查) + /// public static string TPL_TREE = "tree"; - /** 主子表(增删改查) */ + /// + /// 主子表(增删改查) + /// public static string TPL_SUB = "sub"; - /** 树编码字段 */ + /// + /// 树编码字段 + /// public static string TREE_CODE = "treeCode"; - /** 树父编码字段 */ + /// + /// 树父编码字段 + /// public static string TREE_PARENT_CODE = "treeParentCode"; - /** 树名称字段 */ + /// + /// 树名称字段 + /// public static string TREE_NAME = "treeName"; - /** 上级菜单ID字段 */ + /// + /// 上级菜单ID字段 + /// public static string PARENT_MENU_ID = "parentMenuId"; - /** 上级菜单名称字段 */ + /// + /// 上级菜单名称字段 + /// public static string PARENT_MENU_NAME = "parentMenuName"; /** 数据库字符串类型 */ diff --git a/ZR.Model/System/SysOperLog.cs b/ZR.Model/System/SysOperLog.cs index 65d75e18..d0ae9fbc 100644 --- a/ZR.Model/System/SysOperLog.cs +++ b/ZR.Model/System/SysOperLog.cs @@ -11,25 +11,34 @@ namespace ZR.Model.System { [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] public long OperId { get; set; } - /** 操作模块 */ + /// + /// 操作模块 + /// [DisplayName("操作模块")] public string Title { get; set; } - /** 业务类型(0其它 1新增 2修改 3删除) */ - //@Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据") + /// + /// 业务类型(0其它 1新增 2修改 3删除 4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据) + /// [DisplayName("业务类型")] public int BusinessType { get; set; } - /** 业务类型数组 */ + /// + /// 业务类型数组 + /// [SugarColumn(IsIgnore = true)] [ExcelIgnore] public int[] BusinessTypes { get; set; } - /** 请求方法 */ + /// + /// 请求方法 + /// [DisplayName("请求方法")] public string Method { get; set; } - /** 请求方式 */ + /// + /// 请求方式 + /// [DisplayName("请求方式")] public string RequestMethod { get; set; } diff --git a/ZR.Model/System/UserConstants.cs b/ZR.Model/System/UserConstants.cs index 7914ab2c..b2f8a4b0 100644 --- a/ZR.Model/System/UserConstants.cs +++ b/ZR.Model/System/UserConstants.cs @@ -6,59 +6,99 @@ namespace ZR.Model.System { public class UserConstants { - /** - * 平台内系统用户的唯一标志 - */ + /// + /// 平台内系统用户的唯一标志 + /// public static string SYS_USER = "SYS_USER"; - /** 正常状态 */ + /// + /// 正常状态 + /// public static string NORMAL = "0"; - /** 异常状态 */ + /// + /// 异常状态 + /// public static string EXCEPTION = "1"; - /** 用户封禁状态 */ + /// + /// 用户封禁状态 + /// public static string USER_DISABLE = "1"; - /** 角色封禁状态 */ + /// + /// 角色封禁状态 + /// public static string ROLE_DISABLE = "1"; - /** 部门正常状态 */ + /// + /// 部门正常状态 + /// public static string DEPT_NORMAL = "0"; - /** 部门停用状态 */ + /// + /// 部门停用状态 + /// public static string DEPT_DISABLE = "1"; - /** 字典正常状态 */ + /// + /// 字典正常状态 + /// public static string DICT_NORMAL = "0"; - /** 是否为系统默认(是) */ + /// + /// 是否为系统默认(是) + /// public static string YES = "Y"; - /** 是否菜单外链(是) */ + /// + /// 是否菜单外链(是) + /// public static string YES_FRAME = "1"; - /** 是否菜单外链(否) */ + /// + /// 是否菜单外链(否) + /// public static string NO_FRAME = "0"; - /** 菜单类型(目录) */ + /// + /// 菜单类型(目录) + /// public static string TYPE_DIR = "M"; - /** 菜单类型(菜单) */ + /// + /// 菜单类型(菜单) + /// public static string TYPE_MENU = "C"; - /** 菜单类型(按钮) */ + /// + /// 菜单类型(按钮) + /// public static string TYPE_BUTTON = "F"; - /** 菜单类型(链接) */ + + ///// + ///// 菜单类型(链接) + ///// //public static string TYPE_LINK = "L"; - /** Layout组件标识 */ + /// + /// Layout组件标识 + /// public static string LAYOUT = "Layout"; - /** ParentView组件标识 */ + + /// + /// ParentView组件标识 + /// public static string PARENT_VIEW = "ParentView"; - /** InnerLink组件标识 */ + + /// + /// InnerLink组件标识 + /// public static string INNER_LINK = "InnerLink"; - /** 校验返回结果码 */ + + /// + /// 校验返回结果码 + /// public static string UNIQUE = "0"; public static string NOT_UNIQUE = "1"; -- Gitee From d8c8274aa903841c30cd9257b6dabcedd040c6eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 17 Feb 2023 11:02:27 +0800 Subject: [PATCH 098/122] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90&=E6=96=B0=E5=A2=9E=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=80=BC=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wwwroot/CodeGenTemplate/TplModel.txt | 16 ++-- .../wwwroot/CodeGenTemplate/TplRepository.txt | 2 - .../wwwroot/CodeGenTemplate/TplService.txt | 29 +++---- .../wwwroot/CodeGenTemplate/TplTreeVue.txt | 5 +- .../wwwroot/CodeGenTemplate/TplVue.txt | 7 +- .../wwwroot/CodeGenTemplate/TplVueSelect.txt | 7 +- .../wwwroot/CodeGenTemplate/v3/TreeVue.txt | 11 ++- .../wwwroot/CodeGenTemplate/v3/Vue.txt | 84 +++++++++++++------ ZR.CodeGenerator/CodeGeneratorTool.cs | 4 + ZR.CodeGenerator/Model/ReplaceDto.cs | 4 + ZR.Model/System/Dto/GenTableDto.cs | 4 + ZR.Model/System/Generate/GenTableColumn.cs | 6 +- ZR.Service/System/GenTableService.cs | 18 ++-- document/admin-mysql.sql | 1 + document/admin-sqlserver.sql | 3 +- 15 files changed, 127 insertions(+), 74 deletions(-) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt index bd81ff1e..634c6d74 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt @@ -13,30 +13,34 @@ namespace ${options.ModelsNamespace}.Models [SugarTable("${genTable.TableName}")] public class ${replaceDto.ModelTypeName} { -$foreach(item in genTable.Columns) +${foreach(item in genTable.Columns)} /// - /// 描述 :${item.ColumnComment} ${item.Remark} - /// 空值 :$if(item.IsRequired == "True")false${else}true${end} + /// ${item.ColumnComment} ${item.Remark} /// $if(item.IsPk || item.IsIncrement) [SugarColumn(IsPrimaryKey = ${item.IsPk.ToString().ToLower()}, IsIdentity = ${item.IsIncrement.ToString().ToLower()}$if(item.CsharpField.ToLower() != item.ColumnName.ToLower()), ColumnName = "$item.ColumnName"$end)] $elseif(item.CsharpField.ToLower() != item.ColumnName.ToLower()) [SugarColumn(ColumnName = "$item.ColumnName")] +$elseif(item.AutoFillType == 1 && item.CsharpType == "DateTime") + [SugarColumn(InsertServerTime = true, IsOnlyIgnoreUpdate = true)] +$elseif(item.AutoFillType == 2 && item.CsharpType == "DateTime") + [SugarColumn(UpdateServerTime = true, IsOnlyIgnoreInsert = true)] +$elseif(item.AutoFillType == 3 && item.CsharpType == "DateTime") + [SugarColumn(InsertServerTime = true, UpdateServerTime = true)] +$elseif(item.AutoFillType == 1) + [SugarColumn(IsOnlyIgnoreUpdate = true)] $end public $item.CsharpType$item.RequiredStr $item.CsharpField { get; set; } ${end} - $if(genTable.TplCategory == "tree") [SugarColumn(IsIgnore = true)] public List<${replaceDto.ModelTypeName}> Children { get; set; } $end - $if(genTable.TplCategory == "subNav" && genTable.SubTable != null) [Navigate(NavigateType.Dynamic, null)] //自定义关系映射 public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName} { get; set; } $end - $if(genTable.TplCategory == "subNavMore" && genTable.SubTable != null) [Navigate(NavigateType.Dynamic, null)] //自定义关系映射 public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName} { get; set; } diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplRepository.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplRepository.txt index cd43d770..cce84fe8 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplRepository.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplRepository.txt @@ -14,7 +14,5 @@ namespace ${options.RepositoriesNamespace} [AppService(ServiceLifetime = LifeTime.Transient)] public class ${replaceDto.ModelTypeName}Repository : BaseRepository<${replaceDto.ModelTypeName}> { - #region 业务逻辑代码 - #endregion } } \ No newline at end of file diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt index c744b4b7..4213795f 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt @@ -95,37 +95,30 @@ $end /// /// 添加${genTable.FunctionName} /// - /// + /// /// - public int Add${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} parm) + public int Add${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} model) { - var response = Insert(parm, it => new - { -${foreach(item in genTable.Columns)} -$if((item.IsInsert)) - it.$item.CsharpField, -$end -${end} - }); - return response; + return Add(model, true); } /// /// 修改${genTable.FunctionName} /// - /// + /// /// - public int Update${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} parm) + public int Update${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} model) { - var response = Update(w => w.${replaceDto.PKName} == parm.${replaceDto.PKName}, it => new ${replaceDto.ModelTypeName}() - { + //var response = Update(w => w.${replaceDto.PKName} == model.${replaceDto.PKName}, it => new ${replaceDto.ModelTypeName}() + //{ $foreach(item in genTable.Columns) $if((item.IsEdit)) - $item.CsharpField = parm.$item.CsharpField, + // $item.CsharpField = model.$item.CsharpField, $end ${end} - }); - return response; + //}); + //return response; + return Update(model, true); } /// diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt index ded7dbfa..4173e907 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt @@ -218,11 +218,10 @@ $end reset() { this.form = { $foreach(item in genTable.Columns) -$if((item.IsEdit || item.IsInsert)) - $item.CsharpFieldFl: undefined, -$end $if((item.HtmlType == "checkbox")) ${item.CsharpFieldFl}Checked: [], +$else + $item.CsharpFieldFl: undefined, $end $end }; diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVue.txt index 211d22cb..dae25047 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVue.txt @@ -210,11 +210,10 @@ $end reset() { this.form = { $foreach(item in genTable.Columns) -$if((item.IsEdit || item.IsInsert)) - $item.CsharpFieldFl: undefined, -$end -$if((item.HtmlType == "checkbox")) +$if(item.HtmlType == "checkbox") ${item.CsharpFieldFl}Checked: [], +$else + $item.CsharpFieldFl: undefined, $end $end }; diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueSelect.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueSelect.txt index 7d19a6f8..2c075e08 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueSelect.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueSelect.txt @@ -173,11 +173,10 @@ $end reset() { this.form = { $foreach(item in genTable.Columns) -$if((item.IsEdit || item.IsInsert)) - $item.CsharpFieldFl: undefined, -$end -$if((item.HtmlType == "checkbox")) +$if(item.HtmlType == "checkbox") ${item.CsharpFieldFl}Checked: [], +$else + $item.CsharpFieldFl: undefined, $end $end }; diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt index 7a73901f..9224b8f3 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt @@ -13,6 +13,7 @@ $foreach(column in genTable.Columns) $set(labelName = "") $set(columnName = "") $set(numLabel = "") +$if(column.IsQuery == true) $set(columnName = column.CsharpFieldFl) $if(column.ColumnComment != "") $set(labelName = column.ColumnComment) @@ -22,7 +23,6 @@ $end $if(column.CsharpType == "int" || column.CsharpType == "long") $set(numLabel = ".number") $end - $if(column.HtmlType == "datetime") +