From 7e427605aba5dadb64f2a07a31ec303608bb652f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com> Date: Tue, 26 Apr 2022 18:29:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=94=E8=B0=83=E5=89=8D=E7=AB=AF=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=AE=A1=E7=90=86=E5=8F=8A=E8=A7=92=E8=89=B2=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebFirst/database/sqlite.db | Bin 143360 -> 143360 bytes .../Config/SwaggerDoc.xml | 13 ++++++ .../BaseController/BaseCrudController.cs | 12 +++--- .../Controllers/RoleController.cs | 2 + .../Controllers/UserController.cs | 30 +++++++++++++- .../yi-sqlsugar-dev.db | Bin 86016 -> 90112 bytes .../Yi.Framework.Interface/IUserService.cs | 15 +++++++ .../Yi.Framework.Model/MenuEntity.cs | 2 +- .../BaseModel/IBaseModelEntity.cs | 0 .../{Models => ModelsTemplate}/LogEntity.cs | 0 .../{Models => ModelsTemplate}/MenuEntity.cs | 7 ++-- .../{Models => ModelsTemplate}/RoleEntity.cs | 7 ++-- .../RoleMenuEntity.cs | 7 ++-- .../TenantEntity.cs | 7 ++-- .../{Models => ModelsTemplate}/UserEntity.cs | 39 ++++++++++++++++-- .../UserRoleEntity.cs | 7 ++-- .../Yi.Framework.Model/RoleEntity.cs | 14 +++++++ .../Yi.Framework.Model/UserEntity.cs | 17 +++++++- .../Yi.Framework.Service/MenuService.cs | 2 +- .../Yi.Framework.Service/RoleService.cs | 1 + .../Yi.Framework.Service/UserService.cs | 29 +++++++------ .../BuilderExtend/JsonExtension.cs | 4 ++ Yi.Vue2.x/package-lock.json | 13 ++++++ Yi.Vue2.x/package.json | 1 + Yi.Vue2.x/src/api/roleApi.js | 9 +--- Yi.Vue2.x/src/api/userApi.js | 6 +-- Yi.Vue2.x/src/components/TableApi.js | 15 ++++++- Yi.Vue2.x/src/util/myaxios.js | 8 ++++ Yi.Vue2.x/src/views/AdmRole.vue | 17 ++++---- Yi.Vue2.x/src/views/AdmUser.vue | 36 +++++++++------- 30 files changed, 239 insertions(+), 81 deletions(-) rename Yi.Framework.Net6/Yi.Framework.Model/{Models => ModelsTemplate}/BaseModel/IBaseModelEntity.cs (100%) rename Yi.Framework.Net6/Yi.Framework.Model/{Models => ModelsTemplate}/LogEntity.cs (100%) rename Yi.Framework.Net6/Yi.Framework.Model/{Models => ModelsTemplate}/MenuEntity.cs (92%) rename Yi.Framework.Net6/Yi.Framework.Model/{Models => ModelsTemplate}/RoleEntity.cs (91%) rename Yi.Framework.Net6/Yi.Framework.Model/{Models => ModelsTemplate}/RoleMenuEntity.cs (91%) rename Yi.Framework.Net6/Yi.Framework.Model/{Models => ModelsTemplate}/TenantEntity.cs (91%) rename Yi.Framework.Net6/Yi.Framework.Model/{Models => ModelsTemplate}/UserEntity.cs (68%) rename Yi.Framework.Net6/Yi.Framework.Model/{Models => ModelsTemplate}/UserRoleEntity.cs (91%) create mode 100644 Yi.Framework.Net6/Yi.Framework.Model/RoleEntity.cs diff --git a/WebFirst/database/sqlite.db b/WebFirst/database/sqlite.db index a242e04be221acdf35ef35e3fd9cf091ce9c635e..6c2aea7fb0d28b43bf163718ab99d99416bdf689 100644 GIT binary patch delta 815 zcmYjP%}*0S6rY)`bU#|!0u97k8Nq}SYd>hEw3dbfYFY&`5DyX$wOz_e+ikW>wMdjE z-IKvUDsG|&6A2e?P;n0&h<|}39*hSQI1%+E#FH_)Eg$-l_nSBG{pL3_Z)R?XoZBH6 zET(w?K)dS4CM?=Lr{;mfKC+f@IpO!pk~8Ph)QuC~O4w*4D&F`{sD)l|i+WS2gp(H_ zRc?cfI$h~4hm)eUkQ3RoV~l+$I-)r~;}~THE|%hEVj{<9$~fOt*-9?L^6z1?XS_-n z;4^tv5Lv+{7P2fqVY?kmO|xVCs3>rmZP*^kjR;&iCKRr- z1>B28VVYGb|4}i{PTxy$ah&2aNgPSwM>xrfmvK&o$_;J>l^0eub#1Dco-SLKE$gX$ zqP`ouF9keZ0hiC=b^F(|n^}{ZatFH9Y>&h1clka3^1^OM1Tt+zAL;-w_=s2X+8*pu3?`I-8iNl( zmIpA;7$5M5bTY%$Vq1dX=7`2j~WBkJ_Y` zsafg{b&;aUeexsumMoD&GKtZ7o$jeFrHksE%nzn|v#(m^vk|?7giX38_c>9AveAIH zVDzjs#en8!k|gz32u3FP3|oU-?JYgs!FK6B11y#*p%sE~A|bH3+|h7Ia=TnXv(zUS zO{nQfUyC%!0F&uRFp`aAPo!F<SW_Z1sc4D=bFY@VuLY{0^9!ECbGQ9y%v zvq|z-MkXe~&DyC3jFY#ei*ruqX5?lF*&uZ<=R{X9ZxQomgH&yhf+w4;G8ZyU zR$t7&Dd!V2pNWE@nU#ULm5GU-sj=avg53p^r5|##o9UUD8krbRKJZ9m^XCV5_1J@e z?on(h-F}^)(NKYdkDYH74?E8Vpc5LowokNT{LIAIHoeuBv5F_Nq%!*Xx`wBX3XB3^ zk?pN^jP(bZZCPrkvNP2%c5Q88ddNKes5FxVvuKOgbjE3nBHO31Fy(S{0HKzI4W?O)%%ZIh(;EeuM7DPcF~u-WchY9++g>8VbeIdMy9}&*x}QALHWneC gWen3z6qr;tD=Jj+Fl)4?On1;{Qr~_-hsl5$0FCWuQUCw| diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Config/SwaggerDoc.xml b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Config/SwaggerDoc.xml index d51448d9..df8eab43 100644 --- a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Config/SwaggerDoc.xml +++ b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Config/SwaggerDoc.xml @@ -155,6 +155,13 @@ 用户管理 + + + 添加用户,去重,密码加密 + + + + 给多用户设置多角色 @@ -162,5 +169,11 @@ + + + 通过用户id得到角色列表 + + + diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/BaseController/BaseCrudController.cs b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/BaseController/BaseCrudController.cs index 5c28c68f..bc8ea14d 100644 --- a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/BaseController/BaseCrudController.cs +++ b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/BaseController/BaseCrudController.cs @@ -34,7 +34,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers /// [Permission($"{nameof(T)}:get:one")] [HttpGet] - public async Task GetById(long id) + public virtual async Task GetById(long id) { return Result.Success().SetData(await _repository.GetByIdAsync(id)); } @@ -45,7 +45,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers /// [Permission($"{nameof(T)}:get:list")] [HttpPost] - public async Task GetList(QueryCondition queryCondition) + public virtual async Task GetList(QueryCondition queryCondition) { return Result.Success().SetData(await _repository.GetListAsync(queryCondition)); } @@ -57,7 +57,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers /// [Permission($"{nameof(T)}:get:page")] [HttpPost] - public async Task PageList(QueryPageCondition queryCondition) + public virtual async Task PageList(QueryPageCondition queryCondition) { return Result.Success().SetData(await _repository.CommonPageAsync(queryCondition)); } @@ -69,7 +69,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers /// [Permission($"{nameof(T)}:add")] [HttpPost] - public async Task Add(T entity) + public virtual async Task Add(T entity) { return Result.Success().SetData(await _repository.InsertReturnSnowflakeIdAsync(entity)); } @@ -81,7 +81,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers /// [Permission($"{nameof(T)}:update")] [HttpPut] - public async Task Update(T entity) + public virtual async Task Update(T entity) { return Result.Success().SetStatus(await _repository.UpdateIgnoreNullAsync(entity)); } @@ -93,7 +93,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers /// [Permission($"{nameof(T)}:delete:list")] [HttpDelete] - public async Task DeleteList(List ids) + public virtual async Task DeleteList(List ids) { return Result.Success().SetStatus(await _repository.DeleteByLogicAsync(ids)); } diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/RoleController.cs b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/RoleController.cs index 00eadff0..a6c57344 100644 --- a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/RoleController.cs +++ b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/RoleController.cs @@ -39,5 +39,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers { return Result.Success().SetStatus(await _iRoleService.GiveRoleSetMenu(giveRoleSetMenuDto.RoleIds, giveRoleSetMenuDto.MenuIds)); } + + } } diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/UserController.cs b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/UserController.cs index 69cdb8ec..ffe3831c 100644 --- a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/UserController.cs +++ b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/UserController.cs @@ -29,6 +29,23 @@ namespace Yi.Framework.ApiMicroservice.Controllers _iUserService = iUserService; } + /// + /// 添加用户,去重,密码加密 + /// + /// + /// + [Permission($"{nameof(UserEntity)}:add")] + [HttpPost] + public override async Task Add(UserEntity entity) + { + if (!await _iUserService.Exist(entity.UserName)) + { + entity.BuildPassword(); + return Result.Success().SetData(await _iUserService._repository.InsertReturnSnowflakeIdAsync(entity)); + } + return Result.SuccessError("用户已存在"); + } + /// /// 给多用户设置多角色 /// @@ -37,7 +54,18 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpPut] public async Task GiveUserSetRole(GiveUserSetRoleDto giveUserSetRoleDto) { - return Result.Success().SetStatus(await _iUserService.GiveUserSetRole(giveUserSetRoleDto.UserIds,giveUserSetRoleDto.RoleIds)); + return Result.Success().SetStatus(await _iUserService.GiveUserSetRole(giveUserSetRoleDto.UserIds, giveUserSetRoleDto.RoleIds)); + } + + + /// + /// 通过用户id得到角色列表 + /// + /// + [HttpGet] + public async Task GetRoleListByUserId(long userId) + { + return Result.Success().SetData(await _iUserService.GetRoleListByUserId(userId)); } } } diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/yi-sqlsugar-dev.db b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/yi-sqlsugar-dev.db index 19b0cca79cf28f8f6f8eb71cc148dcb85e863213..9314907f96aab067eecc2b714eb89f669a8927dc 100644 GIT binary patch delta 2033 zcmcIlTWFJK82)m!X_NkOCc03H6*^e4ssB0o(-qD6P;HttM>iJRBu$#rpJQ_Xi7igu zg<7p%NF6vB%v~tD2$QjmqPyF6wZTBxV6d9X*u}t$c`?}cCn?cPkPY^K{1@-b`@P@y zywCf5@2MN2Q=6i-q21E}fW7eF`4pGNiNn)iV)73W=aRSldk5>Xyv#oE^T0+wD*3%{ zwePU_2k|A*K@nfDCAiNI2+j)50>JxvpHj&?6K$LvT;*xUM^4zoZ05vBip|8JF|!m- zo)}r4&xhml`8NrA4EoIJ`K46XiJ|D&*xhe#%3haAp8?T;6(D+e^cMqG>9FJ-ZZ!^! zSR{>iRZn>Jl{uk840vD?OiIAM6=n*k08s5$DujEbd^vaxM{!(@l4_hD!AKoR>IiCr zA+^uDH98c!nF)#{iqS%mSWFvcqV8Ng?IWU*vTNS!@TzMmo4c3~xsR%`)Ugoj%7>^$ zN8(teUbYqq2N_FLtQ2i!;{JkVu{;|M_%hLSG2$(Iv&V@1oW&N&#}X0!K`%>ca<#aj zYE2k$ZLn%APfb1kRM!wHh2HCkpRC{l=3JU{?_2i8yrmeUMjJ^tXr z*2V?|SAPK=r9;skWS9=8CvXO%QJMosE*JAAg78~Xp>(#wvaY#cD&vgdb~9TIgk5ZD zi3u#3@qEe=o~@8(N3BfRs+rg_5v-cM#w>l*Se|i4@*Z=L?0}k&&2ixf(N173UzJEa)Mxaa&L-kiv^nWpQL;xGF{xT4| z600xkJREIx9)nRF2zlcjWO3`5|*9wkljEZIrtS6^0Ovzx2I%}5DvTY`u)n_yFa|`xqFHs|X ziJU7|^ao1E9pO+sR!+F+jL~Mx%zBd6<&vgWI#kNMTq%4lv##I&P$5D#0rC`SB9D;o zkWJ(ow;H?A)5!YuL!+crAm+grp(Pzr$7nqd!j92mOwckq(D{w0hh!r%qzMGbBtRyS zJIE@0cGO7S%#(;!fG|n`P>O@gz6Ww%^P{htSFgXQJQ6-DJz^xaI)a>_NgCB))VM$* z22cTgFwLG{e$qo#Kc4`W8mgIu)uv&wX^Jlq?{7t~e;!f`p@3BDzlBu&0_0H#cVqXF zZxL-9LOWd>kNEAs?il2NKOhiGcJ3=ffz+0;_V~_Q#jE-~V*`;`OcbSGUfcdGg-*=IsxgYiIIoDw>XFO076}1pKJ=19GfB zDwK-fkSHOt=hA?7g7#K!+o<3lQ7}pSuv6kNj}DFw^DR)I!#p(Lq3ue+FfKPA-dfuD^J3rTU|PY;)y&1nE-os{*jm0lK7g@_ zQBo6R79+nS1HU6@3^LrTsNlxAIZpB=<7NYaU(Ayo8FZ#R++&~kV_%|@{Kj+^7lwHC /// Task GiveUserSetRole(List userIds, List roleIds); + + /// + /// 判断用户名是否存在,如果存在可返回该用户 + /// + /// + /// + /// + Task Exist(string userName, Action userAction = null); + + /// + /// 通过用户id得到角色列表 + /// + /// + /// + Task> GetRoleListByUserId(long userId); } } diff --git a/Yi.Framework.Net6/Yi.Framework.Model/MenuEntity.cs b/Yi.Framework.Net6/Yi.Framework.Model/MenuEntity.cs index 96e7dfee..e7bb6e46 100644 --- a/Yi.Framework.Net6/Yi.Framework.Model/MenuEntity.cs +++ b/Yi.Framework.Net6/Yi.Framework.Model/MenuEntity.cs @@ -10,6 +10,6 @@ namespace Yi.Framework.Model.Models public partial class MenuEntity { [SqlSugar.SugarColumn(IsIgnore = true)] - public List Childs { get; set; } + public List Children { get; set; } } } diff --git a/Yi.Framework.Net6/Yi.Framework.Model/Models/BaseModel/IBaseModelEntity.cs b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/BaseModel/IBaseModelEntity.cs similarity index 100% rename from Yi.Framework.Net6/Yi.Framework.Model/Models/BaseModel/IBaseModelEntity.cs rename to Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/BaseModel/IBaseModelEntity.cs diff --git a/Yi.Framework.Net6/Yi.Framework.Model/Models/LogEntity.cs b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/LogEntity.cs similarity index 100% rename from Yi.Framework.Net6/Yi.Framework.Model/Models/LogEntity.cs rename to Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/LogEntity.cs diff --git a/Yi.Framework.Net6/Yi.Framework.Model/Models/MenuEntity.cs b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/MenuEntity.cs similarity index 92% rename from Yi.Framework.Net6/Yi.Framework.Model/Models/MenuEntity.cs rename to Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/MenuEntity.cs index ddc0db69..d65c6f90 100644 --- a/Yi.Framework.Net6/Yi.Framework.Model/Models/MenuEntity.cs +++ b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/MenuEntity.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Json.Serialization; using SqlSugar; namespace Yi.Framework.Model.Models { @@ -15,10 +16,8 @@ namespace Yi.Framework.Model.Models this.IsDeleted = false; this.CreateTime = DateTime.Now; } - /// - /// 1 - /// - [SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )] + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )] public long Id { get; set; } /// /// diff --git a/Yi.Framework.Net6/Yi.Framework.Model/Models/RoleEntity.cs b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/RoleEntity.cs similarity index 91% rename from Yi.Framework.Net6/Yi.Framework.Model/Models/RoleEntity.cs rename to Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/RoleEntity.cs index 346f7b23..a85c6d45 100644 --- a/Yi.Framework.Net6/Yi.Framework.Model/Models/RoleEntity.cs +++ b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/RoleEntity.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Json.Serialization; using SqlSugar; namespace Yi.Framework.Model.Models { @@ -15,10 +16,8 @@ namespace Yi.Framework.Model.Models this.IsDeleted = false; this.CreateTime = DateTime.Now; } - /// - /// 1 - /// - [SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )] + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )] public long Id { get; set; } /// /// diff --git a/Yi.Framework.Net6/Yi.Framework.Model/Models/RoleMenuEntity.cs b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/RoleMenuEntity.cs similarity index 91% rename from Yi.Framework.Net6/Yi.Framework.Model/Models/RoleMenuEntity.cs rename to Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/RoleMenuEntity.cs index a7b4d03d..8f8e45a1 100644 --- a/Yi.Framework.Net6/Yi.Framework.Model/Models/RoleMenuEntity.cs +++ b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/RoleMenuEntity.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Json.Serialization; using SqlSugar; namespace Yi.Framework.Model.Models { @@ -15,10 +16,8 @@ namespace Yi.Framework.Model.Models this.IsDeleted = false; this.CreateTime = DateTime.Now; } - /// - /// 1 - /// - [SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )] + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )] public long Id { get; set; } /// /// diff --git a/Yi.Framework.Net6/Yi.Framework.Model/Models/TenantEntity.cs b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/TenantEntity.cs similarity index 91% rename from Yi.Framework.Net6/Yi.Framework.Model/Models/TenantEntity.cs rename to Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/TenantEntity.cs index c052ec3d..f3fdf91c 100644 --- a/Yi.Framework.Net6/Yi.Framework.Model/Models/TenantEntity.cs +++ b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/TenantEntity.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Json.Serialization; using SqlSugar; namespace Yi.Framework.Model.Models { @@ -15,10 +16,8 @@ namespace Yi.Framework.Model.Models this.IsDeleted = false; this.CreateTime = DateTime.Now; } - /// - /// 1 - /// - [SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )] + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )] public long Id { get; set; } /// /// diff --git a/Yi.Framework.Net6/Yi.Framework.Model/Models/UserEntity.cs b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/UserEntity.cs similarity index 68% rename from Yi.Framework.Net6/Yi.Framework.Model/Models/UserEntity.cs rename to Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/UserEntity.cs index 074ad70d..5902d7a5 100644 --- a/Yi.Framework.Net6/Yi.Framework.Model/Models/UserEntity.cs +++ b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/UserEntity.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Json.Serialization; using SqlSugar; namespace Yi.Framework.Model.Models { @@ -15,10 +16,10 @@ namespace Yi.Framework.Model.Models this.IsDeleted = false; this.CreateTime = DateTime.Now; } - /// - /// - /// - [SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )] + + + [Newtonsoft.Json.JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )] public long Id { get; set; } /// /// @@ -75,5 +76,35 @@ namespace Yi.Framework.Model.Models /// [SugarColumn(ColumnName="Salt" )] public string Salt { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="Icon" )] + public long? Icon { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="Nick" )] + public string Nick { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="Email" )] + public string Email { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="Ip" )] + public string Ip { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="Address" )] + public string Address { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="Phone" )] + public string Phone { get; set; } } } diff --git a/Yi.Framework.Net6/Yi.Framework.Model/Models/UserRoleEntity.cs b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/UserRoleEntity.cs similarity index 91% rename from Yi.Framework.Net6/Yi.Framework.Model/Models/UserRoleEntity.cs rename to Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/UserRoleEntity.cs index a974bd17..147747ef 100644 --- a/Yi.Framework.Net6/Yi.Framework.Model/Models/UserRoleEntity.cs +++ b/Yi.Framework.Net6/Yi.Framework.Model/ModelsTemplate/UserRoleEntity.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Json.Serialization; using SqlSugar; namespace Yi.Framework.Model.Models { @@ -15,10 +16,8 @@ namespace Yi.Framework.Model.Models this.IsDeleted = false; this.CreateTime = DateTime.Now; } - /// - /// 1 - /// - [SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )] + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )] public long Id { get; set; } /// /// diff --git a/Yi.Framework.Net6/Yi.Framework.Model/RoleEntity.cs b/Yi.Framework.Net6/Yi.Framework.Model/RoleEntity.cs new file mode 100644 index 00000000..16340453 --- /dev/null +++ b/Yi.Framework.Net6/Yi.Framework.Model/RoleEntity.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json.Serialization; +using SqlSugar; +namespace Yi.Framework.Model.Models +{ + + public partial class RoleEntity + { + //[Navigate(typeof(UserRoleEntity), nameof(UserRoleEntity.RoleId), nameof(UserRoleEntity.UserId))] + //public List Users { get; set; } + } +} diff --git a/Yi.Framework.Net6/Yi.Framework.Model/UserEntity.cs b/Yi.Framework.Net6/Yi.Framework.Model/UserEntity.cs index 0a80c087..3fbc442e 100644 --- a/Yi.Framework.Net6/Yi.Framework.Model/UserEntity.cs +++ b/Yi.Framework.Net6/Yi.Framework.Model/UserEntity.cs @@ -10,6 +10,21 @@ namespace Yi.Framework.Model.Models /// 看好啦!ORM精髓,导航属性 /// [Navigate(typeof(UserRoleEntity), nameof(UserRoleEntity.UserId), nameof(UserRoleEntity.RoleId))] - public List Roles { get; set; } + public List Roles { get; set; } + + + /// + /// 构建密码,MD5盐值加密 + /// + public void BuildPassword(string password = null) + { + //如果不传值,那就把自己的password当作传进来的password + if (password == null) + { + password = this.Password; + } + this.Salt = Common.Helper.MD5Helper.GenerateSalt(); + this.Password = Common.Helper.MD5Helper.SHA2Encode(password, this.Salt); + } } } diff --git a/Yi.Framework.Net6/Yi.Framework.Service/MenuService.cs b/Yi.Framework.Net6/Yi.Framework.Service/MenuService.cs index 4d954c5f..dce836fd 100644 --- a/Yi.Framework.Net6/Yi.Framework.Service/MenuService.cs +++ b/Yi.Framework.Net6/Yi.Framework.Service/MenuService.cs @@ -13,7 +13,7 @@ namespace Yi.Framework.Service { //ParentId 0,代表为根目录,只能存在一个 //复杂查询直接使用db代理 - return await _repository._Db.Queryable().ToTreeAsync(it=>it.Childs,it=>it.ParentId,0); + return await _repository._Db.Queryable().ToTreeAsync(it=>it.Children,it=>it.ParentId,0); } } } diff --git a/Yi.Framework.Net6/Yi.Framework.Service/RoleService.cs b/Yi.Framework.Net6/Yi.Framework.Service/RoleService.cs index 252cd722..fd1f93d7 100644 --- a/Yi.Framework.Net6/Yi.Framework.Service/RoleService.cs +++ b/Yi.Framework.Net6/Yi.Framework.Service/RoleService.cs @@ -41,5 +41,6 @@ namespace Yi.Framework.Service } + } } diff --git a/Yi.Framework.Net6/Yi.Framework.Service/UserService.cs b/Yi.Framework.Net6/Yi.Framework.Service/UserService.cs index 773d1e8e..c213ff87 100644 --- a/Yi.Framework.Net6/Yi.Framework.Service/UserService.cs +++ b/Yi.Framework.Net6/Yi.Framework.Service/UserService.cs @@ -15,7 +15,7 @@ namespace Yi.Framework.Service { return await _repository._Db.Queryable().ToListAsync(); } - public async Task Exist(Guid id, Action userAction = null) + public async Task Exist(long id, Action userAction = null) { var user = await _repository.GetByIdAsync(id); userAction.Invoke(user); @@ -58,8 +58,7 @@ namespace Yi.Framework.Service if (!await Exist(userEntity.UserName)) { user.UserName = userEntity.UserName; - user.Salt = Common.Helper.MD5Helper.GenerateSalt(); - user.Password = Common.Helper.MD5Helper.SHA2Encode(userEntity.Password, user.Salt); + user.BuildPassword(); userAction.Invoke(await _repository.InsertReturnEntityAsync(user)); return true; } @@ -79,23 +78,29 @@ namespace Yi.Framework.Service return await _repositoryUserRole.UseTranAsync(async () => { - //遍历用户 - foreach (var userId in userIds) - { - //删除用户之前所有的用户角色关系(物理删除,没有恢复的必要) - await _repositoryUserRole.DeleteAsync(u => u.UserId == userId); + //遍历用户 + foreach (var userId in userIds) + { + //删除用户之前所有的用户角色关系(物理删除,没有恢复的必要) + await _repositoryUserRole.DeleteAsync(u => u.UserId == userId); - //添加新的关系 - List userRoleEntities = new(); + //添加新的关系 + List userRoleEntities = new(); foreach (var roleId in roleIds) { userRoleEntities.Add(new UserRoleEntity() { UserId = userId, RoleId = roleId }); } - //一次性批量添加 - await _repositoryUserRole.InsertRangeAsync(userRoleEntities); + //一次性批量添加 + await _repositoryUserRole.InsertRangeAsync(userRoleEntities); } }); } + + + public async Task> GetRoleListByUserId(long userId) + { + return (await _repository._Db.Queryable().Includes(u => u.Roles).InSingleAsync(userId)).Roles; + } } } diff --git a/Yi.Framework.Net6/Yi.Framework.WebCore/BuilderExtend/JsonExtension.cs b/Yi.Framework.Net6/Yi.Framework.WebCore/BuilderExtend/JsonExtension.cs index ccf52354..55fa9629 100644 --- a/Yi.Framework.Net6/Yi.Framework.WebCore/BuilderExtend/JsonExtension.cs +++ b/Yi.Framework.Net6/Yi.Framework.WebCore/BuilderExtend/JsonExtension.cs @@ -1,4 +1,6 @@ using Microsoft.Extensions.DependencyInjection; +using Newtonsoft.Json.Serialization; +using SqlSugar; using System; using System.Collections.Generic; using System.Linq; @@ -15,6 +17,8 @@ namespace Yi.Framework.WebCore.BuilderExtend { options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm"; + + //options.SerializerSettings.Converters.Add(new ValueToStringConverter()); }); } diff --git a/Yi.Vue2.x/package-lock.json b/Yi.Vue2.x/package-lock.json index d3376d8d..996dd364 100644 --- a/Yi.Vue2.x/package-lock.json +++ b/Yi.Vue2.x/package-lock.json @@ -1080,6 +1080,11 @@ "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", "dev": true }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz?cache=0&sync_timestamp=1610299293319&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.2.0.tgz", @@ -4931,6 +4936,14 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "requires": { + "bignumber.js": "^9.0.0" + } + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", diff --git a/Yi.Vue2.x/package.json b/Yi.Vue2.x/package.json index 1156390b..5b1f3fdc 100644 --- a/Yi.Vue2.x/package.json +++ b/Yi.Vue2.x/package.json @@ -9,6 +9,7 @@ "dependencies": { "@mdi/font": "^6.6.96", "axios": "^0.22.0", + "json-bigint": "^1.0.0", "typeface-roboto": "^1.1.13", "vue": "^2.6.11", "vue-chartist": "^2.3.1", diff --git a/Yi.Vue2.x/src/api/roleApi.js b/Yi.Vue2.x/src/api/roleApi.js index 615deacd..a5af6224 100644 --- a/Yi.Vue2.x/src/api/roleApi.js +++ b/Yi.Vue2.x/src/api/roleApi.js @@ -19,11 +19,6 @@ export default { method: 'get' }) - }, - GetRolesByUserId(userId) { - return myaxios({ - url: `/Role/GetRolesByUserId?userId=${userId}`, - method: 'get' - }) - }, + } + } \ No newline at end of file diff --git a/Yi.Vue2.x/src/api/userApi.js b/Yi.Vue2.x/src/api/userApi.js index a76e9398..a7131676 100644 --- a/Yi.Vue2.x/src/api/userApi.js +++ b/Yi.Vue2.x/src/api/userApi.js @@ -22,10 +22,10 @@ export default { method: 'get' }) }, - GetAxiosByRouter(router) { + GetRoleListByUserId(userId) { return myaxios({ - url: `/User/GetAxiosByRouter?router=${router}`, + url: `/User/GetRoleListByUserId?userId=${userId}`, method: 'get' }) - } + }, } \ No newline at end of file diff --git a/Yi.Vue2.x/src/components/TableApi.js b/Yi.Vue2.x/src/components/TableApi.js index 9a5dbd3a..3c4d26a6 100644 --- a/Yi.Vue2.x/src/components/TableApi.js +++ b/Yi.Vue2.x/src/components/TableApi.js @@ -3,7 +3,20 @@ export default { getItem(url) { return myaxios({ url: url, - method: 'get' + method: 'post', + data: { + parameters: [ + { + key: "isDeleted", + value: "0", + type: 0 + + } + ], + orderBys: [ + "id" + ] + } }) }, addItem(url, data) { diff --git a/Yi.Vue2.x/src/util/myaxios.js b/Yi.Vue2.x/src/util/myaxios.js index cc2800cb..f7034049 100644 --- a/Yi.Vue2.x/src/util/myaxios.js +++ b/Yi.Vue2.x/src/util/myaxios.js @@ -1,6 +1,7 @@ import axios from 'axios' import store from '../store/index' import vm from '../main' +import JsonBig from 'json-bigint' // import VuetifyDialogPlugin from 'vuetify-dialog/nuxt/index'; const myaxios = axios.create({ // baseURL:'/'// @@ -9,6 +10,13 @@ const myaxios = axios.create({ headers: { 'Authorization': 'Bearer ' + "" }, + //雪花id精度问题 + transformResponse: [ data => { + const json = JsonBig({ + storeAsString: true + }) + return json.parse(data) + }], }) // 请求拦截器 myaxios.interceptors.request.use(function(config) { diff --git a/Yi.Vue2.x/src/views/AdmRole.vue b/Yi.Vue2.x/src/views/AdmRole.vue index b01ef891..9bd1e9a0 100644 --- a/Yi.Vue2.x/src/views/AdmRole.vue +++ b/Yi.Vue2.x/src/views/AdmRole.vue @@ -12,17 +12,18 @@