47. 内置系统模块全景速查
框架自带的系统模块全部集中在 Admin.NET.Core/Service/**,一个模块 = 一个 SysXxxService : IDynamicApiController + 一个 SysXxx 实体 + 一个 Web/src/views/system/xxx 页面。路由由类名去掉 Service 后缀得到(如 SysUserService → /api/sysUser/*),[ApiDescriptionSettings(Order = N)] 决定 Swagger 分组排序。
1. 模块总览图
Admin.NET.Core/Service/
├── 权限域 User/ Role/ Org/ Pos/ Menu/ Auth/ OAuth/ User/
├── 数据域 Config/ Dict/ Const/ Enum/ Region/ Serial/
├── 平台域 Tenant/ Plugin/ OpenAccess/ Upgrade/ Cache/ Server/
├── 文件域 File/ Print/ Report/
├── 日志域 Log/(8 类日志,落 SysLog* 表,可切独立日志库)
├── 任务域 Job/ Schedule/
├── 开发域 CodeGen/ DataBase/ ColumnCustom/ APIJSON/ Common/
└── 消息域 Message/ Notice/ Email/ Sms/ Wechat/ Mqtt/ SignalR/
路由规则:SysXxxService → /api/sysXxx/{Action}
按钮权限:菜单表 Permission 字段 = "sysXxx/action",如 sysUser/grantRole2. 权限与组织模块
| 模块 | 后端服务(文件路径) | 主要接口路由 | 实体 / 表名 | 前端页面 |
|---|---|---|---|---|
| 用户 | Admin.NET.Core/Service/User/SysUserService.cs(Order 490) | /api/sysUser/page、add、update、delete、baseInfo、setStatus、resetPwd、changePwd、grantRole、unlockLogin、ownRoleList | SysUser / sys_user;扩展机构 SysUserExtOrg、角色 SysUserRole、菜单 SysUserMenu、密码记录 SysUserPasswordRecord | Web/src/views/system/user/index.vue |
| 角色 | Admin.NET.Core/Service/Role/SysRoleService.cs(480) | /api/sysRole/page、add、update、delete、grantMenu、grantApi、grantDataScope、grantUser、copy、setStatus | SysRole、SysRoleMenu、SysRoleApi(接口黑名单)、SysRoleOrg、SysRoleTable | Web/src/views/system/role/index.vue |
| 机构 | Admin.NET.Core/Service/Org/SysOrgService.cs(470) | /api/sysOrg/list、add、update、delete、childTree、userChildTree | SysOrg / sys_org(树形,Pid 自关联) | Web/src/views/system/org/index.vue |
| 职位 | Admin.NET.Core/Service/Pos/SysPosService.cs(460) | /api/sysPos/page、list、add、update、delete、import、export、downloadTemplate | SysPos / sys_pos | Web/src/views/system/pos/index.vue |
| 菜单 | Admin.NET.Core/Service/Menu/SysMenuService.cs(450) | /api/sysMenu/loginMenuTree、list、add、update、delete、setStatus | SysMenu / sys_menu(Type 区分目录/菜单/按钮) | Web/src/views/system/menu/index.vue |
| 登录授权 | Admin.NET.Core/Service/Auth/SysAuthService.cs(500) | /api/sysAuth/login、loginPhone、logout、userInfo、unLockScreen、captcha、userRegistration | 无独立表,读写 SysUser、SysUserRole | Web/src/views/login/index.vue |
| OAuth 授权 | Admin.NET.Core/Service/OAuth/SysOAuthService.cs(498) | /api/sysOAuth/* | SysOAuthUser / sys_oauth_user | Web/src/views/system/oAuthUser/index.vue |
| 三方账号 | Admin.NET.Core/Service/OAuth/SysOAuthUser/SysOAuthUserService.cs(488) | /api/sysOAuthUser/page、list、add、update、delete | SysOAuthUser | Web/src/views/system/oAuthUser/index.vue |
| AD 域 | Admin.NET.Core/Service/Auth/SysLdapService.cs(496) | /api/sysLdap/page、list、detail、add、update、delete、syncUser、syncDept | SysLdap、SysUserLdap | Web/src/views/system/ldap/index.vue |
| 注册方案 | Admin.NET.Core/Service/User/SysUserRegWayService.cs(490) | /api/sysUserRegWay/page、list、add、update、delete | SysUserRegWay / sys_user_reg_way | Web/src/views/system/userRegWay/index.vue |
| 快捷导航 | Admin.NET.Core/Service/User/SysUserMenuService.cs(445) | /api/sysUserMenu/add、userMenuList、userMenuIdList、deleteUserMenu | SysUserMenu / sys_user_menu | 个人中心内 |
3. 平台与系统配置模块
| 模块 | 后端服务 | 主要接口路由 | 实体 / 表名 | 前端页面 |
|---|---|---|---|---|
| 租户 | Admin.NET.Core/Service/Tenant/SysTenantService.cs(390) | /api/sysTenant/page、list、add、update、delete、grantMenu、resetPwd、setStatus、initTenantDb、initTenantData、syncTenantDb、tenantDbList、userList、saveSysInfo | SysTenant / sys_tenant(带 [Tenant] 特性走独立库) | Web/src/views/system/tenant/index.vue |
| 参数配置 | Admin.NET.Core/Service/Config/SysConfigService.cs(440) | /api/sysConfig/page、list、add、update、delete、batchDelete、batchUpdate、detail、groupList、smPublicKey | SysConfig / sys_config | Web/src/views/system/config/index.vue |
| 字典类型 | Admin.NET.Core/Service/Dict/SysDictTypeService.cs(430) | /api/sysDictType/page、list、add、update、delete、detail、dataList、allDictList、setStatus | SysDictType / sys_dict_type | Web/src/views/system/dict/index.vue |
| 字典值 | Admin.NET.Core/Service/Dict/SysDictDataService.cs(420) | /api/sysDictData/page、list、add、update、delete、detail、setStatus | SysDictData / sys_dict_data | Web/src/views/system/dict/index.vue |
| 系统常量 | Admin.NET.Core/Service/Const/SysConstService.cs(280) | /api/sysConst/list、data | 无表,扫描贴 [Const] 特性的静态类 | 由 useUserInfo().setConstList() 消费 |
| 系统枚举 | Admin.NET.Core/Service/Enum/SysEnumService.cs(275) | /api/sysEnum/enumTypeList、enumDataList、enumToDict | 无表,扫描 [Enum] 特性;enumToDict 可批量转字典 | 下拉/表格枚举列 |
| 行政区划 | Admin.NET.Core/Service/Region/SysRegionService.cs(310) | /api/sysRegion/page、list、childTree、childList、query、regionTree、add、update、delete、syncRegionMzb、syncRegionGD、syncRegionMca、syncRegionTianditu、genOrg | SysRegion / sys_region | Web/src/views/system/region/index.vue |
| 流水号 | Admin.NET.Core/Service/Serial/SysSerialService.cs(100) | /api/sysSerial/page、detail、add、update、delete、nextSeqNo、globalNextSeqNo、preview、typeList | SysSerial / sys_serial | Web/src/views/system/serial/index.vue |
| 缓存 | Admin.NET.Core/Service/Cache/SysCacheService.cs(400,ISingleton) | /api/sysCache/keyList、keysByPrefixKey、delete、deleteByPreKey、clear、value、beginCacheLock | 无表,走 ICacheProvider | Web/src/views/system/cache/index.vue |
| 服务器监控 | Admin.NET.Core/Service/Server/SysServerService.cs(290) | /api/sysServer/hardwareInfo、runtimeInfo、nuGetPackageInfo | 无表,读取 Hardware.Info + 运行时 | Web/src/views/system/server/index.vue |
| 更新日志 | Admin.NET.Core/Service/Upgrade/SysUpgradeService.cs(380) | /api/sysUpgrade/page、add、update、delete、setRead、lastUnRead | SysUpgrade、SysUpgradeUser | Web/src/views/system/upgrade/index.vue |
| 系统配置页 | — | 汇总 SysConfig 各项 | SysConfig | Web/src/views/system/infoSetting/index.vue |
| 在线用户 | Admin.NET.Core/Service/OnlineUser/SysOnlineUserService.cs(300) | /api/sysOnlineUser/onlineUserList、forceOffline | 无表,读缓存 CacheConst.KeyUserOnline | Web/src/views/system/onlineUser/index.vue |
4. 日志模块(8 类,全部可切独立日志库 [LogTable])
| 模块 | 后端服务 | 主要接口路由 | 实体 / 表名 | 前端页面 |
|---|---|---|---|---|
| 登录日志 | Service/Log/SysLogVisService.cs(340) | /api/sysLogVis/page、clear、export | SysLogVis / sys_log_vis | views/system/log/logvis/index.vue |
| 操作日志 | Service/Log/SysLogOpService.cs(360) | /api/sysLogOp/page、detail、clear、export、yearDayStats | SysLogOp / sys_log_op | views/system/log/logop/index.vue |
| 异常日志 | Service/Log/SysLogExService.cs(350) | /api/sysLogEx/page、clear、export | SysLogEx / sys_log_ex | views/system/log/logex/index.vue |
| 差异日志 | Service/Log/SysLogDiffService.cs(330) | /api/sysLogDiff/page、clear、export | SysLogDiff / sys_log_diff | views/system/log/logdiff/index.vue |
| 请求日志 | Service/Log/SysLogHttpService.cs(330) | /api/sysLogHttp/page | SysLogHttp / sys_log_http | views/system/log/loghttp/index.vue |
| 消息日志 | Service/Log/SysLogMsgService.cs(370) | /api/sysLogMsg/page | SysLogMsg / sys_log_msg | views/system/log/logmsg/index.vue |
| 事件日志 | Service/Log/SysLogEventService.cs(365) | /api/sysLogEvent/page | SysLogEvent / sys_log_event | views/system/log/logevent/index.vue |
| 文件日志 | Service/Log/SysLogFileService.cs(340) | /api/sysLogFile/logFileList、logContentStream、downloadLogFile | 落 Logging:File 的文件,按天分卷 | views/system/log/logfile/index.vue |
| 开放接口日志 | Service/Log/SysLogOpenAccessService.cs(245) | /api/sysLogOpenAccess/page | SysLogOpenAccess / sys_log_open_access | views/system/log/logopenaccess/index.vue |
5. 文件、任务、开发域模块
| 模块 | 后端服务 | 主要接口路由 | 实体 / 表名 | 前端页面 |
|---|---|---|---|---|
| 文件 | Service/File/SysFileService.cs(410) | /api/sysFile/page、uploadFile、uploadFiles、uploadAvatar、uploadSignature、downloadFile、preview、delete、update、folder | SysFile / sys_file、SysFileContent(EnableSaveDb 时存内容) | views/system/file/index.vue |
| 打印模板 | Service/Print/SysPrintService.cs(305) | /api/sysPrint/page、print、add、update、copy、delete | SysPrint / sys_print | views/system/print/index.vue |
| 定时任务 | Service/Job/SysJobService.cs(320) | /api/sysJob/pageJobDetail、addJobDetail、updateJobDetail、deleteJobDetail、getJobTriggerList、addJobTrigger、startJob、pauseJob、runJob、pageJobTriggerRecord | SysJobDetail、SysJobTrigger、SysJobTriggerRecord、SysJobCluster | views/system/job/index.vue、job/dashboard.vue |
| 日程 | Service/Schedule/SysScheduleService.cs(295) | /api/sysSchedule/page、detail、add、update、delete、setStatus | SysSchedule / sys_schedule | 首页日程组件 |
| 代码生成 | Service/CodeGen/SysCodeGenService.cs(270) | /api/sysCodeGen/page、add、update、delete、sync、detail、tableList、columnListByTableName、generate、preview | SysCodeGen、SysCodeGenTable、SysCodeGenColumn | views/system/codeGen/index.vue |
| 代码生成字段 | Service/CodeGen/SysCodeGenColumnService.cs(260) | /api/sysCodeGenColumn/list、detail、update、entityInfos | SysCodeGenColumn | 同上 |
| 库表管理 | Service/DataBase/SysDatabaseService.cs(250) | /api/sysDatabase/list、tableList、columnList、addTable、addColumn、updateColumn、deleteColumn、createEntity、createSeedData | 直连数据库元数据 | views/system/database/index.vue |
| 数据库备份 | Service/DataBase/SysDbBackupService.cs(255) | /api/sysDbBackup/list、add、delete、compress、download | 无表 | 菜单已注释,默认不启用 |
| 列定制 | Service/ColumnCustom/SysColumnCustomService.cs(245) | /api/sysColumnCustom/detail、store、reset | SysColumnCustom / sys_column_custom | vxe-grid 列设置 |
| 动态插件 | Service/Plugin/SysPluginService.cs(245) | /api/sysPlugin/page、add、update、delete、compileAssembly、removeAssembly | SysPlugin / sys_plugin | views/system/plugin/index.vue |
| 开放接口 | Service/OpenAccess/SysOpenAccessService.cs(244) | /api/sysOpenAccess/page、add、update、delete、generateSignature、secret | SysOpenAccess / sys_open_access | views/system/openAccess/index.vue |
| 表单设计 | —(前端驱动) | — | — | views/system/formDes/index.vue |
6. 消息、报表、通用模块
| 模块 | 后端服务 | 主要接口路由 | 实体 / 表名 | 前端页面 |
|---|---|---|---|---|
| 通知公告 | Service/Notice/SysNoticeService.cs(380) | /api/sysNotice/page、add、update、delete、public、setRead、pageReceived、unReadList | SysNotice、SysNoticeUser | views/system/notice/index.vue、home/notice/index.vue |
| 消息发送 | Service/Message/SysMessageService.cs(370) | /api/sysMessage/sendAllUser、sendUser | 事件总线驱动 | SignalR 推送 |
| 邮件 | Service/Message/SysEmailService.cs(370) | /api/sysEmail/* | 配置见 Email.json | — |
| 短信 | Service/Message/SysSmsService.cs(150) | /api/sysSms/* | 配置见 SMS.json | — |
| 微信/企微/小程序 | Service/Wechat/SysWechatService.cs(230)、SysWxOpenService.cs(240)、SysWeComService.cs | /api/sysWechat/* | SysWechatPay、SysWechatRefund | views/system/weChatPay/index.vue |
| MQTT | Service/Mqtt/SysMqttService.cs(90) | /api/sysMqtt/status、clients、publicMessage、messagePage | 内存消息记录 | views/system/mqtt/server/index.vue、mqtt/client/index.vue |
| 报表数据源 | Service/Report/SysReportDataSourceService.cs(245) | /api/sysReportDataSource/* | SysReportDataSource | views/system/reportDataSource/index.vue |
| 报表配置 | Service/Report/SysReportConfigService.cs(245) | /api/sysReportConfig/* | SysReportConfig、SysReportGroup | views/system/reportConfig/index.vue |
| 自定义查询 | Service/Report/SysReportStatsService.cs(245) | /api/sysReportStats/systemStats、/api/aPIJSON/get、/api/aPIJSON/add 等 | — | views/system/reportCustomQuery/index.vue |
| 通用接口 | Service/Common/SysCommonService.cs(101) | /api/health、allSysApiList、appApiList、generateAllApi、generateAppApi、stressTest、smKeyPair、mD5Encrypt、machineSerialKey、swaggerGroups、downloadErrorExcelTemp | 无表 | views/system/stressTest/index.vue |
| 存储过程 | Service/Common/SysProcService.cs(102) | /api/sysProc/procTable、commonDataSet、pocExport | 数据库存储过程 | — |
7. 插件模块(Plugins/*)与前端契约目录的对应
插件是独立程序集,编译产物放到运行目录后由 SysPluginService.LoadAllAssembly()(启动时由 Admin.NET.Core/Job/StartHostedService.cs 自动调用)加载,其接口会并入 Swagger 分组:
| 后端插件工程 | 前端契约目录 Web/src/api-services/ | 说明 |
|---|---|---|
Plugins/Admin.NET.Plugin.Ai | api-services/aiChat | AI 对话 |
Plugins/Admin.NET.Plugin.DingTalk | api-services/dingTalk | 钉钉集成 |
Plugins/Admin.NET.Plugin.Document | api-services/document | 文档中心 |
Plugins/Admin.NET.Plugin.GoView | api-services/goView | 大屏设计 |
Plugins/Admin.NET.Plugin.DataApproval | api-services/dataApproval | 审批流 |
Plugins/Admin.NET.Plugin.PaddleOCR | api-services/paddleOCR | OCR 识别 |
Plugins/Admin.NET.Plugin.WorkFlow | Web/src/api/workflow/ | 工作流(示例 LeaveService) |
Plugins/Admin.NET.Plugin.ReZero | — | 零代码接口(Service/RezeroTemplate.cs) |
Plugins/Admin.NET.Plugin.K3Cloud、Media、ViewFace、DingTalk、WorkWeixin | — | 第三方能力封装 |
Plugins/WorkflowCore.Persistence.MySQL | — | 工作流持久化 |
插件未加载时的排查顺序:插件页面看状态 → 程序集是否在运行目录 → loadAllAssembly 是否报错 → Swagger 分组是否出现。
8. 用「通用接口」反查任意模块路由
SysCommonService.GetAllSysApiList() 会把所有动态 API 扫描成一棵树(结果缓存到 CacheConst.KeyAllApi = sys_all_api),「系统接口」页面和菜单管理里的按钮权限都从这里取值:
// Admin.NET.Core/Service/Common/SysCommonService.cs
[DisplayName("获取所有接口/动态API")]
public List<ApiOutput> GetAllSysApiList()
{
return _sysCacheService.GetOrAdd(CacheConst.KeyAllApi, _ => { /* 遍历 IApiDescriptionGroupCollectionProvider */ });
}手动调用:
# 1. 登录拿 token
TOKEN=$(curl -s -X POST http://localhost:5005/api/sysAuth/login \
-H "Content-Type: application/json" \
-d '{"account":"superAdmin","password":"Admin.NET++010101"}' | jq -r '.result.accessToken')
# 2. 拉全量接口树
curl -s http://localhost:5005/api/sysCommon/allSysApiList \
-H "Authorization: Bearer $TOKEN" | jq '.result[].children[].route' | head -60改了接口后 Swagger 树没刷新,先删缓存再拉:
curl -s -X POST "http://localhost:5005/api/sysCache/delete/sys_all_api" \
-H "Authorization: Bearer $TOKEN"9. 种子数据清单(决定菜单/角色/字典的出厂状态)
Admin.NET.Core/SeedData/ 下的每个类都实现 ISqlSugarEntitySeedData<T>,按 [SeedData(order)] 升序执行:
| 种子文件 | 对应实体 | 说明 |
|---|---|---|
SysMenuSeedData.cs | SysMenu | 全部目录 + 菜单 + 按钮权限,前端 component 路径就在这里定义 |
SysUserSeedData.cs | SysUser | 超管 superAdmin 等出厂账号 |
SysRoleSeedData.cs | SysRole | 系统管理员等角色 |
SysRoleMenuSeedData.cs | SysRoleMenu | 角色与菜单的默认绑定 |
SysUserRoleSeedData.cs | SysUserRole | 用户与角色绑定 |
SysOrgSeedData.cs / SysUserExtOrgSeedData.cs | SysOrg / SysUserExtOrg | 根机构与归属 |
SysPosSeedData.cs | SysPos | 默认职位 |
SysDictTypeSeedData.cs / SysDictDataSeedData.cs | SysDictType / SysDictData | 出厂字典 |
SysConfigSeedData.cs | SysConfig | 出厂配置参数 |
SysTenantSeedData.cs | SysTenant | 默认租户 |
SysNoticeSeedData.cs | SysNotice | 示例公告 |
10. 步骤清单:新增一个业务模块并对齐内置模块
- 在
Admin.NET.Core/Entity/建实体,继承EntityBaseData(带CreateOrgId/CreateUserId,自动纳入数据范围过滤器),贴[SugarTable(null, "业务表")]+[SysTable]。 - 在
Admin.NET.Core/Service/Xxx/建SysXxxService : IDynamicApiController, ITransient,贴[ApiDescriptionSettings(Order = N, Description = "xxx")]。 - 分页/增删改方法命名对齐内置模块:
Page、Add、Update、Delete、Detail、SetStatus,前端useBaseApi('sysXxx')直接复用。 - 在
SysMenuSeedData.cs里加目录 + 菜单 + 按钮,或直接在「菜单管理」页面录入,Component填Web/src/views下的相对路径(如/system/xxx/index)。 - 需要出厂数据则建
SysXxxSeedData : ISqlSugarEntitySeedData<SysXxx>,贴[SeedData(order)];升级期新增的贴[IncreSeed]。 - 前端在
Web/src/views/system/xxx/index.vue建页面,用useVxeTable()+getAPI(SysXxxApi)对接。 - 后端跑起来后用
allSysApiList确认路由已生成,再在「角色管理 → 授权接口」勾选按钮权限。
⚠️ 注意事项 / 常见坑
- 路由大小写:路由是类名去
Service后的驼峰形式(SysUserService→sysUser),不是全小写,写错就是 404。 - Order 只是排序:
[ApiDescriptionSettings(Order = N)]只影响 Swagger 分组顺序,和权限、执行顺序无关;种子顺序才由[SeedData(order)]决定。 SysCacheService是ISingleton:不要在它里面注入 Scoped 仓储,要取数据用App.GetRequiredService<T>()或Scoped.Create(...)(见SqlSugarFilter.SetOrgEntityFilter)。- 超管跳过全部过滤器:
App.User.FindFirst(ClaimConst.AccountType) == SuperAdmin时直接return,软删除、租户、机构过滤器都不加。验证数据范围必须用普通账号。 - 日志表不一定在主库:
SysLog*贴了[LogTable],配了LogConfigId就落到独立日志库;SysLogDiff默认关闭,需要开EnableDiffLog。 - 租户表带
[Tenant]特性:SysTenant的业务数据在租户库,主库只存租户元数据,跨库查要显式GetTenantDbConnectionScope(tenantId)。 SysConfig有缓存:改配置后清CacheConst.KeyConfig(sys_config:前缀)才生效,别直接改库。- 在线用户不是表:
SysOnlineUserService读的是缓存CacheConst.KeyUserOnline(sys_user_online),重启即空。 - 菜单
Name与前端路由name要一致:后端SysMenu.Name(如sysUser)会作为前端路由 name,写错会导致 KeepAlive 缓存失效。
小结
找模块的三条路径:知道功能 → 查本文表格定位 Service/*.cs;知道接口 → /api/sysCommon/allSysApiList 反查;知道页面 → 从 SysMenuSeedData.cs 的 Component 反查后端权限码。实体表名的权威来源是 Admin.NET.Core/Entity/SysXxx.cs 上的 [SugarTable]。