From e157a63204e5965d9fcf2852dc65cf82d6dbdc9a Mon Sep 17 00:00:00 2001 From: lzw <605106923@qq.com> Date: Tue, 2 Nov 2021 23:22:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=B8=8A=E4=BC=A0=E5=A4=B4?= =?UTF-8?q?=E5=83=8F=E5=92=8Cexcel=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/AccountController.cs | 13 +- .../Controllers/FileController.cs | 48 ++-- .../Controllers/UserController.cs | 4 +- .../Yi.Framework.ApiMicroservice/Startup.cs | 2 +- .../Yi.Framework.ApiMicroservice.csproj | 11 +- .../wwwroot/Excel/Excel_20211102225436.xlsx | Bin 0 -> 2958 bytes .../wwwroot/Excel/Excel_20211102225553.xlsx | Bin 0 -> 2958 bytes .../wwwroot/Excel/Excel_20211102231510.xlsx | Bin 0 -> 3014 bytes .../wwwroot/Excel/Excel_20211102232113.xlsx | Bin 0 -> 3023 bytes .../0a5221e4-dca6-4d4e-8486-acf86822f2e4.jpg | Bin 0 -> 47955 bytes .../6312706b-7013-4aa5-af3c-0bbb6b3f4804.jpg | Bin 0 -> 5869 bytes .../Yi.Framework.Common/Helper/ExcelHelper.cs | 60 +++++ .../Yi.Framework.Common/Helper/MimeHelper.cs | 244 ++++++++++++++++++ .../Yi.Framework.Common/Helper/MimeMapping.cs | 243 ----------------- .../Yi.Framework.Common.csproj | 1 + .../Yi.Framework.Interface/IUserService.cs | 4 +- .../Yi.Framework.Model/Models/user.cs | 2 +- .../Yi.Framework.Service/MenuService.cs | 5 +- .../Yi.Framework.Service/UserService.cs | 22 +- 19 files changed, 353 insertions(+), 306 deletions(-) create mode 100644 Yi.Framework/Yi.Framework.ApiMicroservice/evn/wwwroot/Excel/Excel_20211102225436.xlsx create mode 100644 Yi.Framework/Yi.Framework.ApiMicroservice/evn/wwwroot/Excel/Excel_20211102225553.xlsx create mode 100644 Yi.Framework/Yi.Framework.ApiMicroservice/wwwroot/Excel/Excel_20211102231510.xlsx create mode 100644 Yi.Framework/Yi.Framework.ApiMicroservice/wwwroot/Excel/Excel_20211102232113.xlsx create mode 100644 Yi.Framework/Yi.Framework.ApiMicroservice/wwwroot/image/0a5221e4-dca6-4d4e-8486-acf86822f2e4.jpg create mode 100644 Yi.Framework/Yi.Framework.ApiMicroservice/wwwroot/image/6312706b-7013-4aa5-af3c-0bbb6b3f4804.jpg create mode 100644 Yi.Framework/Yi.Framework.Common/Helper/ExcelHelper.cs create mode 100644 Yi.Framework/Yi.Framework.Common/Helper/MimeHelper.cs delete mode 100644 Yi.Framework/Yi.Framework.Common/Helper/MimeMapping.cs diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/AccountController.cs b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/AccountController.cs index b48014c3..eb3fcf16 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/AccountController.cs +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/AccountController.cs @@ -13,6 +13,7 @@ using Yi.Framework.Core; using Yi.Framework.DTOModel; using Yi.Framework.Interface; using Yi.Framework.Model.Models; +using Yi.Framework.WebCore; namespace Yi.Framework.ApiMicroservice.Controllers { @@ -157,16 +158,6 @@ namespace Yi.Framework.ApiMicroservice.Controllers return Result.Success(msg); } - [HttpGet] - public async Task EditIcon(int userId,IFormFile file) - { - var user_data = await _userService.GetUserById(userId); - var fileController = new FileController(); - var type = Common.Const.FileConst.Image; - var filename= fileController.Upload(type,file); - user_data.icon = filename.ToString(); - await _userService.UpdateAsync(user_data); - return Result.Success(); - } + } } \ No newline at end of file diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/FileController.cs b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/FileController.cs index 81f6e525..196e37a9 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/FileController.cs +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/FileController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Hosting; using System; @@ -22,46 +23,49 @@ namespace Yi.Framework.ApiMicroservice.Controllers { _userService = userService; _env = env; - } - - public FileController() + } + [HttpPost] + [Authorize] + public async Task EditIcon(IFormFile file) { + var _user = HttpContext.GetCurrentUserInfo(); + var user_data = await _userService.GetUserById(_user.id); + var type = "image"; + var filename = await Upload(type, file); + user_data.icon = filename; + await _userService.UpdateAsync(user_data); + return Result.Success(); } - [HttpGet] - [Route("{type}/{imageNmae}")] public IActionResult Get(string type, string imageNmae) { - var path = Path.Combine(@"wwwroot/file", imageNmae); + var path = Path.Combine($"wwwroot\\{type}", imageNmae); var stream = System.IO.File.OpenRead(path); - var MimeType = Common.Helper.MimeMapping.GetMimeMapping(imageNmae); + var MimeType = Common.Helper.MimeHelper.GetMimeMapping(imageNmae); return new FileStreamResult(stream, MimeType); } - [HttpPost] - [Route("{type}/{imageNmae}")] - public async Task Upload(string type,IFormFile file) + + private async Task Upload(string type,IFormFile file) { - if (type != Common.Const.FileConst.Image) { return Result.Error(); } + string filename = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName); - string filepath = Path.Combine(@"wwwroot/image", filename); - using (var stream = new FileStream(Path.Combine(_env.ContentRootPath, filepath), FileMode.CreateNew, FileAccess.Write)) + using (var stream = new FileStream(Path.Combine($"wwwroot\\{type}", filename), FileMode.CreateNew, FileAccess.Write)) { await file.CopyToAsync(stream); } - return Result.Success().SetData(filename); + return filename; } - [HttpGet] - public async Task GetFile() + [HttpGet] + public async TaskExportFile() { var userdata = await _userService.GetAllEntitiesTrueAsync(); var userList = userdata.ToList(); - Dictionary dt = new(); - dt.Add("sc", "user"); - var bt = Excel.ExportExcel(userList, dt); - MemoryStream ms = new(bt); - return new FileStreamResult(ms, "application/vnd.ms-excel"); + List header = new() { "用户", "密码", "头像", "昵称", "邮箱", "ip","年龄", "个人介绍", "地址", "手机", "角色" }; + var filename= Common.Helper.ExcelHelper.CreateExcelFromList(userList,header,_env.ContentRootPath.ToString()); + var MimeType = Common.Helper.MimeHelper.GetMimeMapping(filename); + return new FileStreamResult(new FileStream(Path.Combine(_env.ContentRootPath+@"\wwwroot\Excel", filename), FileMode.Open),MimeType); } } } diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs index 10f3e159..60d169f3 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs @@ -108,8 +108,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpGet] public async Task GetMenuByHttpUser() { - var _user = HttpContext.GetCurrentUserInfo(); - return Result.Success().SetData(await _userService.GetMenuByHttpUser(_user.id)); + HttpContext.GetCurrentUserInfo(out var allMenuIds); + return Result.Success().SetData(await _userService.GetMenuByHttpUser(allMenuIds)); } /// diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/Startup.cs b/Yi.Framework/Yi.Framework.ApiMicroservice/Startup.cs index 6f28e2ef..9d31f9d3 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/Startup.cs +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/Startup.cs @@ -100,7 +100,7 @@ namespace Yi.Framework.ApiMicroservice #region //ץȡע #endregion - app.UseErrorHandlingService(); + //app.UseErrorHandlingService(); #region //HttpsRedirectionע diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/Yi.Framework.ApiMicroservice.csproj b/Yi.Framework/Yi.Framework.ApiMicroservice/Yi.Framework.ApiMicroservice.csproj index c7ef45b5..2290e099 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/Yi.Framework.ApiMicroservice.csproj +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/Yi.Framework.ApiMicroservice.csproj @@ -9,6 +9,13 @@ 1701;1702;CS1591 + + + + + + + all @@ -25,8 +32,8 @@ - - + + diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/evn/wwwroot/Excel/Excel_20211102225436.xlsx b/Yi.Framework/Yi.Framework.ApiMicroservice/evn/wwwroot/Excel/Excel_20211102225436.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..24bc5816916948488327d124875b7d7c31244d1e GIT binary patch literal 2958 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 literal 0 HcmV?d00001 diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/wwwroot/Excel/Excel_20211102231510.xlsx b/Yi.Framework/Yi.Framework.ApiMicroservice/wwwroot/Excel/Excel_20211102231510.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f1634a6f788bb05251c615f28f2cfc453948c933 GIT binary patch literal 3014 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 literal 0 HcmV?d00001 diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/wwwroot/Excel/Excel_20211102232113.xlsx b/Yi.Framework/Yi.Framework.ApiMicroservice/wwwroot/Excel/Excel_20211102232113.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..428fa1196412c9310c9e52bace461381f3bac677 GIT binary patch literal 3023 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 z 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 literal 0 HcmV?d00001 diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/wwwroot/image/6312706b-7013-4aa5-af3c-0bbb6b3f4804.jpg b/Yi.Framework/Yi.Framework.ApiMicroservice/wwwroot/image/6312706b-7013-4aa5-af3c-0bbb6b3f4804.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1bdce5bea6ac1f6a3bbeec9bcd8f4864622ce9f GIT binary patch literal 5869 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 literal 0 HcmV?d00001 diff --git a/Yi.Framework/Yi.Framework.Common/Helper/ExcelHelper.cs b/Yi.Framework/Yi.Framework.Common/Helper/ExcelHelper.cs new file mode 100644 index 00000000..b04850f1 --- /dev/null +++ b/Yi.Framework/Yi.Framework.Common/Helper/ExcelHelper.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using OfficeOpenXml; + +namespace Yi.Framework.Common.Helper +{ + public class ExcelHelper + { + ///

+ /// + /// + /// + /// 数据 + /// 表头 + /// + public static string CreateExcelFromList(List dataList, List headers,string evn) + { + ExcelPackage.LicenseContext = LicenseContext.NonCommercial; + string sWebRootFolder = Path.Combine($"{evn}", "wwwroot\\Excel");//如果用浏览器url下载的方式 存放excel的文件夹一定要建在网站首页的同级目录下!!! + if (!Directory.Exists(sWebRootFolder)) + { + Directory.CreateDirectory(sWebRootFolder); + } + string sFileName = $@"Excel_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"; + var path = Path.Combine(sWebRootFolder, sFileName); + FileInfo file = new FileInfo(path); + if (file.Exists) + { + file.Delete(); + file = new FileInfo(path); + } + using (ExcelPackage package = new(file)) + { + //创建sheet + ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("sheet1"); + worksheet.Cells.LoadFromCollection(dataList, true); + //表头字段 + for (int i = 0; i < headers.Count; i++) + { + worksheet.Cells[1, i + 1].Value = headers[i]; + } + for (int i = 0; i < headers.Count + 1; i++) + {//删除不需要的列 + string aa = worksheet.Cells[1, i + 1].Value.ToString(); + if (aa == "总行数") + { + worksheet.DeleteColumn(i + 1); + } + } + package.Save(); + } + //return path;//这是返回文件的方式 + return sFileName; //如果用浏览器url下载的方式 这里直接返回生成的文件名就可以了 + } + } +} diff --git a/Yi.Framework/Yi.Framework.Common/Helper/MimeHelper.cs b/Yi.Framework/Yi.Framework.Common/Helper/MimeHelper.cs new file mode 100644 index 00000000..bd783d48 --- /dev/null +++ b/Yi.Framework/Yi.Framework.Common/Helper/MimeHelper.cs @@ -0,0 +1,244 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Common.Helper +{ + public static class MimeHelper + { + // 通过自己定义一个静态类 + // 将所有的Content Type都扔进去吧 + // 调用的时候直接调用静态方法即可。 + + private static Hashtable _mimeMappingTable; + + private static void AddMimeMapping(string extension, string MimeType) + { + MimeHelper._mimeMappingTable.Add(extension, MimeType); + } + + public static string GetMimeMapping(string FileName) + { + string text = null; + int num = FileName.LastIndexOf('.'); + if (0 < num && num > FileName.LastIndexOf('\\')) + { + text = (string)MimeHelper._mimeMappingTable[FileName.Substring(num)]; + } + if (text == null) + { + text = (string)MimeHelper._mimeMappingTable[".*"]; + } + return text; + } + + static MimeHelper() + { + MimeHelper._mimeMappingTable = new Hashtable(190, StringComparer.CurrentCultureIgnoreCase); + MimeHelper.AddMimeMapping(".323", "text/h323"); + MimeHelper.AddMimeMapping(".asx", "video/x-ms-asf"); + MimeHelper.AddMimeMapping(".acx", "application/internet-property-stream"); + MimeHelper.AddMimeMapping(".ai", "application/postscript"); + MimeHelper.AddMimeMapping(".aif", "audio/x-aiff"); + MimeHelper.AddMimeMapping(".aiff", "audio/aiff"); + MimeHelper.AddMimeMapping(".axs", "application/olescript"); + MimeHelper.AddMimeMapping(".aifc", "audio/aiff"); + MimeHelper.AddMimeMapping(".asr", "video/x-ms-asf"); + MimeHelper.AddMimeMapping(".avi", "video/x-msvideo"); + MimeHelper.AddMimeMapping(".asf", "video/x-ms-asf"); + MimeHelper.AddMimeMapping(".au", "audio/basic"); + MimeHelper.AddMimeMapping(".application", "application/x-ms-application"); + MimeHelper.AddMimeMapping(".bin", "application/octet-stream"); + MimeHelper.AddMimeMapping(".bas", "text/plain"); + MimeHelper.AddMimeMapping(".bcpio", "application/x-bcpio"); + MimeHelper.AddMimeMapping(".bmp", "image/bmp"); + MimeHelper.AddMimeMapping(".cdf", "application/x-cdf"); + MimeHelper.AddMimeMapping(".cat", "application/vndms-pkiseccat"); + MimeHelper.AddMimeMapping(".crt", "application/x-x509-ca-cert"); + MimeHelper.AddMimeMapping(".c", "text/plain"); + MimeHelper.AddMimeMapping(".css", "text/css"); + MimeHelper.AddMimeMapping(".cer", "application/x-x509-ca-cert"); + MimeHelper.AddMimeMapping(".crl", "application/pkix-crl"); + MimeHelper.AddMimeMapping(".cmx", "image/x-cmx"); + MimeHelper.AddMimeMapping(".csh", "application/x-csh"); + MimeHelper.AddMimeMapping(".cod", "image/cis-cod"); + MimeHelper.AddMimeMapping(".cpio", "application/x-cpio"); + MimeHelper.AddMimeMapping(".clp", "application/x-msclip"); + MimeHelper.AddMimeMapping(".crd", "application/x-mscardfile"); + MimeHelper.AddMimeMapping(".deploy", "application/octet-stream"); + MimeHelper.AddMimeMapping(".dll", "application/x-msdownload"); + MimeHelper.AddMimeMapping(".dot", "application/msword"); + MimeHelper.AddMimeMapping(".doc", "application/msword"); + MimeHelper.AddMimeMapping(".dvi", "application/x-dvi"); + MimeHelper.AddMimeMapping(".dir", "application/x-director"); + MimeHelper.AddMimeMapping(".dxr", "application/x-director"); + MimeHelper.AddMimeMapping(".der", "application/x-x509-ca-cert"); + MimeHelper.AddMimeMapping(".dib", "image/bmp"); + MimeHelper.AddMimeMapping(".dcr", "application/x-director"); + MimeHelper.AddMimeMapping(".disco", "text/xml"); + MimeHelper.AddMimeMapping(".exe", "application/octet-stream"); + MimeHelper.AddMimeMapping(".etx", "text/x-setext"); + MimeHelper.AddMimeMapping(".evy", "application/envoy"); + MimeHelper.AddMimeMapping(".eml", "message/rfc822"); + MimeHelper.AddMimeMapping(".eps", "application/postscript"); + MimeHelper.AddMimeMapping(".flr", "x-world/x-vrml"); + MimeHelper.AddMimeMapping(".fif", "application/fractals"); + MimeHelper.AddMimeMapping(".gtar", "application/x-gtar"); + MimeHelper.AddMimeMapping(".gif", "image/gif"); + MimeHelper.AddMimeMapping(".gz", "application/x-gzip"); + MimeHelper.AddMimeMapping(".hta", "application/hta"); + MimeHelper.AddMimeMapping(".htc", "text/x-component"); + MimeHelper.AddMimeMapping(".htt", "text/webviewhtml"); + MimeHelper.AddMimeMapping(".h", "text/plain"); + MimeHelper.AddMimeMapping(".hdf", "application/x-hdf"); + MimeHelper.AddMimeMapping(".hlp", "application/winhlp"); + MimeHelper.AddMimeMapping(".html", "text/html"); + MimeHelper.AddMimeMapping(".htm", "text/html"); + MimeHelper.AddMimeMapping(".hqx", "application/mac-binhex40"); + MimeHelper.AddMimeMapping(".isp", "application/x-internet-signup"); + MimeHelper.AddMimeMapping(".iii", "application/x-iphone"); + MimeHelper.AddMimeMapping(".ief", "image/ief"); + MimeHelper.AddMimeMapping(".ivf", "video/x-ivf"); + MimeHelper.AddMimeMapping(".ins", "application/x-internet-signup"); + MimeHelper.AddMimeMapping(".ico", "image/x-icon"); + MimeHelper.AddMimeMapping(".jpg", "image/jpeg"); + MimeHelper.AddMimeMapping(".jfif", "image/pjpeg"); + MimeHelper.AddMimeMapping(".jpe", "image/jpeg"); + MimeHelper.AddMimeMapping(".jpeg", "image/jpeg"); + MimeHelper.AddMimeMapping(".js", "application/x-javascript"); + MimeHelper.AddMimeMapping(".lsx", "video/x-la-asf"); + MimeHelper.AddMimeMapping(".latex", "application/x-latex"); + MimeHelper.AddMimeMapping(".lsf", "video/x-la-asf"); + MimeHelper.AddMimeMapping(".manifest", "application/x-ms-manifest"); + MimeHelper.AddMimeMapping(".mhtml", "message/rfc822"); + MimeHelper.AddMimeMapping(".mny", "application/x-msmoney"); + MimeHelper.AddMimeMapping(".mht", "message/rfc822"); + MimeHelper.AddMimeMapping(".mid", "audio/mid"); + MimeHelper.AddMimeMapping(".mpv2", "video/mpeg"); + MimeHelper.AddMimeMapping(".man", "application/x-troff-man"); + MimeHelper.AddMimeMapping(".mvb", "application/x-msmediaview"); + MimeHelper.AddMimeMapping(".mpeg", "video/mpeg"); + MimeHelper.AddMimeMapping(".m3u", "audio/x-mpegurl"); + MimeHelper.AddMimeMapping(".mdb", "application/x-msaccess"); + MimeHelper.AddMimeMapping(".mpp", "application/vnd.ms-project"); + MimeHelper.AddMimeMapping(".m1v", "video/mpeg"); + MimeHelper.AddMimeMapping(".mpa", "video/mpeg"); + MimeHelper.AddMimeMapping(".me", "application/x-troff-me"); + MimeHelper.AddMimeMapping(".m13", "application/x-msmediaview"); + MimeHelper.AddMimeMapping(".movie", "video/x-sgi-movie"); + MimeHelper.AddMimeMapping(".m14", "application/x-msmediaview"); + MimeHelper.AddMimeMapping(".mpe", "video/mpeg"); + MimeHelper.AddMimeMapping(".mp2", "video/mpeg"); + MimeHelper.AddMimeMapping(".mov", "video/quicktime"); + MimeHelper.AddMimeMapping(".mp3", "audio/mpeg"); + MimeHelper.AddMimeMapping(".mpg", "video/mpeg"); + MimeHelper.AddMimeMapping(".ms", "application/x-troff-ms"); + MimeHelper.AddMimeMapping(".nc", "application/x-netcdf"); + MimeHelper.AddMimeMapping(".nws", "message/rfc822"); + MimeHelper.AddMimeMapping(".oda", "application/oda"); + MimeHelper.AddMimeMapping(".ods", "application/oleobject"); + MimeHelper.AddMimeMapping(".pmc", "application/x-perfmon"); + MimeHelper.AddMimeMapping(".p7r", "application/x-pkcs7-certreqresp"); + MimeHelper.AddMimeMapping(".p7b", "application/x-pkcs7-certificates"); + MimeHelper.AddMimeMapping(".p7s", "application/pkcs7-signature"); + MimeHelper.AddMimeMapping(".pmw", "application/x-perfmon"); + MimeHelper.AddMimeMapping(".ps", "application/postscript"); + MimeHelper.AddMimeMapping(".p7c", "application/pkcs7-mime"); + MimeHelper.AddMimeMapping(".pbm", "image/x-portable-bitmap"); + MimeHelper.AddMimeMapping(".ppm", "image/x-portable-pixmap"); + MimeHelper.AddMimeMapping(".pub", "application/x-mspublisher"); + MimeHelper.AddMimeMapping(".pnm", "image/x-portable-anymap"); + MimeHelper.AddMimeMapping(".png", "image/png"); + MimeHelper.AddMimeMapping(".pml", "application/x-perfmon"); + MimeHelper.AddMimeMapping(".p10", "application/pkcs10"); + MimeHelper.AddMimeMapping(".pfx", "application/x-pkcs12"); + MimeHelper.AddMimeMapping(".p12", "application/x-pkcs12"); + MimeHelper.AddMimeMapping(".pdf", "application/pdf"); + MimeHelper.AddMimeMapping(".pps", "application/vnd.ms-powerpoint"); + MimeHelper.AddMimeMapping(".p7m", "application/pkcs7-mime"); + MimeHelper.AddMimeMapping(".pko", "application/vndms-pkipko"); + MimeHelper.AddMimeMapping(".ppt", "application/vnd.ms-powerpoint"); + MimeHelper.AddMimeMapping(".pmr", "application/x-perfmon"); + MimeHelper.AddMimeMapping(".pma", "application/x-perfmon"); + MimeHelper.AddMimeMapping(".pot", "application/vnd.ms-powerpoint"); + MimeHelper.AddMimeMapping(".prf", "application/pics-rules"); + MimeHelper.AddMimeMapping(".pgm", "image/x-portable-graymap"); + MimeHelper.AddMimeMapping(".qt", "video/quicktime"); + MimeHelper.AddMimeMapping(".ra", "audio/x-pn-realaudio"); + MimeHelper.AddMimeMapping(".rgb", "image/x-rgb"); + MimeHelper.AddMimeMapping(".ram", "audio/x-pn-realaudio"); + MimeHelper.AddMimeMapping(".rmi", "audio/mid"); + MimeHelper.AddMimeMapping(".ras", "image/x-cmu-raster"); + MimeHelper.AddMimeMapping(".roff", "application/x-troff"); + MimeHelper.AddMimeMapping(".rtf", "application/rtf"); + MimeHelper.AddMimeMapping(".rtx", "text/richtext"); + MimeHelper.AddMimeMapping(".sv4crc", "application/x-sv4crc"); + MimeHelper.AddMimeMapping(".spc", "application/x-pkcs7-certificates"); + MimeHelper.AddMimeMapping(".setreg", "application/set-registration-initiation"); + MimeHelper.AddMimeMapping(".snd", "audio/basic"); + MimeHelper.AddMimeMapping(".stl", "application/vndms-pkistl"); + MimeHelper.AddMimeMapping(".setpay", "application/set-payment-initiation"); + MimeHelper.AddMimeMapping(".stm", "text/html"); + MimeHelper.AddMimeMapping(".shar", "application/x-shar"); + MimeHelper.AddMimeMapping(".sh", "application/x-sh"); + MimeHelper.AddMimeMapping(".sit", "application/x-stuffit"); + MimeHelper.AddMimeMapping(".spl", "application/futuresplash"); + MimeHelper.AddMimeMapping(".sct", "text/scriptlet"); + MimeHelper.AddMimeMapping(".scd", "application/x-msschedule"); + MimeHelper.AddMimeMapping(".sst", "application/vndms-pkicertstore"); + MimeHelper.AddMimeMapping(".src", "application/x-wais-source"); + MimeHelper.AddMimeMapping(".sv4cpio", "application/x-sv4cpio"); + MimeHelper.AddMimeMapping(".tex", "application/x-tex"); + MimeHelper.AddMimeMapping(".tgz", "application/x-compressed"); + MimeHelper.AddMimeMapping(".t", "application/x-troff"); + MimeHelper.AddMimeMapping(".tar", "application/x-tar"); + MimeHelper.AddMimeMapping(".tr", "application/x-troff"); + MimeHelper.AddMimeMapping(".tif", "image/tiff"); + MimeHelper.AddMimeMapping(".txt", "text/plain"); + MimeHelper.AddMimeMapping(".texinfo", "application/x-texinfo"); + MimeHelper.AddMimeMapping(".trm", "application/x-msterminal"); + MimeHelper.AddMimeMapping(".tiff", "image/tiff"); + MimeHelper.AddMimeMapping(".tcl", "application/x-tcl"); + MimeHelper.AddMimeMapping(".texi", "application/x-texinfo"); + MimeHelper.AddMimeMapping(".tsv", "text/tab-separated-values"); + MimeHelper.AddMimeMapping(".ustar", "application/x-ustar"); + MimeHelper.AddMimeMapping(".uls", "text/iuls"); + MimeHelper.AddMimeMapping(".vcf", "text/x-vcard"); + MimeHelper.AddMimeMapping(".wps", "application/vnd.ms-works"); + MimeHelper.AddMimeMapping(".wav", "audio/wav"); + MimeHelper.AddMimeMapping(".wrz", "x-world/x-vrml"); + MimeHelper.AddMimeMapping(".wri", "application/x-mswrite"); + MimeHelper.AddMimeMapping(".wks", "application/vnd.ms-works"); + MimeHelper.AddMimeMapping(".wmf", "application/x-msmetafile"); + MimeHelper.AddMimeMapping(".wcm", "application/vnd.ms-works"); + MimeHelper.AddMimeMapping(".wrl", "x-world/x-vrml"); + MimeHelper.AddMimeMapping(".wdb", "application/vnd.ms-works"); + MimeHelper.AddMimeMapping(".wsdl", "text/xml"); + MimeHelper.AddMimeMapping(".xap", "application/x-silverlight-app"); + MimeHelper.AddMimeMapping(".xml", "text/xml"); + MimeHelper.AddMimeMapping(".xlm", "application/vnd.ms-excel"); + MimeHelper.AddMimeMapping(".xaf", "x-world/x-vrml"); + MimeHelper.AddMimeMapping(".xla", "application/vnd.ms-excel"); + MimeHelper.AddMimeMapping(".xls", "application/vnd.ms-excel"); + MimeHelper.AddMimeMapping(".xlsx", "application/vnd.ms-excel"); + MimeHelper.AddMimeMapping(".xof", "x-world/x-vrml"); + MimeHelper.AddMimeMapping(".xlt", "application/vnd.ms-excel"); + MimeHelper.AddMimeMapping(".xlc", "application/vnd.ms-excel"); + MimeHelper.AddMimeMapping(".xsl", "text/xml"); + MimeHelper.AddMimeMapping(".xbm", "image/x-xbitmap"); + MimeHelper.AddMimeMapping(".xlw", "application/vnd.ms-excel"); + MimeHelper.AddMimeMapping(".xpm", "image/x-xpixmap"); + MimeHelper.AddMimeMapping(".xwd", "image/x-xwindowdump"); + MimeHelper.AddMimeMapping(".xsd", "text/xml"); + MimeHelper.AddMimeMapping(".z", "application/x-compress"); + MimeHelper.AddMimeMapping(".zip", "application/x-zip-compressed"); + MimeHelper.AddMimeMapping(".*", "application/octet-stream"); + } + } + + + +} diff --git a/Yi.Framework/Yi.Framework.Common/Helper/MimeMapping.cs b/Yi.Framework/Yi.Framework.Common/Helper/MimeMapping.cs deleted file mode 100644 index 47d38753..00000000 --- a/Yi.Framework/Yi.Framework.Common/Helper/MimeMapping.cs +++ /dev/null @@ -1,243 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Yi.Framework.Common.Helper -{ - public static class MimeMapping - { - // 通过自己定义一个静态类 - // 将所有的Content Type都扔进去吧 - // 调用的时候直接调用静态方法即可。 - - private static Hashtable _mimeMappingTable; - - private static void AddMimeMapping(string extension, string MimeType) - { - MimeMapping._mimeMappingTable.Add(extension, MimeType); - } - - public static string GetMimeMapping(string FileName) - { - string text = null; - int num = FileName.LastIndexOf('.'); - if (0 < num && num > FileName.LastIndexOf('\\')) - { - text = (string)MimeMapping._mimeMappingTable[FileName.Substring(num)]; - } - if (text == null) - { - text = (string)MimeMapping._mimeMappingTable[".*"]; - } - return text; - } - - static MimeMapping() - { - MimeMapping._mimeMappingTable = new Hashtable(190, StringComparer.CurrentCultureIgnoreCase); - MimeMapping.AddMimeMapping(".323", "text/h323"); - MimeMapping.AddMimeMapping(".asx", "video/x-ms-asf"); - MimeMapping.AddMimeMapping(".acx", "application/internet-property-stream"); - MimeMapping.AddMimeMapping(".ai", "application/postscript"); - MimeMapping.AddMimeMapping(".aif", "audio/x-aiff"); - MimeMapping.AddMimeMapping(".aiff", "audio/aiff"); - MimeMapping.AddMimeMapping(".axs", "application/olescript"); - MimeMapping.AddMimeMapping(".aifc", "audio/aiff"); - MimeMapping.AddMimeMapping(".asr", "video/x-ms-asf"); - MimeMapping.AddMimeMapping(".avi", "video/x-msvideo"); - MimeMapping.AddMimeMapping(".asf", "video/x-ms-asf"); - MimeMapping.AddMimeMapping(".au", "audio/basic"); - MimeMapping.AddMimeMapping(".application", "application/x-ms-application"); - MimeMapping.AddMimeMapping(".bin", "application/octet-stream"); - MimeMapping.AddMimeMapping(".bas", "text/plain"); - MimeMapping.AddMimeMapping(".bcpio", "application/x-bcpio"); - MimeMapping.AddMimeMapping(".bmp", "image/bmp"); - MimeMapping.AddMimeMapping(".cdf", "application/x-cdf"); - MimeMapping.AddMimeMapping(".cat", "application/vndms-pkiseccat"); - MimeMapping.AddMimeMapping(".crt", "application/x-x509-ca-cert"); - MimeMapping.AddMimeMapping(".c", "text/plain"); - MimeMapping.AddMimeMapping(".css", "text/css"); - MimeMapping.AddMimeMapping(".cer", "application/x-x509-ca-cert"); - MimeMapping.AddMimeMapping(".crl", "application/pkix-crl"); - MimeMapping.AddMimeMapping(".cmx", "image/x-cmx"); - MimeMapping.AddMimeMapping(".csh", "application/x-csh"); - MimeMapping.AddMimeMapping(".cod", "image/cis-cod"); - MimeMapping.AddMimeMapping(".cpio", "application/x-cpio"); - MimeMapping.AddMimeMapping(".clp", "application/x-msclip"); - MimeMapping.AddMimeMapping(".crd", "application/x-mscardfile"); - MimeMapping.AddMimeMapping(".deploy", "application/octet-stream"); - MimeMapping.AddMimeMapping(".dll", "application/x-msdownload"); - MimeMapping.AddMimeMapping(".dot", "application/msword"); - MimeMapping.AddMimeMapping(".doc", "application/msword"); - MimeMapping.AddMimeMapping(".dvi", "application/x-dvi"); - MimeMapping.AddMimeMapping(".dir", "application/x-director"); - MimeMapping.AddMimeMapping(".dxr", "application/x-director"); - MimeMapping.AddMimeMapping(".der", "application/x-x509-ca-cert"); - MimeMapping.AddMimeMapping(".dib", "image/bmp"); - MimeMapping.AddMimeMapping(".dcr", "application/x-director"); - MimeMapping.AddMimeMapping(".disco", "text/xml"); - MimeMapping.AddMimeMapping(".exe", "application/octet-stream"); - MimeMapping.AddMimeMapping(".etx", "text/x-setext"); - MimeMapping.AddMimeMapping(".evy", "application/envoy"); - MimeMapping.AddMimeMapping(".eml", "message/rfc822"); - MimeMapping.AddMimeMapping(".eps", "application/postscript"); - MimeMapping.AddMimeMapping(".flr", "x-world/x-vrml"); - MimeMapping.AddMimeMapping(".fif", "application/fractals"); - MimeMapping.AddMimeMapping(".gtar", "application/x-gtar"); - MimeMapping.AddMimeMapping(".gif", "image/gif"); - MimeMapping.AddMimeMapping(".gz", "application/x-gzip"); - MimeMapping.AddMimeMapping(".hta", "application/hta"); - MimeMapping.AddMimeMapping(".htc", "text/x-component"); - MimeMapping.AddMimeMapping(".htt", "text/webviewhtml"); - MimeMapping.AddMimeMapping(".h", "text/plain"); - MimeMapping.AddMimeMapping(".hdf", "application/x-hdf"); - MimeMapping.AddMimeMapping(".hlp", "application/winhlp"); - MimeMapping.AddMimeMapping(".html", "text/html"); - MimeMapping.AddMimeMapping(".htm", "text/html"); - MimeMapping.AddMimeMapping(".hqx", "application/mac-binhex40"); - MimeMapping.AddMimeMapping(".isp", "application/x-internet-signup"); - MimeMapping.AddMimeMapping(".iii", "application/x-iphone"); - MimeMapping.AddMimeMapping(".ief", "image/ief"); - MimeMapping.AddMimeMapping(".ivf", "video/x-ivf"); - MimeMapping.AddMimeMapping(".ins", "application/x-internet-signup"); - MimeMapping.AddMimeMapping(".ico", "image/x-icon"); - MimeMapping.AddMimeMapping(".jpg", "image/jpeg"); - MimeMapping.AddMimeMapping(".jfif", "image/pjpeg"); - MimeMapping.AddMimeMapping(".jpe", "image/jpeg"); - MimeMapping.AddMimeMapping(".jpeg", "image/jpeg"); - MimeMapping.AddMimeMapping(".js", "application/x-javascript"); - MimeMapping.AddMimeMapping(".lsx", "video/x-la-asf"); - MimeMapping.AddMimeMapping(".latex", "application/x-latex"); - MimeMapping.AddMimeMapping(".lsf", "video/x-la-asf"); - MimeMapping.AddMimeMapping(".manifest", "application/x-ms-manifest"); - MimeMapping.AddMimeMapping(".mhtml", "message/rfc822"); - MimeMapping.AddMimeMapping(".mny", "application/x-msmoney"); - MimeMapping.AddMimeMapping(".mht", "message/rfc822"); - MimeMapping.AddMimeMapping(".mid", "audio/mid"); - MimeMapping.AddMimeMapping(".mpv2", "video/mpeg"); - MimeMapping.AddMimeMapping(".man", "application/x-troff-man"); - MimeMapping.AddMimeMapping(".mvb", "application/x-msmediaview"); - MimeMapping.AddMimeMapping(".mpeg", "video/mpeg"); - MimeMapping.AddMimeMapping(".m3u", "audio/x-mpegurl"); - MimeMapping.AddMimeMapping(".mdb", "application/x-msaccess"); - MimeMapping.AddMimeMapping(".mpp", "application/vnd.ms-project"); - MimeMapping.AddMimeMapping(".m1v", "video/mpeg"); - MimeMapping.AddMimeMapping(".mpa", "video/mpeg"); - MimeMapping.AddMimeMapping(".me", "application/x-troff-me"); - MimeMapping.AddMimeMapping(".m13", "application/x-msmediaview"); - MimeMapping.AddMimeMapping(".movie", "video/x-sgi-movie"); - MimeMapping.AddMimeMapping(".m14", "application/x-msmediaview"); - MimeMapping.AddMimeMapping(".mpe", "video/mpeg"); - MimeMapping.AddMimeMapping(".mp2", "video/mpeg"); - MimeMapping.AddMimeMapping(".mov", "video/quicktime"); - MimeMapping.AddMimeMapping(".mp3", "audio/mpeg"); - MimeMapping.AddMimeMapping(".mpg", "video/mpeg"); - MimeMapping.AddMimeMapping(".ms", "application/x-troff-ms"); - MimeMapping.AddMimeMapping(".nc", "application/x-netcdf"); - MimeMapping.AddMimeMapping(".nws", "message/rfc822"); - MimeMapping.AddMimeMapping(".oda", "application/oda"); - MimeMapping.AddMimeMapping(".ods", "application/oleobject"); - MimeMapping.AddMimeMapping(".pmc", "application/x-perfmon"); - MimeMapping.AddMimeMapping(".p7r", "application/x-pkcs7-certreqresp"); - MimeMapping.AddMimeMapping(".p7b", "application/x-pkcs7-certificates"); - MimeMapping.AddMimeMapping(".p7s", "application/pkcs7-signature"); - MimeMapping.AddMimeMapping(".pmw", "application/x-perfmon"); - MimeMapping.AddMimeMapping(".ps", "application/postscript"); - MimeMapping.AddMimeMapping(".p7c", "application/pkcs7-mime"); - MimeMapping.AddMimeMapping(".pbm", "image/x-portable-bitmap"); - MimeMapping.AddMimeMapping(".ppm", "image/x-portable-pixmap"); - MimeMapping.AddMimeMapping(".pub", "application/x-mspublisher"); - MimeMapping.AddMimeMapping(".pnm", "image/x-portable-anymap"); - MimeMapping.AddMimeMapping(".png", "image/png"); - MimeMapping.AddMimeMapping(".pml", "application/x-perfmon"); - MimeMapping.AddMimeMapping(".p10", "application/pkcs10"); - MimeMapping.AddMimeMapping(".pfx", "application/x-pkcs12"); - MimeMapping.AddMimeMapping(".p12", "application/x-pkcs12"); - MimeMapping.AddMimeMapping(".pdf", "application/pdf"); - MimeMapping.AddMimeMapping(".pps", "application/vnd.ms-powerpoint"); - MimeMapping.AddMimeMapping(".p7m", "application/pkcs7-mime"); - MimeMapping.AddMimeMapping(".pko", "application/vndms-pkipko"); - MimeMapping.AddMimeMapping(".ppt", "application/vnd.ms-powerpoint"); - MimeMapping.AddMimeMapping(".pmr", "application/x-perfmon"); - MimeMapping.AddMimeMapping(".pma", "application/x-perfmon"); - MimeMapping.AddMimeMapping(".pot", "application/vnd.ms-powerpoint"); - MimeMapping.AddMimeMapping(".prf", "application/pics-rules"); - MimeMapping.AddMimeMapping(".pgm", "image/x-portable-graymap"); - MimeMapping.AddMimeMapping(".qt", "video/quicktime"); - MimeMapping.AddMimeMapping(".ra", "audio/x-pn-realaudio"); - MimeMapping.AddMimeMapping(".rgb", "image/x-rgb"); - MimeMapping.AddMimeMapping(".ram", "audio/x-pn-realaudio"); - MimeMapping.AddMimeMapping(".rmi", "audio/mid"); - MimeMapping.AddMimeMapping(".ras", "image/x-cmu-raster"); - MimeMapping.AddMimeMapping(".roff", "application/x-troff"); - MimeMapping.AddMimeMapping(".rtf", "application/rtf"); - MimeMapping.AddMimeMapping(".rtx", "text/richtext"); - MimeMapping.AddMimeMapping(".sv4crc", "application/x-sv4crc"); - MimeMapping.AddMimeMapping(".spc", "application/x-pkcs7-certificates"); - MimeMapping.AddMimeMapping(".setreg", "application/set-registration-initiation"); - MimeMapping.AddMimeMapping(".snd", "audio/basic"); - MimeMapping.AddMimeMapping(".stl", "application/vndms-pkistl"); - MimeMapping.AddMimeMapping(".setpay", "application/set-payment-initiation"); - MimeMapping.AddMimeMapping(".stm", "text/html"); - MimeMapping.AddMimeMapping(".shar", "application/x-shar"); - MimeMapping.AddMimeMapping(".sh", "application/x-sh"); - MimeMapping.AddMimeMapping(".sit", "application/x-stuffit"); - MimeMapping.AddMimeMapping(".spl", "application/futuresplash"); - MimeMapping.AddMimeMapping(".sct", "text/scriptlet"); - MimeMapping.AddMimeMapping(".scd", "application/x-msschedule"); - MimeMapping.AddMimeMapping(".sst", "application/vndms-pkicertstore"); - MimeMapping.AddMimeMapping(".src", "application/x-wais-source"); - MimeMapping.AddMimeMapping(".sv4cpio", "application/x-sv4cpio"); - MimeMapping.AddMimeMapping(".tex", "application/x-tex"); - MimeMapping.AddMimeMapping(".tgz", "application/x-compressed"); - MimeMapping.AddMimeMapping(".t", "application/x-troff"); - MimeMapping.AddMimeMapping(".tar", "application/x-tar"); - MimeMapping.AddMimeMapping(".tr", "application/x-troff"); - MimeMapping.AddMimeMapping(".tif", "image/tiff"); - MimeMapping.AddMimeMapping(".txt", "text/plain"); - MimeMapping.AddMimeMapping(".texinfo", "application/x-texinfo"); - MimeMapping.AddMimeMapping(".trm", "application/x-msterminal"); - MimeMapping.AddMimeMapping(".tiff", "image/tiff"); - MimeMapping.AddMimeMapping(".tcl", "application/x-tcl"); - MimeMapping.AddMimeMapping(".texi", "application/x-texinfo"); - MimeMapping.AddMimeMapping(".tsv", "text/tab-separated-values"); - MimeMapping.AddMimeMapping(".ustar", "application/x-ustar"); - MimeMapping.AddMimeMapping(".uls", "text/iuls"); - MimeMapping.AddMimeMapping(".vcf", "text/x-vcard"); - MimeMapping.AddMimeMapping(".wps", "application/vnd.ms-works"); - MimeMapping.AddMimeMapping(".wav", "audio/wav"); - MimeMapping.AddMimeMapping(".wrz", "x-world/x-vrml"); - MimeMapping.AddMimeMapping(".wri", "application/x-mswrite"); - MimeMapping.AddMimeMapping(".wks", "application/vnd.ms-works"); - MimeMapping.AddMimeMapping(".wmf", "application/x-msmetafile"); - MimeMapping.AddMimeMapping(".wcm", "application/vnd.ms-works"); - MimeMapping.AddMimeMapping(".wrl", "x-world/x-vrml"); - MimeMapping.AddMimeMapping(".wdb", "application/vnd.ms-works"); - MimeMapping.AddMimeMapping(".wsdl", "text/xml"); - MimeMapping.AddMimeMapping(".xap", "application/x-silverlight-app"); - MimeMapping.AddMimeMapping(".xml", "text/xml"); - MimeMapping.AddMimeMapping(".xlm", "application/vnd.ms-excel"); - MimeMapping.AddMimeMapping(".xaf", "x-world/x-vrml"); - MimeMapping.AddMimeMapping(".xla", "application/vnd.ms-excel"); - MimeMapping.AddMimeMapping(".xls", "application/vnd.ms-excel"); - MimeMapping.AddMimeMapping(".xof", "x-world/x-vrml"); - MimeMapping.AddMimeMapping(".xlt", "application/vnd.ms-excel"); - MimeMapping.AddMimeMapping(".xlc", "application/vnd.ms-excel"); - MimeMapping.AddMimeMapping(".xsl", "text/xml"); - MimeMapping.AddMimeMapping(".xbm", "image/x-xbitmap"); - MimeMapping.AddMimeMapping(".xlw", "application/vnd.ms-excel"); - MimeMapping.AddMimeMapping(".xpm", "image/x-xpixmap"); - MimeMapping.AddMimeMapping(".xwd", "image/x-xwindowdump"); - MimeMapping.AddMimeMapping(".xsd", "text/xml"); - MimeMapping.AddMimeMapping(".z", "application/x-compress"); - MimeMapping.AddMimeMapping(".zip", "application/x-zip-compressed"); - MimeMapping.AddMimeMapping(".*", "application/octet-stream"); - } - } - - - -} diff --git a/Yi.Framework/Yi.Framework.Common/Yi.Framework.Common.csproj b/Yi.Framework/Yi.Framework.Common/Yi.Framework.Common.csproj index 47c5a704..74a4b17a 100644 --- a/Yi.Framework/Yi.Framework.Common/Yi.Framework.Common.csproj +++ b/Yi.Framework/Yi.Framework.Common/Yi.Framework.Common.csproj @@ -5,6 +5,7 @@ + diff --git a/Yi.Framework/Yi.Framework.Interface/IUserService.cs b/Yi.Framework/Yi.Framework.Interface/IUserService.cs index 42de0081..312a3f96 100644 --- a/Yi.Framework/Yi.Framework.Interface/IUserService.cs +++ b/Yi.Framework/Yi.Framework.Interface/IUserService.cs @@ -50,9 +50,9 @@ namespace Yi.Framework.Interface /// /// 通过http获取用户id,得到该用户所有的菜单(递归的那种),把所有children为[]的值全部过滤成null,不要绑定mould /// - /// + /// /// - Task GetMenuByHttpUser(int userId); + Task GetMenuByHttpUser(List allMenuIds); /// /// 根据路由获取菜单 /// diff --git a/Yi.Framework/Yi.Framework.Model/Models/user.cs b/Yi.Framework/Yi.Framework.Model/Models/user.cs index ef0ae625..d9d38fbe 100644 --- a/Yi.Framework/Yi.Framework.Model/Models/user.cs +++ b/Yi.Framework/Yi.Framework.Model/Models/user.cs @@ -19,7 +19,7 @@ namespace Yi.Framework.Model.Models public string introduction { get; set; } public string address { get; set; } public int? phone { get; set; } - + public List roles { get; set; } diff --git a/Yi.Framework/Yi.Framework.Service/MenuService.cs b/Yi.Framework/Yi.Framework.Service/MenuService.cs index 293202c1..3b05cfb5 100644 --- a/Yi.Framework/Yi.Framework.Service/MenuService.cs +++ b/Yi.Framework/Yi.Framework.Service/MenuService.cs @@ -37,14 +37,13 @@ namespace Yi.Framework.Service .Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.mould) .Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.mould) .Where(u =>u.is_delete == Normal && u.is_show == (short)Common.Enum.ShowFlagEnum.Show && u.is_top == (short)Common.Enum.TopFlagEnum.Top) - .OrderByDescending(u=>u.sort) .FirstOrDefaultAsync(); - return TreeMenuBuild.Normal(menu_data); + return TreeMenuBuild.Sort(TreeMenuBuild.Normal(menu_data)); } public async Task> GetTopMenusByTopMenuIds(List menuIds) { - return await _DbRead.Set().AsNoTracking().Where(u => menuIds.Contains(u.id)).ToListAsync(); + return await _DbRead.Set().AsNoTracking().Where(u => menuIds.Contains(u.id)).OrderBy(u=>u.sort).ToListAsync(); } public async Task SetMouldByMenu(int id1,int id2) diff --git a/Yi.Framework/Yi.Framework.Service/UserService.cs b/Yi.Framework/Yi.Framework.Service/UserService.cs index 9e4b54ad..c2357f0a 100644 --- a/Yi.Framework/Yi.Framework.Service/UserService.cs +++ b/Yi.Framework/Yi.Framework.Service/UserService.cs @@ -55,28 +55,12 @@ namespace Yi.Framework.Service return menuList; } - public async Task GetMenuByHttpUser(int userId) + public async Task GetMenuByHttpUser(List allMenuIds) { - var user_data = await GetUserById(userId); - List menuList = new(); - foreach (var item in user_data.roles) - { - var m = item.menus.Where(u => u.is_delete == Normal).ToList(); - menuList = menuList.Union(m).OrderByDescending(u => u.sort).ToList(); - } - //menu_data为角色所有的菜单,不是一个递归的啊 - var allMenuIds = menuList.Select(u => u.id).ToList(); - - - var topMenu =await _DbRead.Set().Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).Where(u => u.is_top == (short)Common.Enum.ShowFlagEnum.Show).FirstOrDefaultAsync(); - - + var topMenu =await _DbRead.Set().Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).Where(u => u.is_top == (short)Common.Enum.ShowFlagEnum.Show).FirstOrDefaultAsync(); //现在要开始关联菜单了 return TreeMenuBuild.Sort(TreeMenuBuild.ShowFormat(topMenu, allMenuIds)); ; - } - - - + } public async Task GetUserInRolesByHttpUser(int userId) { return await GetUserById(userId);