Bladeren bron

1、增加扩展机构(数据权限) 2、前端ts页面简化,默认使用强类型 3、调整代码逻辑与结构及其他优化

zuohuaijun 3 jaren geleden
bovenliggende
commit
626593318b
100 gewijzigde bestanden met toevoegingen van 1888 en 1670 verwijderingen
  1. 2 2
      Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj
  2. 267 270
      Admin.NET/Admin.NET.Core/Admin.NET.Core.xml
  3. 8 13
      Admin.NET/Admin.NET.Core/Const/ClaimConst.cs
  4. 0 7
      Admin.NET/Admin.NET.Core/Entity/SysOrg.cs
  5. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysRoleMenu.cs
  6. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysRoleOrg.cs
  7. 136 35
      Admin.NET/Admin.NET.Core/Entity/SysUser.cs
  8. 25 9
      Admin.NET/Admin.NET.Core/Entity/SysUserExtOrg.cs
  9. 0 26
      Admin.NET/Admin.NET.Core/Entity/SysUserOrg.cs
  10. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysUserRole.cs
  11. 1 0
      Admin.NET/Admin.NET.Core/Entity/WeChatPay.cs
  12. 2 1
      Admin.NET/Admin.NET.Core/Entity/WeChatUser.cs
  13. 9 9
      Admin.NET/Admin.NET.Core/Enum/AccountTypeEnum.cs
  14. 15 3
      Admin.NET/Admin.NET.Core/Enum/CardTypeEnum.cs
  15. 55 0
      Admin.NET/Admin.NET.Core/Enum/CultureLevelEnum.cs
  16. 5 5
      Admin.NET/Admin.NET.Core/Hub/OnlineUserHub.cs
  17. 0 20
      Admin.NET/Admin.NET.Core/SeedData/SysEmpExtOrgPosSeedData.cs
  18. 1 1
      Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs
  19. 20 0
      Admin.NET/Admin.NET.Core/SeedData/SysUserExtOrgSeedData.cs
  20. 0 21
      Admin.NET/Admin.NET.Core/SeedData/SysUserOrgSeedData.cs
  21. 5 5
      Admin.NET/Admin.NET.Core/SeedData/SysUserSeedData.cs
  22. 3 3
      Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginInput.cs
  23. 1 11
      Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginOutput.cs
  24. 3 28
      Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginUserOutput.cs
  25. 23 42
      Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs
  26. 1 1
      Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs
  27. 4 4
      Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs
  28. 7 5
      Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs
  29. 2 2
      Admin.NET/Admin.NET.Core/Service/OnlineUser/SysOnlineUserService.cs
  30. 14 42
      Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs
  31. 4 4
      Admin.NET/Admin.NET.Core/Service/Pos/SysPosService.cs
  32. 4 4
      Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs
  33. 12 20
      Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs
  34. 9 14
      Admin.NET/Admin.NET.Core/Service/User/Dto/UserExtOrgInput.cs
  35. 17 7
      Admin.NET/Admin.NET.Core/Service/User/Dto/UserInput.cs
  36. 0 17
      Admin.NET/Admin.NET.Core/Service/User/Dto/UserOrgInput.cs
  37. 3 3
      Admin.NET/Admin.NET.Core/Service/User/Dto/UserRoleInput.cs
  38. 0 18
      Admin.NET/Admin.NET.Core/Service/User/IUserManager.cs
  39. 0 85
      Admin.NET/Admin.NET.Core/Service/User/SysUserExtOrgPosService.cs
  40. 83 0
      Admin.NET/Admin.NET.Core/Service/User/SysUserExtOrgService.cs
  41. 0 72
      Admin.NET/Admin.NET.Core/Service/User/SysUserOrgService.cs
  42. 4 2
      Admin.NET/Admin.NET.Core/Service/User/SysUserRoleService.cs
  43. 41 103
      Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs
  44. 10 5
      Admin.NET/Admin.NET.Core/Service/User/UserManager.cs
  45. 1 1
      Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs
  46. 1 1
      Admin.NET/Admin.NET.Core/Util/AdminResultProvider.cs
  47. 1 1
      Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs
  48. 1 1
      Web/package.json
  49. 4 4
      Web/src/api-services/apis/sys-auth-api.ts
  50. 4 4
      Web/src/api-services/apis/sys-online-user-api.ts
  51. 0 77
      Web/src/api-services/apis/sys-org-api.ts
  52. 4 3
      Web/src/api-services/apis/sys-tenant-api.ts
  53. 62 153
      Web/src/api-services/apis/sys-user-api.ts
  54. 4 4
      Web/src/api-services/models/account-type-enum.ts
  55. 0 6
      Web/src/api-services/models/add-org-input.ts
  56. 124 26
      Web/src/api-services/models/add-user-input.ts
  57. 57 0
      Web/src/api-services/models/admin-result-list-sys-user-ext-org.ts
  58. 11 11
      Web/src/api-services/models/admin-result-login-user-output.ts
  59. 57 0
      Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-online-user.ts
  60. 57 0
      Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-tenant.ts
  61. 3 2
      Web/src/api-services/models/card-type-enum.ts
  62. 12 21
      Web/src/api-services/models/culture-level-enum.ts
  63. 11 6
      Web/src/api-services/models/index.ts
  64. 2 2
      Web/src/api-services/models/login-input.ts
  65. 1 14
      Web/src/api-services/models/login-output.ts
  66. 0 32
      Web/src/api-services/models/login-role.ts
  67. 12 25
      Web/src/api-services/models/login-user-output.ts
  68. 63 0
      Web/src/api-services/models/sql-sugar-paged-list-sys-online-user.ts
  69. 63 0
      Web/src/api-services/models/sql-sugar-paged-list-sys-tenant.ts
  70. 0 6
      Web/src/api-services/models/sys-org.ts
  71. 76 0
      Web/src/api-services/models/sys-user-ext-org.ts
  72. 117 26
      Web/src/api-services/models/sys-user.ts
  73. 0 6
      Web/src/api-services/models/update-org-input.ts
  74. 124 26
      Web/src/api-services/models/update-user-input.ts
  75. 2 8
      Web/src/api-services/models/user-role-input.ts
  76. 3 3
      Web/src/api-services/models/we-chat-user.ts
  77. 2 2
      Web/src/layout/navBars/breadcrumb/user.vue
  78. 4 3
      Web/src/stores/interface/index.ts
  79. 9 7
      Web/src/stores/userInfo.ts
  80. 50 51
      Web/src/views/login/component/account.vue
  81. 11 23
      Web/src/views/system/config/component/editConfig.vue
  82. 5 4
      Web/src/views/system/config/index.vue
  83. 5 14
      Web/src/views/system/database/component/editColumn.vue
  84. 5 13
      Web/src/views/system/database/component/editTable.vue
  85. 6 5
      Web/src/views/system/database/index.vue
  86. 10 9
      Web/src/views/system/dict/component/dictDataDialog.vue
  87. 5 18
      Web/src/views/system/dict/component/editDictData.vue
  88. 5 16
      Web/src/views/system/dict/component/editDictType.vue
  89. 5 4
      Web/src/views/system/dict/index.vue
  90. 26 14
      Web/src/views/system/file/index.vue
  91. 5 4
      Web/src/views/system/log/difflog/index.vue
  92. 5 4
      Web/src/views/system/log/exlog/index.vue
  93. 5 4
      Web/src/views/system/log/oplog/index.vue
  94. 5 4
      Web/src/views/system/log/vislog/index.vue
  95. 17 41
      Web/src/views/system/menu/component/editMenu.vue
  96. 8 10
      Web/src/views/system/menu/index.vue
  97. 2 2
      Web/src/views/system/onlineUser/index.vue
  98. 7 22
      Web/src/views/system/org/component/editOrg.vue
  99. 3 2
      Web/src/views/system/org/component/orgTree.vue
  100. 7 6
      Web/src/views/system/org/index.vue

+ 2 - 2
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -37,11 +37,11 @@
     <PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.1.9" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.18.0" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="2.13.1" />
-    <PackageReference Include="SqlSugarCore" Version="5.1.3.27" />
+    <PackageReference Include="SqlSugarCore" Version="5.1.3.28" />
     <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.20" />
     <PackageReference Include="UAParser" Version="3.1.47" />
     <PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
-    <PackageReference Include="Masuit.Tools.Core" Version="2.5.6" />
+    <PackageReference Include="Masuit.Tools.Core" Version="2.5.6.2" />
   </ItemGroup>
 
   <ItemGroup>

+ 267 - 270
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -117,7 +117,7 @@
             用户Id
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.ClaimConst.UserName">
+        <member name="F:Admin.NET.Core.ClaimConst.Account">
             <summary>
             账号
             </summary>
@@ -127,9 +127,14 @@
             真实姓名
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.ClaimConst.SuperAdmin">
+        <member name="F:Admin.NET.Core.ClaimConst.NickName">
+            <summary>
+            昵称
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.ClaimConst.AccountType">
             <summary>
-            是否超级管理
+            账号类型
             </summary>
         </member>
         <member name="F:Admin.NET.Core.ClaimConst.TenantId">
@@ -147,21 +152,11 @@
             组织机构名称
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.ClaimConst.OrgLevel">
-            <summary>
-            组织机构级别
-            </summary>
-        </member>
         <member name="F:Admin.NET.Core.ClaimConst.OpenId">
             <summary>
             微信OpenId
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.ClaimConst.NickName">
-            <summary>
-            昵称
-            </summary>
-        </member>
         <member name="F:Admin.NET.Core.ClaimConst.RunMode">
             <summary>
             运行模式(账号和三方授权)
@@ -1127,11 +1122,6 @@
             状态
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysOrg.Level">
-            <summary>
-            级别 例如:省、市、县、区
-            </summary>
-        </member>
         <member name="P:Admin.NET.Core.SysOrg.Children">
             <summary>
             机构子项
@@ -1368,14 +1358,19 @@
             系统用户表
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUser.UserName">
+        <member name="P:Admin.NET.Core.SysUser.Account">
             <summary>
             账号
             </summary>
         </member>
         <member name="P:Admin.NET.Core.SysUser.Password">
             <summary>
-            账号密码(MD5加密)
+            密码(MD5加密)
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.SysUser.RealName">
+            <summary>
+            真实姓名
             </summary>
         </member>
         <member name="P:Admin.NET.Core.SysUser.NickName">
@@ -1388,14 +1383,39 @@
             头像
             </summary>
         </member>
+        <member name="P:Admin.NET.Core.SysUser.Sex">
+            <summary>
+            性别-男_1、女_2
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.SysUser.Age">
+            <summary>
+            年龄
+            </summary>
+        </member>
         <member name="P:Admin.NET.Core.SysUser.Birthday">
             <summary>
             出生日期
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUser.Sex">
+        <member name="P:Admin.NET.Core.SysUser.Nation">
             <summary>
-            性别-男_1、女_2
+            民族
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.SysUser.Phone">
+            <summary>
+            手机号码
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.SysUser.CardType">
+            <summary>
+            证件类型
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.SysUser.IdCardNum">
+            <summary>
+            身份证号
             </summary>
         </member>
         <member name="P:Admin.NET.Core.SysUser.Email">
@@ -1403,24 +1423,44 @@
             邮箱
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUser.Phone">
+        <member name="P:Admin.NET.Core.SysUser.Address">
             <summary>
-            手机号码
+            地址
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUser.RealName">
+        <member name="P:Admin.NET.Core.SysUser.CultureLevel">
             <summary>
-            真实姓名
+            文化程度
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUser.IdCard">
+        <member name="P:Admin.NET.Core.SysUser.PoliticalOutlook">
             <summary>
-            身份证号
+            政治面貌
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.SysUser.College">
+            <summary>
+            毕业院校
+            </summary>COLLEGE
+        </member>
+        <member name="P:Admin.NET.Core.SysUser.OfficePhone">
+            <summary>
+            办公电话
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUser.Signature">
+        <member name="P:Admin.NET.Core.SysUser.EmergencyContact">
             <summary>
-            个性签名
+            紧急联系人
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.SysUser.EmergencyPhone">
+            <summary>
+            紧急联系人电话
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.SysUser.EmergencyAddress">
+            <summary>
+            紧急联系人地址
             </summary>
         </member>
         <member name="P:Admin.NET.Core.SysUser.Introduction">
@@ -1428,9 +1468,24 @@
             个人简介
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUser.UserType">
+        <member name="P:Admin.NET.Core.SysUser.Order">
             <summary>
-            账号类型-超级管理员_1、管理员_2、普通_3
+            排序
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.SysUser.Status">
+            <summary>
+            状态
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.SysUser.Remark">
+            <summary>
+            备注
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.SysUser.AccountType">
+            <summary>
+            账号类型
             </summary>
         </member>
         <member name="P:Admin.NET.Core.SysUser.OrgId">
@@ -1458,79 +1513,79 @@
             工号
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUser.JobStatus">
+        <member name="P:Admin.NET.Core.SysUser.PosLevel">
             <summary>
-            岗位状态
+            职级
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUser.Order">
+        <member name="P:Admin.NET.Core.SysUser.JoinDate">
             <summary>
-            排序
+            入职日期
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUser.Status">
+        <member name="P:Admin.NET.Core.SysUser.LastLoginIp">
             <summary>
-            状态
+            最新登录Ip
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUser.Remark">
+        <member name="P:Admin.NET.Core.SysUser.LastLoginAddress">
             <summary>
-            备注
+            最新登录地点
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.SysUserExtOrgPos">
+        <member name="P:Admin.NET.Core.SysUser.LastLoginTime">
             <summary>
-            系统用户附属机构职位表
+            最新登录时间
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUserExtOrgPos.UserId">
+        <member name="P:Admin.NET.Core.SysUser.LastLoginDevice">
             <summary>
-            用户Id
+            最新登录设备
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUserExtOrgPos.SysUser">
+        <member name="T:Admin.NET.Core.SysUserExtOrg">
             <summary>
-            用户
+            系统用户扩展机构表
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUserExtOrgPos.OrgId">
+        <member name="P:Admin.NET.Core.SysUserExtOrg.UserId">
+            <summary>
+            用户Id
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.SysUserExtOrg.OrgId">
             <summary>
             机构Id
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUserExtOrgPos.SysOrg">
+        <member name="P:Admin.NET.Core.SysUserExtOrg.SysOrg">
             <summary>
             机构
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUserExtOrgPos.PosId">
+        <member name="P:Admin.NET.Core.SysUserExtOrg.PosId">
             <summary>
             职位Id
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUserExtOrgPos.SysPos">
+        <member name="P:Admin.NET.Core.SysUserExtOrg.SysPos">
             <summary>
             职位
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.SysUserOrg">
-            <summary>
-            系统用户机构表
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.SysUserOrg.UserId">
+        <member name="P:Admin.NET.Core.SysUserExtOrg.JobNum">
             <summary>
-            用户Id
+            工号
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUserOrg.OrgId">
+        <member name="P:Admin.NET.Core.SysUserExtOrg.PosLevel">
             <summary>
-            机构Id
+            职级
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.SysUserOrg.SysOrg">
+        <member name="P:Admin.NET.Core.SysUserExtOrg.JoinDate">
             <summary>
-            机构
+            入职日期
             </summary>
         </member>
         <member name="T:Admin.NET.Core.SysUserRole">
@@ -1688,7 +1743,7 @@
             关联系统用户Id
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.WeChatUser.SysPos">
+        <member name="P:Admin.NET.Core.WeChatUser.SysUser">
             <summary>
             关联系统用户
             </summary>
@@ -1768,6 +1823,31 @@
             过期时间
             </summary>
         </member>
+        <member name="T:Admin.NET.Core.AccountTypeEnum">
+            <summary>
+            账号类型枚举
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.AccountTypeEnum.None">
+            <summary>
+            游客
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.AccountTypeEnum.User">
+            <summary>
+            普通账号
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.AccountTypeEnum.Admin">
+            <summary>
+            管理员
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.AccountTypeEnum.SuperAdmin">
+            <summary>
+            超级管理员
+            </summary>
+        </member>
         <member name="T:Admin.NET.Core.CacheTypeEnum">
             <summary>
             缓存类型枚举
@@ -1788,12 +1868,22 @@
             证件类型枚举
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.CardTypeEnum.IDCard">
+        <member name="F:Admin.NET.Core.CardTypeEnum.IdCard">
             <summary>
             身份证
             </summary>
         </member>
-        <member name="F:Admin.NET.Core.CardTypeEnum.GATCard">
+        <member name="F:Admin.NET.Core.CardTypeEnum.PassportCard">
+            <summary>
+            护照
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.CardTypeEnum.BirthCard">
+            <summary>
+            出生证
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.CardTypeEnum.GatCard">
             <summary>
             港澳台通行证
             </summary>
@@ -1803,6 +1893,51 @@
             外国人居留证
             </summary>
         </member>
+        <member name="T:Admin.NET.Core.CultureLevelEnum">
+            <summary>
+            文化程度枚举
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.CultureLevelEnum.Level1">
+            <summary>
+            小学
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.CultureLevelEnum.Level2">
+            <summary>
+            初中
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.CultureLevelEnum.Level3">
+            <summary>
+            高中
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.CultureLevelEnum.Level4">
+            <summary>
+            中专
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.CultureLevelEnum.Level5">
+            <summary>
+            大专
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.CultureLevelEnum.Level6">
+            <summary>
+            本科
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.CultureLevelEnum.Level7">
+            <summary>
+            硕士研究生
+            </summary>
+        </member>
+        <member name="F:Admin.NET.Core.CultureLevelEnum.Level8">
+            <summary>
+            博士研究生
+            </summary>
+        </member>
         <member name="T:Admin.NET.Core.DataOpTypeEnum">
             <summary>
             数据操作类型枚举
@@ -2583,31 +2718,6 @@
             停用
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.UserTypeEnum">
-            <summary>
-            账号类型枚举
-            </summary>
-        </member>
-        <member name="F:Admin.NET.Core.UserTypeEnum.Admin">
-            <summary>
-            管理员
-            </summary>
-        </member>
-        <member name="F:Admin.NET.Core.UserTypeEnum.User">
-            <summary>
-            普通账号
-            </summary>
-        </member>
-        <member name="F:Admin.NET.Core.UserTypeEnum.None">
-            <summary>
-            游客
-            </summary>
-        </member>
-        <member name="F:Admin.NET.Core.UserTypeEnum.SuperAdmin">
-            <summary>
-            超级管理员
-            </summary>
-        </member>
         <member name="T:Admin.NET.Core.WeChatReturnCodeEnum">
             <summary>
             微信开发返回码
@@ -3494,17 +3604,6 @@
             </summary>
             <returns></returns>
         </member>
-        <member name="T:Admin.NET.Core.SysEmpExtOrgPosSeedData">
-            <summary>
-            系统用户附属机构职位表种子数据
-            </summary>
-        </member>
-        <member name="M:Admin.NET.Core.SysEmpExtOrgPosSeedData.HasData">
-            <summary>
-            种子数据
-            </summary>
-            <returns></returns>
-        </member>
         <member name="T:Admin.NET.Core.SysMenuSeedData">
             <summary>
             系统菜单表种子数据
@@ -3571,12 +3670,12 @@
             </summary>
             <returns></returns>
         </member>
-        <member name="T:Admin.NET.Core.SysUserOrgSeedData">
+        <member name="T:Admin.NET.Core.SysUserExtOrgSeedData">
             <summary>
-            系统用户机构表种子数据
+            系统用户扩展机构表种子数据
             </summary>
         </member>
-        <member name="M:Admin.NET.Core.SysUserOrgSeedData.HasData">
+        <member name="M:Admin.NET.Core.SysUserExtOrgSeedData.HasData">
             <summary>
             种子数据
             </summary>
@@ -3609,9 +3708,9 @@
             用户登录参数
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.LoginInput.UserName">
+        <member name="P:Admin.NET.Core.Service.LoginInput.Account">
             <summary>
-            用户名
+            账号
             </summary>
             <example>admin</example>
         </member>
@@ -3636,17 +3735,7 @@
             用户登录结果
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.LoginOutput.UserId">
-            <summary>
-            用户Id
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.LoginOutput.RoleInfo">
-            <summary>
-            角色
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.LoginOutput.Token">
+        <member name="P:Admin.NET.Core.Service.LoginOutput.AccessToken">
             <summary>
             令牌Token
             </summary>
@@ -3656,73 +3745,51 @@
             刷新Token
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.Service.LoginUserInfoOutput">
+        <member name="T:Admin.NET.Core.Service.LoginUserOutput">
             <summary>
             用户登录信息
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.LoginUserInfoOutput.UserId">
+        <member name="P:Admin.NET.Core.Service.LoginUserOutput.UserId">
             <summary>
             用户Id
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.LoginUserInfoOutput.Username">
+        <member name="P:Admin.NET.Core.Service.LoginUserOutput.Account">
             <summary>
             账号名称
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.LoginUserInfoOutput.RealName">
+        <member name="P:Admin.NET.Core.Service.LoginUserOutput.RealName">
             <summary>
             真实姓名
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.LoginUserInfoOutput.Avatar">
+        <member name="P:Admin.NET.Core.Service.LoginUserOutput.Avatar">
             <summary>
             头像
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.LoginUserInfoOutput.Desc">
+        <member name="P:Admin.NET.Core.Service.LoginUserOutput.Introduction">
             <summary>
             个人简介
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.LoginUserInfoOutput.OrgId">
+        <member name="P:Admin.NET.Core.Service.LoginUserOutput.OrgId">
             <summary>
             机构Id
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.LoginUserInfoOutput.OrgName">
+        <member name="P:Admin.NET.Core.Service.LoginUserOutput.OrgName">
             <summary>
             机构名称
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.LoginUserInfoOutput.OrgLevel">
-            <summary>
-            机构级别
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.LoginUserInfoOutput.Roles">
-            <summary>
-            角色集合
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.LoginUserInfoOutput.Buttons">
+        <member name="P:Admin.NET.Core.Service.LoginUserOutput.Buttons">
             <summary>
             按钮权限集合
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.LoginRole.RoleName">
-            <summary>
-            角色名称
-            </summary>
-            <example>admin</example>
-        </member>
-        <member name="P:Admin.NET.Core.Service.LoginRole.Value">
-            <summary>
-            角色编码
-            </summary>
-            <example>123456</example>
-        </member>
         <member name="T:Admin.NET.Core.Service.SysAuthService">
             <summary>
             系统登录授权服务
@@ -5639,13 +5706,6 @@
             系统机构服务
             </summary>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysOrgService.GetUserOrgList(System.Int64)">
-            <summary>
-            获取用户拥有机构信息列表
-            </summary>
-            <param name="userId">用户id</param>
-            <returns></returns>
-        </member>
         <member name="M:Admin.NET.Core.Service.SysOrgService.GetOrgList(Admin.NET.Core.Service.OrgInput)">
             <summary>
             获取机构列表
@@ -6241,34 +6301,29 @@
             </summary>
             <returns></returns>
         </member>
-        <member name="P:Admin.NET.Core.Service.UserExtOrgPosOutput.OrgId">
+        <member name="P:Admin.NET.Core.Service.UserExtOrgInput.OrgId">
             <summary>
             机构Id
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.UserExtOrgPosOutput.OrgCode">
+        <member name="P:Admin.NET.Core.Service.UserExtOrgInput.PosId">
             <summary>
-            机构编码
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.UserExtOrgPosOutput.OrgName">
-            <summary>
-            机构名称
+            职位Id
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.UserExtOrgPosOutput.PosId">
+        <member name="P:Admin.NET.Core.Service.UserExtOrgInput.JobNum">
             <summary>
-            职位Id
+            工号
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.UserExtOrgPosOutput.PosCode">
+        <member name="P:Admin.NET.Core.Service.UserExtOrgInput.PosLevel">
             <summary>
-            职位编码
+            职级
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.UserExtOrgPosOutput.PosName">
+        <member name="P:Admin.NET.Core.Service.UserExtOrgInput.JoinDate">
             <summary>
-            职位名称
+            入职日期
             </summary>
         </member>
         <member name="P:Admin.NET.Core.Service.UserInput.Status">
@@ -6276,11 +6331,16 @@
             状态
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.PageUserInput.UserName">
+        <member name="P:Admin.NET.Core.Service.PageUserInput.Account">
             <summary>
             账号
             </summary>
         </member>
+        <member name="P:Admin.NET.Core.Service.PageUserInput.RealName">
+            <summary>
+            姓名
+            </summary>
+        </member>
         <member name="P:Admin.NET.Core.Service.PageUserInput.Phone">
             <summary>
             手机号
@@ -6288,12 +6348,12 @@
         </member>
         <member name="P:Admin.NET.Core.Service.PageUserInput.OrgId">
             <summary>
-            机构Id
+            查询时所选机构Id
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.AddUserInput.UserName">
+        <member name="P:Admin.NET.Core.Service.AddUserInput.Account">
             <summary>
-            账号名称
+            账号
             </summary>
         </member>
         <member name="P:Admin.NET.Core.Service.AddUserInput.RealName">
@@ -6303,12 +6363,17 @@
         </member>
         <member name="P:Admin.NET.Core.Service.AddUserInput.Password">
             <summary>
-            账号密码
+            账号
             </summary>
         </member>
         <member name="P:Admin.NET.Core.Service.AddUserInput.RoleIdList">
             <summary>
-            角色Id集合
+            角色集合
+            </summary>
+        </member>
+        <member name="P:Admin.NET.Core.Service.AddUserInput.ExtOrgIdList">
+            <summary>
+            扩展机构集合
             </summary>
         </member>
         <member name="P:Admin.NET.Core.Service.DeleteUserInput.OrgId">
@@ -6326,29 +6391,14 @@
             新密码
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.Service.UserOrgInput">
-            <summary>
-            授权用户机构
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.UserOrgInput.OrgId">
-            <summary>
-            机构Id
-            </summary>
-        </member>
-        <member name="P:Admin.NET.Core.Service.UserOrgInput.OrgIdList">
-            <summary>
-            机构Id集合
-            </summary>
-        </member>
         <member name="T:Admin.NET.Core.Service.UserRoleInput">
             <summary>
             授权用户角色
             </summary>
         </member>
-        <member name="P:Admin.NET.Core.Service.UserRoleInput.OrgId">
+        <member name="P:Admin.NET.Core.Service.UserRoleInput.UserId">
             <summary>
-            机构Id
+            用户Id
             </summary>
         </member>
         <member name="P:Admin.NET.Core.Service.UserRoleInput.RoleIdList">
@@ -6356,84 +6406,52 @@
             角色Id集合
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.Service.SysUserExtOrgPosService">
+        <member name="T:Admin.NET.Core.Service.SysUserExtOrgService">
             <summary>
-            系统用户附属机构职位服务
+            系统用户扩展机构服务
             </summary>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysUserExtOrgPosService.AddOrUpdate(System.Int64,System.Collections.Generic.List{Admin.NET.Core.Service.UserExtOrgPosOutput})">
+        <member name="M:Admin.NET.Core.Service.SysUserExtOrgService.GetUserExtOrgList(System.Int64)">
             <summary>
-            保存或编辑附属机构信息
+            获取用户扩展机构集合
             </summary>
             <param name="userId"></param>
-            <param name="extIdList"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysUserExtOrgPosService.GetEmpExtOrgPosList(System.Int64)">
-            <summary>
-            根据用户Id获取附属机构和职位信息
-            </summary>
-            <param name="userId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysUserExtOrgPosService.HasExtOrgEmp(System.Int64)">
-            <summary>
-            根据附属机构Id判断是否有用户
-            </summary>
-            <param name="orgId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysUserExtOrgPosService.HasExtPosEmp(System.Int64)">
-            <summary>
-            根据附属职位Id判断是否有用户
-            </summary>
-            <param name="posId"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysUserExtOrgPosService.DeleteEmpExtByUserId(System.Int64)">
+        <member name="M:Admin.NET.Core.Service.SysUserExtOrgService.UpdateUserExtOrg(System.Int64,System.Collections.Generic.List{Admin.NET.Core.SysUserExtOrg})">
             <summary>
-            根据用户Id删除用户附属
+            更新用户扩展机构
             </summary>
             <param name="userId"></param>
+            <param name="extOrgList"></param>
             <returns></returns>
         </member>
-        <member name="T:Admin.NET.Core.Service.SysUserOrgService">
+        <member name="M:Admin.NET.Core.Service.SysUserExtOrgService.DeleteUserExtOrgByOrgIdList(System.Collections.Generic.List{System.Int64})">
             <summary>
-            系统用户机构服务
+            根据机构Id集合删除扩展机构
             </summary>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysUserOrgService.GrantUserOrg(Admin.NET.Core.Service.UserOrgInput)">
-            <summary>
-            授权用户所属机构
-            </summary>
-            <param name="input"></param>
+            <param name="orgIdList"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysUserOrgService.GetUserOrgIdList(System.Int64)">
+        <member name="M:Admin.NET.Core.Service.SysUserExtOrgService.DeleteUserExtOrgByUserId(System.Int64)">
             <summary>
-            根据用户Id获取机构Id集合
+            根据用户Id删除扩展机构
             </summary>
             <param name="userId"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysUserOrgService.DeleteUserOrgByOrgIdList(System.Collections.Generic.List{System.Int64})">
+        <member name="M:Admin.NET.Core.Service.SysUserExtOrgService.HasUserOrg(System.Int64)">
             <summary>
-            根据机构Id集合删除用户机构
+            根据机构Id判断是否有用户
             </summary>
-            <param name="orgIdList"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysUserOrgService.DeleteUserOrgByUserId(System.Int64)">
-            <summary>
-            根据用户Id删除用户机构
-            </summary>
-            <param name="userId"></param>
+            <param name="orgId"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysUserOrgService.AddUserOrg(Admin.NET.Core.SysUserOrg)">
+        <member name="M:Admin.NET.Core.Service.SysUserExtOrgService.HasUserPos(System.Int64)">
             <summary>
-            增加用户机构
+            根据职位Id判断是否有用户
             </summary>
+            <param name="posId"></param>
             <returns></returns>
         </member>
         <member name="T:Admin.NET.Core.Service.SysUserRoleService">
@@ -6495,9 +6513,9 @@
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysUserService.UpdateUserRole(Admin.NET.Core.Service.AddUserInput)">
+        <member name="M:Admin.NET.Core.Service.SysUserService.UpdateRoleAndExtOrg(Admin.NET.Core.Service.AddUserInput)">
             <summary>
-            更新用户角色
+            更新角色和扩展机构
             </summary>
             <param name="input"></param>
             <returns></returns>
@@ -6536,13 +6554,6 @@
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysUserService.GrantUserOrg(Admin.NET.Core.Service.UserOrgInput)">
-            <summary>
-            授权用户机构
-            </summary>
-            <param name="input"></param>
-            <returns></returns>
-        </member>
         <member name="M:Admin.NET.Core.Service.SysUserService.ChangeUserPwd(Admin.NET.Core.Service.ChangePwdInput)">
             <summary>
             修改用户密码
@@ -6557,32 +6568,18 @@
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysUserService.GetUserOwnRole(Admin.NET.Core.Service.UserInput)">
+        <member name="M:Admin.NET.Core.Service.SysUserService.GetUserOwnRole(System.Int64)">
             <summary>
             获取用户拥有角色
             </summary>
-            <param name="input"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysUserService.GetUserOwnOrg(Admin.NET.Core.Service.UserInput)">
-            <summary>
-            获取用户拥有机构
-            </summary>
-            <param name="input"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysUserService.GetUserOrgIdList">
-            <summary>
-            获取当前用户机构列表权限
-            </summary>
+            <param name="userId"></param>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysUserService.CheckDataScope(System.Int64)">
+        <member name="M:Admin.NET.Core.Service.SysUserService.GetUserOrgList(System.Int64)">
             <summary>
-            检查用户数据范围
-            当有多个机构时,在登录时选择一个组织,所以组织Id/OrgId从前端传过来
+            获取用户扩展机构
             </summary>
-            <param name="orgId"></param>
+            <param name="userId"></param>
             <returns></returns>
         </member>
         <member name="P:Admin.NET.Core.Service.GenAuthUrlInput.RedirectUrl">
@@ -6782,7 +6779,7 @@
         </member>
         <member name="T:Admin.NET.Core.UserManager">
             <summary>
-            用户管理
+            当前登录用户
             </summary>
         </member>
         <member name="M:Admin.NET.Core.UserManager.CheckUserAsync(System.Int64)">

+ 8 - 13
Admin.NET/Admin.NET.Core/Const/ClaimConst.cs

@@ -13,7 +13,7 @@ public class ClaimConst
     /// <summary>
     /// 账号
     /// </summary>
-    public const string UserName = "UserName";
+    public const string Account = "Account";
 
     /// <summary>
     /// 真实姓名
@@ -21,9 +21,14 @@ public class ClaimConst
     public const string RealName = "RealName";
 
     /// <summary>
-    /// 是否超级管理
+    /// 昵称
     /// </summary>
-    public const string SuperAdmin = "SuperAdmin";
+    public const string NickName = "NickName";
+
+    /// <summary>
+    /// 账号类型
+    /// </summary>
+    public const string AccountType = "AccountType";
 
     /// <summary>
     /// 租户Id
@@ -40,21 +45,11 @@ public class ClaimConst
     /// </summary>
     public const string OrgName = "OrgName";
 
-    /// <summary>
-    /// 组织机构级别
-    /// </summary>
-    public const string OrgLevel = "OrgLevel";
-
     /// <summary>
     /// 微信OpenId
     /// </summary>
     public const string OpenId = "OpenId";
 
-    /// <summary>
-    /// 昵称
-    /// </summary>
-    public const string NickName = "NickName";
-
     /// <summary>
     /// 运行模式(账号和三方授权)
     /// </summary>

+ 0 - 7
Admin.NET/Admin.NET.Core/Entity/SysOrg.cs

@@ -45,13 +45,6 @@ public class SysOrg : EntityTenant
     [SugarColumn(ColumnDescription = "状态")]
     public StatusEnum Status { get; set; } = StatusEnum.Enable;
 
-    /// <summary>
-    /// 级别 例如:省、市、县、区
-    /// </summary>
-    [SugarColumn(ColumnDescription = "级别", Length = 16)]
-    [MaxLength(16)]
-    public string Level { get; set; }
-
     /// <summary>
     /// 机构子项
     /// </summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysRoleMenu.cs

@@ -22,5 +22,6 @@ public class SysRoleMenu : EntityBaseId
     /// 菜单
     /// </summary>
     [SugarColumn(IsIgnore = true)]
+    [Navigate(NavigateType.OneToOne, nameof(MenuId))]
     public SysMenu SysMenu { get; set; }
 }

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysRoleOrg.cs

@@ -22,5 +22,6 @@ public class SysRoleOrg : EntityBaseId
     /// 机构
     /// </summary>
     [SugarColumn(IsIgnore = true)]
+    [Navigate(NavigateType.OneToOne, nameof(OrgId))]
     public SysOrg SysOrg { get; set; }
 }

+ 136 - 35
Admin.NET/Admin.NET.Core/Entity/SysUser.cs

@@ -9,19 +9,26 @@ public class SysUser : EntityTenant
     /// <summary>
     /// 账号
     /// </summary>
-    [SugarColumn(ColumnDescription = "账号名称", Length = 32)]
+    [SugarColumn(ColumnDescription = "账号", Length = 32)]
     [Required, MaxLength(32)]
-    public virtual string UserName { get; set; }
+    public virtual string Account { get; set; }
 
     /// <summary>
-    /// 账号密码(MD5加密)
+    /// 密码(MD5加密)
     /// </summary>
-    [SugarColumn(ColumnDescription = "账号密码", Length = 64)]
+    [SugarColumn(ColumnDescription = "密码", Length = 64)]
     [Required, MaxLength(64)]
     [System.Text.Json.Serialization.JsonIgnore]
     [JsonIgnore]
     public virtual string Password { get; set; }
 
+    /// <summary>
+    /// 真实姓名
+    /// </summary>
+    [SugarColumn(ColumnDescription = "真实姓名", Length = 32)]
+    [MaxLength(32)]
+    public virtual string RealName { get; set; }
+
     /// <summary>
     /// 昵称
     /// </summary>
@@ -36,6 +43,18 @@ public class SysUser : EntityTenant
     [MaxLength(256)]
     public string Avatar { get; set; }
 
+    /// <summary>
+    /// 性别-男_1、女_2
+    /// </summary>
+    [SugarColumn(ColumnDescription = "性别")]
+    public GenderEnum Sex { get; set; } = GenderEnum.Male;
+
+    /// <summary>
+    /// 年龄
+    /// </summary>
+    [SugarColumn(ColumnDescription = "年龄")]
+    public int Age { get; set; }
+
     /// <summary>
     /// 出生日期
     /// </summary>
@@ -43,10 +62,31 @@ public class SysUser : EntityTenant
     public DateTime? Birthday { get; set; }
 
     /// <summary>
-    /// 性别-男_1、女_2
+    /// 民族
     /// </summary>
-    [SugarColumn(ColumnDescription = "性别")]
-    public GenderEnum Sex { get; set; } = GenderEnum.Male;
+    [SugarColumn(ColumnDescription = "民族", Length = 32)]
+    [MaxLength(32)]
+    public string Nation { get; set; }
+
+    /// <summary>
+    /// 手机号码
+    /// </summary>
+    [SugarColumn(ColumnDescription = "手机号码", Length = 16)]
+    [MaxLength(16)]
+    public virtual string Phone { get; set; }
+
+    /// <summary>
+    /// 证件类型
+    /// </summary>
+    [SugarColumn(ColumnDescription = "证件类型")]
+    public virtual CardTypeEnum CardType { get; set; }
+
+    /// <summary>
+    /// 身份证号
+    /// </summary>
+    [SugarColumn(ColumnDescription = "身份证号", Length = 32)]
+    [MaxLength(32)]
+    public virtual string IdCardNum { get; set; }
 
     /// <summary>
     /// 邮箱
@@ -56,32 +96,59 @@ public class SysUser : EntityTenant
     public string Email { get; set; }
 
     /// <summary>
-    /// 手机号码
+    /// 地址
     /// </summary>
-    [SugarColumn(ColumnDescription = "手机号码", Length = 16)]
+    [SugarColumn(ColumnDescription = "地址", Length = 256)]
+    [MaxLength(256)]
+    public string Address { get; set; }
+
+    /// <summary>
+    /// 文化程度
+    /// </summary>
+    [SugarColumn(ColumnDescription = "文化程度")]
+    public CultureLevelEnum CultureLevel { get; set; }
+
+    /// <summary>
+    /// 政治面貌
+    /// </summary>
+    [SugarColumn(ColumnDescription = "政治面貌", Length = 16)]
     [MaxLength(16)]
-    public virtual string Phone { get; set; }
+    public string PoliticalOutlook { get; set; }
 
     /// <summary>
-    /// 真实姓名
+    /// 毕业院校
+    /// </summary>COLLEGE
+    [SugarColumn(ColumnDescription = "毕业院校", Length = 128)]
+    [MaxLength(128)]
+    public string College { get; set; }
+
+    /// <summary>
+    /// 办公电话
     /// </summary>
-    [SugarColumn(ColumnDescription = "真实姓名", Length = 32)]
-    [MaxLength(32)]
-    public virtual string RealName { get; set; }
+    [SugarColumn(ColumnDescription = "办公电话", Length = 16)]
+    [MaxLength(16)]
+    public string OfficePhone { get; set; }
 
     /// <summary>
-    /// 身份证号
+    /// 紧急联系人
     /// </summary>
-    [SugarColumn(ColumnDescription = "身份证号", Length = 32)]
+    [SugarColumn(ColumnDescription = "紧急联系人", Length = 32)]
     [MaxLength(32)]
-    public virtual string IdCard { get; set; }
+    public string EmergencyContact { get; set; }
 
     /// <summary>
-    /// 个性签名
+    /// 紧急联系人电话
     /// </summary>
-    [SugarColumn(ColumnDescription = "个性签名", Length = 64)]
-    [MaxLength(64)]
-    public string Signature { get; set; }
+    [SugarColumn(ColumnDescription = "紧急联系人电话", Length = 16)]
+    [MaxLength(16)]
+    public string EmergencyPhone { get; set; }
+
+    /// <summary>
+    /// 紧急联系人地址
+    /// </summary>
+    [SugarColumn(ColumnDescription = "紧急联系人地址", Length = 256)]
+    [MaxLength(256)]
+    public string EmergencyAddress { get; set; }
 
     /// <summary>
     /// 个人简介
@@ -91,10 +158,29 @@ public class SysUser : EntityTenant
     public string Introduction { get; set; }
 
     /// <summary>
-    /// 账号类型-超级管理员_1、管理员_2、普通_3
+    /// 排序
+    /// </summary>
+    [SugarColumn(ColumnDescription = "排序")]
+    public int Order { get; set; } = 100;
+
+    /// <summary>
+    /// 状态
+    /// </summary>
+    [SugarColumn(ColumnDescription = "状态")]
+    public StatusEnum Status { get; set; } = StatusEnum.Enable;
+
+    /// <summary>
+    /// 备注
+    /// </summary>
+    [SugarColumn(ColumnDescription = "备注", Length = 128)]
+    [MaxLength(128)]
+    public string Remark { get; set; }
+
+    /// <summary>
+    /// 账号类型
     /// </summary>
     [SugarColumn(ColumnDescription = "账号类型")]
-    public UserTypeEnum UserType { get; set; } = UserTypeEnum.None;
+    public AccountTypeEnum AccountType { get; set; } = AccountTypeEnum.None;
 
     /// <summary>
     /// 机构Id
@@ -130,27 +216,42 @@ public class SysUser : EntityTenant
     public string JobNum { get; set; }
 
     /// <summary>
-    /// 岗位状态
+    /// 职级
     /// </summary>
-    [SugarColumn(ColumnDescription = "岗位状态")]
-    public JobStatusEnum JobStatus { get; set; } = JobStatusEnum.On;
+    [SugarColumn(ColumnDescription = "职级", Length = 32)]
+    [MaxLength(32)]
+    public string PosLevel { get; set; }
 
     /// <summary>
-    /// 排序
+    /// 入职日期
     /// </summary>
-    [SugarColumn(ColumnDescription = "排序")]
-    public int Order { get; set; } = 100;
+    [SugarColumn(ColumnDescription = "入职日期")]
+    public DateTime? JoinDate { get; set; }
 
     /// <summary>
-    /// 状态
+    /// 最新登录Ip
     /// </summary>
-    [SugarColumn(ColumnDescription = "状态")]
-    public StatusEnum Status { get; set; } = StatusEnum.Enable;
+    [SugarColumn(ColumnDescription = "最新登录Ip", Length = 16)]
+    [MaxLength(16)]
+    public string LastLoginIp { get; set; }
 
     /// <summary>
-    /// 备注
+    /// 最新登录地点
     /// </summary>
-    [SugarColumn(ColumnDescription = "备注", Length = 128)]
+    [SugarColumn(ColumnDescription = "最新登录地点", Length = 128)]
     [MaxLength(128)]
-    public string Remark { get; set; }
+    public string LastLoginAddress { get; set; }
+
+    /// <summary>
+    /// 最新登录时间
+    /// </summary>
+    [SugarColumn(ColumnDescription = "最新登录时间")]
+    public DateTime? LastLoginTime { get; set; }
+
+    /// <summary>
+    /// 最新登录设备
+    /// </summary>
+    [SugarColumn(ColumnDescription = "最新登录设备", Length = 128)]
+    [MaxLength(128)]
+    public string LastLoginDevice { get; set; }
 }

+ 25 - 9
Admin.NET/Admin.NET.Core/Entity/SysUserExtOrgPos.cs → Admin.NET/Admin.NET.Core/Entity/SysUserExtOrg.cs

@@ -1,10 +1,10 @@
 namespace Admin.NET.Core;
 
 /// <summary>
-/// 系统用户附属机构职位表
+/// 系统用户扩展机构表
 /// </summary>
-[SugarTable("sys_user_ext_org_pos", "系统用户附属机构职位表")]
-public class SysUserExtOrgPos : EntityBaseId
+[SugarTable("sys_user_org", "系统用户扩展机构表")]
+public class SysUserExtOrg : EntityBaseId
 {
     /// <summary>
     /// 用户Id
@@ -12,12 +12,6 @@ public class SysUserExtOrgPos : EntityBaseId
     [SugarColumn(ColumnDescription = "用户Id")]
     public long UserId { get; set; }
 
-    /// <summary>
-    /// 用户
-    /// </summary>
-    [SugarColumn(IsIgnore = true)]
-    public SysUser SysUser { get; set; }
-
     /// <summary>
     /// 机构Id
     /// </summary>
@@ -28,6 +22,7 @@ public class SysUserExtOrgPos : EntityBaseId
     /// 机构
     /// </summary>
     [SugarColumn(IsIgnore = true)]
+    [Navigate(NavigateType.OneToOne, nameof(OrgId))]
     public SysOrg SysOrg { get; set; }
 
     /// <summary>
@@ -40,5 +35,26 @@ public class SysUserExtOrgPos : EntityBaseId
     /// 职位
     /// </summary>
     [SugarColumn(IsIgnore = true)]
+    [Navigate(NavigateType.OneToOne, nameof(PosId))]
     public SysPos SysPos { get; set; }
+
+    /// <summary>
+    /// 工号
+    /// </summary>
+    [SugarColumn(ColumnDescription = "工号", Length = 32)]
+    [MaxLength(32)]
+    public string JobNum { get; set; }
+
+    /// <summary>
+    /// 职级
+    /// </summary>
+    [SugarColumn(ColumnDescription = "职级", Length = 32)]
+    [MaxLength(32)]
+    public string PosLevel { get; set; }
+
+    /// <summary>
+    /// 入职日期
+    /// </summary>
+    [SugarColumn(ColumnDescription = "入职日期")]
+    public DateTime? JoinDate { get; set; }
 }

+ 0 - 26
Admin.NET/Admin.NET.Core/Entity/SysUserOrg.cs

@@ -1,26 +0,0 @@
-namespace Admin.NET.Core;
-
-/// <summary>
-/// 系统用户机构表
-/// </summary>
-[SugarTable("sys_user_org", "系统用户机构表")]
-public class SysUserOrg : EntityBaseId
-{
-    /// <summary>
-    /// 用户Id
-    /// </summary>
-    [SugarColumn(ColumnDescription = "用户Id")]
-    public long UserId { get; set; }
-
-    /// <summary>
-    /// 机构Id
-    /// </summary>
-    [SugarColumn(ColumnDescription = "机构Id")]
-    public long OrgId { get; set; }
-
-    /// <summary>
-    /// 机构
-    /// </summary>
-    [SugarColumn(IsIgnore = true)]
-    public SysOrg SysOrg { get; set; }
-}

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysUserRole.cs

@@ -22,5 +22,6 @@ public class SysUserRole : EntityBaseId
     /// 角色
     /// </summary>
     [SugarColumn(IsIgnore = true)]
+    [Navigate(NavigateType.OneToOne, nameof(RoleId))]
     public SysRole SysRole { get; set; }
 }

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/WeChatPay.cs

@@ -130,6 +130,7 @@ public class WeChatPay : EntityBase
     /// 关联微信用户
     /// </summary>
     [SugarColumn(IsIgnore = true)]
+    [Navigate(NavigateType.OneToOne, nameof(OpenId))]
     public WeChatUser WeChatUser { get; set; }
 
     /// <summary>

+ 2 - 1
Admin.NET/Admin.NET.Core/Entity/WeChatUser.cs

@@ -16,7 +16,8 @@ public class WeChatUser : EntityBase
     /// 关联系统用户
     /// </summary>
     [SugarColumn(IsIgnore = true)]
-    public SysPos SysPos { get; set; }
+    [Navigate(NavigateType.OneToOne, nameof(UserId))]
+    public SysUser SysUser { get; set; }
 
     /// <summary>
     /// 第三方登录类型

+ 9 - 9
Admin.NET/Admin.NET.Core/Enum/UserTypeEnum.cs → Admin.NET/Admin.NET.Core/Enum/AccountTypeEnum.cs

@@ -3,29 +3,29 @@ namespace Admin.NET.Core;
 /// <summary>
 /// 账号类型枚举
 /// </summary>
-public enum UserTypeEnum
+public enum AccountTypeEnum
 {
     /// <summary>
-    /// 管理员
+    /// 游客
     /// </summary>
-    [Description("管理员")]
-    Admin = 1,
+    [Description("游客")]
+    None = 0,
 
     /// <summary>
     /// 普通账号
     /// </summary>
     [Description("普通账号")]
-    User = 2,
+    User = 1,
 
     /// <summary>
-    /// 游客
+    /// 管理员
     /// </summary>
-    [Description("游客")]
-    None = 3,
+    [Description("管理员")]
+    Admin = 2,
 
     /// <summary>
     /// 超级管理员
     /// </summary>
     [Description("超级管理员")]
-    SuperAdmin = 999,
+    SuperAdmin = 99999,
 }

+ 15 - 3
Admin.NET/Admin.NET.Core/Enum/CardTypeEnum.cs

@@ -9,17 +9,29 @@ public enum CardTypeEnum
     /// 身份证
     /// </summary>
     [Description("身份证")]
-    IDCard = 0,
+    IdCard = 0,
+
+    /// <summary>
+    /// 护照
+    /// </summary>
+    [Description("护照")]
+    PassportCard = 1,
+
+    /// <summary>
+    /// 出生证
+    /// </summary>
+    [Description("出生证")]
+    BirthCard = 2,
 
     /// <summary>
     /// 港澳台通行证
     /// </summary>
     [Description("港澳台通行证")]
-    GATCard = 1,
+    GatCard = 3,
 
     /// <summary>
     /// 外国人居留证
     /// </summary>
     [Description("外国人居留证")]
-    ForeignCard = 2
+    ForeignCard = 4
 }

+ 55 - 0
Admin.NET/Admin.NET.Core/Enum/CultureLevelEnum.cs

@@ -0,0 +1,55 @@
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 文化程度枚举
+/// </summary>
+public enum CultureLevelEnum
+{
+    /// <summary>
+    /// 小学
+    /// </summary>
+    [Description("小学")]
+    Level1 = 0,
+
+    /// <summary>
+    /// 初中
+    /// </summary>
+    [Description("初中")]
+    Level2 = 1,
+
+    /// <summary>
+    /// 高中
+    /// </summary>
+    [Description("高中")]
+    Level3 = 2,
+
+    /// <summary>
+    /// 中专
+    /// </summary>
+    [Description("中专")]
+    Level4 = 3,
+
+    /// <summary>
+    /// 大专
+    /// </summary>
+    [Description("大专")]
+    Level5 = 4,
+
+    /// <summary>
+    /// 本科
+    /// </summary>
+    [Description("本科")]
+    Level6 = 5,
+
+    /// <summary>
+    /// 硕士研究生
+    /// </summary>
+    [Description("硕士研究生")]
+    Level7 = 6,
+
+    /// <summary>
+    /// 博士研究生
+    /// </summary>
+    [Description("博士研究生")]
+    Level8 = 7,
+}

+ 5 - 5
Admin.NET/Admin.NET.Core/Hub/OnlineUserHub.cs

@@ -11,19 +11,19 @@ public class OnlineUserHub : Hub<IOnlineUserHub>
 {
     private readonly SqlSugarRepository<SysOnlineUser> _sysOnlineUerRep;
     private readonly SysCacheService _sysCache;
-    private readonly SysMessageService _sysMessageService;    
+    private readonly SysMessageService _sysMessageService;
     private readonly IHubContext<OnlineUserHub, IOnlineUserHub> _onlineUserHubContext;
 
     private const string GROUP_ONLINE = "GROUP_ONLINE_"; // 租户分组前缀
 
-    public OnlineUserHub(SqlSugarRepository<SysOnlineUser> sysOnlineUerRep, 
+    public OnlineUserHub(SqlSugarRepository<SysOnlineUser> sysOnlineUerRep,
         SysCacheService sysCache,
-        SysMessageService sysMessageService,        
+        SysMessageService sysMessageService,
         IHubContext<OnlineUserHub, IOnlineUserHub> onlineUserHubContext)
     {
         _sysOnlineUerRep = sysOnlineUerRep;
         _sysCache = sysCache;
-        _sysMessageService = sysMessageService;        
+        _sysMessageService = sysMessageService;
         _onlineUserHubContext = onlineUserHubContext;
     }
 
@@ -40,7 +40,7 @@ public class OnlineUserHub : Hub<IOnlineUserHub>
         {
             ConnectionId = Context.ConnectionId,
             UserId = long.Parse(claims.FirstOrDefault(u => u.Type == ClaimConst.UserId)?.Value),
-            UserName = claims.FirstOrDefault(u => u.Type == ClaimConst.UserName)?.Value,
+            UserName = claims.FirstOrDefault(u => u.Type == ClaimConst.Account)?.Value,
             RealName = claims.FirstOrDefault(u => u.Type == ClaimConst.RealName)?.Value,
             Time = DateTime.Now,
             Ip = App.HttpContext.GetRemoteIpAddressToIPv4(),

+ 0 - 20
Admin.NET/Admin.NET.Core/SeedData/SysEmpExtOrgPosSeedData.cs

@@ -1,20 +0,0 @@
-namespace Admin.NET.Core;
-
-/// <summary>
-/// 系统用户附属机构职位表种子数据
-/// </summary>
-public class SysEmpExtOrgPosSeedData : ISqlSugarEntitySeedData<SysUserExtOrgPos>
-{
-    /// <summary>
-    /// 种子数据
-    /// </summary>
-    /// <returns></returns>
-    public IEnumerable<SysUserExtOrgPos> HasData()
-    {
-        return new[]
-        {
-            new SysUserExtOrgPos{ Id=252885263003000, UserId=252885263003721, OrgId=252885263003730, PosId=252885263003720 },
-            new SysUserExtOrgPos{ Id=252885263003001, UserId=252885263003722, OrgId=252885263003740, PosId=252885263003722  }
-        };
-    }
-}

+ 1 - 1
Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs

@@ -120,7 +120,7 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             new SysMenu{ Id=252885263002620, Pid=252885263002600, Title="表单设计", Path="/develop/formDes", Name="sysFormDes", Component="/system/formDes/index", Icon="ele-Edit", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=101 },
             new SysMenu{ Id=252885263002630, Pid=252885263002600, Title="代码生成", Path="/develop/codeGen", Name="sysCodeGen", Component="/system/codeGen/index", Icon="ele-Crop", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=102 },
             new SysMenu{ Id=252885263002640, Pid=252885263002600, Title="库表管理", Path="/develop/database", Name="sysDatabase", Component="/system/database/index",Icon="ele-Coin", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=103 },
- 
+
             new SysMenu{ Id=252885263002700, Pid=0, Title="帮助文档", Path="/doc", Name="doc", Component="Layout", Redirect="/doc/furion", Icon="ele-Notebook", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=500 },
             new SysMenu{ Id=252885263002710, Pid=252885263002700, Title="后台教程", Path="/doc/furion", Name="sysFurion", Component="IFrame", IsIframe=false, IsKeepAlive=false, OutLink="https://furion.baiqian.ltd/", Icon="ele-Promotion", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=100 },
             new SysMenu{ Id=252885263002711, Pid=252885263002700, Title="前端教程", Path="/doc/element", Name="sysElement", Component="IFrame", IsIframe=false, IsKeepAlive=false, OutLink="https://element-plus.gitee.io/zh-CN/", Icon="ele-Position", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Order=101 },

+ 20 - 0
Admin.NET/Admin.NET.Core/SeedData/SysUserExtOrgSeedData.cs

@@ -0,0 +1,20 @@
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 系统用户扩展机构表种子数据
+/// </summary>
+public class SysUserExtOrgSeedData : ISqlSugarEntitySeedData<SysUserExtOrg>
+{
+    /// <summary>
+    /// 种子数据
+    /// </summary>
+    /// <returns></returns>
+    public IEnumerable<SysUserExtOrg> HasData()
+    {
+        return new[]
+        {
+            new SysUserExtOrg{ Id=252885263003000, UserId=252885263003721, OrgId=252885263003730, PosId=252885263003720 },
+            new SysUserExtOrg{ Id=252885263003001, UserId=252885263003722, OrgId=252885263003740, PosId=252885263003722  }
+        };
+    }
+}

+ 0 - 21
Admin.NET/Admin.NET.Core/SeedData/SysUserOrgSeedData.cs

@@ -1,21 +0,0 @@
-namespace Admin.NET.Core;
-
-/// <summary>
-/// 系统用户机构表种子数据
-/// </summary>
-public class SysUserOrgSeedData : ISqlSugarEntitySeedData<SysUserOrg>
-{
-    /// <summary>
-    /// 种子数据
-    /// </summary>
-    /// <returns></returns>
-    public IEnumerable<SysUserOrg> HasData()
-    {
-        return new[]
-        {
-            new SysUserOrg{ Id=252885263003000, UserId=252885263003721, OrgId=252885263003722 },
-            new SysUserOrg{ Id=252885263003001, UserId=252885263003722, OrgId=252885263003724 },
-            new SysUserOrg{ Id=252885263003002, UserId=252885263003723, OrgId=252885263003744 }
-        };
-    }
-}

+ 5 - 5
Admin.NET/Admin.NET.Core/SeedData/SysUserSeedData.cs

@@ -13,12 +13,12 @@ public class SysUserSeedData : ISqlSugarEntitySeedData<SysUser>
     {
         return new[]
         {
-            new SysUser{ Id=252885263000000, UserName="superadmin", Password="e10adc3949ba59abbe56e057f20f883e", NickName="超级管理员", RealName="超级管理员", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Male, UserType=UserTypeEnum.SuperAdmin, Remark="超级管理员", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), TenantId=142307070918780 },
-            new SysUser{ Id=252885263003721, UserName="admin", Password="e10adc3949ba59abbe56e057f20f883e", NickName="管理员", RealName="管理员", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Male, UserType=UserTypeEnum.Admin, Remark="管理员", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=252885263003721, PosId=252885263003720, TenantId=142307070918780 },
-            new SysUser{ Id=252885263003722, UserName="user", Password="e10adc3949ba59abbe56e057f20f883e", NickName="普通用户", RealName="普通用户", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Female, UserType=UserTypeEnum.User, Remark="普通账号", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=252885263003722, PosId=252885263003721, TenantId=142307070918780 },
-            new SysUser{ Id=252885263003723, UserName="guest", Password="e10adc3949ba59abbe56e057f20f883e", NickName="游客", RealName="游客", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Female, UserType=UserTypeEnum.None, Remark="游客", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=252885263003722, PosId=252885263003724, TenantId=142307070918780 },
+            new SysUser{ Id=252885263000000, Account="superadmin", Password="e10adc3949ba59abbe56e057f20f883e", NickName="超级管理员", RealName="超级管理员", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Male, AccountType=AccountTypeEnum.SuperAdmin, Remark="超级管理员", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), TenantId=142307070918780 },
+            new SysUser{ Id=252885263003721, Account="admin", Password="e10adc3949ba59abbe56e057f20f883e", NickName="管理员", RealName="管理员", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Male, AccountType=AccountTypeEnum.Admin, Remark="管理员", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=252885263003721, PosId=252885263003720, TenantId=142307070918780 },
+            new SysUser{ Id=252885263003722, Account="user", Password="e10adc3949ba59abbe56e057f20f883e", NickName="普通用户", RealName="普通用户", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Female, AccountType=AccountTypeEnum.User, Remark="普通账号", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=252885263003722, PosId=252885263003721, TenantId=142307070918780 },
+            new SysUser{ Id=252885263003723, Account="guest", Password="e10adc3949ba59abbe56e057f20f883e", NickName="游客", RealName="游客", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Female, AccountType=AccountTypeEnum.None, Remark="游客", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=252885263003722, PosId=252885263003724, TenantId=142307070918780 },
 
-            new SysUser{ Id=252885263003724, UserName="Admin", Password="e10adc3949ba59abbe56e057f20f883e", NickName="管理员", RealName="管理员", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Male, UserType=UserTypeEnum.Admin, Remark="管理员", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=252885263003731, PosId=252885263003720, TenantId=142307070918781 }
+            new SysUser{ Id=252885263003724, Account="Admin", Password="e10adc3949ba59abbe56e057f20f883e", NickName="管理员", RealName="管理员", Phone="18020030720", Birthday=DateTime.Parse("1986-06-28"), Sex=GenderEnum.Male, AccountType=AccountTypeEnum.Admin, Remark="管理员", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrgId=252885263003731, PosId=252885263003720, TenantId=142307070918781 }
         };
     }
 }

+ 3 - 3
Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginInput.cs

@@ -6,11 +6,11 @@
 public class LoginInput
 {
     /// <summary>
-    /// 用户名
+    /// 账号
     /// </summary>
     /// <example>admin</example>
-    [Required(ErrorMessage = "用户名不能为空"), MinLength(3, ErrorMessage = "用户名不能少于3个字符")]
-    public string UserName { get; set; }
+    [Required(ErrorMessage = "账号不能为空"), MinLength(3, ErrorMessage = "账号不能少于3个字符")]
+    public string Account { get; set; }
 
     /// <summary>
     /// 密码

+ 1 - 11
Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginOutput.cs

@@ -5,20 +5,10 @@
 /// </summary>
 public class LoginOutput
 {
-    /// <summary>
-    /// 用户Id
-    /// </summary>
-    public long UserId { get; set; }
-
-    /// <summary>
-    /// 角色
-    /// </summary>
-    public LoginRole RoleInfo { get; set; }
-
     /// <summary>
     /// 令牌Token
     /// </summary>
-    public string Token { get; set; }
+    public string AccessToken { get; set; }
 
     /// <summary>
     /// 刷新Token

+ 3 - 28
Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginUserInfoOutput.cs → Admin.NET/Admin.NET.Core/Service/Auth/Dto/LoginUserOutput.cs

@@ -3,7 +3,7 @@
 /// <summary>
 /// 用户登录信息
 /// </summary>
-public class LoginUserInfoOutput
+public class LoginUserOutput
 {
     /// <summary>
     /// 用户Id
@@ -13,7 +13,7 @@ public class LoginUserInfoOutput
     /// <summary>
     /// 账号名称
     /// </summary>
-    public string Username { get; set; }
+    public string Account { get; set; }
 
     /// <summary>
     /// 真实姓名
@@ -28,7 +28,7 @@ public class LoginUserInfoOutput
     /// <summary>
     /// 个人简介
     /// </summary>
-    public string Desc { get; set; }
+    public string Introduction { get; set; }
 
     /// <summary>
     /// 机构Id
@@ -40,33 +40,8 @@ public class LoginUserInfoOutput
     /// </summary>
     public string OrgName { get; set; }
 
-    /// <summary>
-    /// 机构级别
-    /// </summary>
-    public string OrgLevel { get; set; }
-
-    /// <summary>
-    /// 角色集合
-    /// </summary>
-    public List<LoginRole> Roles { get; set; }
-
     /// <summary>
     /// 按钮权限集合
     /// </summary>
     public List<string> Buttons { get; set; }
-}
-
-public class LoginRole
-{
-    /// <summary>
-    /// 角色名称
-    /// </summary>
-    /// <example>admin</example>
-    public string RoleName { get; set; }
-
-    /// <summary>
-    /// 角色编码
-    /// </summary>
-    /// <example>123456</example>
-    public string Value { get; set; }
 }

+ 23 - 42
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs

@@ -10,37 +10,34 @@ namespace Admin.NET.Core.Service;
 [ApiDescriptionSettings(Order = 200)]
 public class SysAuthService : IDynamicApiController, ITransient
 {
+    private readonly UserManager _userManager;
     private readonly SqlSugarRepository<SysUser> _sysUserRep;
     private readonly RefreshTokenOptions _refreshTokenOptions;
     private readonly IHttpContextAccessor _httpContextAccessor;
-    private readonly IUserManager _userManager;
     private readonly IEventPublisher _eventPublisher;
     private readonly SysUserService _sysUserService;
-    private readonly SysUserRoleService _sysUserRoleService;
     private readonly SysMenuService _sysMenuService;
     private readonly SysOnlineUserService _sysOnlineUserService;
     private readonly IMemoryCache _cache;
     private readonly ICaptcha _captcha;
 
-    public SysAuthService(SqlSugarRepository<SysUser> sysUserRep,
+    public SysAuthService(UserManager userManager,
+        SqlSugarRepository<SysUser> sysUserRep,
         IOptions<RefreshTokenOptions> refreshTokenOptions,
         IHttpContextAccessor httpContextAccessor,
-        IUserManager userManager,
         IEventPublisher eventPublisher,
         SysUserService sysUserService,
-        SysUserRoleService sysUserRoleService,
         SysMenuService sysMenuService,
         SysOnlineUserService sysOnlineUserService,
         IMemoryCache cache,
         ICaptcha captcha)
     {
+        _userManager = userManager;
         _sysUserRep = sysUserRep;
         _httpContextAccessor = httpContextAccessor;
-        _userManager = userManager;
         _refreshTokenOptions = refreshTokenOptions.Value;
         _eventPublisher = eventPublisher;
         _sysUserService = sysUserService;
-        _sysUserRoleService = sysUserRoleService;
         _sysMenuService = sysMenuService;
         _sysOnlineUserService = sysOnlineUserService;
         _cache = cache;
@@ -62,18 +59,17 @@ public class SysAuthService : IDynamicApiController, ITransient
         if (!_captcha.Validate(input.CodeId.ToString(), input.Code))
             throw Oops.Oh(ErrorCodeEnum.D0009);
 
-        var encryptPasswod = MD5Encryption.Encrypt(input.Password); // 加密密码
+        var encryptPasswod = MD5Encryption.Encrypt(input.Password);
 
         // 判断用户名密码
-        var user = await _sysUserRep.AsQueryable().Includes(u => u.SysOrg)
-            .FirstAsync(u => u.UserName.Equals(input.UserName) && u.Password.Equals(encryptPasswod));
+        var user = await _sysUserRep.GetFirstAsync(u => u.Account.Equals(input.Account) && u.Password.Equals(encryptPasswod));
         _ = user ?? throw Oops.Oh(ErrorCodeEnum.D1000);
 
-        // 验证账号是否被冻结
+        // 账号是否被冻结
         if (user.Status == StatusEnum.Disable)
             throw Oops.Oh(ErrorCodeEnum.D1017);
 
-        // 单用户登录(强制下线其他地方登录账号)
+        // 单用户登录
         await _sysOnlineUserService.SignleLogin(user.Id);
 
         // 生成Token令牌
@@ -81,12 +77,10 @@ public class SysAuthService : IDynamicApiController, ITransient
         {
             {ClaimConst.UserId, user.Id},
             {ClaimConst.TenantId, user.TenantId},
-            {ClaimConst.UserName, user.UserName},
+            {ClaimConst.Account, user.Account},
             {ClaimConst.RealName, user.RealName},
-            {ClaimConst.SuperAdmin, user.UserType},
-            {ClaimConst.OrgId, user.OrgId},
-            {ClaimConst.OrgName, user.SysOrg?.Name},
-            {ClaimConst.OrgLevel, user.SysOrg?.Level},
+            {ClaimConst.AccountType, user.AccountType }
+            // {ClaimConst.OrgId, user.OrgId},
         });
 
         // 生成刷新Token令牌
@@ -100,8 +94,7 @@ public class SysAuthService : IDynamicApiController, ITransient
 
         return new LoginOutput
         {
-            UserId = user.Id,
-            Token = accessToken,
+            AccessToken = accessToken,
             RefreshToken = refreshToken
         };
     }
@@ -111,50 +104,38 @@ public class SysAuthService : IDynamicApiController, ITransient
     /// </summary>
     /// <returns></returns>
     [HttpGet("/getUserInfo")]
-    public async Task<LoginUserInfoOutput> GetUserInfo()
+    public async Task<LoginUserOutput> GetUserInfo()
     {
         var user = _userManager.User;
         if (user == null)
             throw Oops.Oh(ErrorCodeEnum.D1011);
 
-        // 角色信息
-        var roles = await _sysUserRoleService.GetUserRoleList(user.Id);
-
-        // 数据范围
-        var dataScopes = await _sysUserService.GetUserOrgIdList();
-
-        // 按钮权限
+        // 按钮权限集合
         var buttons = await _sysMenuService.GetPermCodeList();
 
         // 登录日志
+        var ip = _httpContextAccessor.HttpContext.GetRemoteIpAddressToIPv4();
         var client = Parser.GetDefault().Parse(_httpContextAccessor.HttpContext.Request.Headers["User-Agent"]);
+        //var ipInfo = IpTool.Search(ip);
+        //var address = ipInfo.Country + ipInfo.Province + ipInfo.City + "[" + ipInfo.NetworkOperator + "][" + ipInfo.Latitude + ipInfo.Longitude + "]";
         await _eventPublisher.PublishAsync("Add:VisLog", new SysLogVis
         {
             Success = YesNoEnum.Y,
             Message = "登录",
-            Ip = _httpContextAccessor.HttpContext.GetRemoteIpAddressToIPv4(),
+            Ip = ip,
+            //Location = address,
             Browser = client.UA.Family + client.UA.Major,
             Os = client.OS.Family + client.OS.Major,
             VisType = LoginTypeEnum.Login,
-            UserName = user.UserName,
+            UserName = user.Account,
             RealName = user.RealName
         });
 
-        return new LoginUserInfoOutput
+        return new LoginUserOutput
         {
-            UserId = user.Id,
-            Username = user.UserName,
+            Account = user.Account,
             RealName = user.RealName,
             Avatar = user.Avatar,
-            Desc = user.Introduction,
-            OrgId = user.OrgId,
-            OrgName = user.SysOrg != null ? user.SysOrg.Name : "",
-            OrgLevel = user.SysOrg != null ? user.SysOrg.Level : "",
-            Roles = roles.Select(u => new LoginRole
-            {
-                RoleName = u.Name,
-                Value = u.Code
-            }).ToList(),
             Buttons = buttons
         };
     }
@@ -190,7 +171,7 @@ public class SysAuthService : IDynamicApiController, ITransient
             Message = "退出",
             VisType = LoginTypeEnum.Logout,
             Ip = _httpContextAccessor.HttpContext.GetRemoteIpAddressToIPv4(),
-            UserName = user.UserName,
+            UserName = user.Account,
             RealName = user.RealName
         });
     }

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs

@@ -188,7 +188,7 @@ public class SysFileService : IDynamicApiController, ITransient
             FileName = Path.GetFileNameWithoutExtension(file.FileName),
             Suffix = suffix,
             SizeKb = sizeKb.ToString(),
-            FilePath = path,            
+            FilePath = path,
         };
 
         var finalName = newFile.Id + suffix; // 文件最终名称

+ 4 - 4
Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs

@@ -6,20 +6,20 @@ namespace Admin.NET.Core.Service;
 [ApiDescriptionSettings(Order = 195)]
 public class SysMenuService : IDynamicApiController, ITransient
 {
+    private readonly UserManager _userManager;
     private readonly SqlSugarRepository<SysMenu> _sysMenuRep;
-    private readonly IUserManager _userManager;
     private readonly SysRoleMenuService _sysRoleMenuService;
     private readonly SysUserRoleService _sysUserRoleService;
     private readonly SysCacheService _sysCacheService;
 
-    public SysMenuService(SqlSugarRepository<SysMenu> sysMenuRep,
-        IUserManager userManager,
+    public SysMenuService(UserManager userManager,
+        SqlSugarRepository<SysMenu> sysMenuRep,
         SysRoleMenuService sysRoleMenuService,
         SysUserRoleService sysUserRoleService,
         SysCacheService sysCacheService)
     {
-        _sysMenuRep = sysMenuRep;
         _userManager = userManager;
+        _sysMenuRep = sysMenuRep;
         _sysRoleMenuService = sysRoleMenuService;
         _sysUserRoleService = sysUserRoleService;
         _sysCacheService = sysCacheService;

+ 7 - 5
Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs

@@ -6,24 +6,26 @@
 [ApiDescriptionSettings(Order = 100)]
 public class SysNoticeService : ISysNoticeService, IDynamicApiController, ITransient
 {
+    private readonly UserManager _userManager;
+
     private readonly SqlSugarRepository<SysUser> _sysUserRep;
     private readonly SqlSugarRepository<SysNotice> _sysNoticeRep;
 
     private readonly SysOnlineUserService _sysOnlineUserService;
     private readonly ISysNoticeUserService _sysNoticeUserService;
-    private readonly IUserManager _userManager;
 
-    public SysNoticeService(SqlSugarRepository<SysUser> sysUserRep,
+    public SysNoticeService(
+        UserManager userManager,
+        SqlSugarRepository<SysUser> sysUserRep,
         SqlSugarRepository<SysNotice> sysNoticeRep,
         SysOnlineUserService sysOnlineUserService,
-        ISysNoticeUserService sysNoticeUserService,
-        IUserManager userManager)
+        ISysNoticeUserService sysNoticeUserService)
     {
+        _userManager = userManager;
         _sysUserRep = sysUserRep;
         _sysNoticeRep = sysNoticeRep;
         _sysOnlineUserService = sysOnlineUserService;
         _sysNoticeUserService = sysNoticeUserService;
-        _userManager = userManager;
     }
 
     /// <summary>

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/OnlineUser/SysOnlineUserService.cs

@@ -8,7 +8,7 @@ namespace Admin.NET.Core.Service;
 [ApiDescriptionSettings(Order = 100)]
 public class SysOnlineUserService : IDynamicApiController, ITransient
 {
-    private readonly SqlSugarRepository<SysOnlineUser> _sysOnlineUerRep;    
+    private readonly SqlSugarRepository<SysOnlineUser> _sysOnlineUerRep;
     private readonly SysConfigService _sysConfigService;
     private readonly IHubContext<OnlineUserHub, IOnlineUserHub> _onlineUserHubContext;
 
@@ -26,7 +26,7 @@ public class SysOnlineUserService : IDynamicApiController, ITransient
     /// </summary>
     /// <returns></returns>
     [HttpGet("/sysOnlineUser/page")]
-    public async Task<dynamic> GetOnlineUserPage([FromQuery] PageOnlineUserInput input)
+    public async Task<SqlSugarPagedList<SysOnlineUser>> GetOnlineUserPage([FromQuery] PageOnlineUserInput input)
     {
         return await _sysOnlineUerRep.AsQueryable()
             .WhereIF(!string.IsNullOrWhiteSpace(input.UserName), u => u.UserName.Contains(input.UserName))

+ 14 - 42
Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs

@@ -7,40 +7,25 @@ namespace Admin.NET.Core.Service;
 public class SysOrgService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysOrg> _sysOrgRep;
-    private readonly IUserManager _userManager;
+    private readonly UserManager _userManager;
     private readonly SysCacheService _sysCacheService;
-    private readonly SysUserOrgService _sysUserOrgService;
+    private readonly SysUserExtOrgService _sysUserExtOrgService;
     private readonly SysUserRoleService _sysUserRoleService;
     private readonly SysRoleOrgService _sysRoleOrgService;
-    private readonly SysUserExtOrgPosService _sysEmpExtOrgPosService;
 
     public SysOrgService(SqlSugarRepository<SysOrg> sysOrgRep,
-        IUserManager userManager,
+        UserManager userManager,
         SysCacheService sysCacheService,
-        SysUserOrgService sysUserOrgService,
+        SysUserExtOrgService sysUserExtOrgService,
         SysUserRoleService sysUserRoleService,
-        SysRoleOrgService sysRoleOrgService,
-        SysUserExtOrgPosService sysEmpExtOrgPosService)
+        SysRoleOrgService sysRoleOrgService)
     {
         _sysOrgRep = sysOrgRep;
         _userManager = userManager;
         _sysCacheService = sysCacheService;
-        _sysUserOrgService = sysUserOrgService;
+        _sysUserExtOrgService = sysUserExtOrgService;
         _sysUserRoleService = sysUserRoleService;
         _sysRoleOrgService = sysRoleOrgService;
-        _sysEmpExtOrgPosService = sysEmpExtOrgPosService;
-    }
-
-    /// <summary>
-    /// 获取用户拥有机构信息列表
-    /// </summary>
-    /// <param name="userId">用户id</param>
-    /// <returns></returns>
-    [HttpGet("/sysOrg/userOwnOrgInfo/{userId}")]
-    public async Task<List<SysOrg>> GetUserOrgList(long userId)
-    {
-        List<long> orgList = await _sysUserOrgService.GetUserOrgIdList(userId);
-        return await _sysOrgRep.AsQueryable().Where(t => orgList.Contains(t.Id)).ToListAsync();
     }
 
     /// <summary>
@@ -95,19 +80,6 @@ public class SysOrgService : IDynamicApiController, ITransient
         }
         var sysOrg = input.Adapt<SysOrg>();
         var newOrg = await _sysOrgRep.AsInsertable(sysOrg).ExecuteReturnEntityAsync();
-
-        // 非超级管理员时,将新机构加到用户数据范围内
-        if (!_userManager.SuperAdmin)
-        {
-            var userId = _userManager.UserId;
-            await _sysUserOrgService.AddUserOrg(new SysUserOrg
-            {
-                UserId = userId,
-                OrgId = newOrg.Id
-            });
-            orgIdList.Add(newOrg.Id);
-            _sysCacheService.SetOrgIdList(userId, orgIdList); // 刷新缓存
-        }
         return newOrg.Id;
     }
 
@@ -164,8 +136,8 @@ public class SysOrgService : IDynamicApiController, ITransient
                 throw Oops.Oh(ErrorCodeEnum.D2003);
         }
 
-        // 若附属机构有用户则禁止删除
-        var hasExtOrgEmp = await _sysEmpExtOrgPosService.HasExtOrgEmp(sysOrg.Id);
+        // 若扩展机构有用户则禁止删除
+        var hasExtOrgEmp = await _sysUserExtOrgService.HasUserOrg(sysOrg.Id);
         if (hasExtOrgEmp)
             throw Oops.Oh(ErrorCodeEnum.D2005);
 
@@ -180,7 +152,7 @@ public class SysOrgService : IDynamicApiController, ITransient
         await _sysRoleOrgService.DeleteRoleOrgByOrgIdList(orgIdList);
 
         // 级联删除用户机构数据
-        await _sysUserOrgService.DeleteUserOrgByOrgIdList(orgIdList);
+        await _sysUserExtOrgService.DeleteUserExtOrgByOrgIdList(orgIdList);
     }
 
     /// <summary>
@@ -197,12 +169,12 @@ public class SysOrgService : IDynamicApiController, ITransient
         var orgIdList = _sysCacheService.GetOrgIdList(userId); // 取缓存
         if (orgIdList == null || orgIdList.Count < 1)
         {
-            // 用户机构集合
-            var orgList1 = await _sysUserOrgService.GetUserOrgIdList(userId);
+            // 扩展机构集合
+            var orgList1 = await _sysUserExtOrgService.GetUserExtOrgList(userId);
             // 角色机构集合
             var orgList2 = await GetUserRoleOrgIdList(userId);
-            // 并集机构集合
-            orgIdList = orgList1.Union(orgList2).ToList();
+            // 机构并集
+            orgIdList = orgList1.Select(u => u.OrgId).Union(orgList2).ToList();
             _sysCacheService.SetOrgIdList(userId, orgIdList); // 存缓存
         }
         return orgIdList;
@@ -264,7 +236,7 @@ public class SysOrgService : IDynamicApiController, ITransient
     /// <returns></returns>
     private async Task<List<long>> GetOrgIdListByDataScope(int dataScope)
     {
-        var orgId = _userManager.User.OrgId;
+        var orgId = _userManager.OrgId;
         var orgIdList = new List<long>();
         // 若数据范围是全部,则获取所有机构Id集合
         if (dataScope == (int)DataScopeEnum.All)

+ 4 - 4
Admin.NET/Admin.NET.Core/Service/Pos/SysPosService.cs

@@ -7,13 +7,13 @@
 public class SysPosService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysPos> _sysPosRep;
-    private readonly SysUserExtOrgPosService _sysUserExtOrgPosService;
+    private readonly SysUserExtOrgService _sysUserOrgService;
 
     public SysPosService(SqlSugarRepository<SysPos> sysPosRep,
-        SysUserExtOrgPosService sysUserExtOrgPosService)
+        SysUserExtOrgService sysUserOrgService)
     {
         _sysPosRep = sysPosRep;
-        _sysUserExtOrgPosService = sysUserExtOrgPosService;
+        _sysUserOrgService = sysUserOrgService;
     }
 
     /// <summary>
@@ -75,7 +75,7 @@ public class SysPosService : IDynamicApiController, ITransient
             throw Oops.Oh(ErrorCodeEnum.D6001);
 
         // 该附属职位下是否有用户
-        var hasExtPosEmp = await _sysUserExtOrgPosService.HasExtPosEmp(input.Id);
+        var hasExtPosEmp = await _sysUserOrgService.HasUserPos(input.Id);
         if (hasExtPosEmp)
             throw Oops.Oh(ErrorCodeEnum.D6001);
 

+ 4 - 4
Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs

@@ -6,24 +6,24 @@
 [ApiDescriptionSettings(Order = 198)]
 public class SysRoleService : IDynamicApiController, ITransient
 {
+    private readonly UserManager _userManager;
     private readonly SqlSugarRepository<SysRole> _sysRoleRep;
-    private readonly IUserManager _userManager;
     private readonly SysCacheService _sysCacheService;
     private readonly SysRoleOrgService _sysRoleOrgService;
     private readonly SysRoleMenuService _sysRoleMenuService;
     private readonly SysOrgService _sysOrgService;
     private readonly SysUserRoleService _sysUserRoleService;
 
-    public SysRoleService(SqlSugarRepository<SysRole> sysRoleRep,
-        IUserManager userManager,
+    public SysRoleService(UserManager userManager,
+        SqlSugarRepository<SysRole> sysRoleRep,
         SysCacheService sysCacheService,
         SysRoleOrgService sysRoleOrgService,
         SysRoleMenuService sysRoleMenuService,
         SysOrgService sysOrgService,
         SysUserRoleService sysUserRoleService)
     {
-        _sysRoleRep = sysRoleRep;
         _userManager = userManager;
+        _sysRoleRep = sysRoleRep;
         _sysCacheService = sysCacheService;
         _sysRoleOrgService = sysRoleOrgService;
         _sysRoleMenuService = sysRoleMenuService;

+ 12 - 20
Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs

@@ -11,7 +11,7 @@ public class SysTenantService : IDynamicApiController, ITransient
     private readonly SqlSugarRepository<SysRole> _roleRep;
     private readonly SqlSugarRepository<SysPos> _posRep;
     private readonly SqlSugarRepository<SysUser> _userRep;
-    private readonly SqlSugarRepository<SysUserExtOrgPos> _sysUserExtOrgPosRep;
+    private readonly SqlSugarRepository<SysUserExtOrg> _sysUserExtOrgRep;
     private readonly SqlSugarRepository<SysRoleMenu> _sysRoleMenuRep;
     private readonly SqlSugarRepository<SysUserRole> _userRoleRep;
     private readonly SysUserRoleService _sysUserRoleService;
@@ -22,7 +22,7 @@ public class SysTenantService : IDynamicApiController, ITransient
         SqlSugarRepository<SysRole> roleRep,
         SqlSugarRepository<SysPos> posRep,
         SqlSugarRepository<SysUser> userRep,
-        SqlSugarRepository<SysUserExtOrgPos> sysUserExtOrgPosRep,
+        SqlSugarRepository<SysUserExtOrg> sysUserExtOrgRep,
         SqlSugarRepository<SysRoleMenu> sysRoleMenuRep,
         SqlSugarRepository<SysUserRole> userRoleRep,
         SysUserRoleService sysUserRoleService,
@@ -33,7 +33,7 @@ public class SysTenantService : IDynamicApiController, ITransient
         _roleRep = roleRep;
         _posRep = posRep;
         _userRep = userRep;
-        _sysUserExtOrgPosRep = sysUserExtOrgPosRep;
+        _sysUserExtOrgRep = sysUserExtOrgRep;
         _sysRoleMenuRep = sysRoleMenuRep;
         _userRoleRep = userRoleRep;
         _sysUserRoleService = sysUserRoleService;
@@ -46,9 +46,9 @@ public class SysTenantService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpGet("/sysTenant/page")]
-    public async Task<dynamic> GetTenantPage([FromQuery] PageTenantInput input)
+    public async Task<SqlSugarPagedList<SysTenant>> GetTenantPage([FromQuery] PageTenantInput input)
     {
-        return await _tenantRep.Context.Queryable<SysTenant>()
+        return await _tenantRep.AsQueryable()
             .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim()))
             .WhereIF(!string.IsNullOrWhiteSpace(input.Phone), u => u.Phone.Contains(input.Phone.Trim()))
             .ToPagedListAsync(input.Page, input.PageSize);
@@ -111,12 +111,12 @@ public class SysTenantService : IDynamicApiController, ITransient
         var newUser = new SysUser
         {
             TenantId = tenantId,
-            UserName = admin,
+            Account = admin,
             Password = MD5Encryption.Encrypt(CommonConst.SysPassword),
             NickName = newTenant.AdminName,
             Email = newTenant.Email,
             Phone = newTenant.Phone,
-            UserType = UserTypeEnum.Admin,
+            AccountType = AccountTypeEnum.Admin,
             OrgId = newOrg.Id,
             PosId = newPos.Id,
             Birthday = DateTime.Parse("1986-06-28"),
@@ -131,14 +131,6 @@ public class SysTenantService : IDynamicApiController, ITransient
             UserId = newUser.Id
         };
         await _userRoleRep.InsertAsync(newUserRole);
-
-        var newUserExtOrgPos = new SysUserExtOrgPos
-        {
-            OrgId = newOrg.Id,
-            PosId = newPos.Id,
-            UserId = newUser.Id
-        };
-        await _sysUserExtOrgPosRep.InsertAsync(newUserExtOrgPos);
     }
 
     /// <summary>
@@ -151,7 +143,7 @@ public class SysTenantService : IDynamicApiController, ITransient
     {
         var users = await _userRep.AsQueryable().Filter(null, true).Where(u => u.TenantId == input.Id).ToListAsync();
         // 超级管理员所在租户为默认租户
-        if (users.Any(u => u.UserType == UserTypeEnum.SuperAdmin))
+        if (users.Any(u => u.AccountType == AccountTypeEnum.SuperAdmin))
             throw Oops.Oh(ErrorCodeEnum.D1023);
         var entity = await _tenantRep.GetFirstAsync(u => u.Id == input.Id);
         await _tenantRep.DeleteAsync(entity);
@@ -164,7 +156,7 @@ public class SysTenantService : IDynamicApiController, ITransient
 
         await _roleRep.AsDeleteable().Where(u => u.TenantId == input.Id).ExecuteCommandAsync();
 
-        await _sysUserExtOrgPosRep.AsDeleteable().Where(u => userIds.Contains(u.UserId)).ExecuteCommandAsync();
+        await _sysUserExtOrgRep.AsDeleteable().Where(u => userIds.Contains(u.UserId)).ExecuteCommandAsync();
 
         var roles = await _roleRep.AsQueryable().Filter(null, true).Where(u => u.TenantId == input.Id).ToListAsync();
         await _roleRep.AsDeleteable().Where(u => u.TenantId == input.Id).ExecuteCommandAsync();
@@ -190,8 +182,8 @@ public class SysTenantService : IDynamicApiController, ITransient
 
         var tenantAdminUser = await GetTenantAdminUser(input.Id);
         if (tenantAdminUser == null) return;
-        tenantAdminUser.UserName = entity.AdminName;
-        await _userRep.Context.Updateable(tenantAdminUser).UpdateColumns(u => new { u.UserName }).ExecuteCommandAsync();
+        tenantAdminUser.Account = entity.AdminName;
+        await _userRep.Context.Updateable(tenantAdminUser).UpdateColumns(u => new { u.Account }).ExecuteCommandAsync();
     }
 
     /// <summary>
@@ -278,6 +270,6 @@ public class SysTenantService : IDynamicApiController, ITransient
     /// <returns></returns>
     private async Task<SysUser> GetTenantAdminUser(long tenantId)
     {
-        return await _userRep.AsQueryable().Filter(null, true).Where(u => u.TenantId == tenantId && u.UserType == UserTypeEnum.Admin).FirstAsync();
+        return await _userRep.AsQueryable().Filter(null, true).Where(u => u.TenantId == tenantId && u.AccountType == AccountTypeEnum.Admin).FirstAsync();
     }
 }

+ 9 - 14
Admin.NET/Admin.NET.Core/Service/User/Dto/UserExtOrgPosOutput.cs → Admin.NET/Admin.NET.Core/Service/User/Dto/UserExtOrgInput.cs

@@ -1,6 +1,6 @@
 namespace Admin.NET.Core.Service;
 
-public class UserExtOrgPosOutput
+public class UserExtOrgInput : BaseIdInput
 {
     /// <summary>
     /// 机构Id
@@ -8,27 +8,22 @@ public class UserExtOrgPosOutput
     public long OrgId { get; set; }
 
     /// <summary>
-    /// 机构编码
-    /// </summary>
-    public string OrgCode { get; set; }
-
-    /// <summary>
-    /// 机构名称
+    /// 职位Id
     /// </summary>
-    public string OrgName { get; set; }
+    public long PosId { get; set; }
 
     /// <summary>
-    /// 职位Id
+    /// 工号
     /// </summary>
-    public long PosId { get; set; }
+    public string JobNum { get; set; }
 
     /// <summary>
-    /// 职位编码
+    /// 职级
     /// </summary>
-    public string PosCode { get; set; }
+    public string PosLevel { get; set; }
 
     /// <summary>
-    /// 职位名称
+    /// 入职日期
     /// </summary>
-    public string PosName { get; set; }
+    public DateTime? JoinDate { get; set; }
 }

+ 17 - 7
Admin.NET/Admin.NET.Core/Service/User/Dto/UserInput.cs

@@ -13,7 +13,12 @@ public class PageUserInput : BasePageInput
     /// <summary>
     /// 账号
     /// </summary>
-    public string UserName { get; set; }
+    public string Account { get; set; }
+
+    /// <summary>
+    /// 姓名
+    /// </summary>
+    public string RealName { get; set; }
 
     /// <summary>
     /// 手机号
@@ -21,7 +26,7 @@ public class PageUserInput : BasePageInput
     public string Phone { get; set; }
 
     /// <summary>
-    /// 机构Id
+    /// 查询时所选机构Id
     /// </summary>
     public long OrgId { get; set; }
 }
@@ -30,10 +35,10 @@ public class PageUserInput : BasePageInput
 public class AddUserInput : SysUser
 {
     /// <summary>
-    /// 账号名称
+    /// 账号
     /// </summary>
-    [Required(ErrorMessage = "账号名称不能为空")]
-    public override string UserName { get; set; }
+    [Required(ErrorMessage = "账号不能为空")]
+    public override string Account { get; set; }
 
     /// <summary>
     /// 真实姓名
@@ -42,14 +47,19 @@ public class AddUserInput : SysUser
     public override string RealName { get; set; }
 
     /// <summary>
-    /// 账号密码
+    /// 账号
     /// </summary>
     public override string Password { get; set; } = CommonConst.SysPassword;
 
     /// <summary>
-    /// 角色Id集合
+    /// 角色集合
     /// </summary>
     public List<long> RoleIdList { get; set; }
+
+    /// <summary>
+    /// 扩展机构集合
+    /// </summary>
+    public List<SysUserExtOrg> ExtOrgIdList { get; set; }
 }
 
 [NotTable]

+ 0 - 17
Admin.NET/Admin.NET.Core/Service/User/Dto/UserOrgInput.cs

@@ -1,17 +0,0 @@
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 授权用户机构
-/// </summary>
-public class UserOrgInput : BaseIdInput
-{
-    /// <summary>
-    /// 机构Id
-    /// </summary>
-    public long OrgId { get; set; }
-
-    /// <summary>
-    /// 机构Id集合
-    /// </summary>
-    public List<long> OrgIdList { get; set; }
-}

+ 3 - 3
Admin.NET/Admin.NET.Core/Service/User/Dto/UserRoleInput.cs

@@ -3,12 +3,12 @@
 /// <summary>
 /// 授权用户角色
 /// </summary>
-public class UserRoleInput : BaseIdInput
+public class UserRoleInput
 {
     /// <summary>
-    /// 机构Id
+    /// 用户Id
     /// </summary>
-    public long OrgId { get; set; }
+    public long UserId { get; set; }
 
     /// <summary>
     /// 角色Id集合

+ 0 - 18
Admin.NET/Admin.NET.Core/Service/User/IUserManager.cs

@@ -1,18 +0,0 @@
-namespace Admin.NET.Core;
-
-public interface IUserManager
-{
-    long UserId { get; }
-
-    string UserName { get; }
-
-    string RealName { get; }
-
-    bool SuperAdmin { get; }
-
-    string OpenId { get; }
-
-    SysUser User { get; }
-
-    Task<SysUser> CheckUserAsync(long userId);
-}

+ 0 - 85
Admin.NET/Admin.NET.Core/Service/User/SysUserExtOrgPosService.cs

@@ -1,85 +0,0 @@
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 系统用户附属机构职位服务
-/// </summary>
-public class SysUserExtOrgPosService : ITransient
-{
-    private readonly SqlSugarRepository<SysUserExtOrgPos> _sysEmpExtOrgPosRep;
-
-    public SysUserExtOrgPosService(SqlSugarRepository<SysUserExtOrgPos> sysEmpExtOrgPosRep)
-    {
-        _sysEmpExtOrgPosRep = sysEmpExtOrgPosRep;
-    }
-
-    /// <summary>
-    /// 保存或编辑附属机构信息
-    /// </summary>
-    /// <param name="userId"></param>
-    /// <param name="extIdList"></param>
-    /// <returns></returns>
-    [UnitOfWork]
-    public async Task AddOrUpdate(long userId, List<UserExtOrgPosOutput> extIdList)
-    {
-        await DeleteEmpExtByUserId(userId); // 先删除
-        var extOrgPos = extIdList.Select(u => new SysUserExtOrgPos
-        {
-            UserId = userId,
-            OrgId = u.OrgId,
-            PosId = u.PosId
-        }).ToList();
-        await _sysEmpExtOrgPosRep.InsertRangeAsync(extOrgPos);
-    }
-
-    /// <summary>
-    /// 根据用户Id获取附属机构和职位信息
-    /// </summary>
-    /// <param name="userId"></param>
-    /// <returns></returns>
-    public async Task<List<UserExtOrgPosOutput>> GetEmpExtOrgPosList(long userId)
-    {
-        return await _sysEmpExtOrgPosRep.AsQueryable()
-            .Mapper(u => u.SysOrg, u => u.OrgId)
-            .Mapper(u => u.SysPos, u => u.PosId)
-            .Where(u => u.UserId == userId)
-            .Select(u => new UserExtOrgPosOutput
-            {
-                OrgId = u.SysOrg.Id,
-                OrgCode = u.SysOrg.Code,
-                OrgName = u.SysOrg.Name,
-                PosId = u.SysPos.Id,
-                PosCode = u.SysPos.Code,
-                PosName = u.SysPos.Name
-            }).ToListAsync();
-    }
-
-    /// <summary>
-    /// 根据附属机构Id判断是否有用户
-    /// </summary>
-    /// <param name="orgId"></param>
-    /// <returns></returns>
-    public async Task<bool> HasExtOrgEmp(long orgId)
-    {
-        return await _sysEmpExtOrgPosRep.IsAnyAsync(u => u.OrgId == orgId);
-    }
-
-    /// <summary>
-    /// 根据附属职位Id判断是否有用户
-    /// </summary>
-    /// <param name="posId"></param>
-    /// <returns></returns>
-    public async Task<bool> HasExtPosEmp(long posId)
-    {
-        return await _sysEmpExtOrgPosRep.IsAnyAsync(u => u.PosId == posId);
-    }
-
-    /// <summary>
-    /// 根据用户Id删除用户附属
-    /// </summary>
-    /// <param name="userId"></param>
-    /// <returns></returns>
-    public async Task DeleteEmpExtByUserId(long userId)
-    {
-        await _sysEmpExtOrgPosRep.DeleteAsync(u => u.UserId == userId);
-    }
-}

+ 83 - 0
Admin.NET/Admin.NET.Core/Service/User/SysUserExtOrgService.cs

@@ -0,0 +1,83 @@
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 系统用户扩展机构服务
+/// </summary>
+public class SysUserExtOrgService : ITransient
+{
+    private readonly SqlSugarRepository<SysUserExtOrg> _sysUserExtOrgRep;
+
+    public SysUserExtOrgService(SqlSugarRepository<SysUserExtOrg> sysUserExtOrgRep)
+    {
+        _sysUserExtOrgRep = sysUserExtOrgRep;
+    }
+
+    /// <summary>
+    /// 获取用户扩展机构集合
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    public async Task<List<SysUserExtOrg>> GetUserExtOrgList(long userId)
+    {
+        return await _sysUserExtOrgRep.GetListAsync(u => u.UserId == userId);
+    }
+
+    /// <summary>
+    /// 更新用户扩展机构
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <param name="extOrgList"></param>
+    /// <returns></returns>
+    [UnitOfWork]
+    public async Task UpdateUserExtOrg(long userId, List<SysUserExtOrg> extOrgList)
+    {
+        await _sysUserExtOrgRep.DeleteAsync(u => u.UserId == userId);
+
+        if (extOrgList == null || extOrgList.Count < 1) return;
+        extOrgList.ForEach(u =>
+        {
+            u.UserId = userId;
+        });
+        await _sysUserExtOrgRep.InsertRangeAsync(extOrgList);
+    }
+
+    /// <summary>
+    /// 根据机构Id集合删除扩展机构
+    /// </summary>
+    /// <param name="orgIdList"></param>
+    /// <returns></returns>
+    public async Task DeleteUserExtOrgByOrgIdList(List<long> orgIdList)
+    {
+        await _sysUserExtOrgRep.DeleteAsync(u => orgIdList.Contains(u.OrgId));
+    }
+
+    /// <summary>
+    /// 根据用户Id删除扩展机构
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    public async Task DeleteUserExtOrgByUserId(long userId)
+    {
+        await _sysUserExtOrgRep.DeleteAsync(u => u.UserId == userId);
+    }
+
+    /// <summary>
+    /// 根据机构Id判断是否有用户
+    /// </summary>
+    /// <param name="orgId"></param>
+    /// <returns></returns>
+    public async Task<bool> HasUserOrg(long orgId)
+    {
+        return await _sysUserExtOrgRep.IsAnyAsync(u => u.OrgId == orgId);
+    }
+
+    /// <summary>
+    /// 根据职位Id判断是否有用户
+    /// </summary>
+    /// <param name="posId"></param>
+    /// <returns></returns>
+    public async Task<bool> HasUserPos(long posId)
+    {
+        return await _sysUserExtOrgRep.IsAnyAsync(u => u.PosId == posId);
+    }
+}

+ 0 - 72
Admin.NET/Admin.NET.Core/Service/User/SysUserOrgService.cs

@@ -1,72 +0,0 @@
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 系统用户机构服务
-/// </summary>
-public class SysUserOrgService : ITransient
-{
-    private readonly SqlSugarRepository<SysUserOrg> _sysUserOrgRep;
-
-    public SysUserOrgService(SqlSugarRepository<SysUserOrg> sysUserOrgRep)
-    {
-        _sysUserOrgRep = sysUserOrgRep;
-    }
-
-    /// <summary>
-    /// 授权用户所属机构
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [UnitOfWork]
-    public async Task GrantUserOrg(UserOrgInput input)
-    {
-        await _sysUserOrgRep.DeleteAsync(u => u.UserId == input.Id);
-        var userOrgs = input.OrgIdList.Select(u => new SysUserOrg
-        {
-            UserId = input.Id,
-            OrgId = u
-        }).ToList();
-        await _sysUserOrgRep.InsertRangeAsync(userOrgs);
-    }
-
-    /// <summary>
-    /// 根据用户Id获取机构Id集合
-    /// </summary>
-    /// <param name="userId"></param>
-    /// <returns></returns>
-    public async Task<List<long>> GetUserOrgIdList(long userId)
-    {
-        return await _sysUserOrgRep.AsQueryable()
-            .Where(u => u.UserId == userId)
-            .Select(u => u.OrgId).ToListAsync();
-    }
-
-    /// <summary>
-    /// 根据机构Id集合删除用户机构
-    /// </summary>
-    /// <param name="orgIdList"></param>
-    /// <returns></returns>
-    public async Task DeleteUserOrgByOrgIdList(List<long> orgIdList)
-    {
-        await _sysUserOrgRep.DeleteAsync(u => orgIdList.Contains(u.OrgId));
-    }
-
-    /// <summary>
-    /// 根据用户Id删除用户机构
-    /// </summary>
-    /// <param name="userId"></param>
-    /// <returns></returns>
-    public async Task DeleteUserOrgByUserId(long userId)
-    {
-        await _sysUserOrgRep.DeleteAsync(u => u.UserId == userId);
-    }
-
-    /// <summary>
-    /// 增加用户机构
-    /// </summary>
-    /// <returns></returns>
-    public async Task AddUserOrg(SysUserOrg userOrg)
-    {
-        await _sysUserOrgRep.InsertAsync(userOrg);
-    }
-}

+ 4 - 2
Admin.NET/Admin.NET.Core/Service/User/SysUserRoleService.cs

@@ -20,10 +20,12 @@ public class SysUserRoleService : ITransient
     [UnitOfWork]
     public async Task GrantUserRole(UserRoleInput input)
     {
-        await _sysUserRoleRep.DeleteAsync(u => u.UserId == input.Id);
+        await _sysUserRoleRep.DeleteAsync(u => u.UserId == input.UserId);
+
+        if (input.RoleIdList == null || input.RoleIdList.Count < 1) return;
         var roles = input.RoleIdList.Select(u => new SysUserRole
         {
-            UserId = input.Id,
+            UserId = input.UserId,
             RoleId = u
         }).ToList();
         await _sysUserRoleRep.InsertRangeAsync(roles);

+ 41 - 103
Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs

@@ -6,29 +6,23 @@
 [ApiDescriptionSettings(Order = 199)]
 public class SysUserService : IDynamicApiController, ITransient
 {
+    private readonly UserManager _userManager;
     private readonly SqlSugarRepository<SysUser> _sysUserRep;
-    private readonly IUserManager _userManager;
-    private readonly SysCacheService _sysCacheService;
     private readonly SysOrgService _sysOrgService;
-    private readonly SysUserOrgService _sysUserOrgService;
+    private readonly SysUserExtOrgService _sysUserExtOrgService;
     private readonly SysUserRoleService _sysUserRoleService;
-    private readonly SysUserExtOrgPosService _sysUserExtOrgPosService;
 
-    public SysUserService(SqlSugarRepository<SysUser> sysUserRep,
-        IUserManager userManager,
-        SysCacheService sysCacheService,
+    public SysUserService(UserManager userManager,
+        SqlSugarRepository<SysUser> sysUserRep,
         SysOrgService sysOrgService,
-        SysUserOrgService sysUserOrgService,
-        SysUserRoleService sysUserRoleService,
-        SysUserExtOrgPosService sysUserExtOrgPosService)
+        SysUserExtOrgService sysUserExtOrgService,
+        SysUserRoleService sysUserRoleService)
     {
-        _sysUserRep = sysUserRep;
         _userManager = userManager;
+        _sysUserRep = sysUserRep;
         _sysOrgService = sysOrgService;
-        _sysUserOrgService = sysUserOrgService;
+        _sysUserExtOrgService = sysUserExtOrgService;
         _sysUserRoleService = sysUserRoleService;
-        _sysCacheService = sysCacheService;
-        _sysUserExtOrgPosService = sysUserExtOrgPosService;
     }
 
     /// <summary>
@@ -40,12 +34,13 @@ public class SysUserService : IDynamicApiController, ITransient
     public async Task<SqlSugarPagedList<SysUser>> GetUserPage([FromQuery] PageUserInput input)
     {
         var orgList = input.OrgId > 0 ? await _sysOrgService.GetChildIdListWithSelfById(input.OrgId) :
-            _userManager.SuperAdmin ? null : await _sysOrgService.GetChildIdListWithSelfById(_userManager.User.OrgId);
+            _userManager.SuperAdmin ? null : await _sysOrgService.GetChildIdListWithSelfById(_userManager.OrgId);
 
         return await _sysUserRep.AsQueryable()
-            .WhereIF(!_userManager.SuperAdmin, u => u.UserType != UserTypeEnum.SuperAdmin)
+            .WhereIF(!_userManager.SuperAdmin, u => u.AccountType != AccountTypeEnum.SuperAdmin)
             .WhereIF(orgList != null, u => orgList.Contains(u.OrgId))
-            .WhereIF(!string.IsNullOrWhiteSpace(input.UserName), u => u.UserName.Contains(input.UserName))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Account), u => u.Account.Contains(input.Account))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.RealName), u => u.RealName.Contains(input.RealName))
             .WhereIF(!string.IsNullOrWhiteSpace(input.Phone), u => u.Phone.Contains(input.Phone))
             .OrderBy(u => u.Order)
             .ToPagedListAsync(input.Page, input.PageSize);
@@ -57,35 +52,29 @@ public class SysUserService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost("/sysUser/add")]
+    [UnitOfWork]
     public async Task AddUser(AddUserInput input)
     {
-        CheckDataScope(input.OrgId); // 数据范围检查
-
-        var isExist = await _sysUserRep.IsAnyAsync(u => u.UserName == input.UserName);
+        var isExist = await _sysUserRep.IsAnyAsync(u => u.Account == input.Account);
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D1003);
 
         var user = input.Adapt<SysUser>();
         user.Password = MD5Encryption.Encrypt(CommonConst.SysPassword);
         input.Id = (await _sysUserRep.AsInsertable(user).ExecuteReturnEntityAsync()).Id;
 
-        await UpdateUserRole(input);
+        await UpdateRoleAndExtOrg(input);
     }
 
     /// <summary>
-    /// 更新用户角色
+    /// 更新角色和扩展机构
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    private async Task UpdateUserRole(AddUserInput input)
+    private async Task UpdateRoleAndExtOrg(AddUserInput input)
     {
-        if (input.RoleIdList == null || input.RoleIdList.Count < 1)
-            return;
-        await GrantUserRole(new UserRoleInput()
-        {
-            Id = input.Id,
-            OrgId = input.OrgId,
-            RoleIdList = input.RoleIdList
-        });
+        await GrantUserRole(new UserRoleInput { UserId = input.Id, RoleIdList = input.RoleIdList });
+
+        await _sysUserExtOrgService.UpdateUserExtOrg(input.Id, input.ExtOrgIdList);
     }
 
     /// <summary>
@@ -94,17 +83,16 @@ public class SysUserService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost("/sysUser/update")]
+    [UnitOfWork]
     public async Task UpdateUser(UpdateUserInput input)
     {
-        CheckDataScope(input.OrgId); // 数据范围检查
-
-        var isExist = await _sysUserRep.IsAnyAsync(u => u.UserName == input.UserName && u.Id != input.Id);
+        var isExist = await _sysUserRep.IsAnyAsync(u => u.Account == input.Account && u.Id != input.Id);
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D1003);
 
         await _sysUserRep.AsUpdateable(input.Adapt<SysUser>()).IgnoreColumns(true)
-            .IgnoreColumns(u => new { u.UserType, u.Password, u.Status }).ExecuteCommandAsync();
+            .IgnoreColumns(u => new { u.AccountType, u.Password, u.Status }).ExecuteCommandAsync();
 
-        await UpdateUserRole(input);
+        await UpdateRoleAndExtOrg(input);
     }
 
     /// <summary>
@@ -113,30 +101,24 @@ public class SysUserService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost("/sysUser/delete")]
+    [UnitOfWork]
     public async Task DeleteUser(DeleteUserInput input)
     {
-        CheckDataScope(input.OrgId); // 数据范围检查
-
         var user = await _sysUserRep.GetFirstAsync(u => u.Id == input.Id);
         if (user == null)
             throw Oops.Oh(ErrorCodeEnum.D1002);
-        if (user.UserType == UserTypeEnum.SuperAdmin)
+        if (user.AccountType == AccountTypeEnum.SuperAdmin)
             throw Oops.Oh(ErrorCodeEnum.D1014);
-        //if (user.UserType == UserTypeEnum.Admin)
-        //    throw Oops.Oh(ErrorCodeEnum.D1018);
         if (user.Id == _userManager.UserId)
             throw Oops.Oh(ErrorCodeEnum.D1001);
 
         await _sysUserRep.DeleteAsync(user);
 
-        //// 删除用户-附属机构职位信息
-        await _sysUserExtOrgPosService.DeleteEmpExtByUserId(input.Id);
-
-        //删除用户-角色关联信息
+        // 删除用户角色
         await _sysUserRoleService.DeleteUserRoleByUserId(input.Id);
 
-        //删除用户-机构关联信息
-        await _sysUserOrgService.DeleteUserOrgByUserId(input.Id);
+        // 删除用户扩展机构
+        await _sysUserExtOrgService.DeleteUserExtOrgByUserId(input.Id);
     }
 
     /// <summary>
@@ -158,7 +140,7 @@ public class SysUserService : IDynamicApiController, ITransient
     public async Task<int> SetUserStatus(UserInput input)
     {
         var user = await _sysUserRep.GetFirstAsync(u => u.Id == input.Id);
-        if (user.UserType == UserTypeEnum.SuperAdmin)
+        if (user.AccountType == AccountTypeEnum.SuperAdmin)
             throw Oops.Oh(ErrorCodeEnum.D1015);
 
         if (!Enum.IsDefined(typeof(StatusEnum), input.Status))
@@ -177,31 +159,13 @@ public class SysUserService : IDynamicApiController, ITransient
     [HttpPost("/sysUser/grantRole")]
     public async Task GrantUserRole(UserRoleInput input)
     {
-        var user = await _sysUserRep.GetFirstAsync(u => u.Id == input.Id);
-        if (user.UserType == UserTypeEnum.SuperAdmin)
+        var user = await _sysUserRep.GetFirstAsync(u => u.Id == input.UserId);
+        if (user.AccountType == AccountTypeEnum.SuperAdmin)
             throw Oops.Oh(ErrorCodeEnum.D1022);
 
-        //if (user.UserType == UserTypeEnum.Admin)
-        //    throw Oops.Oh(ErrorCodeEnum.D1008);
-
-        CheckDataScope(input.OrgId); // 数据范围检查
         await _sysUserRoleService.GrantUserRole(input);
     }
 
-    /// <summary>
-    /// 授权用户机构
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpPost("/sysUser/grantOrg")]
-    public async Task GrantUserOrg(UserOrgInput input)
-    {
-        _sysCacheService.Remove(CacheConst.KeyOrgIdList + $"{input.Id}"); // 清除缓存
-
-        CheckDataScope(input.OrgId); // 数据范围检查
-        await _sysUserOrgService.GrantUserOrg(input);
-    }
-
     /// <summary>
     /// 修改用户密码
     /// </summary>
@@ -233,48 +197,22 @@ public class SysUserService : IDynamicApiController, ITransient
     /// <summary>
     /// 获取用户拥有角色
     /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpGet("/sysUser/ownRole")]
-    public async Task<List<long>> GetUserOwnRole([FromQuery] UserInput input)
-    {
-        return await _sysUserRoleService.GetUserRoleIdList(input.Id);
-    }
-
-    /// <summary>
-    /// 获取用户拥有机构
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpGet("/sysUser/ownOrg")]
-    public async Task<List<long>> GetUserOwnOrg([FromQuery] UserInput input)
-    {
-        return await _sysUserOrgService.GetUserOrgIdList(input.Id);
-    }
-
-    /// <summary>
-    /// 获取当前用户机构列表权限
-    /// </summary>
+    /// <param name="userId"></param>
     /// <returns></returns>
-    [NonAction]
-    public async Task<List<long>> GetUserOrgIdList()
+    [HttpGet("/sysUser/ownRole/{userId}")]
+    public async Task<List<long>> GetUserOwnRole(long userId)
     {
-        return await _sysOrgService.GetUserOrgIdList();
+        return await _sysUserRoleService.GetUserRoleIdList(userId);
     }
 
     /// <summary>
-    /// 检查用户数据范围
-    /// 当有多个机构时,在登录时选择一个组织,所以组织Id/OrgId从前端传过来
+    /// 获取用户扩展机构
     /// </summary>
-    /// <param name="orgId"></param>
+    /// <param name="userId"></param>
     /// <returns></returns>
-    private async void CheckDataScope(long orgId)
+    [HttpGet("/sysUser/ownOrg/{userId}")]
+    public async Task<List<SysUserExtOrg>> GetUserOrgList(long userId)
     {
-        if (!_userManager.SuperAdmin)
-        {
-            var dataScopes = await GetUserOrgIdList();
-            if (!dataScopes.Any(u => u == orgId))
-                throw Oops.Oh(ErrorCodeEnum.D1013);
-        }
+        return await _sysUserExtOrgService.GetUserExtOrgList(userId);
     }
 }

+ 10 - 5
Admin.NET/Admin.NET.Core/Service/User/UserManager.cs

@@ -1,9 +1,9 @@
 namespace Admin.NET.Core;
 
 /// <summary>
-/// 用户管理
+/// 当前登录用户
 /// </summary>
-public class UserManager : IUserManager, IScoped
+public class UserManager : IScoped
 {
     private readonly SqlSugarRepository<SysUser> _sysUserRep;
     private readonly IHttpContextAccessor _httpContextAccessor;
@@ -13,9 +13,14 @@ public class UserManager : IUserManager, IScoped
         get => long.Parse(_httpContextAccessor.HttpContext.User.FindFirst(ClaimConst.UserId)?.Value);
     }
 
+    public long OrgId
+    {
+        get => long.Parse(_httpContextAccessor.HttpContext.User.FindFirst(ClaimConst.OrgId)?.Value);
+    }
+
     public string UserName
     {
-        get => _httpContextAccessor.HttpContext.User.FindFirst(ClaimConst.UserName)?.Value;
+        get => _httpContextAccessor.HttpContext.User.FindFirst(ClaimConst.Account)?.Value;
     }
 
     public string RealName
@@ -25,7 +30,7 @@ public class UserManager : IUserManager, IScoped
 
     public bool SuperAdmin
     {
-        get => _httpContextAccessor.HttpContext.User.FindFirst(ClaimConst.SuperAdmin)?.Value == ((int)UserTypeEnum.SuperAdmin).ToString();
+        get => _httpContextAccessor.HttpContext.User.FindFirst(ClaimConst.AccountType)?.Value == ((int)AccountTypeEnum.SuperAdmin).ToString();
     }
 
     public string OpenId
@@ -35,7 +40,7 @@ public class UserManager : IUserManager, IScoped
 
     public SysUser User
     {
-        get => _sysUserRep.AsQueryable().Includes(t => t.SysOrg).First(u => u.Id == UserId);
+        get => _sysUserRep.GetFirst(u => u.Id == UserId);
     }
 
     public UserManager(SqlSugarRepository<SysUser> sysUserRep,

+ 1 - 1
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

@@ -343,7 +343,7 @@ public static class SqlSugarSetup
     private static void SetCustomEntityFilter(SqlSugarScopeProvider db)
     {
         // 排除超管过滤
-        if (App.User?.FindFirst(ClaimConst.SuperAdmin)?.Value == ((int)UserTypeEnum.SuperAdmin).ToString())
+        if (App.User?.FindFirst(ClaimConst.AccountType)?.Value == ((int)AccountTypeEnum.SuperAdmin).ToString())
             return;
 
         // 配置用户机构范围缓存

+ 1 - 1
Admin.NET/Admin.NET.Core/Util/AdminResultProvider.cs

@@ -85,7 +85,7 @@ public class AdminResultProvider : IUnifyResultProvider
             Result = data,
             Type = succeeded ? "success" : "error",
             Extras = UnifyContext.Take(),
-            Time = DateTime.Now  
+            Time = DateTime.Now
         };
     }
 }

+ 1 - 1
Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs

@@ -53,7 +53,7 @@ namespace Admin.NET.Web.Core
                 return true;
 
             // 管理员判断
-            if (App.User.FindFirst(ClaimConst.SuperAdmin)?.Value == ((int)UserTypeEnum.SuperAdmin).ToString())
+            if (App.User.FindFirst(ClaimConst.AccountType)?.Value == ((int)AccountTypeEnum.SuperAdmin).ToString())
                 return true;
 
             // 路由名称

+ 1 - 1
Web/package.json

@@ -30,7 +30,7 @@
 		"screenfull": "^6.0.2",
 		"sortablejs": "^1.15.0",
 		"splitpanes": "^3.1.1",
-		"vform3-builds": "^3.0.8",
+		"vform3-builds": "^3.0.9",
 		"vue": "^3.2.37",
 		"vue-clipboard3": "^2.0.0",
 		"vue-grid-layout": "^3.0.0-beta1",

+ 4 - 4
Web/src/api-services/apis/sys-auth-api.ts

@@ -17,7 +17,7 @@ import { Configuration } from '../configuration';
 // @ts-ignore
 import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
 import { AdminResultLoginOutput } from '../models';
-import { AdminResultLoginUserInfoOutput } from '../models';
+import { AdminResultLoginUserOutput } from '../models';
 import { AdminResultObject } from '../models';
 import { AdminResultString } from '../models';
 import { LoginInput } from '../models';
@@ -353,7 +353,7 @@ export const SysAuthApiFp = function(configuration?: Configuration) {
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async getUserInfoGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultLoginUserInfoOutput>>> {
+        async getUserInfoGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultLoginUserOutput>>> {
             const localVarAxiosArgs = await SysAuthApiAxiosParamCreator(configuration).getUserInfoGet(options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
@@ -449,7 +449,7 @@ export const SysAuthApiFactory = function (configuration?: Configuration, basePa
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async getUserInfoGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultLoginUserInfoOutput>> {
+        async getUserInfoGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultLoginUserOutput>> {
             return SysAuthApiFp(configuration).getUserInfoGet(options).then((request) => request(axios, basePath));
         },
         /**
@@ -529,7 +529,7 @@ export class SysAuthApi extends BaseAPI {
      * @throws {RequiredError}
      * @memberof SysAuthApi
      */
-    public async getUserInfoGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultLoginUserInfoOutput>> {
+    public async getUserInfoGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultLoginUserOutput>> {
         return SysAuthApiFp(this.configuration).getUserInfoGet(options).then((request) => request(this.axios, this.basePath));
     }
     /**

+ 4 - 4
Web/src/api-services/apis/sys-online-user-api.ts

@@ -16,7 +16,7 @@ import { Configuration } from '../configuration';
 // Some imports not used depending on template conditions
 // @ts-ignore
 import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-import { AdminResultObject } from '../models';
+import { AdminResultSqlSugarPagedListSysOnlineUser } from '../models';
 import { SysOnlineUser } from '../models';
 /**
  * SysOnlineUserApi - axios parameter creator
@@ -172,7 +172,7 @@ export const SysOnlineUserApiFp = function(configuration?: Configuration) {
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysOnlineUserPageGet(userName?: string, realName?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultObject>>> {
+        async sysOnlineUserPageGet(userName?: string, realName?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSqlSugarPagedListSysOnlineUser>>> {
             const localVarAxiosArgs = await SysOnlineUserApiAxiosParamCreator(configuration).sysOnlineUserPageGet(userName, realName, page, pageSize, field, order, descStr, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
@@ -211,7 +211,7 @@ export const SysOnlineUserApiFactory = function (configuration?: Configuration,
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysOnlineUserPageGet(userName?: string, realName?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
+        async sysOnlineUserPageGet(userName?: string, realName?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSqlSugarPagedListSysOnlineUser>> {
             return SysOnlineUserApiFp(configuration).sysOnlineUserPageGet(userName, realName, page, pageSize, field, order, descStr, options).then((request) => request(axios, basePath));
         },
     };
@@ -249,7 +249,7 @@ export class SysOnlineUserApi extends BaseAPI {
      * @throws {RequiredError}
      * @memberof SysOnlineUserApi
      */
-    public async sysOnlineUserPageGet(userName?: string, realName?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
+    public async sysOnlineUserPageGet(userName?: string, realName?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultSqlSugarPagedListSysOnlineUser>> {
         return SysOnlineUserApiFp(this.configuration).sysOnlineUserPageGet(userName, realName, page, pageSize, field, order, descStr, options).then((request) => request(this.axios, this.basePath));
     }
 }

+ 0 - 77
Web/src/api-services/apis/sys-org-api.ts

@@ -200,48 +200,6 @@ export const SysOrgApiAxiosParamCreator = function (configuration?: Configuratio
             const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
             localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
 
-            return {
-                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @summary 获取用户拥有机构信息列表
-         * @param {number} userId 用户id
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        sysOrgUserOwnOrgInfoUserIdGet: async (userId: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            // verify required parameter 'userId' is not null or undefined
-            if (userId === null || userId === undefined) {
-                throw new RequiredError('userId','Required parameter userId was null or undefined when calling sysOrgUserOwnOrgInfoUserIdGet.');
-            }
-            const localVarPath = `/sysOrg/userOwnOrgInfo/{userId}`
-                .replace(`{${"userId"}}`, encodeURIComponent(String(userId)));
-            // use dummy base URL string because the URL constructor only accepts absolute URLs.
-            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication Bearer required
-
-            const query = new URLSearchParams(localVarUrlObj.search);
-            for (const key in localVarQueryParameter) {
-                query.set(key, localVarQueryParameter[key]);
-            }
-            for (const key in options.params) {
-                query.set(key, options.params[key]);
-            }
-            localVarUrlObj.search = (new URLSearchParams(query)).toString();
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
             return {
                 url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
                 options: localVarRequestOptions,
@@ -314,20 +272,6 @@ export const SysOrgApiFp = function(configuration?: Configuration) {
                 return axios.request(axiosRequestArgs);
             };
         },
-        /**
-         * 
-         * @summary 获取用户拥有机构信息列表
-         * @param {number} userId 用户id
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async sysOrgUserOwnOrgInfoUserIdGet(userId: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListSysOrg>>> {
-            const localVarAxiosArgs = await SysOrgApiAxiosParamCreator(configuration).sysOrgUserOwnOrgInfoUserIdGet(userId, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
     }
 };
 
@@ -379,16 +323,6 @@ export const SysOrgApiFactory = function (configuration?: Configuration, basePat
         async sysOrgUpdatePost(body?: UpdateOrgInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
             return SysOrgApiFp(configuration).sysOrgUpdatePost(body, options).then((request) => request(axios, basePath));
         },
-        /**
-         * 
-         * @summary 获取用户拥有机构信息列表
-         * @param {number} userId 用户id
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async sysOrgUserOwnOrgInfoUserIdGet(userId: number, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListSysOrg>> {
-            return SysOrgApiFp(configuration).sysOrgUserOwnOrgInfoUserIdGet(userId, options).then((request) => request(axios, basePath));
-        },
     };
 };
 
@@ -445,15 +379,4 @@ export class SysOrgApi extends BaseAPI {
     public async sysOrgUpdatePost(body?: UpdateOrgInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
         return SysOrgApiFp(this.configuration).sysOrgUpdatePost(body, options).then((request) => request(this.axios, this.basePath));
     }
-    /**
-     * 
-     * @summary 获取用户拥有机构信息列表
-     * @param {number} userId 用户id
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof SysOrgApi
-     */
-    public async sysOrgUserOwnOrgInfoUserIdGet(userId: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListSysOrg>> {
-        return SysOrgApiFp(this.configuration).sysOrgUserOwnOrgInfoUserIdGet(userId, options).then((request) => request(this.axios, this.basePath));
-    }
 }

+ 4 - 3
Web/src/api-services/apis/sys-tenant-api.ts

@@ -20,6 +20,7 @@ import { AddTenantInput } from '../models';
 import { AdminResultListInt64 } from '../models';
 import { AdminResultListSysMenu } from '../models';
 import { AdminResultObject } from '../models';
+import { AdminResultSqlSugarPagedListSysTenant } from '../models';
 import { AdminResultSysTenant } from '../models';
 import { DeleteTenantInput } from '../models';
 import { RoleMenuInput } from '../models';
@@ -597,7 +598,7 @@ export const SysTenantApiFp = function(configuration?: Configuration) {
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysTenantPageGet(name?: string, phone?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultObject>>> {
+        async sysTenantPageGet(name?: string, phone?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSqlSugarPagedListSysTenant>>> {
             const localVarAxiosArgs = await SysTenantApiAxiosParamCreator(configuration).sysTenantPageGet(name, phone, page, pageSize, field, order, descStr, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
@@ -723,7 +724,7 @@ export const SysTenantApiFactory = function (configuration?: Configuration, base
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysTenantPageGet(name?: string, phone?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
+        async sysTenantPageGet(name?: string, phone?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSqlSugarPagedListSysTenant>> {
             return SysTenantApiFp(configuration).sysTenantPageGet(name, phone, page, pageSize, field, order, descStr, options).then((request) => request(axios, basePath));
         },
         /**
@@ -846,7 +847,7 @@ export class SysTenantApi extends BaseAPI {
      * @throws {RequiredError}
      * @memberof SysTenantApi
      */
-    public async sysTenantPageGet(name?: string, phone?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
+    public async sysTenantPageGet(name?: string, phone?: string, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultSqlSugarPagedListSysTenant>> {
         return SysTenantApiFp(this.configuration).sysTenantPageGet(name, phone, page, pageSize, field, order, descStr, options).then((request) => request(this.axios, this.basePath));
     }
     /**

+ 62 - 153
Web/src/api-services/apis/sys-user-api.ts

@@ -19,15 +19,14 @@ import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } fr
 import { AddUserInput } from '../models';
 import { AdminResultInt32 } from '../models';
 import { AdminResultListInt64 } from '../models';
+import { AdminResultListSysUserExtOrg } from '../models';
 import { AdminResultSqlSugarPagedListSysUser } from '../models';
 import { AdminResultSysUser } from '../models';
 import { ChangePwdInput } from '../models';
 import { DeleteUserInput } from '../models';
 import { ResetPwdUserInput } from '../models';
-import { StatusEnum } from '../models';
 import { UpdateUserInput } from '../models';
 import { UserInput } from '../models';
-import { UserOrgInput } from '../models';
 import { UserRoleInput } from '../models';
 /**
  * SysUserApi - axios parameter creator
@@ -199,47 +198,6 @@ export const SysUserApiAxiosParamCreator = function (configuration?: Configurati
                 options: localVarRequestOptions,
             };
         },
-        /**
-         * 
-         * @summary 授权用户机构
-         * @param {UserOrgInput} [body] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        sysUserGrantOrgPost: async (body?: UserOrgInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/sysUser/grantOrg`;
-            // use dummy base URL string because the URL constructor only accepts absolute URLs.
-            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication Bearer required
-
-            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
-
-            const query = new URLSearchParams(localVarUrlObj.search);
-            for (const key in localVarQueryParameter) {
-                query.set(key, localVarQueryParameter[key]);
-            }
-            for (const key in options.params) {
-                query.set(key, options.params[key]);
-            }
-            localVarUrlObj.search = (new URLSearchParams(query)).toString();
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
-
-            return {
-                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
-                options: localVarRequestOptions,
-            };
-        },
         /**
          * 
          * @summary 授权用户角色
@@ -283,18 +241,18 @@ export const SysUserApiAxiosParamCreator = function (configuration?: Configurati
         },
         /**
          * 
-         * @summary 获取用户拥有机构
-         * @param {number} id 主键Id
-         * @param {StatusEnum} [status] 状态
+         * @summary 获取用户扩展机构
+         * @param {number} userId 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        sysUserOwnOrgGet: async (id: number, status?: StatusEnum, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling sysUserOwnOrgGet.');
+        sysUserOwnOrgUserIdGet: async (userId: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'userId' is not null or undefined
+            if (userId === null || userId === undefined) {
+                throw new RequiredError('userId','Required parameter userId was null or undefined when calling sysUserOwnOrgUserIdGet.');
             }
-            const localVarPath = `/sysUser/ownOrg`;
+            const localVarPath = `/sysUser/ownOrg/{userId}`
+                .replace(`{${"userId"}}`, encodeURIComponent(String(userId)));
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -307,14 +265,6 @@ export const SysUserApiAxiosParamCreator = function (configuration?: Configurati
 
             // authentication Bearer required
 
-            if (status !== undefined) {
-                localVarQueryParameter['Status'] = status;
-            }
-
-            if (id !== undefined) {
-                localVarQueryParameter['Id'] = id;
-            }
-
             const query = new URLSearchParams(localVarUrlObj.search);
             for (const key in localVarQueryParameter) {
                 query.set(key, localVarQueryParameter[key]);
@@ -334,17 +284,17 @@ export const SysUserApiAxiosParamCreator = function (configuration?: Configurati
         /**
          * 
          * @summary 获取用户拥有角色
-         * @param {number} id 主键Id
-         * @param {StatusEnum} [status] 状态
+         * @param {number} userId 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        sysUserOwnRoleGet: async (id: number, status?: StatusEnum, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling sysUserOwnRoleGet.');
+        sysUserOwnRoleUserIdGet: async (userId: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'userId' is not null or undefined
+            if (userId === null || userId === undefined) {
+                throw new RequiredError('userId','Required parameter userId was null or undefined when calling sysUserOwnRoleUserIdGet.');
             }
-            const localVarPath = `/sysUser/ownRole`;
+            const localVarPath = `/sysUser/ownRole/{userId}`
+                .replace(`{${"userId"}}`, encodeURIComponent(String(userId)));
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -357,14 +307,6 @@ export const SysUserApiAxiosParamCreator = function (configuration?: Configurati
 
             // authentication Bearer required
 
-            if (status !== undefined) {
-                localVarQueryParameter['Status'] = status;
-            }
-
-            if (id !== undefined) {
-                localVarQueryParameter['Id'] = id;
-            }
-
             const query = new URLSearchParams(localVarUrlObj.search);
             for (const key in localVarQueryParameter) {
                 query.set(key, localVarQueryParameter[key]);
@@ -384,9 +326,10 @@ export const SysUserApiAxiosParamCreator = function (configuration?: Configurati
         /**
          * 
          * @summary 获取用户分页列表
-         * @param {string} [userName] 账号
+         * @param {string} [account] 账号
+         * @param {string} [realName] 姓名
          * @param {string} [phone] 手机号
-         * @param {number} [orgId] 机构Id
+         * @param {number} [orgId] 查询时所选机构Id
          * @param {number} [page] 当前页码
          * @param {number} [pageSize] 页码容量
          * @param {string} [field] 排序字段
@@ -395,7 +338,7 @@ export const SysUserApiAxiosParamCreator = function (configuration?: Configurati
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        sysUserPageGet: async (userName?: string, phone?: string, orgId?: number, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+        sysUserPageGet: async (account?: string, realName?: string, phone?: string, orgId?: number, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
             const localVarPath = `/sysUser/page`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
@@ -409,8 +352,12 @@ export const SysUserApiAxiosParamCreator = function (configuration?: Configurati
 
             // authentication Bearer required
 
-            if (userName !== undefined) {
-                localVarQueryParameter['UserName'] = userName;
+            if (account !== undefined) {
+                localVarQueryParameter['Account'] = account;
+            }
+
+            if (realName !== undefined) {
+                localVarQueryParameter['RealName'] = realName;
             }
 
             if (phone !== undefined) {
@@ -645,20 +592,6 @@ export const SysUserApiFp = function(configuration?: Configuration) {
                 return axios.request(axiosRequestArgs);
             };
         },
-        /**
-         * 
-         * @summary 授权用户机构
-         * @param {UserOrgInput} [body] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async sysUserGrantOrgPost(body?: UserOrgInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
-            const localVarAxiosArgs = await SysUserApiAxiosParamCreator(configuration).sysUserGrantOrgPost(body, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
         /**
          * 
          * @summary 授权用户角色
@@ -675,14 +608,13 @@ export const SysUserApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 获取用户拥有机构
-         * @param {number} id 主键Id
-         * @param {StatusEnum} [status] 状态
+         * @summary 获取用户扩展机构
+         * @param {number} userId 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysUserOwnOrgGet(id: number, status?: StatusEnum, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListInt64>>> {
-            const localVarAxiosArgs = await SysUserApiAxiosParamCreator(configuration).sysUserOwnOrgGet(id, status, options);
+        async sysUserOwnOrgUserIdGet(userId: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListSysUserExtOrg>>> {
+            const localVarAxiosArgs = await SysUserApiAxiosParamCreator(configuration).sysUserOwnOrgUserIdGet(userId, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
@@ -691,13 +623,12 @@ export const SysUserApiFp = function(configuration?: Configuration) {
         /**
          * 
          * @summary 获取用户拥有角色
-         * @param {number} id 主键Id
-         * @param {StatusEnum} [status] 状态
+         * @param {number} userId 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysUserOwnRoleGet(id: number, status?: StatusEnum, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListInt64>>> {
-            const localVarAxiosArgs = await SysUserApiAxiosParamCreator(configuration).sysUserOwnRoleGet(id, status, options);
+        async sysUserOwnRoleUserIdGet(userId: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListInt64>>> {
+            const localVarAxiosArgs = await SysUserApiAxiosParamCreator(configuration).sysUserOwnRoleUserIdGet(userId, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
@@ -706,9 +637,10 @@ export const SysUserApiFp = function(configuration?: Configuration) {
         /**
          * 
          * @summary 获取用户分页列表
-         * @param {string} [userName] 账号
+         * @param {string} [account] 账号
+         * @param {string} [realName] 姓名
          * @param {string} [phone] 手机号
-         * @param {number} [orgId] 机构Id
+         * @param {number} [orgId] 查询时所选机构Id
          * @param {number} [page] 当前页码
          * @param {number} [pageSize] 页码容量
          * @param {string} [field] 排序字段
@@ -717,8 +649,8 @@ export const SysUserApiFp = function(configuration?: Configuration) {
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysUserPageGet(userName?: string, phone?: string, orgId?: number, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSqlSugarPagedListSysUser>>> {
-            const localVarAxiosArgs = await SysUserApiAxiosParamCreator(configuration).sysUserPageGet(userName, phone, orgId, page, pageSize, field, order, descStr, options);
+        async sysUserPageGet(account?: string, realName?: string, phone?: string, orgId?: number, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSqlSugarPagedListSysUser>>> {
+            const localVarAxiosArgs = await SysUserApiAxiosParamCreator(configuration).sysUserPageGet(account, realName, phone, orgId, page, pageSize, field, order, descStr, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
@@ -815,16 +747,6 @@ export const SysUserApiFactory = function (configuration?: Configuration, basePa
         async sysUserDetailGet(id?: number, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysUser>> {
             return SysUserApiFp(configuration).sysUserDetailGet(id, options).then((request) => request(axios, basePath));
         },
-        /**
-         * 
-         * @summary 授权用户机构
-         * @param {UserOrgInput} [body] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async sysUserGrantOrgPost(body?: UserOrgInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
-            return SysUserApiFp(configuration).sysUserGrantOrgPost(body, options).then((request) => request(axios, basePath));
-        },
         /**
          * 
          * @summary 授权用户角色
@@ -837,32 +759,31 @@ export const SysUserApiFactory = function (configuration?: Configuration, basePa
         },
         /**
          * 
-         * @summary 获取用户拥有机构
-         * @param {number} id 主键Id
-         * @param {StatusEnum} [status] 状态
+         * @summary 获取用户扩展机构
+         * @param {number} userId 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysUserOwnOrgGet(id: number, status?: StatusEnum, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListInt64>> {
-            return SysUserApiFp(configuration).sysUserOwnOrgGet(id, status, options).then((request) => request(axios, basePath));
+        async sysUserOwnOrgUserIdGet(userId: number, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListSysUserExtOrg>> {
+            return SysUserApiFp(configuration).sysUserOwnOrgUserIdGet(userId, options).then((request) => request(axios, basePath));
         },
         /**
          * 
          * @summary 获取用户拥有角色
-         * @param {number} id 主键Id
-         * @param {StatusEnum} [status] 状态
+         * @param {number} userId 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysUserOwnRoleGet(id: number, status?: StatusEnum, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListInt64>> {
-            return SysUserApiFp(configuration).sysUserOwnRoleGet(id, status, options).then((request) => request(axios, basePath));
+        async sysUserOwnRoleUserIdGet(userId: number, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListInt64>> {
+            return SysUserApiFp(configuration).sysUserOwnRoleUserIdGet(userId, options).then((request) => request(axios, basePath));
         },
         /**
          * 
          * @summary 获取用户分页列表
-         * @param {string} [userName] 账号
+         * @param {string} [account] 账号
+         * @param {string} [realName] 姓名
          * @param {string} [phone] 手机号
-         * @param {number} [orgId] 机构Id
+         * @param {number} [orgId] 查询时所选机构Id
          * @param {number} [page] 当前页码
          * @param {number} [pageSize] 页码容量
          * @param {string} [field] 排序字段
@@ -871,8 +792,8 @@ export const SysUserApiFactory = function (configuration?: Configuration, basePa
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async sysUserPageGet(userName?: string, phone?: string, orgId?: number, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSqlSugarPagedListSysUser>> {
-            return SysUserApiFp(configuration).sysUserPageGet(userName, phone, orgId, page, pageSize, field, order, descStr, options).then((request) => request(axios, basePath));
+        async sysUserPageGet(account?: string, realName?: string, phone?: string, orgId?: number, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSqlSugarPagedListSysUser>> {
+            return SysUserApiFp(configuration).sysUserPageGet(account, realName, phone, orgId, page, pageSize, field, order, descStr, options).then((request) => request(axios, basePath));
         },
         /**
          * 
@@ -958,17 +879,6 @@ export class SysUserApi extends BaseAPI {
     public async sysUserDetailGet(id?: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultSysUser>> {
         return SysUserApiFp(this.configuration).sysUserDetailGet(id, options).then((request) => request(this.axios, this.basePath));
     }
-    /**
-     * 
-     * @summary 授权用户机构
-     * @param {UserOrgInput} [body] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof SysUserApi
-     */
-    public async sysUserGrantOrgPost(body?: UserOrgInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
-        return SysUserApiFp(this.configuration).sysUserGrantOrgPost(body, options).then((request) => request(this.axios, this.basePath));
-    }
     /**
      * 
      * @summary 授权用户角色
@@ -982,34 +892,33 @@ export class SysUserApi extends BaseAPI {
     }
     /**
      * 
-     * @summary 获取用户拥有机构
-     * @param {number} id 主键Id
-     * @param {StatusEnum} [status] 状态
+     * @summary 获取用户扩展机构
+     * @param {number} userId 
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @memberof SysUserApi
      */
-    public async sysUserOwnOrgGet(id: number, status?: StatusEnum, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListInt64>> {
-        return SysUserApiFp(this.configuration).sysUserOwnOrgGet(id, status, options).then((request) => request(this.axios, this.basePath));
+    public async sysUserOwnOrgUserIdGet(userId: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListSysUserExtOrg>> {
+        return SysUserApiFp(this.configuration).sysUserOwnOrgUserIdGet(userId, options).then((request) => request(this.axios, this.basePath));
     }
     /**
      * 
      * @summary 获取用户拥有角色
-     * @param {number} id 主键Id
-     * @param {StatusEnum} [status] 状态
+     * @param {number} userId 
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @memberof SysUserApi
      */
-    public async sysUserOwnRoleGet(id: number, status?: StatusEnum, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListInt64>> {
-        return SysUserApiFp(this.configuration).sysUserOwnRoleGet(id, status, options).then((request) => request(this.axios, this.basePath));
+    public async sysUserOwnRoleUserIdGet(userId: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListInt64>> {
+        return SysUserApiFp(this.configuration).sysUserOwnRoleUserIdGet(userId, options).then((request) => request(this.axios, this.basePath));
     }
     /**
      * 
      * @summary 获取用户分页列表
-     * @param {string} [userName] 账号
+     * @param {string} [account] 账号
+     * @param {string} [realName] 姓名
      * @param {string} [phone] 手机号
-     * @param {number} [orgId] 机构Id
+     * @param {number} [orgId] 查询时所选机构Id
      * @param {number} [page] 当前页码
      * @param {number} [pageSize] 页码容量
      * @param {string} [field] 排序字段
@@ -1019,8 +928,8 @@ export class SysUserApi extends BaseAPI {
      * @throws {RequiredError}
      * @memberof SysUserApi
      */
-    public async sysUserPageGet(userName?: string, phone?: string, orgId?: number, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultSqlSugarPagedListSysUser>> {
-        return SysUserApiFp(this.configuration).sysUserPageGet(userName, phone, orgId, page, pageSize, field, order, descStr, options).then((request) => request(this.axios, this.basePath));
+    public async sysUserPageGet(account?: string, realName?: string, phone?: string, orgId?: number, page?: number, pageSize?: number, field?: string, order?: string, descStr?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultSqlSugarPagedListSysUser>> {
+        return SysUserApiFp(this.configuration).sysUserPageGet(account, realName, phone, orgId, page, pageSize, field, order, descStr, options).then((request) => request(this.axios, this.basePath));
     }
     /**
      * 

+ 4 - 4
Web/src/api-services/models/user-type-enum.ts → Web/src/api-services/models/account-type-enum.ts

@@ -12,14 +12,14 @@
  * Do not edit the class manually.
  */
 /**
- * 账号类型枚举<br />&nbsp;管理员 Admin = 1<br />&nbsp;普通账号 User = 2<br />&nbsp;游客 None = 3<br />&nbsp;超级管理员 SuperAdmin = 999<br />
+ * 账号类型枚举<br />&nbsp;游客 None = 0<br />&nbsp;普通账号 User = 1<br />&nbsp;管理员 Admin = 2<br />&nbsp;超级管理员 SuperAdmin = 99999<br />
  * @export
  * @enum {string}
  */
-export enum UserTypeEnum {
+export enum AccountTypeEnum {
+    NUMBER_0 = 0,
     NUMBER_1 = 1,
     NUMBER_2 = 2,
-    NUMBER_3 = 3,
-    NUMBER_999 = 999
+    NUMBER_99999 = 99999
 }
 

+ 0 - 6
Web/src/api-services/models/add-org-input.ts

@@ -91,12 +91,6 @@ export interface AddOrgInput {
      * @memberof AddOrgInput
      */
     status?: StatusEnum;
-    /**
-     * 级别 例如:省、市、县、区
-     * @type {string}
-     * @memberof AddOrgInput
-     */
-    level?: string | null;
     /**
      * 机构子项
      * @type {Array<SysOrg>}

+ 124 - 26
Web/src/api-services/models/add-user-input.ts

@@ -11,12 +11,14 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
+import { AccountTypeEnum } from './account-type-enum';
+import { CardTypeEnum } from './card-type-enum';
+import { CultureLevelEnum } from './culture-level-enum';
 import { GenderEnum } from './gender-enum';
-import { JobStatusEnum } from './job-status-enum';
 import { StatusEnum } from './status-enum';
 import { SysOrg } from './sys-org';
 import { SysPos } from './sys-pos';
-import { UserTypeEnum } from './user-type-enum';
+import { SysUserExtOrg } from './sys-user-ext-org';
 /**
  * 
  * @export
@@ -77,18 +79,48 @@ export interface AddUserInput {
      * @memberof AddUserInput
      */
     avatar?: string | null;
+    /**
+     * 
+     * @type {GenderEnum}
+     * @memberof AddUserInput
+     */
+    sex?: GenderEnum;
+    /**
+     * 年龄
+     * @type {number}
+     * @memberof AddUserInput
+     */
+    age?: number;
     /**
      * 出生日期
      * @type {Date}
      * @memberof AddUserInput
      */
     birthday?: Date | null;
+    /**
+     * 民族
+     * @type {string}
+     * @memberof AddUserInput
+     */
+    nation?: string | null;
+    /**
+     * 手机号码
+     * @type {string}
+     * @memberof AddUserInput
+     */
+    phone?: string | null;
     /**
      * 
-     * @type {GenderEnum}
+     * @type {CardTypeEnum}
      * @memberof AddUserInput
      */
-    sex?: GenderEnum;
+    cardType?: CardTypeEnum;
+    /**
+     * 身份证号
+     * @type {string}
+     * @memberof AddUserInput
+     */
+    idCardNum?: string | null;
     /**
      * 邮箱
      * @type {string}
@@ -96,35 +128,83 @@ export interface AddUserInput {
      */
     email?: string | null;
     /**
-     * 手机号码
+     * 地址
      * @type {string}
      * @memberof AddUserInput
      */
-    phone?: string | null;
+    address?: string | null;
     /**
-     * 身份证号
+     * 
+     * @type {CultureLevelEnum}
+     * @memberof AddUserInput
+     */
+    cultureLevel?: CultureLevelEnum;
+    /**
+     * 政治面貌
+     * @type {string}
+     * @memberof AddUserInput
+     */
+    politicalOutlook?: string | null;
+    /**
+     * 毕业院校
+     * @type {string}
+     * @memberof AddUserInput
+     */
+    college?: string | null;
+    /**
+     * 办公电话
+     * @type {string}
+     * @memberof AddUserInput
+     */
+    officePhone?: string | null;
+    /**
+     * 紧急联系人
      * @type {string}
      * @memberof AddUserInput
      */
-    idCard?: string | null;
+    emergencyContact?: string | null;
     /**
-     * 个性签名
+     * 紧急联系人电话
      * @type {string}
      * @memberof AddUserInput
      */
-    signature?: string | null;
+    emergencyPhone?: string | null;
+    /**
+     * 紧急联系人地址
+     * @type {string}
+     * @memberof AddUserInput
+     */
+    emergencyAddress?: string | null;
     /**
      * 个人简介
      * @type {string}
      * @memberof AddUserInput
      */
     introduction?: string | null;
+    /**
+     * 排序
+     * @type {number}
+     * @memberof AddUserInput
+     */
+    order?: number;
     /**
      * 
-     * @type {UserTypeEnum}
+     * @type {StatusEnum}
      * @memberof AddUserInput
      */
-    userType?: UserTypeEnum;
+    status?: StatusEnum;
+    /**
+     * 备注
+     * @type {string}
+     * @memberof AddUserInput
+     */
+    remark?: string | null;
+    /**
+     * 
+     * @type {AccountTypeEnum}
+     * @memberof AddUserInput
+     */
+    accountType?: AccountTypeEnum;
     /**
      * 机构Id
      * @type {number}
@@ -156,35 +236,47 @@ export interface AddUserInput {
      */
     jobNum?: string | null;
     /**
-     * 
-     * @type {JobStatusEnum}
+     * 职级
+     * @type {string}
      * @memberof AddUserInput
      */
-    jobStatus?: JobStatusEnum;
+    posLevel?: string | null;
     /**
-     * 排序
-     * @type {number}
+     * 入职日期
+     * @type {Date}
      * @memberof AddUserInput
      */
-    order?: number;
+    joinDate?: Date | null;
     /**
-     * 
-     * @type {StatusEnum}
+     * 最新登录Ip
+     * @type {string}
      * @memberof AddUserInput
      */
-    status?: StatusEnum;
+    lastLoginIp?: string | null;
     /**
-     * 备注
+     * 最新登录地点
      * @type {string}
      * @memberof AddUserInput
      */
-    remark?: string | null;
+    lastLoginAddress?: string | null;
     /**
-     * 账号名称
+     * 最新登录时间
+     * @type {Date}
+     * @memberof AddUserInput
+     */
+    lastLoginTime?: Date | null;
+    /**
+     * 最新登录设备
      * @type {string}
      * @memberof AddUserInput
      */
-    userName: string;
+    lastLoginDevice?: string | null;
+    /**
+     * 账号
+     * @type {string}
+     * @memberof AddUserInput
+     */
+    account: string;
     /**
      * 真实姓名
      * @type {string}
@@ -192,9 +284,15 @@ export interface AddUserInput {
      */
     realName: string;
     /**
-     * 角色Id集合
+     * 角色集合
      * @type {Array<number>}
      * @memberof AddUserInput
      */
     roleIdList?: Array<number> | null;
+    /**
+     * 扩展机构集合
+     * @type {Array<SysUserExtOrg>}
+     * @memberof AddUserInput
+     */
+    extOrgIdList?: Array<SysUserExtOrg> | null;
 }

+ 57 - 0
Web/src/api-services/models/admin-result-list-sys-user-ext-org.ts

@@ -0,0 +1,57 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET
+ * 让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: 515096995@qq.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SysUserExtOrg } from './sys-user-ext-org';
+/**
+ * 全局返回结果
+ * @export
+ * @interface AdminResultListSysUserExtOrg
+ */
+export interface AdminResultListSysUserExtOrg {
+    /**
+     * 状态码
+     * @type {number}
+     * @memberof AdminResultListSysUserExtOrg
+     */
+    code?: number;
+    /**
+     * 类型success、warning、error
+     * @type {string}
+     * @memberof AdminResultListSysUserExtOrg
+     */
+    type?: string | null;
+    /**
+     * 错误信息
+     * @type {string}
+     * @memberof AdminResultListSysUserExtOrg
+     */
+    message?: string | null;
+    /**
+     * 数据
+     * @type {Array<SysUserExtOrg>}
+     * @memberof AdminResultListSysUserExtOrg
+     */
+    result?: Array<SysUserExtOrg> | null;
+    /**
+     * 附加数据
+     * @type {any}
+     * @memberof AdminResultListSysUserExtOrg
+     */
+    extras?: any | null;
+    /**
+     * 时间
+     * @type {Date}
+     * @memberof AdminResultListSysUserExtOrg
+     */
+    time?: Date;
+}

+ 11 - 11
Web/src/api-services/models/admin-result-login-user-info-output.ts → Web/src/api-services/models/admin-result-login-user-output.ts

@@ -11,47 +11,47 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-import { LoginUserInfoOutput } from './login-user-info-output';
+import { LoginUserOutput } from './login-user-output';
 /**
  * 全局返回结果
  * @export
- * @interface AdminResultLoginUserInfoOutput
+ * @interface AdminResultLoginUserOutput
  */
-export interface AdminResultLoginUserInfoOutput {
+export interface AdminResultLoginUserOutput {
     /**
      * 状态码
      * @type {number}
-     * @memberof AdminResultLoginUserInfoOutput
+     * @memberof AdminResultLoginUserOutput
      */
     code?: number;
     /**
      * 类型success、warning、error
      * @type {string}
-     * @memberof AdminResultLoginUserInfoOutput
+     * @memberof AdminResultLoginUserOutput
      */
     type?: string | null;
     /**
      * 错误信息
      * @type {string}
-     * @memberof AdminResultLoginUserInfoOutput
+     * @memberof AdminResultLoginUserOutput
      */
     message?: string | null;
     /**
      * 
-     * @type {LoginUserInfoOutput}
-     * @memberof AdminResultLoginUserInfoOutput
+     * @type {LoginUserOutput}
+     * @memberof AdminResultLoginUserOutput
      */
-    result?: LoginUserInfoOutput;
+    result?: LoginUserOutput;
     /**
      * 附加数据
      * @type {any}
-     * @memberof AdminResultLoginUserInfoOutput
+     * @memberof AdminResultLoginUserOutput
      */
     extras?: any | null;
     /**
      * 时间
      * @type {Date}
-     * @memberof AdminResultLoginUserInfoOutput
+     * @memberof AdminResultLoginUserOutput
      */
     time?: Date;
 }

+ 57 - 0
Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-online-user.ts

@@ -0,0 +1,57 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET
+ * 让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: 515096995@qq.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SqlSugarPagedListSysOnlineUser } from './sql-sugar-paged-list-sys-online-user';
+/**
+ * 全局返回结果
+ * @export
+ * @interface AdminResultSqlSugarPagedListSysOnlineUser
+ */
+export interface AdminResultSqlSugarPagedListSysOnlineUser {
+    /**
+     * 状态码
+     * @type {number}
+     * @memberof AdminResultSqlSugarPagedListSysOnlineUser
+     */
+    code?: number;
+    /**
+     * 类型success、warning、error
+     * @type {string}
+     * @memberof AdminResultSqlSugarPagedListSysOnlineUser
+     */
+    type?: string | null;
+    /**
+     * 错误信息
+     * @type {string}
+     * @memberof AdminResultSqlSugarPagedListSysOnlineUser
+     */
+    message?: string | null;
+    /**
+     * 
+     * @type {SqlSugarPagedListSysOnlineUser}
+     * @memberof AdminResultSqlSugarPagedListSysOnlineUser
+     */
+    result?: SqlSugarPagedListSysOnlineUser;
+    /**
+     * 附加数据
+     * @type {any}
+     * @memberof AdminResultSqlSugarPagedListSysOnlineUser
+     */
+    extras?: any | null;
+    /**
+     * 时间
+     * @type {Date}
+     * @memberof AdminResultSqlSugarPagedListSysOnlineUser
+     */
+    time?: Date;
+}

+ 57 - 0
Web/src/api-services/models/admin-result-sql-sugar-paged-list-sys-tenant.ts

@@ -0,0 +1,57 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET
+ * 让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: 515096995@qq.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SqlSugarPagedListSysTenant } from './sql-sugar-paged-list-sys-tenant';
+/**
+ * 全局返回结果
+ * @export
+ * @interface AdminResultSqlSugarPagedListSysTenant
+ */
+export interface AdminResultSqlSugarPagedListSysTenant {
+    /**
+     * 状态码
+     * @type {number}
+     * @memberof AdminResultSqlSugarPagedListSysTenant
+     */
+    code?: number;
+    /**
+     * 类型success、warning、error
+     * @type {string}
+     * @memberof AdminResultSqlSugarPagedListSysTenant
+     */
+    type?: string | null;
+    /**
+     * 错误信息
+     * @type {string}
+     * @memberof AdminResultSqlSugarPagedListSysTenant
+     */
+    message?: string | null;
+    /**
+     * 
+     * @type {SqlSugarPagedListSysTenant}
+     * @memberof AdminResultSqlSugarPagedListSysTenant
+     */
+    result?: SqlSugarPagedListSysTenant;
+    /**
+     * 附加数据
+     * @type {any}
+     * @memberof AdminResultSqlSugarPagedListSysTenant
+     */
+    extras?: any | null;
+    /**
+     * 时间
+     * @type {Date}
+     * @memberof AdminResultSqlSugarPagedListSysTenant
+     */
+    time?: Date;
+}

+ 3 - 2
Web/src/api-services/models/job-status-enum.ts → Web/src/api-services/models/card-type-enum.ts

@@ -12,11 +12,12 @@
  * Do not edit the class manually.
  */
 /**
- * 岗位状态枚举<br />&nbsp;在职 On = 1<br />&nbsp;离职 Off = 2<br />&nbsp;请假 Leave = 3<br />&nbsp;其他 Other = 4<br />
+ * 证件类型枚举<br />&nbsp;身份证 IdCard = 0<br />&nbsp;护照 PassportCard = 1<br />&nbsp;出生证 BirthCard = 2<br />&nbsp;港澳台通行证 GatCard = 3<br />&nbsp;外国人居留证 ForeignCard = 4<br />
  * @export
  * @enum {string}
  */
-export enum JobStatusEnum {
+export enum CardTypeEnum {
+    NUMBER_0 = 0,
     NUMBER_1 = 1,
     NUMBER_2 = 2,
     NUMBER_3 = 3,

+ 12 - 21
Web/src/api-services/models/user-org-input.ts → Web/src/api-services/models/culture-level-enum.ts

@@ -12,27 +12,18 @@
  * Do not edit the class manually.
  */
 /**
- * 授权用户机构
+ * 文化程度枚举<br />&nbsp;小学 Level1 = 0<br />&nbsp;初中 Level2 = 1<br />&nbsp;高中 Level3 = 2<br />&nbsp;中专 Level4 = 3<br />&nbsp;大专 Level5 = 4<br />&nbsp;本科 Level6 = 5<br />&nbsp;硕士研究生 Level7 = 6<br />&nbsp;博士研究生 Level8 = 7<br />
  * @export
- * @interface UserOrgInput
+ * @enum {string}
  */
-export interface UserOrgInput {
-    /**
-     * 主键Id
-     * @type {number}
-     * @memberof UserOrgInput
-     */
-    id: number;
-    /**
-     * 机构Id
-     * @type {number}
-     * @memberof UserOrgInput
-     */
-    orgId?: number;
-    /**
-     * 机构Id集合
-     * @type {Array<number>}
-     * @memberof UserOrgInput
-     */
-    orgIdList?: Array<number> | null;
+export enum CultureLevelEnum {
+    NUMBER_0 = 0,
+    NUMBER_1 = 1,
+    NUMBER_2 = 2,
+    NUMBER_3 = 3,
+    NUMBER_4 = 4,
+    NUMBER_5 = 5,
+    NUMBER_6 = 6,
+    NUMBER_7 = 7
 }
+

+ 11 - 6
Web/src/api-services/models/index.ts

@@ -1,3 +1,4 @@
+export * from './account-type-enum';
 export * from './add-code-gen-input';
 export * from './add-config-input';
 export * from './add-dict-data-input';
@@ -33,10 +34,11 @@ export * from './admin-result-list-sys-file';
 export * from './admin-result-list-sys-menu';
 export * from './admin-result-list-sys-org';
 export * from './admin-result-list-sys-pos';
+export * from './admin-result-list-sys-user-ext-org';
 export * from './admin-result-list-table-column-ouput';
 export * from './admin-result-list-table-output';
 export * from './admin-result-login-output';
-export * from './admin-result-login-user-info-output';
+export * from './admin-result-login-user-output';
 export * from './admin-result-notice-detail-output';
 export * from './admin-result-object';
 export * from './admin-result-sql-sugar-paged-list-sys-code-gen';
@@ -48,7 +50,9 @@ export * from './admin-result-sql-sugar-paged-list-sys-log-diff';
 export * from './admin-result-sql-sugar-paged-list-sys-log-ex';
 export * from './admin-result-sql-sugar-paged-list-sys-log-op';
 export * from './admin-result-sql-sugar-paged-list-sys-log-vis';
+export * from './admin-result-sql-sugar-paged-list-sys-online-user';
 export * from './admin-result-sql-sugar-paged-list-sys-role';
+export * from './admin-result-sql-sugar-paged-list-sys-tenant';
 export * from './admin-result-sql-sugar-paged-list-sys-user';
 export * from './admin-result-sql-sugar-paged-list-timer-output';
 export * from './admin-result-string';
@@ -61,10 +65,12 @@ export * from './admin-result-sys-tenant';
 export * from './admin-result-sys-user';
 export * from './admin-result-we-chat-pay';
 export * from './admin-result-we-chat-pay-output';
+export * from './card-type-enum';
 export * from './change-pwd-input';
 export * from './change-status-notice-input';
 export * from './code-gen-config';
 export * from './create-entity-input';
+export * from './culture-level-enum';
 export * from './data-scope-enum';
 export * from './database-output';
 export * from './db-column-input';
@@ -95,12 +101,10 @@ export * from './file-output';
 export * from './gen-auth-url-input';
 export * from './gender-enum';
 export * from './iaction-result';
-export * from './job-status-enum';
 export * from './login-input';
 export * from './login-output';
-export * from './login-role';
 export * from './login-type-enum';
-export * from './login-user-info-output';
+export * from './login-user-output';
 export * from './menu-output';
 export * from './menu-type-enum';
 export * from './message-input';
@@ -131,7 +135,9 @@ export * from './sql-sugar-paged-list-sys-log-diff';
 export * from './sql-sugar-paged-list-sys-log-ex';
 export * from './sql-sugar-paged-list-sys-log-op';
 export * from './sql-sugar-paged-list-sys-log-vis';
+export * from './sql-sugar-paged-list-sys-online-user';
 export * from './sql-sugar-paged-list-sys-role';
+export * from './sql-sugar-paged-list-sys-tenant';
 export * from './sql-sugar-paged-list-sys-user';
 export * from './sql-sugar-paged-list-timer-output';
 export * from './status-enum';
@@ -156,6 +162,7 @@ export * from './sys-pos';
 export * from './sys-role';
 export * from './sys-tenant';
 export * from './sys-user';
+export * from './sys-user-ext-org';
 export * from './table-column-ouput';
 export * from './table-output';
 export * from './tenant-input';
@@ -176,9 +183,7 @@ export * from './update-tenant-input';
 export * from './update-timer-input';
 export * from './update-user-input';
 export * from './user-input';
-export * from './user-org-input';
 export * from './user-role-input';
-export * from './user-type-enum';
 export * from './we-chat-oauth2-input';
 export * from './we-chat-pay';
 export * from './we-chat-pay-output';

+ 2 - 2
Web/src/api-services/models/login-input.ts

@@ -18,11 +18,11 @@
  */
 export interface LoginInput {
     /**
-     * 用户名
+     * 账号
      * @type {string}
      * @memberof LoginInput
      */
-    userName: string;
+    account: string;
     /**
      * 密码
      * @type {string}

+ 1 - 14
Web/src/api-services/models/login-output.ts

@@ -11,31 +11,18 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-import { LoginRole } from './login-role';
 /**
  * 用户登录结果
  * @export
  * @interface LoginOutput
  */
 export interface LoginOutput {
-    /**
-     * 用户Id
-     * @type {number}
-     * @memberof LoginOutput
-     */
-    userId?: number;
-    /**
-     * 
-     * @type {LoginRole}
-     * @memberof LoginOutput
-     */
-    roleInfo?: LoginRole;
     /**
      * 令牌Token
      * @type {string}
      * @memberof LoginOutput
      */
-    token?: string | null;
+    accessToken?: string | null;
     /**
      * 刷新Token
      * @type {string}

+ 0 - 32
Web/src/api-services/models/login-role.ts

@@ -1,32 +0,0 @@
-/* tslint:disable */
-/* eslint-disable */
-/**
- * Admin.NET
- * 让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>
- *
- * OpenAPI spec version: 1.0.0
- * Contact: 515096995@qq.com
- *
- * NOTE: This class is auto generated by the swagger code generator program.
- * https://github.com/swagger-api/swagger-codegen.git
- * Do not edit the class manually.
- */
-/**
- * 
- * @export
- * @interface LoginRole
- */
-export interface LoginRole {
-    /**
-     * 角色名称
-     * @type {string}
-     * @memberof LoginRole
-     */
-    roleName?: string | null;
-    /**
-     * 角色编码
-     * @type {string}
-     * @memberof LoginRole
-     */
-    value?: string | null;
-}

+ 12 - 25
Web/src/api-services/models/login-user-info-output.ts → Web/src/api-services/models/login-user-output.ts

@@ -11,71 +11,58 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-import { LoginRole } from './login-role';
 /**
  * 用户登录信息
  * @export
- * @interface LoginUserInfoOutput
+ * @interface LoginUserOutput
  */
-export interface LoginUserInfoOutput {
+export interface LoginUserOutput {
     /**
      * 用户Id
      * @type {number}
-     * @memberof LoginUserInfoOutput
+     * @memberof LoginUserOutput
      */
     userId?: number;
     /**
      * 账号名称
      * @type {string}
-     * @memberof LoginUserInfoOutput
+     * @memberof LoginUserOutput
      */
-    username?: string | null;
+    account?: string | null;
     /**
      * 真实姓名
      * @type {string}
-     * @memberof LoginUserInfoOutput
+     * @memberof LoginUserOutput
      */
     realName?: string | null;
     /**
      * 头像
      * @type {string}
-     * @memberof LoginUserInfoOutput
+     * @memberof LoginUserOutput
      */
     avatar?: string | null;
     /**
      * 个人简介
      * @type {string}
-     * @memberof LoginUserInfoOutput
+     * @memberof LoginUserOutput
      */
-    desc?: string | null;
+    introduction?: string | null;
     /**
      * 机构Id
      * @type {number}
-     * @memberof LoginUserInfoOutput
+     * @memberof LoginUserOutput
      */
     orgId?: number;
     /**
      * 机构名称
      * @type {string}
-     * @memberof LoginUserInfoOutput
+     * @memberof LoginUserOutput
      */
     orgName?: string | null;
-    /**
-     * 机构级别
-     * @type {string}
-     * @memberof LoginUserInfoOutput
-     */
-    orgLevel?: string | null;
-    /**
-     * 角色集合
-     * @type {Array<LoginRole>}
-     * @memberof LoginUserInfoOutput
-     */
-    roles?: Array<LoginRole> | null;
     /**
      * 按钮权限集合
      * @type {Array<string>}
-     * @memberof LoginUserInfoOutput
+     * @memberof LoginUserOutput
      */
     buttons?: Array<string> | null;
 }

+ 63 - 0
Web/src/api-services/models/sql-sugar-paged-list-sys-online-user.ts

@@ -0,0 +1,63 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET
+ * 让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: 515096995@qq.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SysOnlineUser } from './sys-online-user';
+/**
+ * 分页泛型集合
+ * @export
+ * @interface SqlSugarPagedListSysOnlineUser
+ */
+export interface SqlSugarPagedListSysOnlineUser {
+    /**
+     * 页码
+     * @type {number}
+     * @memberof SqlSugarPagedListSysOnlineUser
+     */
+    page?: number;
+    /**
+     * 页容量
+     * @type {number}
+     * @memberof SqlSugarPagedListSysOnlineUser
+     */
+    pageSize?: number;
+    /**
+     * 总条数
+     * @type {number}
+     * @memberof SqlSugarPagedListSysOnlineUser
+     */
+    total?: number;
+    /**
+     * 总页数
+     * @type {number}
+     * @memberof SqlSugarPagedListSysOnlineUser
+     */
+    totalPages?: number;
+    /**
+     * 当前页集合
+     * @type {Array<SysOnlineUser>}
+     * @memberof SqlSugarPagedListSysOnlineUser
+     */
+    items?: Array<SysOnlineUser> | null;
+    /**
+     * 是否有上一页
+     * @type {boolean}
+     * @memberof SqlSugarPagedListSysOnlineUser
+     */
+    hasPrevPage?: boolean;
+    /**
+     * 是否有下一页
+     * @type {boolean}
+     * @memberof SqlSugarPagedListSysOnlineUser
+     */
+    hasNextPage?: boolean;
+}

+ 63 - 0
Web/src/api-services/models/sql-sugar-paged-list-sys-tenant.ts

@@ -0,0 +1,63 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET
+ * 让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: 515096995@qq.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SysTenant } from './sys-tenant';
+/**
+ * 分页泛型集合
+ * @export
+ * @interface SqlSugarPagedListSysTenant
+ */
+export interface SqlSugarPagedListSysTenant {
+    /**
+     * 页码
+     * @type {number}
+     * @memberof SqlSugarPagedListSysTenant
+     */
+    page?: number;
+    /**
+     * 页容量
+     * @type {number}
+     * @memberof SqlSugarPagedListSysTenant
+     */
+    pageSize?: number;
+    /**
+     * 总条数
+     * @type {number}
+     * @memberof SqlSugarPagedListSysTenant
+     */
+    total?: number;
+    /**
+     * 总页数
+     * @type {number}
+     * @memberof SqlSugarPagedListSysTenant
+     */
+    totalPages?: number;
+    /**
+     * 当前页集合
+     * @type {Array<SysTenant>}
+     * @memberof SqlSugarPagedListSysTenant
+     */
+    items?: Array<SysTenant> | null;
+    /**
+     * 是否有上一页
+     * @type {boolean}
+     * @memberof SqlSugarPagedListSysTenant
+     */
+    hasPrevPage?: boolean;
+    /**
+     * 是否有下一页
+     * @type {boolean}
+     * @memberof SqlSugarPagedListSysTenant
+     */
+    hasNextPage?: boolean;
+}

+ 0 - 6
Web/src/api-services/models/sys-org.ts

@@ -97,12 +97,6 @@ export interface SysOrg {
      * @memberof SysOrg
      */
     status?: StatusEnum;
-    /**
-     * 级别 例如:省、市、县、区
-     * @type {string}
-     * @memberof SysOrg
-     */
-    level?: string | null;
     /**
      * 机构子项
      * @type {Array<SysOrg>}

+ 76 - 0
Web/src/api-services/models/sys-user-ext-org.ts

@@ -0,0 +1,76 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET
+ * 让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/><a href='https://gitee.com/zuohuaijun/Admin.NET/'>https://gitee.com/zuohuaijun/Admin.NET</a>
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: 515096995@qq.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+import { SysOrg } from './sys-org';
+import { SysPos } from './sys-pos';
+/**
+ * 系统用户扩展机构表
+ * @export
+ * @interface SysUserExtOrg
+ */
+export interface SysUserExtOrg {
+    /**
+     * 雪花Id
+     * @type {number}
+     * @memberof SysUserExtOrg
+     */
+    id?: number;
+    /**
+     * 用户Id
+     * @type {number}
+     * @memberof SysUserExtOrg
+     */
+    userId?: number;
+    /**
+     * 机构Id
+     * @type {number}
+     * @memberof SysUserExtOrg
+     */
+    orgId?: number;
+    /**
+     * 
+     * @type {SysOrg}
+     * @memberof SysUserExtOrg
+     */
+    sysOrg?: SysOrg;
+    /**
+     * 职位Id
+     * @type {number}
+     * @memberof SysUserExtOrg
+     */
+    posId?: number;
+    /**
+     * 
+     * @type {SysPos}
+     * @memberof SysUserExtOrg
+     */
+    sysPos?: SysPos;
+    /**
+     * 工号
+     * @type {string}
+     * @memberof SysUserExtOrg
+     */
+    jobNum?: string | null;
+    /**
+     * 职级
+     * @type {string}
+     * @memberof SysUserExtOrg
+     */
+    posLevel?: string | null;
+    /**
+     * 入职日期
+     * @type {Date}
+     * @memberof SysUserExtOrg
+     */
+    joinDate?: Date | null;
+}

+ 117 - 26
Web/src/api-services/models/sys-user.ts

@@ -11,12 +11,13 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
+import { AccountTypeEnum } from './account-type-enum';
+import { CardTypeEnum } from './card-type-enum';
+import { CultureLevelEnum } from './culture-level-enum';
 import { GenderEnum } from './gender-enum';
-import { JobStatusEnum } from './job-status-enum';
 import { StatusEnum } from './status-enum';
 import { SysOrg } from './sys-org';
 import { SysPos } from './sys-pos';
-import { UserTypeEnum } from './user-type-enum';
 /**
  * 系统用户表
  * @export
@@ -70,7 +71,13 @@ export interface SysUser {
      * @type {string}
      * @memberof SysUser
      */
-    userName: string;
+    account: string;
+    /**
+     * 真实姓名
+     * @type {string}
+     * @memberof SysUser
+     */
+    realName?: string | null;
     /**
      * 昵称
      * @type {string}
@@ -83,18 +90,48 @@ export interface SysUser {
      * @memberof SysUser
      */
     avatar?: string | null;
+    /**
+     * 
+     * @type {GenderEnum}
+     * @memberof SysUser
+     */
+    sex?: GenderEnum;
+    /**
+     * 年龄
+     * @type {number}
+     * @memberof SysUser
+     */
+    age?: number;
     /**
      * 出生日期
      * @type {Date}
      * @memberof SysUser
      */
     birthday?: Date | null;
+    /**
+     * 民族
+     * @type {string}
+     * @memberof SysUser
+     */
+    nation?: string | null;
+    /**
+     * 手机号码
+     * @type {string}
+     * @memberof SysUser
+     */
+    phone?: string | null;
     /**
      * 
-     * @type {GenderEnum}
+     * @type {CardTypeEnum}
      * @memberof SysUser
      */
-    sex?: GenderEnum;
+    cardType?: CardTypeEnum;
+    /**
+     * 身份证号
+     * @type {string}
+     * @memberof SysUser
+     */
+    idCardNum?: string | null;
     /**
      * 邮箱
      * @type {string}
@@ -102,41 +139,83 @@ export interface SysUser {
      */
     email?: string | null;
     /**
-     * 手机号码
+     * 地址
      * @type {string}
      * @memberof SysUser
      */
-    phone?: string | null;
+    address?: string | null;
     /**
-     * 真实姓名
+     * 
+     * @type {CultureLevelEnum}
+     * @memberof SysUser
+     */
+    cultureLevel?: CultureLevelEnum;
+    /**
+     * 政治面貌
      * @type {string}
      * @memberof SysUser
      */
-    realName?: string | null;
+    politicalOutlook?: string | null;
     /**
-     * 身份证号
+     * 毕业院校
+     * @type {string}
+     * @memberof SysUser
+     */
+    college?: string | null;
+    /**
+     * 办公电话
      * @type {string}
      * @memberof SysUser
      */
-    idCard?: string | null;
+    officePhone?: string | null;
     /**
-     * 个性签名
+     * 紧急联系人
      * @type {string}
      * @memberof SysUser
      */
-    signature?: string | null;
+    emergencyContact?: string | null;
+    /**
+     * 紧急联系人电话
+     * @type {string}
+     * @memberof SysUser
+     */
+    emergencyPhone?: string | null;
+    /**
+     * 紧急联系人地址
+     * @type {string}
+     * @memberof SysUser
+     */
+    emergencyAddress?: string | null;
     /**
      * 个人简介
      * @type {string}
      * @memberof SysUser
      */
     introduction?: string | null;
+    /**
+     * 排序
+     * @type {number}
+     * @memberof SysUser
+     */
+    order?: number;
+    /**
+     * 
+     * @type {StatusEnum}
+     * @memberof SysUser
+     */
+    status?: StatusEnum;
+    /**
+     * 备注
+     * @type {string}
+     * @memberof SysUser
+     */
+    remark?: string | null;
     /**
      * 
-     * @type {UserTypeEnum}
+     * @type {AccountTypeEnum}
      * @memberof SysUser
      */
-    userType?: UserTypeEnum;
+    accountType?: AccountTypeEnum;
     /**
      * 机构Id
      * @type {number}
@@ -168,27 +247,39 @@ export interface SysUser {
      */
     jobNum?: string | null;
     /**
-     * 
-     * @type {JobStatusEnum}
+     * 职级
+     * @type {string}
      * @memberof SysUser
      */
-    jobStatus?: JobStatusEnum;
+    posLevel?: string | null;
     /**
-     * 排序
-     * @type {number}
+     * 入职日期
+     * @type {Date}
      * @memberof SysUser
      */
-    order?: number;
+    joinDate?: Date | null;
     /**
-     * 
-     * @type {StatusEnum}
+     * 最新登录Ip
+     * @type {string}
      * @memberof SysUser
      */
-    status?: StatusEnum;
+    lastLoginIp?: string | null;
     /**
-     * 备注
+     * 最新登录地点
      * @type {string}
      * @memberof SysUser
      */
-    remark?: string | null;
+    lastLoginAddress?: string | null;
+    /**
+     * 最新登录时间
+     * @type {Date}
+     * @memberof SysUser
+     */
+    lastLoginTime?: Date | null;
+    /**
+     * 最新登录设备
+     * @type {string}
+     * @memberof SysUser
+     */
+    lastLoginDevice?: string | null;
 }

+ 0 - 6
Web/src/api-services/models/update-org-input.ts

@@ -91,12 +91,6 @@ export interface UpdateOrgInput {
      * @memberof UpdateOrgInput
      */
     status?: StatusEnum;
-    /**
-     * 级别 例如:省、市、县、区
-     * @type {string}
-     * @memberof UpdateOrgInput
-     */
-    level?: string | null;
     /**
      * 机构子项
      * @type {Array<SysOrg>}

+ 124 - 26
Web/src/api-services/models/update-user-input.ts

@@ -11,12 +11,14 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
+import { AccountTypeEnum } from './account-type-enum';
+import { CardTypeEnum } from './card-type-enum';
+import { CultureLevelEnum } from './culture-level-enum';
 import { GenderEnum } from './gender-enum';
-import { JobStatusEnum } from './job-status-enum';
 import { StatusEnum } from './status-enum';
 import { SysOrg } from './sys-org';
 import { SysPos } from './sys-pos';
-import { UserTypeEnum } from './user-type-enum';
+import { SysUserExtOrg } from './sys-user-ext-org';
 /**
  * 
  * @export
@@ -77,18 +79,48 @@ export interface UpdateUserInput {
      * @memberof UpdateUserInput
      */
     avatar?: string | null;
+    /**
+     * 
+     * @type {GenderEnum}
+     * @memberof UpdateUserInput
+     */
+    sex?: GenderEnum;
+    /**
+     * 年龄
+     * @type {number}
+     * @memberof UpdateUserInput
+     */
+    age?: number;
     /**
      * 出生日期
      * @type {Date}
      * @memberof UpdateUserInput
      */
     birthday?: Date | null;
+    /**
+     * 民族
+     * @type {string}
+     * @memberof UpdateUserInput
+     */
+    nation?: string | null;
+    /**
+     * 手机号码
+     * @type {string}
+     * @memberof UpdateUserInput
+     */
+    phone?: string | null;
     /**
      * 
-     * @type {GenderEnum}
+     * @type {CardTypeEnum}
      * @memberof UpdateUserInput
      */
-    sex?: GenderEnum;
+    cardType?: CardTypeEnum;
+    /**
+     * 身份证号
+     * @type {string}
+     * @memberof UpdateUserInput
+     */
+    idCardNum?: string | null;
     /**
      * 邮箱
      * @type {string}
@@ -96,35 +128,83 @@ export interface UpdateUserInput {
      */
     email?: string | null;
     /**
-     * 手机号码
+     * 地址
      * @type {string}
      * @memberof UpdateUserInput
      */
-    phone?: string | null;
+    address?: string | null;
     /**
-     * 身份证号
+     * 
+     * @type {CultureLevelEnum}
+     * @memberof UpdateUserInput
+     */
+    cultureLevel?: CultureLevelEnum;
+    /**
+     * 政治面貌
+     * @type {string}
+     * @memberof UpdateUserInput
+     */
+    politicalOutlook?: string | null;
+    /**
+     * 毕业院校
+     * @type {string}
+     * @memberof UpdateUserInput
+     */
+    college?: string | null;
+    /**
+     * 办公电话
+     * @type {string}
+     * @memberof UpdateUserInput
+     */
+    officePhone?: string | null;
+    /**
+     * 紧急联系人
      * @type {string}
      * @memberof UpdateUserInput
      */
-    idCard?: string | null;
+    emergencyContact?: string | null;
     /**
-     * 个性签名
+     * 紧急联系人电话
      * @type {string}
      * @memberof UpdateUserInput
      */
-    signature?: string | null;
+    emergencyPhone?: string | null;
+    /**
+     * 紧急联系人地址
+     * @type {string}
+     * @memberof UpdateUserInput
+     */
+    emergencyAddress?: string | null;
     /**
      * 个人简介
      * @type {string}
      * @memberof UpdateUserInput
      */
     introduction?: string | null;
+    /**
+     * 排序
+     * @type {number}
+     * @memberof UpdateUserInput
+     */
+    order?: number;
     /**
      * 
-     * @type {UserTypeEnum}
+     * @type {StatusEnum}
      * @memberof UpdateUserInput
      */
-    userType?: UserTypeEnum;
+    status?: StatusEnum;
+    /**
+     * 备注
+     * @type {string}
+     * @memberof UpdateUserInput
+     */
+    remark?: string | null;
+    /**
+     * 
+     * @type {AccountTypeEnum}
+     * @memberof UpdateUserInput
+     */
+    accountType?: AccountTypeEnum;
     /**
      * 机构Id
      * @type {number}
@@ -156,35 +236,47 @@ export interface UpdateUserInput {
      */
     jobNum?: string | null;
     /**
-     * 
-     * @type {JobStatusEnum}
+     * 职级
+     * @type {string}
      * @memberof UpdateUserInput
      */
-    jobStatus?: JobStatusEnum;
+    posLevel?: string | null;
     /**
-     * 排序
-     * @type {number}
+     * 入职日期
+     * @type {Date}
      * @memberof UpdateUserInput
      */
-    order?: number;
+    joinDate?: Date | null;
     /**
-     * 
-     * @type {StatusEnum}
+     * 最新登录Ip
+     * @type {string}
      * @memberof UpdateUserInput
      */
-    status?: StatusEnum;
+    lastLoginIp?: string | null;
     /**
-     * 备注
+     * 最新登录地点
      * @type {string}
      * @memberof UpdateUserInput
      */
-    remark?: string | null;
+    lastLoginAddress?: string | null;
     /**
-     * 账号名称
+     * 最新登录时间
+     * @type {Date}
+     * @memberof UpdateUserInput
+     */
+    lastLoginTime?: Date | null;
+    /**
+     * 最新登录设备
      * @type {string}
      * @memberof UpdateUserInput
      */
-    userName: string;
+    lastLoginDevice?: string | null;
+    /**
+     * 账号
+     * @type {string}
+     * @memberof UpdateUserInput
+     */
+    account: string;
     /**
      * 真实姓名
      * @type {string}
@@ -192,9 +284,15 @@ export interface UpdateUserInput {
      */
     realName: string;
     /**
-     * 角色Id集合
+     * 角色集合
      * @type {Array<number>}
      * @memberof UpdateUserInput
      */
     roleIdList?: Array<number> | null;
+    /**
+     * 扩展机构集合
+     * @type {Array<SysUserExtOrg>}
+     * @memberof UpdateUserInput
+     */
+    extOrgIdList?: Array<SysUserExtOrg> | null;
 }

+ 2 - 8
Web/src/api-services/models/user-role-input.ts

@@ -18,17 +18,11 @@
  */
 export interface UserRoleInput {
     /**
-     * 主键Id
+     * 用户Id
      * @type {number}
      * @memberof UserRoleInput
      */
-    id: number;
-    /**
-     * 机构Id
-     * @type {number}
-     * @memberof UserRoleInput
-     */
-    orgId?: number;
+    userId?: number;
     /**
      * 角色Id集合
      * @type {Array<number>}

+ 3 - 3
Web/src/api-services/models/we-chat-user.ts

@@ -11,7 +11,7 @@
  * https://github.com/swagger-api/swagger-codegen.git
  * Do not edit the class manually.
  */
-import { SysPos } from './sys-pos';
+import { SysUser } from './sys-user';
 import { WeChatUserTypeEnum } from './we-chat-user-type-enum';
 /**
  * 微信用户表
@@ -63,10 +63,10 @@ export interface WeChatUser {
     userId?: number;
     /**
      * 
-     * @type {SysPos}
+     * @type {SysUser}
      * @memberof WeChatUser
      */
-    sysPos?: SysPos;
+    sysUser?: SysUser;
     /**
      * 
      * @type {WeChatUserTypeEnum}

+ 2 - 2
Web/src/layout/navBars/breadcrumb/user.vue

@@ -56,8 +56,8 @@
 		</div>
 		<el-dropdown :show-timeout="70" :hide-timeout="50" @command="onHandleCommandClick">
 			<span class="layout-navbars-breadcrumb-user-link">
-				<img :src="userInfos.photo" class="layout-navbars-breadcrumb-user-link-photo mr5" />
-				{{ userInfos.userName === '' ? 'common' : userInfos.userName }}
+				<img :src="userInfos.avatar" class="layout-navbars-breadcrumb-user-link-photo mr5" />
+				{{ userInfos.account === '' ? 'common' : userInfos.account }}
 				<el-icon class="el-icon--right">
 					<ele-ArrowDown />
 				</el-icon>

+ 4 - 3
Web/src/stores/interface/index.ts

@@ -5,11 +5,12 @@
 
 // 用户信息
 export interface UserInfosState {
-	authBtnList: string[];
-	photo: string;
+	account: string;
+	realName: string;
+	avatar: string;
 	roles: string[];
+	authBtnList: string[];
 	time: number;
-	userName: string;
 }
 export interface UserInfosStates {
 	userInfos: UserInfosState;

+ 9 - 7
Web/src/stores/userInfo.ts

@@ -11,11 +11,12 @@ import { SysAuthApi } from '../api-services/api';
 export const useUserInfo = defineStore('userInfo', {
 	state: (): UserInfosStates => ({
 		userInfos: {
-			userName: '',
-			photo: '',
-			time: 0,
+			account: '',
+			realName: '',
+			avatar: '',
 			roles: [],
 			authBtnList: [],
+			time: 0,
 		},
 	}),
 	actions: {
@@ -37,11 +38,12 @@ export const useUserInfo = defineStore('userInfo', {
 						if (res.data.result == null) return;
 						var d = res.data.result;
 						const userInfos = {
-							userName: d.username,
-							photo: d.avatar ? d.avatar : '/favicon.ico',
-							time: new Date().getTime(),
-							roles: d.roles,
+							account: d.account,
+							realName: d.realName,
+							avatar: d.avatar ? d.avatar : '/favicon.ico',
+							roles: [],
 							authBtnList: d.buttons,
+							time: new Date().getTime(),
 						};
 						resolve(userInfos);
 					});

+ 50 - 51
Web/src/views/login/component/account.vue

@@ -1,7 +1,7 @@
 <template>
 	<el-form ref="ruleFormRef" :model="ruleForm" size="large" :rules="rules" class="login-content-form">
-		<el-form-item class="login-animation1" prop="userName">
-			<el-input type="text" placeholder="请输入账号" v-model="ruleForm.userName" clearable autocomplete="off">
+		<el-form-item class="login-animation1" prop="account">
+			<el-input type="text" placeholder="请输入账号" v-model="ruleForm.account" clearable autocomplete="off">
 				<template #prefix>
 					<el-icon class="el-input__icon">
 						<ele-User />
@@ -10,25 +10,20 @@
 			</el-input>
 		</el-form-item>
 		<el-form-item class="login-animation2" prop="password">
-			<el-input :type="isShowPassword ? 'text' : 'password'" placeholder="请输入密码" v-model="ruleForm.password"
-				autocomplete="off">
+			<el-input :type="isShowPassword ? 'text' : 'password'" placeholder="请输入密码" v-model="ruleForm.password" autocomplete="off">
 				<template #prefix>
 					<el-icon class="el-input__icon">
 						<ele-Unlock />
 					</el-icon>
 				</template>
 				<template #suffix>
-					<i class="iconfont el-input__icon login-content-password"
-						:class="isShowPassword ? 'icon-yincangmima' : 'icon-xianshimima'"
-						@click="isShowPassword = !isShowPassword">
-					</i>
+					<i class="iconfont el-input__icon login-content-password" :class="isShowPassword ? 'icon-yincangmima' : 'icon-xianshimima'" @click="isShowPassword = !isShowPassword"> </i>
 				</template>
 			</el-input>
 		</el-form-item>
 		<el-form-item class="login-animation3" prop="captcha">
 			<el-col :span="15">
-				<el-input type="text" maxlength="4" :placeholder="$t('message.account.accountPlaceholder3')"
-					v-model="ruleForm.code" clearable autocomplete="off">
+				<el-input type="text" maxlength="4" :placeholder="$t('message.account.accountPlaceholder3')" v-model="ruleForm.code" clearable autocomplete="off">
 					<template #prefix>
 						<el-icon class="el-input__icon">
 							<ele-Position />
@@ -39,8 +34,7 @@
 			<el-col :span="1"></el-col>
 			<el-col :span="8">
 				<div class="login-content-code">
-					<img class="login-content-code-img" @click="getCaptcha" width="130px" height="38px"
-						:src="captchaImage" style="cursor: pointer" />
+					<img class="login-content-code-img" @click="getCaptcha" width="130px" height="38px" :src="captchaImage" style="cursor: pointer" />
 				</div>
 			</el-col>
 		</el-form-item>
@@ -53,9 +47,16 @@
 	</el-form>
 
 	<el-dialog v-model="verifyVisible" title="" width="300px" center>
-		<DragVerifyImgRotate ref="dragRef" :imgsrc="verifyImg" v-model:isPassing="isPass" text="请按住滑块拖动"
-			successText="验证通过" handlerIcon="fa fa-angle-double-right" successIcon="fa fa-hand-peace-o"
-			@passcallback="passVerify" />
+		<DragVerifyImgRotate
+			ref="dragRef"
+			:imgsrc="verifyImg"
+			v-model:isPassing="isPass"
+			text="请按住滑块拖动"
+			successText="验证通过"
+			handlerIcon="fa fa-angle-double-right"
+			successIcon="fa fa-hand-peace-o"
+			@passcallback="passVerify"
+		/>
 	</el-dialog>
 </template>
 
@@ -64,10 +65,10 @@ import { toRefs, reactive, defineComponent, computed, ref, onMounted } from 'vue
 import { useRoute, useRouter } from 'vue-router';
 import { ElMessage } from 'element-plus';
 import { useI18n } from 'vue-i18n';
-import Cookies from 'js-cookie';
-import { storeToRefs } from 'pinia';
-import { useThemeConfig } from '/@/stores/themeConfig';
-import { initFrontEndControlRoutes } from '/@/router/frontEnd';
+// import Cookies from 'js-cookie';
+// import { storeToRefs } from 'pinia';
+// import { useThemeConfig } from '/@/stores/themeConfig';
+// import { initFrontEndControlRoutes } from '/@/router/frontEnd';
 import { initBackEndControlRoutes } from '/@/router/backEnd';
 import { Session } from '/@/utils/storage';
 import { formatAxis } from '/@/utils/formatTime';
@@ -77,16 +78,16 @@ import { getAPI } from '/@/utils/axios-utils';
 import { SysAuthApi } from '/@/api-services/apis/sys-auth-api';
 
 // 旋转图片滑块组件
-import DragVerifyImgRotate from "/@/components/dragVerify/dragVerifyImgRotate.vue";
-import verifyImg from '/@/assets/logo-mini.svg'
+import DragVerifyImgRotate from '/@/components/dragVerify/dragVerifyImgRotate.vue';
+import verifyImg from '/@/assets/logo-mini.svg';
 
 export default defineComponent({
 	name: 'loginAccount',
 	components: { DragVerifyImgRotate },
 	setup() {
 		const { t } = useI18n();
-		const storesThemeConfig = useThemeConfig();
-		const { themeConfig } = storeToRefs(storesThemeConfig);
+		// const storesThemeConfig = useThemeConfig();
+		// const { themeConfig } = storeToRefs(storesThemeConfig);
 		const route = useRoute();
 		const router = useRouter();
 
@@ -95,15 +96,15 @@ export default defineComponent({
 		const state = reactive({
 			isShowPassword: false,
 			ruleForm: {
-				userName: 'superadmin',
+				account: 'superadmin',
 				password: '123456',
 				code: '1234',
 				codeId: 0,
 			},
 			rules: {
-				userName: [{ required: true, message: "请输入用户名", trigger: "blur" }],
-				password: [{ required: true, message: "请输入密码", trigger: "blur" }],
-				code: [{ required: true, message: "请输入验证码", trigger: "blur" }],
+				account: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
+				password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
+				code: [{ required: true, message: '请输入验证码', trigger: 'blur' }],
 			},
 			loading: {
 				signIn: false,
@@ -111,16 +112,16 @@ export default defineComponent({
 			verifyVisible: false,
 			isPass: false,
 			verifyImg: verifyImg,
-			captchaImage: "",
+			captchaImage: '',
 		});
 		onMounted(() => {
 			getCaptcha();
 		});
 		// 获取验证码
 		const getCaptcha = async () => {
-			state.ruleForm.code = "";
+			state.ruleForm.code = '';
 			var res = await getAPI(SysAuthApi).captchaGet();
-			state.captchaImage = "data:text/html;base64," + res.data.result?.img;
+			state.captchaImage = 'data:text/html;base64,' + res.data.result?.img;
 			state.ruleForm.codeId = res.data.result?.id;
 		};
 		// 时间获取
@@ -130,36 +131,35 @@ export default defineComponent({
 		// 登录
 		const onSignIn = async () => {
 			var res = await getAPI(SysAuthApi).loginPost(state.ruleForm);
-			if (res.data.result?.token == null) {
+			if (res.data.result?.accessToken == null) {
 				getCaptcha(); // 重新获取验证码
 
-				ElMessage.error("登录失败,请检查账号!");
+				ElMessage.error('登录失败,请检查账号!');
 				return;
 			}
 
 			state.loading.signIn = true;
 			// 存储 token 到浏览器缓存
-			Session.set('token', res.data.result?.token);
-			// 模拟数据,对接接口时,记得删除多余代码及对应依赖的引入。用于 `/src/stores/userInfo.ts` 中不同用户登录判断(模拟数据)
-			Cookies.set('userName', state.ruleForm.userName);
-			if (!themeConfig.value.isRequestRoutes) {
-				// 前端控制路由,2、请注意执行顺序
-				await initFrontEndControlRoutes();
-				signInSuccess();
-			} else {
-				// 模拟后端控制路由,isRequestRoutes 为 true,则开启后端控制路由
-				// 添加完动态路由,再进行 router 跳转,否则可能报错 No match found for location with path "/"
-				await initBackEndControlRoutes();
-				// 执行完 initBackEndControlRoutes,再执行 signInSuccess
-				signInSuccess();
-			}
+			Session.set('token', res.data.result?.accessToken);
+			// // 模拟数据,对接接口时,记得删除多余代码及对应依赖的引入。用于 `/src/stores/userInfo.ts` 中不同用户登录判断(模拟数据)
+			// Cookies.set('userName', state.ruleForm.account);
+			// if (!themeConfig.value.isRequestRoutes) {
+			// 	// 前端控制路由,2、请注意执行顺序
+			// 	await initFrontEndControlRoutes();
+			// 	signInSuccess();
+			// } else {
+			// 模拟后端控制路由,isRequestRoutes 为 true,则开启后端控制路由
+			// 添加完动态路由,再进行 router 跳转,否则可能报错 No match found for location with path "/"
+			await initBackEndControlRoutes();
+			// 执行完 initBackEndControlRoutes,再执行 signInSuccess
+			signInSuccess();
+			// }
 		};
 		// 登录成功后的跳转
 		const signInSuccess = () => {
 			// 初始化登录成功时间问候语
 			let currentTimeInfo = currentTime.value;
-			// 登录成功,跳到转首页
-			// 如果是复制粘贴的路径,非首页/登录页,那么登录成功后重定向到对应的路径中
+			// 登录成功跳到转首页,如果是复制粘贴的路径,非首页/登录页,那么登录成功后重定向到对应的路径中
 			if (route.query?.redirect) {
 				router.push({
 					path: <string>route.query?.redirect,
@@ -168,12 +168,11 @@ export default defineComponent({
 			} else {
 				router.push('/');
 			}
-			// 登录成功提示
-			// 关闭 loading
+			// 登录成功提示 关闭loading
 			state.loading.signIn = true;
 			const signInText = t('message.signInText');
 			ElMessage.success(`${currentTimeInfo},${signInText}`);
-			// 添加 loading,防止第一次进入界面时出现短暂空白
+			// 添加loading,防止第一次进入界面时出现短暂空白
 			NextLoading.start();
 		};
 		// 打开旋转验证

+ 11 - 23
Web/src/views/system/config/component/editConfig.vue

@@ -6,25 +6,28 @@
 					{{ title }}
 				</div>
 			</template>
-			<el-form :model="ruleForm" :rules="ruleRules" ref="ruleFormRef" size="default" label-width="80px">
+			<el-form :model="ruleForm" ref="ruleFormRef" size="default" label-width="80px">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="配置名称" prop="name">
+						<el-form-item label="配置名称" prop="name" :rules="[{ required: true, message: '配置名称不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.name" placeholder="配置名称" clearable></el-input>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="配置编码" prop="code">
+						<el-form-item label="配置编码" prop="code" :rules="[{ required: true, message: '配置编码不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.code" placeholder="配置编码" clearable :disabled="ruleForm.sysFlag == 1"></el-input>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="值" prop="value">
-							<el-input v-model="ruleForm.value" placeholder="值" clearable></el-input>
+						<el-form-item label="值" prop="value" :rules="[{ required: true, message: '值不能为空', trigger: 'blur' }]">
+							<el-select v-model="ruleForm.value" placeholder="值" clearable filterable allow-create default-first-option style="width: 100%">
+								<el-option label="True" value="True" />
+								<el-option label="False" value="False" />
+							</el-select>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="系统参数" prop="sysFlag">
+						<el-form-item label="系统参数" prop="sysFlag" :rules="[{ required: true, message: '系统参数不能为空', trigger: 'blur' }]">
 							<el-radio-group v-model="ruleForm.sysFlag" :disabled="ruleForm.sysFlag == 1">
 								<el-radio :label="1">是</el-radio>
 								<el-radio :label="2">否</el-radio>
@@ -63,12 +66,12 @@ import { reactive, toRefs, defineComponent, getCurrentInstance, ref } from 'vue'
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysConfigApi } from '/@/api-services/api';
+import { UpdateConfigInput } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysEditPos',
 	components: {},
 	props: {
-		// 弹窗标题
 		title: {
 			type: String,
 			default: '',
@@ -79,22 +82,7 @@ export default defineComponent({
 		const ruleFormRef = ref();
 		const state = reactive({
 			isShowDialog: false,
-			ruleForm: {
-				id: 0, // Id
-				name: '', // 配置名称
-				code: '', // 配置编码
-				value: '', // 值
-				sysFlag: 1, // 系统参数
-				groupCode: '', // 所属分类
-				order: 100, // 排序
-				remark: '', // 备注
-			},
-			ruleRules: {
-				name: [{ required: true, message: '配置名称不能为空', trigger: 'blur' }],
-				code: [{ required: true, message: '配置编码不能为空', trigger: 'blur' }],
-				value: [{ required: true, message: '值不能为空', trigger: 'blur' }],
-				sysFlag: [{ required: true, message: '系统参数不能为空', trigger: 'blur' }],
-			},
+			ruleForm: {} as UpdateConfigInput,
 		});
 		// 打开弹窗
 		const openDialog = (row: any) => {

+ 5 - 4
Web/src/views/system/config/index.vue

@@ -61,7 +61,8 @@ import { ElMessageBox, ElMessage } from 'element-plus';
 import EditConfig from '/@/views/system/config/component/editConfig.vue';
 
 import { getAPI } from '/@/utils/axios-utils';
-import { SysConfigApi } from '/@/api-services';
+import { SysConfigApi } from '/@/api-services/api';
+import { SysConfig } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysConfig',
@@ -70,8 +71,8 @@ export default defineComponent({
 		const { proxy } = getCurrentInstance() as any;
 		const editConfigRef = ref();
 		const state = reactive({
-			loading: true,
-			configData: [] as any,
+			loading: false,
+			configData: [] as Array<SysConfig>,
 			queryParams: {
 				name: undefined,
 				code: undefined,
@@ -97,7 +98,7 @@ export default defineComponent({
 		const handleQuery = async () => {
 			state.loading = true;
 			var res = await getAPI(SysConfigApi).sysConfigPageGet(state.queryParams.name, state.queryParams.code, state.tableParams.page, state.tableParams.pageSize);
-			state.configData = res.data.result?.items;
+			state.configData = res.data.result?.items ?? [];
 			state.tableParams.total = res.data.result?.total;
 			state.loading = false;
 		};

+ 5 - 14
Web/src/views/system/database/component/editColumn.vue

@@ -6,15 +6,15 @@
 					{{ '列编辑' }}
 				</div>
 			</template>
-			<el-form :model="ruleForm" :rules="ruleRules" ref="ruleFormRef" size="default" label-width="80px">
+			<el-form :model="ruleForm" ref="ruleFormRef" size="default" label-width="80px">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="列名称" prop="columnName">
+						<el-form-item label="列名称" prop="columnName" :rules="[{ required: true, message: '名称不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.columnName" placeholder="列名称" clearable></el-input>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="描述" prop="description">
+						<el-form-item label="描述" prop="description" :rules="[{ required: true, message: '描述不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.description" placeholder="描述" clearable type="textarea"></el-input>
 						</el-form-item>
 					</el-col>
@@ -35,6 +35,7 @@ import { reactive, toRefs, defineComponent, getCurrentInstance, ref } from 'vue'
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysDatabaseApi } from '/@/api-services/api';
+import { UpdateDbColumnInput } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysEditColumn',
@@ -44,17 +45,7 @@ export default defineComponent({
 		const ruleFormRef = ref();
 		const state = reactive({
 			isShowDialog: false,
-			ruleForm: {
-				configId: '',
-				tableName: '',
-				columnName: '',
-				oldColumnName: '',
-				description: '',
-			},
-			ruleRules: {
-				columnName: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
-				description: [{ required: true, message: '描述不能为空', trigger: 'blur' }],
-			},
+			ruleForm: {} as UpdateDbColumnInput,
 		});
 		// 打开弹窗
 		const openDialog = (row: any) => {

+ 5 - 13
Web/src/views/system/database/component/editTable.vue

@@ -6,15 +6,15 @@
 					{{ '表编辑' }}
 				</div>
 			</template>
-			<el-form :model="ruleForm" :rules="ruleRules" ref="ruleFormRef" size="default" label-width="80px">
+			<el-form :model="ruleForm" ref="ruleFormRef" size="default" label-width="80px">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="表名称" prop="tableName">
+						<el-form-item label="表名称" prop="tableName" :rules="[{ required: true, message: '名称不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.tableName" placeholder="表名称" clearable></el-input>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="描述" prop="description">
+						<el-form-item label="描述" prop="description" :rules="[{ required: true, message: '描述不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.description" placeholder="描述" clearable type="textarea"></el-input>
 						</el-form-item>
 					</el-col>
@@ -35,6 +35,7 @@ import { reactive, toRefs, defineComponent, getCurrentInstance, ref } from 'vue'
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysDatabaseApi } from '/@/api-services/api';
+import { UpdateDbTableInput } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysEditTable',
@@ -44,16 +45,7 @@ export default defineComponent({
 		const ruleFormRef = ref();
 		const state = reactive({
 			isShowDialog: false,
-			ruleForm: {
-				configId: '',
-				tableName: '',
-				oldTableName: '',
-				description: '',
-			},
-			ruleRules: {
-				tableName: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
-				description: [{ required: true, message: '描述不能为空', trigger: 'blur' }],
-			},
+			ruleForm: {} as UpdateDbTableInput,
 		});
 		// 打开弹窗
 		const openDialog = (row: any) => {

+ 6 - 5
Web/src/views/system/database/index.vue

@@ -70,6 +70,7 @@ import EditColumn from '/@/views/system/database/component/editColumn.vue';
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysDatabaseApi } from '/@/api-services/api';
+import { DbColumnOutput, DbTableInfo } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysDatabase',
@@ -83,9 +84,9 @@ export default defineComponent({
 			loading1: false,
 			dbData: [] as any,
 			configId: '',
-			tableData: [] as any,
+			tableData: [] as Array<DbTableInfo>,
 			tableName: '',
-			columnData: [] as any,
+			columnData: [] as Array<DbColumnOutput>,
 			queryParams: {
 				name: undefined,
 				code: undefined,
@@ -116,14 +117,14 @@ export default defineComponent({
 
 			state.loading = true;
 			var res = await getAPI(SysDatabaseApi).sysDatabaseTableListGet(state.configId);
-			state.tableData = res.data.result;
+			state.tableData = res.data.result ?? [];
 			state.loading = false;
 		};
 		// 列查询操作
 		const handleQueryColunm = async () => {
 			state.loading1 = true;
 			var res = await getAPI(SysDatabaseApi).sysDatabaseColumnListGet(state.tableName, state.configId);
-			state.columnData = res.data.result;
+			state.columnData = res.data.result ?? [];
 			state.loading1 = false;
 		};
 		// 打开表编辑页面
@@ -135,7 +136,7 @@ export default defineComponent({
 				configId: state.configId,
 				tableName: state.tableName,
 				oldTableName: state.tableName,
-				description: res.description,
+				description: res[0].description,
 			};
 			editTableRef.value.openDialog(table);
 		};

+ 10 - 9
Web/src/views/system/dict/component/dictDataDialog.vue

@@ -1,13 +1,13 @@
 <template>
 	<div class="sys-dictData-container">
-		<el-dialog title="字典值列表" v-model="isShowDialog">
+		<el-dialog title="字典值列表" v-model="isShowDialog" width="860px">
 			<el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
 				<el-form :model="queryParams" ref="queryForm" :inline="true">
-					<el-form-item label="字典值" prop="value">
-						<el-input placeholder="字典值" clearable @keyup.enter="handleQuery" v-model="queryParams.value" />
+					<el-form-item label="值" prop="value">
+						<el-input placeholder="值" clearable @keyup.enter="handleQuery" v-model="queryParams.value" />
 					</el-form-item>
-					<el-form-item label="字典编码" prop="code">
-						<el-input placeholder="字典编码" clearable @keyup.enter="handleQuery" v-model="queryParams.code" />
+					<el-form-item label="编码" prop="code">
+						<el-input placeholder="编码" clearable @keyup.enter="handleQuery" v-model="queryParams.code" />
 					</el-form-item>
 					<el-form-item>
 						<el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button>
@@ -61,7 +61,8 @@ import { ElMessageBox, ElMessage } from 'element-plus';
 import EditDictData from '/@/views/system/dict/component/editDictData.vue';
 
 import { getAPI } from '/@/utils/axios-utils';
-import { SysDictDataApi } from '/@/api-services';
+import { SysDictDataApi } from '/@/api-services/api';
+import { SysDictData } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysDictData',
@@ -71,8 +72,8 @@ export default defineComponent({
 		const editDictDataRef = ref();
 		const state = reactive({
 			isShowDialog: false,
-			loading: true,
-			dictDataData: [] as any,
+			loading: false,
+			dictDataData: [] as Array<SysDictData>,
 			queryParams: {
 				value: undefined,
 				code: undefined,
@@ -103,7 +104,7 @@ export default defineComponent({
 		const handleQuery = async () => {
 			state.loading = true;
 			var res = await getAPI(SysDictDataApi).sysDictDataPageGet(state.dictTypeId, state.queryParams.value, state.queryParams.code, state.tableParams.page, state.tableParams.pageSize);
-			state.dictDataData = res.data.result?.items;
+			state.dictDataData = res.data.result?.items ?? [];
 			state.tableParams.total = res.data.result?.total;
 			state.loading = false;
 		};

+ 5 - 18
Web/src/views/system/dict/component/editDictData.vue

@@ -6,15 +6,15 @@
 					{{ title }}
 				</div>
 			</template>
-			<el-form :model="ruleForm" :rules="ruleRules" ref="ruleFormRef" size="default" label-width="80px">
+			<el-form :model="ruleForm" ref="ruleFormRef" size="default" label-width="80px">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="字典值" prop="value">
+						<el-form-item label="字典值" prop="value" :rules="[{ required: true, message: '字典值不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.value" placeholder="字典值" clearable></el-input>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="编码" prop="code">
+						<el-form-item label="编码" prop="code" :rules="[{ required: true, message: '编码不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.code" placeholder="编码" clearable></el-input>
 						</el-form-item>
 					</el-col>
@@ -53,17 +53,16 @@ import { reactive, toRefs, defineComponent, getCurrentInstance, ref } from 'vue'
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysDictDataApi } from '/@/api-services/api';
+import { UpdateDictDataInput } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysEditDictData',
 	components: {},
 	props: {
-		// 弹窗标题
 		title: {
 			type: String,
 			default: '',
 		},
-		// 字典类型Id
 		dictTypeId: {
 			type: Number,
 			default: 0,
@@ -74,19 +73,7 @@ export default defineComponent({
 		const ruleFormRef = ref();
 		const state = reactive({
 			isShowDialog: false,
-			ruleForm: {
-				dictTypeId: 0, // 字典类型Id
-				id: 0, // Id
-				value: '', // 字典值
-				code: '', // 编码
-				status: 1, // 状态
-				order: 100, // 排序
-				remark: '', // 备注
-			},
-			ruleRules: {
-				value: [{ required: true, message: '字典值不能为空', trigger: 'blur' }],
-				code: [{ required: true, message: '编码不能为空', trigger: 'blur' }],
-			},
+			ruleForm: {} as UpdateDictDataInput,
 		});
 		// 打开弹窗
 		const openDialog = (row: any) => {

+ 5 - 16
Web/src/views/system/dict/component/editDictType.vue

@@ -6,15 +6,15 @@
 					{{ title }}
 				</div>
 			</template>
-			<el-form :model="ruleForm" :rules="ruleRules" ref="ruleFormRef" size="default" label-width="80px">
+			<el-form :model="ruleForm" ref="ruleFormRef" size="default" label-width="80px">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="字典名称" prop="name">
+						<el-form-item label="字典名称" prop="name" :rules="[{ required: true, message: '字典名称不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.name" placeholder="字典名称" clearable></el-input>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="字典编码" prop="code">
+						<el-form-item label="字典编码" prop="code" :rules="[{ required: true, message: '字典编码不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.code" placeholder="字典编码" clearable></el-input>
 						</el-form-item>
 					</el-col>
@@ -53,12 +53,12 @@ import { reactive, toRefs, defineComponent, getCurrentInstance, ref } from 'vue'
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysDictTypeApi } from '/@/api-services/api';
+import { UpdateDictTypeInput } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysEditDictType',
 	components: {},
 	props: {
-		// 弹窗标题
 		title: {
 			type: String,
 			default: '',
@@ -69,18 +69,7 @@ export default defineComponent({
 		const ruleFormRef = ref();
 		const state = reactive({
 			isShowDialog: false,
-			ruleForm: {
-				id: 0, // Id
-				name: '', // 字典名称
-				code: '', // 字典编码
-				status: 1, // 状态
-				order: 100, // 排序
-				remark: '', // 备注
-			},
-			ruleRules: {
-				name: [{ required: true, message: '字典名称不能为空', trigger: 'blur' }],
-				code: [{ required: true, message: '字典编码不能为空', trigger: 'blur' }],
-			},
+			ruleForm: {} as UpdateDictTypeInput,
 		});
 		// 打开弹窗
 		const openDialog = (row: any) => {

+ 5 - 4
Web/src/views/system/dict/index.vue

@@ -62,7 +62,8 @@ import EditDictTpye from '/@/views/system/dict/component/editDictType.vue';
 import DictDataDialog from '/@/views/system/dict/component/dictDataDialog.vue';
 
 import { getAPI } from '/@/utils/axios-utils';
-import { SysDictTypeApi } from '/@/api-services';
+import { SysDictTypeApi } from '/@/api-services/api';
+import { SysDictType } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysDict',
@@ -72,8 +73,8 @@ export default defineComponent({
 		const editDictTypeRef = ref();
 		const dictDataDialogRef = ref();
 		const state = reactive({
-			loading: true,
-			dictTypeData: [] as any,
+			loading: false,
+			dictTypeData: [] as Array<SysDictType>,
 			queryParams: {
 				name: undefined,
 				code: undefined,
@@ -99,7 +100,7 @@ export default defineComponent({
 		const handleQuery = async () => {
 			state.loading = true;
 			var res = await getAPI(SysDictTypeApi).sysDictTypePageGet(state.queryParams.name, state.queryParams.code, state.tableParams.page, state.tableParams.pageSize);
-			state.dictTypeData = res.data.result?.items;
+			state.dictTypeData = res.data.result?.items ?? [];
 			state.tableParams.total = res.data.result?.total;
 			state.loading = false;
 		};

+ 26 - 14
Web/src/views/system/file/index.vue

@@ -5,11 +5,19 @@
 				<el-form-item label="文件名称" prop="fileName">
 					<el-input placeholder="文件名称" clearable @keyup.enter="handleQuery" v-model="queryParams.fileName" />
 				</el-form-item>
-				<el-form-item label="开始时间" prop="name">
-					<el-date-picker v-model="queryParams.startTime" type="datetime" placeholder="开始时间" :shortcuts="shortcuts" />
+				<el-form-item label="时间范围" prop="timeRange">
+					<!-- <el-date-picker v-model="queryParams.startTime" type="datetime" placeholder="开始时间" :shortcuts="shortcuts" />
 				</el-form-item>
 				<el-form-item label="结束时间" prop="code">
-					<el-date-picker v-model="queryParams.endTime" type="datetime" placeholder="结束时间" :shortcuts="shortcuts" />
+					<el-date-picker v-model="queryParams.endTime" type="datetime" placeholder="结束时间" :shortcuts="shortcuts" /> -->
+					<el-date-picker
+						v-model="queryParams.timeRange"
+						type="datetimerange"
+						start-placeholder="开始时间"
+						end-placeholder="结束时间"
+						format="YYYY-MM-DD HH:mm:ss"
+						value-format="YYYY-MM-DD HH:mm:ss"
+					/>
 				</el-form-item>
 				<el-form-item>
 					<el-button icon="ele-Refresh" @click="resetQuery">重置 </el-button>
@@ -95,7 +103,8 @@ import { ElMessageBox, ElMessage, UploadInstance } from 'element-plus';
 
 import { downloadByUrl } from '/@/utils/download';
 import { getAPI } from '/@/utils/axios-utils';
-import { SysFileApi } from '/@/api-services';
+import { SysFileApi } from '/@/api-services/api';
+import { SysFile } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysFile',
@@ -104,12 +113,11 @@ export default defineComponent({
 		const { proxy } = getCurrentInstance() as any;
 		const uploadRef = ref<UploadInstance>();
 		const state = reactive({
-			loading: true,
-			fileData: [] as any,
+			loading: false,
+			fileData: [] as Array<SysFile>,
 			queryParams: {
 				fileName: undefined,
-				startTime: undefined,
-				endTime: undefined,
+				timeRange: [] as any,
 			},
 			tableParams: {
 				page: 1,
@@ -132,19 +140,23 @@ export default defineComponent({
 
 		// 查询操作
 		const handleQuery = async () => {
-			if (state.queryParams.startTime == null) state.queryParams.startTime = undefined;
-			if (state.queryParams.endTime == null) state.queryParams.endTime = undefined;
+			let startTime = undefined;
+			let endTime = undefined;
+			if (state.queryParams.timeRange != undefined) {
+				startTime = state.queryParams.timeRange[0];
+				endTime = state.queryParams.timeRange[1];
+			}
+
 			state.loading = true;
-			var res = await getAPI(SysFileApi).sysFilePageGet(state.queryParams.fileName, state.queryParams.startTime, state.queryParams.endTime, state.tableParams.page, state.tableParams.pageSize);
-			state.fileData = res.data.result?.items;
+			var res = await getAPI(SysFileApi).sysFilePageGet(state.queryParams.fileName, startTime, endTime, state.tableParams.page, state.tableParams.pageSize);
+			state.fileData = res.data.result?.items ?? [];
 			state.tableParams.total = res.data.result?.total;
 			state.loading = false;
 		};
 		// 重置操作
 		const resetQuery = () => {
 			state.queryParams.fileName = undefined;
-			state.queryParams.startTime = undefined;
-			state.queryParams.endTime = undefined;
+			state.queryParams.timeRange = undefined;
 			handleQuery();
 		};
 		// 打开上传页面

+ 5 - 4
Web/src/views/system/log/difflog/index.vue

@@ -49,14 +49,15 @@ import { toRefs, reactive, onMounted, defineComponent } from 'vue';
 import { ElMessage } from 'element-plus';
 
 import { getAPI } from '/@/utils/axios-utils';
-import { SysLogDiffApi } from '/@/api-services';
+import { SysLogDiffApi } from '/@/api-services/api';
+import { SysLogDiff } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysDiffLog',
 	components: {},
 	setup() {
 		const state = reactive({
-			loading: true,
+			loading: false,
 			queryParams: {
 				startTime: undefined,
 				endTime: undefined,
@@ -66,7 +67,7 @@ export default defineComponent({
 				pageSize: 10,
 				total: 0 as any,
 			},
-			logData: [] as any,
+			logData: [] as Array<SysLogDiff>,
 		});
 		onMounted(async () => {
 			handleQuery();
@@ -77,7 +78,7 @@ export default defineComponent({
 			if (state.queryParams.endTime == null) state.queryParams.endTime = undefined;
 			state.loading = true;
 			var res = await getAPI(SysLogDiffApi).sysLogDiffPageGet(state.queryParams.startTime, state.queryParams.endTime, state.tableParams.page, state.tableParams.pageSize);
-			state.logData = res.data.result?.items;
+			state.logData = res.data.result?.items ?? [];
 			state.tableParams.total = res.data.result?.total;
 			state.loading = false;
 		};

+ 5 - 4
Web/src/views/system/log/exlog/index.vue

@@ -49,14 +49,15 @@ import { toRefs, reactive, onMounted, defineComponent } from 'vue';
 import { ElMessage } from 'element-plus';
 
 import { getAPI } from '/@/utils/axios-utils';
-import { SysLogExApi } from '/@/api-services';
+import { SysLogExApi } from '/@/api-services/api';
+import { SysLogEx } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysExLog',
 	components: {},
 	setup() {
 		const state = reactive({
-			loading: true,
+			loading: false,
 			queryParams: {
 				startTime: undefined,
 				endTime: undefined,
@@ -66,7 +67,7 @@ export default defineComponent({
 				pageSize: 10,
 				total: 0 as any,
 			},
-			logData: [] as any,
+			logData: [] as Array<SysLogEx>,
 		});
 		onMounted(async () => {
 			handleQuery();
@@ -77,7 +78,7 @@ export default defineComponent({
 			if (state.queryParams.endTime == null) state.queryParams.endTime = undefined;
 			state.loading = true;
 			var res = await getAPI(SysLogExApi).sysLogExPageGet(state.queryParams.startTime, state.queryParams.endTime, state.tableParams.page, state.tableParams.pageSize);
-			state.logData = res.data.result?.items;
+			state.logData = res.data.result?.items ?? [];
 			state.tableParams.total = res.data.result?.total;
 			state.loading = false;
 		};

+ 5 - 4
Web/src/views/system/log/oplog/index.vue

@@ -62,14 +62,15 @@ import { toRefs, reactive, onMounted, defineComponent } from 'vue';
 import { ElMessage } from 'element-plus';
 
 import { getAPI } from '/@/utils/axios-utils';
-import { SysLogOpApi } from '/@/api-services';
+import { SysLogOpApi } from '/@/api-services/api';
+import { SysLogOp } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysOpLog',
 	components: {},
 	setup() {
 		const state = reactive({
-			loading: true,
+			loading: false,
 			queryParams: {
 				startTime: undefined,
 				endTime: undefined,
@@ -79,7 +80,7 @@ export default defineComponent({
 				pageSize: 10,
 				total: 0 as any,
 			},
-			logData: [] as any,
+			logData: [] as Array<SysLogOp>,
 			dialogVisible: false,
 			content: '',
 		});
@@ -92,7 +93,7 @@ export default defineComponent({
 			if (state.queryParams.endTime == null) state.queryParams.endTime = undefined;
 			state.loading = true;
 			var res = await getAPI(SysLogOpApi).sysLogOpPageGet(state.queryParams.startTime, state.queryParams.endTime, state.tableParams.page, state.tableParams.pageSize);
-			state.logData = res.data.result?.items;
+			state.logData = res.data.result?.items ?? [];
 			state.tableParams.total = res.data.result?.total;
 			state.loading = false;
 		};

+ 5 - 4
Web/src/views/system/log/vislog/index.vue

@@ -59,14 +59,15 @@ import { toRefs, reactive, onMounted, defineComponent } from 'vue';
 import { ElMessage } from 'element-plus';
 
 import { getAPI } from '/@/utils/axios-utils';
-import { SysLogVisApi } from '/@/api-services';
+import { SysLogVisApi } from '/@/api-services/api';
+import { SysLogVis } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysVisLog',
 	components: {},
 	setup() {
 		const state = reactive({
-			loading: true,
+			loading: false,
 			queryParams: {
 				startTime: undefined,
 				endTime: undefined,
@@ -76,7 +77,7 @@ export default defineComponent({
 				pageSize: 10,
 				total: 0 as any,
 			},
-			logData: [] as any,
+			logData: [] as Array<SysLogVis>,
 		});
 		onMounted(async () => {
 			handleQuery();
@@ -87,7 +88,7 @@ export default defineComponent({
 			if (state.queryParams.endTime == null) state.queryParams.endTime = undefined;
 			state.loading = true;
 			var res = await getAPI(SysLogVisApi).sysLogVisPageGet(state.queryParams.startTime, state.queryParams.endTime, state.tableParams.page, state.tableParams.pageSize);
-			state.logData = res.data.result?.items;
+			state.logData = res.data.result?.items ?? [];
 			state.tableParams.total = res.data.result?.total;
 			state.loading = false;
 		};

+ 17 - 41
Web/src/views/system/menu/component/editMenu.vue

@@ -6,11 +6,18 @@
 					{{ title }}
 				</div>
 			</template>
-			<el-form :model="ruleForm" :rules="ruleRules" ref="ruleFormRef" size="default" label-width="80px">
+			<el-form :model="ruleForm" ref="ruleFormRef" size="default" label-width="80px">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="上级菜单">
-							<el-cascader :options="menuData" :props="{ checkStrictly: true, value: 'id', label: 'title' }" placeholder="请选择上级菜单" clearable class="w100" v-model="ruleForm.pid">
+							<el-cascader
+								:options="menuData"
+								:props="{ checkStrictly: true, emitPath: false, value: 'id', label: 'title' }"
+								placeholder="请选择上级菜单"
+								clearable
+								class="w100"
+								v-model="ruleForm.pid"
+							>
 								<template #default="{ node, data }">
 									<span>{{ data.title }}</span>
 									<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
@@ -19,16 +26,16 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="菜单类型" prop="type">
+						<el-form-item label="菜单类型" prop="type" :rules="[{ required: true, message: '菜单类型不能为空', trigger: 'blur' }]">
 							<el-radio-group v-model="ruleForm.type">
-								<el-radio v-for="dict in menuType" :key="dict.value" :label="dict.value">
-									{{ dict.label }}
-								</el-radio>
+								<el-radio :label="1">目录</el-radio>
+								<el-radio :label="2">菜单</el-radio>
+								<el-radio :label="3">按钮</el-radio>
 							</el-radio-group>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="菜单名称" prop="title">
+						<el-form-item label="菜单名称" prop="title" :rules="[{ required: true, message: '菜单名称不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.title" placeholder="菜单名称" clearable></el-input>
 						</el-form-item>
 					</el-col>
@@ -144,19 +151,18 @@ import IconSelector from '/@/components/iconSelector/index.vue';
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysMenuApi } from '/@/api-services/api';
+import { SysMenu, UpdateMenuInput } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysEditMenu',
 	components: { IconSelector },
 	props: {
-		// 弹窗标题
 		title: {
 			type: String,
 			default: '',
 		},
-		// 菜单数据
 		menuData: {
-			type: Array,
+			type: Array<SysMenu>,
 			default: () => [],
 		},
 	},
@@ -165,35 +171,7 @@ export default defineComponent({
 		const ruleFormRef = ref();
 		const state = reactive({
 			isShowDialog: false,
-			ruleForm: {
-				id: 0, // Id
-				pid: 0, // 父节点Id
-				type: 1, // 菜单类型
-				name: '', // 路由名称(全局唯一)
-				component: '', // 组件路径
-				redirect: '', // 路由重定向(有子集 children 时)
-				permission: '', // 权限标识
-				path: '', // 路由路径
-				title: '', // 菜单名称
-				icon: '', // 菜单图标
-				isHide: false, // 是否隐藏
-				isKeepAlive: true, // 是否缓存
-				isAffix: false, // 是否固定
-				outLink: '', // 外链/内嵌时链接地址
-				isIframe: false, // 是否内嵌
-				order: 100, // 排序
-				status: 1, // 是否启用
-				remark: '', // 备注
-			},
-			menuType: [
-				{ value: 1, label: '目录' },
-				{ value: 2, label: '菜单' },
-				{ value: 3, label: '按钮' },
-			],
-			ruleRules: {
-				type: [{ required: true, message: '菜单类型不能为空', trigger: 'blur' }],
-				title: [{ required: true, message: '菜单名称不能为空', trigger: 'blur' }],
-			},
+			ruleForm: {} as UpdateMenuInput,
 		});
 		// 打开弹窗
 		const openDialog = (row: any) => {
@@ -211,8 +189,6 @@ export default defineComponent({
 		};
 		// 提交
 		const submit = () => {
-			// 上级菜单Id
-			if (Array.isArray(state.ruleForm.pid)) state.ruleForm.pid = state.ruleForm.pid[state.ruleForm.pid.length - 1];
 			ruleFormRef.value.validate(async (valid: boolean) => {
 				if (!valid) return;
 				if (state.ruleForm.id != undefined && state.ruleForm.id > 0) {

+ 8 - 10
Web/src/views/system/menu/index.vue

@@ -7,7 +7,9 @@
 				</el-form-item>
 				<el-form-item label="类型" prop="type">
 					<el-select v-model="queryParams.type" placeholder="类型" clearable>
-						<el-option v-for="dict in menuType" :key="dict.value" :label="dict.label" :value="dict.value" />
+						<el-option label="目录" :value="1" />
+						<el-option label="菜单" :value="2" />
+						<el-option label="按钮" :value="3" />
 					</el-select>
 				</el-form-item>
 				<el-form-item>
@@ -62,7 +64,8 @@ import { ElMessageBox, ElMessage } from 'element-plus';
 import EditMenu from '/@/views/system/menu/component/editMenu.vue';
 
 import { getAPI } from '/@/utils/axios-utils';
-import { SysMenuApi } from '/@/api-services';
+import { SysMenuApi } from '/@/api-services/api';
+import { SysMenu } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysMenu',
@@ -71,17 +74,12 @@ export default defineComponent({
 		const { proxy } = getCurrentInstance() as any;
 		const editMenuRef = ref();
 		const state = reactive({
-			loading: true,
-			menuData: [] as any,
+			loading: false,
+			menuData: [] as Array<SysMenu>,
 			queryParams: {
 				title: undefined,
 				type: undefined,
 			},
-			menuType: [
-				{ value: 1, label: '目录' },
-				{ value: 2, label: '菜单' },
-				{ value: 3, label: '按钮' },
-			],
 			editMenuTitle: '',
 		});
 		onMounted(async () => {
@@ -99,7 +97,7 @@ export default defineComponent({
 		const handleQuery = async () => {
 			state.loading = true;
 			var res = await getAPI(SysMenuApi).sysMenuListGet(state.queryParams.title, state.queryParams.type);
-			state.menuData = res.data.result;
+			state.menuData = res.data.result ?? [];
 			state.loading = false;
 		};
 		// 重置操作

+ 2 - 2
Web/src/views/system/onlineUser/index.vue

@@ -54,6 +54,7 @@ import * as SignalR from '@microsoft/signalr';
 
 import { getAPI, getToken, clearAccessTokens } from '/@/utils/axios-utils';
 import { SysOnlineUserApi, SysAuthApi } from '/@/api-services/api';
+import { SysOnlineUser } from '/@/api-services/models';
 
 const state = reactive({
 	loading: false,
@@ -67,7 +68,7 @@ const state = reactive({
 		pageSize: 10,
 		total: 0 as any,
 	},
-	onlineUserList: [] as any, // 在线用户列表
+	onlineUserList: [] as Array<SysOnlineUser>, // 在线用户列表
 });
 
 // 初始化SignalR对象
@@ -95,7 +96,6 @@ connection.onclose(async () => {
 });
 // 重连中
 connection.onreconnecting(() => {
-	state.onlineUserList = [];
 	ElNotification({
 		title: '提示',
 		message: '与服务器重连中...',

+ 7 - 22
Web/src/views/system/org/component/editOrg.vue

@@ -6,11 +6,11 @@
 					{{ title }}
 				</div>
 			</template>
-			<el-form :model="ruleForm" :rules="ruleRules" ref="ruleFormRef" size="default" label-width="80px">
+			<el-form :model="ruleForm" ref="ruleFormRef" size="default" label-width="80px">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="上级机构">
-							<el-cascader :options="orgData" :props="{ checkStrictly: true, value: 'id', label: 'name' }" placeholder="请选择上级机构" clearable class="w100" v-model="ruleForm.pid">
+							<el-cascader :options="orgData" :props="{ checkStrictly: true, emitPath: false, value: 'id', label: 'name' }" placeholder="请选择上级机构" clearable class="w100" v-model="ruleForm.pid">
 								<template #default="{ node, data }">
 									<span>{{ data.name }}</span>
 									<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
@@ -19,12 +19,12 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="机构名称" prop="name">
+						<el-form-item label="机构名称" prop="name" :rules="[{ required: true, message: '机构名称不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.name" placeholder="机构名称" clearable></el-input>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="机构编码" prop="code">
+						<el-form-item label="机构编码" prop="code" :rules="[{ required: true, message: '机构编码不能为空', trigger: 'blur' }]">
 							<el-input v-model="ruleForm.code" placeholder="机构编码" clearable></el-input>
 						</el-form-item>
 					</el-col>
@@ -63,19 +63,18 @@ import { reactive, toRefs, defineComponent, getCurrentInstance, ref } from 'vue'
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysOrgApi } from '/@/api-services/api';
+import { SysOrg, UpdateOrgInput } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysEditOrg',
 	components: {},
 	props: {
-		// 弹窗标题
 		title: {
 			type: String,
 			default: '',
 		},
-		// 机构数据
 		orgData: {
-			type: Array,
+			type: Array<SysOrg>,
 			default: () => [],
 		},
 	},
@@ -84,19 +83,7 @@ export default defineComponent({
 		const ruleFormRef = ref();
 		const state = reactive({
 			isShowDialog: false,
-			ruleForm: {
-				id: 0, // Id
-				pid: 0, // 父节点Id
-				name: '', // 机构名称
-				code: '', // 机构编码
-				order: 100, // 排序
-				status: 1, // 是否启用
-				remark: '', // 备注
-			},
-			ruleRules: {
-				name: [{ required: true, message: '机构名称不能为空', trigger: 'blur' }],
-				code: [{ required: true, message: '机构编码不能为空', trigger: 'blur' }],
-			},
+			ruleForm: {} as UpdateOrgInput,
 		});
 		// 打开弹窗
 		const openDialog = (row: any) => {
@@ -114,8 +101,6 @@ export default defineComponent({
 		};
 		// 提交
 		const submit = () => {
-			// 上级机构Id
-			if (Array.isArray(state.ruleForm.pid)) state.ruleForm.pid = state.ruleForm.pid[state.ruleForm.pid.length - 1];
 			ruleFormRef.value.validate(async (valid: boolean) => {
 				if (!valid) return;
 				if (state.ruleForm.id != undefined && state.ruleForm.id > 0) {

+ 3 - 2
Web/src/views/system/org/component/orgTree.vue

@@ -51,13 +51,14 @@ import { Search, MoreFilled } from '@element-plus/icons-vue';
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysOrgApi } from '/@/api-services/api';
+import { SysOrg } from '/@/api-services/models';
 
 const filterText = ref('');
 const treeRef = ref<InstanceType<typeof ElTree>>();
 
 const state = reactive({
 	loading: false,
-	orgData: [] as any,
+	orgData: [] as Array<SysOrg>,
 	isShowCheckbox: false,
 	ownOrgData: [],
 });
@@ -73,7 +74,7 @@ watch(filterText, (val) => {
 const initTreeData = async () => {
 	state.loading = true;
 	var res = await getAPI(SysOrgApi).sysOrgListGet(0);
-	state.orgData = res.data.result;
+	state.orgData = res.data.result ?? [];
 	state.loading = false;
 };
 

+ 7 - 6
Web/src/views/system/org/index.vue

@@ -57,6 +57,7 @@ import EditOrg from '/@/views/system/org/component/editOrg.vue';
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysOrgApi } from '/@/api-services/api';
+import { SysOrg } from '/@/api-services/models';
 
 export default defineComponent({
 	name: 'sysOrg',
@@ -66,9 +67,9 @@ export default defineComponent({
 		const editOrgRef = ref();
 		const orgTreeRef = ref();
 		const state = reactive({
-			loading: true,
-			orgData: [] as any, // 机构列表数据
-			orgTreeData: [] as any, // 机构树所有数据
+			loading: false,
+			orgData: [] as Array<SysOrg>, // 机构列表数据
+			orgTreeData: [] as Array<SysOrg>, // 机构树所有数据
 			queryParams: {
 				id: -1,
 				name: undefined,
@@ -85,7 +86,7 @@ export default defineComponent({
 				// 编辑删除后更新机构数据
 				state.loading = true;
 				var res = await getAPI(SysOrgApi).sysOrgListGet(-1, '', '');
-				state.orgTreeData = res.data.result;
+				state.orgTreeData = res.data.result ?? [];
 				state.loading = false;
 				orgTreeRef.value.updateTreeData(state.orgTreeData);
 			});
@@ -97,7 +98,7 @@ export default defineComponent({
 		const handleQuery = async () => {
 			state.loading = true;
 			var res = await getAPI(SysOrgApi).sysOrgListGet(state.queryParams.id, state.queryParams.name, state.queryParams.code);
-			state.orgData = res.data.result;
+			state.orgData = res.data.result ?? [];
 			state.loading = false;
 
 			// 若无选择节点并且查询条件为空时
@@ -138,7 +139,7 @@ export default defineComponent({
 		// 树组件点击
 		const nodeClick = async (node: any) => {
 			state.queryParams.id = node.id;
-			state.queryParams.name = undefined; // node.name;
+			state.queryParams.name = undefined;
 			state.queryParams.code = undefined;
 			handleQuery();
 		};

Some files were not shown because too many files changed in this diff