From 87579e03dd88f93968eb872c913a611be155b01f 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, 14 Jan 2022 11:21:09 +0800 Subject: [PATCH 01/10] =?UTF-8?q?fix=20=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E9=A1=B5=E9=9D=A2=E7=BC=93=E5=AD=98=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 3fa444e..d6466f4 100644 --- a/ZR.Vue/src/views/tool/gen/index.vue +++ b/ZR.Vue/src/views/tool/gen/index.vue @@ -76,7 +76,7 @@ import hljs from "highlight.js"; import "highlight.js/styles/idea.css"; //这里有多个样式,自己可以根据需要切换 export default { - name: "code_generator", + name: "gen", components: { importTable, hljs }, data() { return { From 6b7e210008322775ca7fedaca06f3e0be617b155 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, 14 Jan 2022 16:29:17 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90Service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt index 38b8efa..205fb50 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt @@ -45,8 +45,7 @@ $if(column.CsharpType == "string") predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.${column.CsharpField}), ${codeTool.QueryExp(column.CsharpField, column.QueryType)}; $elseif(column.CsharpType == "DateTime") predicate = predicate.AndIF(parm.Begin${column.CsharpField} == null, it => it.${column.CsharpField} >= DateTime.Now.AddDays(-1)); - predicate = predicate.AndIF(parm.Begin${column.CsharpField} != null, it => it.${column.CsharpField} >= parm.Begin${column.CsharpField}); - predicate = predicate.AndIF(parm.End${column.CsharpField} != null, it => it.${column.CsharpField} <= parm.End${column.CsharpField}); + predicate = predicate.AndIF(parm.Begin${column.CsharpField} != null, it => it.${column.CsharpField} >= parm.Begin${column.CsharpField} && it.${column.CsharpField} <= parm.End${column.CsharpField}); $elseif(column.CsharpType == "int" || column.CsharpType == "long") predicate = predicate.AndIF(parm.${column.CsharpField} != null, ${codeTool.QueryExp(column.CsharpField, column.QueryType)}; $end @@ -54,7 +53,7 @@ $end $end $if(genTable.SortField != "" && genTable.SortField != null) var response = _${replaceDto.ModelTypeName}repository - .GetPages(predicate.ToExpression(), parm, x => x.${genTable.SortField}, "${genTable.SortType}"); + .GetPages(predicate.ToExpression(), parm, it => it.${genTable.SortField}, "${genTable.SortType}"); $else var response = _${replaceDto.ModelTypeName}repository .Queryable() From b959445ac6bc182d0b5c5ddadb0254e0ba6fe2e0 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, 14 Jan 2022 16:29:44 +0800 Subject: [PATCH 03/10] =?UTF-8?q?fix=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E5=A7=8B=E7=BB=88=E4=B8=8A=E4=BC=A0=E5=88=B0?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/CommonController.cs | 7 ++++--- ZR.Vue/src/components/FileUpload/index.vue | 8 +++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs index 1acd8d2..379f7ff 100644 --- a/ZR.Admin.WebApi/Controllers/CommonController.cs +++ b/ZR.Admin.WebApi/Controllers/CommonController.cs @@ -97,7 +97,7 @@ namespace ZR.Admin.WebApi.Controllers /// /// /// 存储目录 - /// 文件名 + /// 自定义文件名 /// 上传类型 1、发送邮件 /// [HttpPost()] @@ -152,16 +152,17 @@ namespace ZR.Admin.WebApi.Controllers /// 存储文件到阿里云 /// /// + /// 自定义文件名 /// 上传文件夹路径 /// [HttpPost] [Verify] [ActionPermissionFilter(Permission = "common")] - public IActionResult UploadFileAliyun([FromForm(Name = "file")] IFormFile formFile, string fileDir = "") + public IActionResult 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); - string[] AllowedFileExtensions = new string[] { ".jpg", ".gif", ".png", ".jpeg", ".webp", ".svga", ".xls", ".doc", ".zip", ".json", ".txt" }; + string[] AllowedFileExtensions = new string[] { ".jpg", ".gif", ".png", ".jpeg", ".webp", ".svga", ".xls", ".doc", ".zip", ".json", ".txt", ".bundle" }; int MaxContentLength = 1024 * 1024 * 15; double fileSize = formFile.Length / 1024; if (!AllowedFileExtensions.Contains(fileExt)) diff --git a/ZR.Vue/src/components/FileUpload/index.vue b/ZR.Vue/src/components/FileUpload/index.vue index 0bba384..d22cea3 100644 --- a/ZR.Vue/src/components/FileUpload/index.vue +++ b/ZR.Vue/src/components/FileUpload/index.vue @@ -58,7 +58,7 @@ export default { // 上传地址 uploadUrl: { type: String, - default: process.env.VUE_APP_UPLOAD_URL ?? "/Common/UploadFile", + default: process.env.VUE_APP_UPLOAD_URL, }, // form 列名 column: [String], @@ -100,6 +100,12 @@ export default { deep: true, immediate: true, }, + uploadUrl: { + handler(val){ + this.uploadFileUrl = process.env.VUE_APP_BASE_API + val; + }, + immediate: true + } }, computed: { // 是否显示提示 From cae734762439e5c3571780da1aac1bbdc3082da9 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, 14 Jan 2022 16:31:09 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Vue/src/views/tool/file/index.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/ZR.Vue/src/views/tool/file/index.vue b/ZR.Vue/src/views/tool/file/index.vue index 8e98752..cd46934 100644 --- a/ZR.Vue/src/views/tool/file/index.vue +++ b/ZR.Vue/src/views/tool/file/index.vue @@ -328,6 +328,7 @@ export default { return this.selectDictLabel(this.storeTypeOptions, row.storeType); }, handleSelectStore(val) { + this.queryParams.storeType = val; if (val == 1) { this.uploadUrl = "/common/uploadFile"; } else if (val == 2) { From b8e4cd2421f5843bb83d7cb947beb5b1018ce970 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, 14 Jan 2022 18:31:21 +0800 Subject: [PATCH 05/10] =?UTF-8?q?fix=20=E6=96=87=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Vue/src/views/tool/file/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZR.Vue/src/views/tool/file/index.vue b/ZR.Vue/src/views/tool/file/index.vue index cd46934..f10fba7 100644 --- a/ZR.Vue/src/views/tool/file/index.vue +++ b/ZR.Vue/src/views/tool/file/index.vue @@ -256,7 +256,7 @@ export default { // 重置数据表单 reset() { this.form = { - fileName: undefined, + fileName: "", fileUrl: undefined, storePath: "uploads", fileSize: undefined, From 4fefb4282d26aeea04ab738085e44b1dbd865690 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, 14 Jan 2022 20:27:23 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E5=88=B0=E9=98=BF=E9=87=8C=E4=BA=91=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=87=AA=E5=AE=9A=E4=B9=89=E6=96=87=E4=BB=B6=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/CommonController.cs | 2 +- .../Controllers/System/SysFileController.cs | 3 ++- ZR.Model/System/Dto/SysFileQueryDto.cs | 1 + ZR.Service/System/IService/ISysFileService.cs | 2 +- ZR.Service/System/SysFileService.cs | 10 +++++--- ZR.Vue/src/components/FileUpload/index.vue | 2 +- ZR.Vue/src/views/tool/file/index.vue | 23 +++++++++++-------- 7 files changed, 26 insertions(+), 17 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs index 379f7ff..678b629 100644 --- a/ZR.Admin.WebApi/Controllers/CommonController.cs +++ b/ZR.Admin.WebApi/Controllers/CommonController.cs @@ -175,7 +175,7 @@ namespace ZR.Admin.WebApi.Controllers return ToResponse(ResultCode.CUSTOM_ERROR, "上传文件过大,不能超过 " + (MaxContentLength / 1024).ToString() + " MB"); } - (bool, string, string) result = SysFileService.SaveFile(fileDir, formFile); + (bool, string, string) result = SysFileService.SaveFile(fileDir, formFile, fileName); long fileId = SysFileService.InsertFile(new SysFile() { AccessUrl = result.Item2, diff --git a/ZR.Admin.WebApi/Controllers/System/SysFileController.cs b/ZR.Admin.WebApi/Controllers/System/SysFileController.cs index 18597c6..2044973 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysFileController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysFileController.cs @@ -43,6 +43,7 @@ namespace ZR.Admin.WebApi.Controllers predicate = predicate.AndIF(parm.BeginCreate_time != null, it => it.Create_time >= parm.BeginCreate_time); predicate = predicate.AndIF(parm.EndCreate_time != null, it => it.Create_time <= parm.EndCreate_time); predicate = predicate.AndIF(parm.StoreType != null, m => m.StoreType == parm.StoreType); + predicate = predicate.AndIF(parm.FileId != null, m => m.Id == parm.FileId); //搜索条件查询语法参考Sqlsugar var response = _SysFileService.GetPages(predicate.ToExpression(), parm); @@ -59,7 +60,7 @@ namespace ZR.Admin.WebApi.Controllers public IActionResult GetSysFile(int Id) { var response = _SysFileService.GetFirst(x => x.Id == Id); - + return SUCCESS(response); } diff --git a/ZR.Model/System/Dto/SysFileQueryDto.cs b/ZR.Model/System/Dto/SysFileQueryDto.cs index 4cfa45d..c86b135 100644 --- a/ZR.Model/System/Dto/SysFileQueryDto.cs +++ b/ZR.Model/System/Dto/SysFileQueryDto.cs @@ -25,5 +25,6 @@ namespace ZR.Model.System.Dto public DateTime? BeginCreate_time { get; set; } public DateTime? EndCreate_time { get; set; } public int? StoreType { get; set; } + public int? FileId { get; set; } } } diff --git a/ZR.Service/System/IService/ISysFileService.cs b/ZR.Service/System/IService/ISysFileService.cs index e3971a3..6b8c319 100644 --- a/ZR.Service/System/IService/ISysFileService.cs +++ b/ZR.Service/System/IService/ISysFileService.cs @@ -16,7 +16,7 @@ namespace ZR.Service.System.IService /// /// 结果、地址、文件名 (bool, string, string) SaveFile(string picdir, IFormFile formFile); - + (bool, string, string) SaveFile(string picdir, IFormFile formFile, string customFileName); /// /// 按时间来创建文件夹 /// diff --git a/ZR.Service/System/SysFileService.cs b/ZR.Service/System/SysFileService.cs index e189b0f..dce4638 100644 --- a/ZR.Service/System/SysFileService.cs +++ b/ZR.Service/System/SysFileService.cs @@ -10,6 +10,7 @@ using System.Security.Cryptography; using System.Net; using ZR.Model.System; using ZR.Repository.System; +using Infrastructure.Extensions; namespace ZR.Service.System { @@ -35,9 +36,13 @@ namespace ZR.Service.System /// public (bool, string, string) SaveFile(string picdir, IFormFile formFile) { - // eg: idcard/2020/08/18 + return SaveFile(picdir, formFile, ""); + } + public (bool, string, string) SaveFile(string picdir, IFormFile formFile, string customFileName) + { + // eg: uploads/2020/08/18 string dir = GetdirPath(picdir.ToString()); - string tempName = HashFileName(); + string tempName = customFileName.IsEmpty() ? HashFileName() : customFileName; string fileExt = Path.GetExtension(formFile.FileName); string fileName = $"{tempName}{fileExt}"; string webUrl = $"{domainUrl}/{dir}/{fileName}"; @@ -46,7 +51,6 @@ namespace ZR.Service.System return (statusCode == HttpStatusCode.OK, webUrl, fileName); } - public string GetdirPath(string path = "") { DateTime date = DateTime.Now; diff --git a/ZR.Vue/src/components/FileUpload/index.vue b/ZR.Vue/src/components/FileUpload/index.vue index d22cea3..80129f2 100644 --- a/ZR.Vue/src/components/FileUpload/index.vue +++ b/ZR.Vue/src/components/FileUpload/index.vue @@ -162,7 +162,7 @@ export default { } this.msgSuccess("上传成功"); this.fileList.push({ name: res.data.fileName, url: res.data.url, path: res.data.path }); - this.$emit("input", this.column, this.listToString(this.fileList)); + this.$emit("input", this.column, this.listToString(this.fileList), res.data); }, // 上传进度 uploadProcess(event, file, fileList) { diff --git a/ZR.Vue/src/views/tool/file/index.vue b/ZR.Vue/src/views/tool/file/index.vue index f10fba7..463b26c 100644 --- a/ZR.Vue/src/views/tool/file/index.vue +++ b/ZR.Vue/src/views/tool/file/index.vue @@ -2,6 +2,9 @@
+ + + @@ -11,11 +14,10 @@ - - + 搜索 重置 - + @@ -168,6 +170,7 @@ export default { pageNum: 1, pageSize: 20, storeType: 1, + fileId: undefined, }, // 弹出层标题 title: "", @@ -257,12 +260,12 @@ export default { reset() { this.form = { fileName: "", - fileUrl: undefined, + fileUrl: "", storePath: "uploads", - fileSize: undefined, - fileExt: undefined, + fileSize: 0, + fileExt: "", storeType: 1, - accessUrl: undefined, + accessUrl: "", }; this.resetForm("form"); }, @@ -317,9 +320,9 @@ export default { }); }, //上传成功方法 - handleUploadSuccess(columnName, filelist) { + handleUploadSuccess(columnName, filelist, data) { this.form[columnName] = filelist; - + this.queryParams.fileId = data.fileId; this.open = false; this.getList(); }, @@ -328,7 +331,7 @@ export default { return this.selectDictLabel(this.storeTypeOptions, row.storeType); }, handleSelectStore(val) { - this.queryParams.storeType = val; + this.queryParams.storeType = val; if (val == 1) { this.uploadUrl = "/common/uploadFile"; } else if (val == 2) { From a855a0db6b54db25bf788b6cfcd27b8dba1a2164 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, 14 Jan 2022 20:31:24 +0800 Subject: [PATCH 07/10] =?UTF-8?q?fix=20=E6=96=87=E7=AB=A0=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Vue/src/api/common.js | 2 +- ZR.Vue/src/views/system/article/publish.vue | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ZR.Vue/src/api/common.js b/ZR.Vue/src/api/common.js index a13d608..c57228f 100644 --- a/ZR.Vue/src/api/common.js +++ b/ZR.Vue/src/api/common.js @@ -2,7 +2,7 @@ import request from '@/utils/request' export function upload(data) { return request({ - url: '/upload/saveFile', + url: '/common/UploadFile', method: 'POST', data: data, headers: { "Content-Type": "multipart/form-data" }, diff --git a/ZR.Vue/src/views/system/article/publish.vue b/ZR.Vue/src/views/system/article/publish.vue index ee0f860..ac9a245 100644 --- a/ZR.Vue/src/views/system/article/publish.vue +++ b/ZR.Vue/src/views/system/article/publish.vue @@ -128,10 +128,9 @@ export default { $imgAdd(pos, $file) { var formdata = new FormData(); formdata.append("file", $file); - // 这里没有服务器供大家尝试,可将下面上传接口替换为你自己的服务器接口 upload(formdata).then((res) => { console.log(JSON.stringify(res)); - this.$refs.md.$img2Url(pos, res.data); + this.$refs.md.$img2Url(pos, res.data.url); }); }, change(value, render) { From 26bd31cbcf40d5390c0dd1db1301242f4cfbb679 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, 14 Jan 2022 21:11:26 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Vue/src/views/tool/gen/index.vue | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ZR.Vue/src/views/tool/gen/index.vue b/ZR.Vue/src/views/tool/gen/index.vue index d6466f4..f88d6d2 100644 --- a/ZR.Vue/src/views/tool/gen/index.vue +++ b/ZR.Vue/src/views/tool/gen/index.vue @@ -2,11 +2,12 @@
- + 查询 + 重置 @@ -133,6 +134,9 @@ export default { * 编辑表格 */ handleEditTable(row) { + this.queryParams.tableName = row.tableName; + this.handleSearch(); + this.$router.push({ path: "/gen/editTable", query: { tableId: row.tableId }, @@ -158,7 +162,6 @@ export default { * 点击生成服务端代码 */ handleGenTable(row) { - console.log(JSON.stringify(this.currentSelected)); this.currentSelected = row; if (!this.currentSelected) { this.msgError("请先选择要生成代码的数据表"); @@ -179,7 +182,6 @@ export default { tableName: this.currentSelected.name, // queryColumn: this.checkedQueryColumn, }; - console.log(JSON.stringify(seachdata)); codeGenerator(seachdata) .then((res) => { @@ -205,6 +207,11 @@ export default { this.showGenerate = false; this.currentSelected = {}; }, + /** 重置按钮操作 */ + resetQuery() { + this.resetForm("queryParams"); + this.handleSearch(); + }, /** 打开导入表弹窗 */ openImportTable() { this.$refs.import.show(); From 68686f60fc2c0ff17e1734a85e0e6de7a08406e0 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, 15 Jan 2022 10:42:53 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E5=9B=BE=E6=A0=87=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E6=96=B0=E5=A2=9E=E6=B8=85=E7=A9=BA=E5=9B=BE?= =?UTF-8?q?=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Vue/src/components/IconSelect/index.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/ZR.Vue/src/components/IconSelect/index.vue b/ZR.Vue/src/components/IconSelect/index.vue index b0ec9fa..af98224 100644 --- a/ZR.Vue/src/components/IconSelect/index.vue +++ b/ZR.Vue/src/components/IconSelect/index.vue @@ -4,6 +4,7 @@ + 清空
From 512c5bc176271478f86ba3173008c0ae3d2f6158 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, 15 Jan 2022 21:31:40 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=A0=91=E6=9E=84=E5=BB=BA=E6=94=B9=E7=94=A8=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/System/SysMenuController.cs | 7 +- ZR.Model/System/SysMenu.cs | 5 +- ZR.Repository/System/SysMenuRepository.cs | 66 ++++++++++++++----- ZR.Repository/System/SysRoleRepository.cs | 11 ++++ ZR.Service/System/IService/ISysMenuService.cs | 32 ++++----- ZR.Service/System/IService/ISysRoleService.cs | 2 +- ZR.Service/System/SysMenuService.cs | 25 ++++--- ZR.Service/System/SysRoleService.cs | 23 ++++++- ZR.Vue/src/views/system/menu/index.vue | 18 +++-- 9 files changed, 132 insertions(+), 57 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs b/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs index 60666c6..10e2f16 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs @@ -8,6 +8,7 @@ using ZR.Admin.WebApi.Filters; using ZR.Model.System.Dto; using ZR.Model.System; using ZR.Service.System.IService; +using ZR.Model; namespace ZR.Admin.WebApi.Controllers.System { @@ -32,10 +33,10 @@ namespace ZR.Admin.WebApi.Controllers.System /// [ActionPermissionFilter(Permission = "system:menu:list")] [HttpGet("list")] - public IActionResult MenuList([FromQuery] SysMenu menu) + public IActionResult TreeMenuList([FromQuery] SysMenu menu) { long userId = HttpContext.GetUId(); - return SUCCESS(sysMenuService.SelectMenuList(menu, userId), "yyyy-MM-dd HH:mm:ss"); + return SUCCESS(sysMenuService.SelectTreeMenuList(menu, userId), "yyyy-MM-dd HH:mm:ss"); } /// @@ -74,7 +75,7 @@ namespace ZR.Admin.WebApi.Controllers.System public IActionResult RoleMenuTreeselect(int roleId) { long userId = HttpContext.GetUId(); - var menus = sysMenuService.SelectMenuList(userId); + var menus = sysMenuService.SelectMenuList(new SysMenu(), userId); var checkedKeys = sysRoleService.SelectUserRoleMenus(roleId); return SUCCESS(new { diff --git a/ZR.Model/System/SysMenu.cs b/ZR.Model/System/SysMenu.cs index ca0c3f9..d82e380 100644 --- a/ZR.Model/System/SysMenu.cs +++ b/ZR.Model/System/SysMenu.cs @@ -8,7 +8,7 @@ namespace ZR.Model.System /// [SugarTable("sys_menu")] [Tenant("0")] - public class SysMenu: SysBase + public class SysMenu : SysBase { /// /// 菜单ID @@ -84,6 +84,7 @@ namespace ZR.Model.System /// /// 子菜单 /// - public List children = new List(); + [SugarColumn(IsIgnore = true)] + public List children { get; set; } = new List(); } } diff --git a/ZR.Repository/System/SysMenuRepository.cs b/ZR.Repository/System/SysMenuRepository.cs index 8086698..cb03a0f 100644 --- a/ZR.Repository/System/SysMenuRepository.cs +++ b/ZR.Repository/System/SysMenuRepository.cs @@ -18,6 +18,41 @@ namespace ZR.Repository.System /// 获取所有菜单(菜单管理) /// /// + public List SelectTreeMenuList(SysMenu menu) + { + 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) + .OrderBy(it => new { it.parentId, it.orderNum }) + .ToTree(it => it.children, it => it.parentId, 0); + } + + /// + /// 根据用户查询系统菜单列表(菜单管理) + /// + /// + /// 用户角色集合 + /// + public List SelectTreeMenuListByUserId(SysMenu sysMenu, List roles) + { + var roleMenus = Context.Queryable() + .Where(r => roles.Contains(r.Role_id)); + + return Context.Queryable() + .InnerJoin(roleMenus, (c, j) => c.menuId == j.Menu_id) + .WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (c, j) => c.menuName.Contains(sysMenu.menuName)) + .WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (c, j) => c.visible == sysMenu.visible) + .WhereIF(!string.IsNullOrEmpty(sysMenu.status), (c, j) => c.status == sysMenu.status) + .OrderBy((c, j) => new { c.parentId, c.orderNum }) + .Select(c => c) + .ToTree(it => it.children, it => it.parentId, 0); + } + + /// + /// 获取所有菜单 + /// + /// public List SelectMenuList(SysMenu menu) { return Context.Queryable() @@ -32,22 +67,21 @@ namespace ZR.Repository.System /// 根据用户查询系统菜单列表 /// /// - /// 用户id + /// 用户角色集合 /// - public List SelectMenuListByUserId(SysMenu sysMenu, long userId) + public List SelectMenuListByRoles(SysMenu sysMenu, List roles) { - return Context.Queryable((menu, roleMenu, userRole, role) => new JoinQueryInfos( - JoinType.Left, menu.menuId == roleMenu.Menu_id, - JoinType.Left, roleMenu.Role_id == userRole.RoleId, - JoinType.Left, userRole.RoleId == role.RoleId - )) - .Where((menu, roleMenu, userRole, role) => userRole.UserId == userId) - .WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (menu, roleMenu, userRole, role) => menu.menuName.Contains(sysMenu.menuName)) - .WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (menu, roleMenu, userRole, role) => menu.visible == sysMenu.visible) - .WhereIF(!string.IsNullOrEmpty(sysMenu.status), (menu, roleMenu, userRole, role) => menu.status == sysMenu.status) - .OrderBy((menu, roleMenu, userRole, role) => new { menu.parentId, menu.orderNum }) - //.Distinct() - .Select((menu, roleMenu, userRole, role) => menu).ToList(); + var roleMenus = Context.Queryable() + .Where(r => roles.Contains(r.Role_id)); + + return Context.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(); } #region 左侧菜单树 @@ -68,11 +102,11 @@ namespace ZR.Repository.System /// /// 根据用户角色获取左侧菜单树 /// - /// + /// /// public List SelectMenuTreeByRoleIds(List roleIds) { - var menuTypes = new string[] { "M", "C"}; + var menuTypes = new string[] { "M", "C" }; return Context.Queryable((menu, roleMenu) => new JoinQueryInfos( JoinType.Left, menu.menuId == roleMenu.Menu_id )) diff --git a/ZR.Repository/System/SysRoleRepository.cs b/ZR.Repository/System/SysRoleRepository.cs index 7afb00c..861d340 100644 --- a/ZR.Repository/System/SysRoleRepository.cs +++ b/ZR.Repository/System/SysRoleRepository.cs @@ -2,6 +2,7 @@ using Infrastructure.Model; using SqlSugar; using System.Collections.Generic; +using System.Linq; using ZR.Model; using ZR.Model.System; @@ -110,6 +111,16 @@ namespace ZR.Repository.System 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(); + } + /// /// 批量插入用户菜单 /// diff --git a/ZR.Service/System/IService/ISysMenuService.cs b/ZR.Service/System/IService/ISysMenuService.cs index 90aea34..a8bd620 100644 --- a/ZR.Service/System/IService/ISysMenuService.cs +++ b/ZR.Service/System/IService/ISysMenuService.cs @@ -8,34 +8,34 @@ namespace ZR.Service.System.IService { public interface ISysMenuService { - public List SelectMenuList(long userId); + //List SelectMenuList(long userId); - public List SelectMenuList(SysMenu menu, long userId); + List SelectMenuList(SysMenu menu, long userId); + List SelectTreeMenuList(SysMenu menu, long userId); - public SysMenu GetMenuByMenuId(int menuId); + SysMenu GetMenuByMenuId(int menuId); + int AddMenu(SysMenu menu); - public int AddMenu(SysMenu menu); + int EditMenu(SysMenu menu); - public int EditMenu(SysMenu menu); + int DeleteMenuById(int menuId); - public int DeleteMenuById(int menuId); + string CheckMenuNameUnique(SysMenu menu); - public string CheckMenuNameUnique(SysMenu menu); + int ChangeSortMenu(MenuDto menuDto); - public int ChangeSortMenu(MenuDto menuDto); + bool HasChildByMenuId(long menuId); - public bool HasChildByMenuId(long menuId); + List SelectMenuTreeByUserId(long userId); - public List SelectMenuTreeByUserId(long userId); + List SelectMenuPermsListByUserId(long userId); - public List SelectMenuPermsListByUserId(long userId); + List SelectMenuPermsByUserId(long userId); - public List SelectMenuPermsByUserId(long userId); + bool CheckMenuExistRole(long menuId); - public bool CheckMenuExistRole(long menuId); + List BuildMenus(List menus); - public List BuildMenus(List menus); - - public List BuildMenuTreeSelect(List menus); + List BuildMenuTreeSelect(List menus); } } diff --git a/ZR.Service/System/IService/ISysRoleService.cs b/ZR.Service/System/IService/ISysRoleService.cs index e2517b8..a0dd959 100644 --- a/ZR.Service/System/IService/ISysRoleService.cs +++ b/ZR.Service/System/IService/ISysRoleService.cs @@ -105,7 +105,7 @@ namespace ZR.Service.System.IService /// /// public List SelectUserRoleMenus(long roleId); - + List SelectRoleMenuByRoleIds(long[] roleIds); /// /// 获取用户角色列表 /// diff --git a/ZR.Service/System/SysMenuService.cs b/ZR.Service/System/SysMenuService.cs index e2ec077..5225e66 100644 --- a/ZR.Service/System/SysMenuService.cs +++ b/ZR.Service/System/SysMenuService.cs @@ -4,7 +4,6 @@ using System.Linq; using ZR.Model.System.Dto; using ZR.Model.System; using ZR.Model.System.Vo; -using ZR.Model.Vo; using ZR.Model.Vo.System; using ZR.Repository.System; using ZR.Service.System.IService; @@ -30,31 +29,39 @@ namespace ZR.Service } /// - /// 根据用户查询系统菜单列表 + /// 获取所有菜单数(菜单管理) /// - /// - /// /// - public List SelectMenuList(long userId) + public List SelectTreeMenuList(SysMenu menu, long userId) { - return SelectMenuList(new SysMenu(), userId); + List menuList; + if (SysRoleService.IsAdmin(userId)) + { + menuList = MenuRepository.SelectTreeMenuList(menu); + } + else + { + var userRoles = SysRoleService.SelectUserRoles(userId); + menuList = MenuRepository.SelectTreeMenuListByUserId(menu, userRoles); + } + return menuList; } /// - /// 获取所有菜单(菜单管理) + /// 获取所有菜单列表 /// /// public List SelectMenuList(SysMenu menu, long userId) { List menuList; - //if (SysUser.IsAdmin(userId)) if (SysRoleService.IsAdmin(userId)) { menuList = MenuRepository.SelectMenuList(menu); } else { - menuList = MenuRepository.SelectMenuListByUserId(menu, userId); + var userRoles = SysRoleService.SelectUserRoles(userId); + menuList = MenuRepository.SelectMenuListByRoles(menu, userRoles); } return menuList; } diff --git a/ZR.Service/System/SysRoleService.cs b/ZR.Service/System/SysRoleService.cs index 02ce07c..cabc102 100644 --- a/ZR.Service/System/SysRoleService.cs +++ b/ZR.Service/System/SysRoleService.cs @@ -216,7 +216,7 @@ namespace ZR.Service /// /// 判断是否是管理员 /// - /// + /// /// public bool IsRoleAdmin(long roleid) { @@ -228,13 +228,25 @@ namespace ZR.Service /// /// 获取角色菜单id集合 /// - /// + /// /// public List SelectUserRoleMenus(long roleId) { var list = SysRoleRepository.SelectRoleMenuByRoleId(roleId); - return list.Select(x => x.Menu_id).ToList(); + return list.Select(x => x.Menu_id).Distinct().ToList(); + } + + /// + /// 根据用户所有角色获取菜单 + /// + /// + /// + public List SelectRoleMenuByRoleIds(long[] roleIds) + { + return SysRoleRepository.SelectRoleMenuByRoleIds(roleIds) + .Select(x => x.Menu_id) + .Distinct().ToList(); } /// @@ -270,6 +282,11 @@ namespace ZR.Service return list.Select(x => x.RoleKey).ToList(); } + /// + /// 获取用户所有角色名 + /// + /// + /// public List SelectUserRoleNames(long userId) { var list = SelectUserRoleListByUserId(userId); diff --git a/ZR.Vue/src/views/system/menu/index.vue b/ZR.Vue/src/views/system/menu/index.vue index a097dce..45fd1b2 100644 --- a/ZR.Vue/src/views/system/menu/index.vue +++ b/ZR.Vue/src/views/system/menu/index.vue @@ -52,10 +52,10 @@ -