@@ -26,6 +26,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{A6C50476
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZhonTai.ApiUI", "src\platform\ZhonTai.ApiUI\ZhonTai.ApiUI.csproj", "{A6911102-A4F8-4000-A997-045F84F73060}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DiTui.Host", "src\hosts\DiTui.Host\DiTui.Host.csproj", "{5202EA7B-B985-4237-9629-883A76ABD359}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -56,6 +58,10 @@ Global
{A6911102-A4F8-4000-A997-045F84F73060}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A6911102-A4F8-4000-A997-045F84F73060}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A6911102-A4F8-4000-A997-045F84F73060}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5202EA7B-B985-4237-9629-883A76ABD359}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5202EA7B-B985-4237-9629-883A76ABD359}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5202EA7B-B985-4237-9629-883A76ABD359}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5202EA7B-B985-4237-9629-883A76ABD359}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -67,6 +73,7 @@ Global
{69A9CD28-39CE-415E-8150-A4A876E708FD} = {4A1F23C8-24A6-4571-B3DE-D27D024A051D}
{BDD8E9DB-896C-4340-A7E6-DFE341DE86C2} = {7D22DC19-78FC-4277-9768-06B5AF60FD14}
{A6911102-A4F8-4000-A997-045F84F73060} = {7D22DC19-78FC-4277-9768-06B5AF60FD14}
+ {5202EA7B-B985-4237-9629-883A76ABD359} = {0600A063-03CE-4BE1-AE77-FCB1B496A2A6}
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {AB40D0C5-E3EA-4A9B-86C2-38F0BB33FC04}
@@ -0,0 +1,12 @@
+{
+ "version": 1,
+ "isRoot": true,
+ "tools": {
+ "dotnet-ef": {
+ "version": "5.0.9",
+ "commands": [
+ "dotnet-ef"
+ ]
+ }
+}
@@ -0,0 +1,8 @@
+ //跨域地址
+ "corUrls": [ ],
+ "IdentityServer": {
+ //地址
+ "url": "https://localhost:5000"
@@ -0,0 +1,112 @@
+ //应用程序类型Controllers ControllersWithViews MVC
+ "appType": "Controllers",
+ //Api地址
+ "urls": [ "http://*:7000" ],
+ "corUrls": [],
+ //程序集名称
+ "assemblyNames": [ "ZhonTai.Admin" ],
+ //租户
+ "tenant": true,
+ //分布式事务唯一标识admin,为空则不生成分布式事务表
+ "distributeKey": "",
+ //验证
+ "validate": {
+ //登录
+ "login": true,
+ //接口权限
+ "permission": true,
+ //数据权限
+ "dataPermission": true
+ },
+ //Swagger文档
+ "swagger": {
+ //启用
+ "enable": true,
+ //启用枚举架构过滤器
+ "enableEnumSchemaFilter": true,
+ //启用接口排序文档过滤器
+ "enableOrderTagsDocumentFilter": true,
+ //启用枚举属性名
+ "enableJsonStringEnumConverter": false,
+ //启用SchemaId命名空间
+ "enableSchemaIdNamespace": false,
+ //程序集列表,用于启用SchemaId命名空间
+ "assemblyNameList": [],
+ //路由前缀,如配置微服务文档地址:doc/module/swagger
+ "routePrefix": "admin/swagger",
+ "url": "http://localhost:7000",
+ "projects": [
+ {
+ "name": "中台Admin",
+ "code": "admin",
+ "version": "v3.6.5",
+ "description": ""
+ //ZhonTai接口文档
+ "apiUI": {
+ //路由前缀,如配置微服务文档地址:doc/module
+ "routePrefix": "admin",
+ //页脚
+ "footer": {
+ "enable": false,
+ "content": "Copyright<a-icon type=\"copyright\" /> 2022-<a target=\"_blank\" href=\"https://www.zhontai.net\">中台Admin</a>"
+ //MiniProfiler性能分析器
+ "miniProfiler": false,
+ //统一认证授权服务器
+ "identityServer": {
+ //认证地址
+ "url": "https://localhost:5000",
+ //启用Https
+ "requireHttpsMetadata": true,
+ //受众
+ "audience": "admin.server.api"
+ //面向切面编程
+ "aop": {
+ //事务
+ "transaction": true
+ //数据库日志
+ "log": {
+ //操作日志
+ "operation": true
+ //限流
+ "rateLimit": false,
+ //验证码
+ "varifyCode": {
+ //字体列表
+ "fonts": [ "Times New Roman", "Verdana", "Arial", "Gungsuh", "Impact" ]
+ //默认密码
+ "defaultPassword": "111111",
+ //动态api
+ "dynamicApi": {
+ //结果格式化
+ "formatResult": true
+ //实现标准标识密码哈希,启用后相同密码加密后各不相同
+ "passwordHasher": false,
+ //最大请求大小
+ "maxRequestBodySize": 104857600,
+ //健康检查
+ "healthChecks": {
+ //访问路径
+ "path": "/admin/health"
@@ -0,0 +1,2 @@
@@ -0,0 +1,13 @@
+ //缓存类型 Memory = 0,Redis = 1
+ "type": "Memory",
+ //限流缓存类型 Memory = 0,Redis = 1
+ "typeRateLimit": "Memory",
+ //Redis配置
+ "redis": {
+ //连接字符串
+ "connectionString": "127.0.0.1:6379,password=,defaultDatabase=0",
+ //限流连接字符串
+ "connectionStringRateLimit": "127.0.0.1:6379,password=,defaultDatabase=0"
@@ -0,0 +1 @@
+
@@ -0,0 +1,99 @@
+ //数据库注册键
+ "key": "admindb",
+
+ //程序集名称,自动获取实体表,为空则通过ConfigureFreeSql自定义配置
+ //监听所有操作
+ "monitorCommand": false,
+ //监听Curd操作
+ "curd": true,
+ //监听同步结构脚本
+ "syncStructureSql": false,
+ //监听同步数据Curd操作
+ "syncDataCurd": false,
+ //建库,Sqlite数据库不用配置建库,连接语句自动建库
+ "createDb": false,
+ //SqlServer,PostgreSQL,Oracle,OdbcOracle,OdbcSqlServer,OdbcMySql,OdbcPostgreSQL,Odbc,OdbcDameng,MsAccess
+ //建库连接字符串
+ //MySql "Server=localhost; Port=3306; Database=mysql; Uid=root; Pwd=pwd; Charset=utf8mb4;SslMode=none;Min pool size=1"
+ //SqlServer "Data Source=.;User Id=sa;Password=pwd;Initial Catalog=master;TrustServerCertificate=true;Pooling=true;Min Pool Size=1"
+ //PostgreSQL "Host=localhost;Port=5432;Username=postgres;Password=; Database=postgres;Pooling=true;Minimum Pool Size=1",
+ "createDbConnectionString": "Server=192.144.191.50; Port=3306; Database=jiujiu_zhongjie5; Uid=jiujiu_zhongjie5; Pwd=EjmCA6Ff4bSmKk32; Charset=utf8mb4;",
+ //建库脚本,复杂建库脚本可放到createdbsql.txt中
+ //MySql "CREATE DATABASE `admindb` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'"
+ //SqlServer "CREATE DATABASE [admindb]"
+ //PostgreSQL "CREATE DATABASE \"admindb\" WITH ENCODING = 'UTF8'"
+ "createDbSql": "CREATE DATABASE `jiujiu_zhongjie5` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'",
+ //同步结构
+ "syncStructure": true,
+ //同步数据,只新增数据不修改数据,想要修改数据需开启sysUpdateData
+ "syncData": true,
+ //同步更新数据,注意生产环境谨慎开启,确定要修改表数据是最新数据再开启。如不想更新某些表的数据,可以先配置同步数据排除表syncDataExcludeTables,再执行数据更新操作
+ "sysUpdateData": false,
+ //同步数据地址
+ //"SyncDataPath": "InitData/Admin/Vue2",
+ //同步所有表["ad_dict_type", "ad_dict", "ad_user", "ad_user_staff", "ad_org", "ad_role", "ad_api", "ad_view", "ad_permission", "ad_permission_api", "ad_user_role", "ad_user_org", "ad_role_permission", "ad_tenant", "ad_tenant_permission"]
+ //同步指定表["ad_api", "ad_view", "ad_permission", "ad_permission_api"]
+ //同步数据包含表,指定表同步,不填同步所有表
+ "syncDataIncludeTables": [],
+ //同步排除表["ad_user"]
+ //同步数据排除表,指定表不同步
+ "syncDataExcludeTables": [],
+ //同步数据操作用户
+ "syncDataUser": {
+ "id": 161223411986501,
+ "userName": "admin",
+ "tenantId": 161223412138053
+ //项目初始化不开启生成数据,发布生产环境前,如果开发环境有配置数据需要更新数据包,可以开启生成数据包,使用完记得关闭
+ //开启生成数据前先关闭createDb syncStructure syncData sysUpdateData
+ //生成数据,回写InitData/Admin/*.json
+ "generateData": false,
+ //数据库配置 https://github.com/dotnetcore/FreeSql/wiki/入门
+ //数据库类型 MySql = 0, SqlServer = 1, PostgreSQL = 2, Oracle = 3, Sqlite = 4, OdbcOracle = 5, OdbcSqlServer = 6, OdbcMySql = 7, OdbcPostgreSQL = 8, Odbc = 9, OdbcDameng = 10, MsAccess = 11, Dameng = 12, OdbcKingbaseES = 13, ShenTong = 14, KingbaseES = 15, Firebird = 16
+ "type": "MySql",
+ //MySql "Server=localhost; Port=3306; Database=admindb; Uid=root; Pwd=pwd; Charset=utf8mb4;SslMode=none;Min pool size=1"
+ //SqlServer "Data Source=.;User Id=sa;Password=pwd;Initial Catalog=admindb;TrustServerCertificate=true;Pooling=true;Min Pool Size=1"
+ //PostgreSQL "Host=localhost;Port=5432;Username=postgres;Password=; Database=admindb;Pooling=true;Minimum Pool Size=1"
+ //Sqlite "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1"
+ "connectionString": "Server=192.144.191.50; Port=3306; Database=jiujiu_zhongjie5; Uid=jiujiu_zhongjie5; Pwd=EjmCA6Ff4bSmKk32; Charset=utf8mb4;SslMode=none;Min pool size=1",
+ //指定程序集
+ //FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySqlConnector
+ "providerType": "",
+ //读写分离从库列表
+ "slaveList": [
+ //{
+ // //连接字符串
+ // "ConnectionString": "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1",
+ // //权重
+ // "Weight": 1
+ //}
+ ],
+ //空闲时间(分),设置idleTime=0则不自动回收, 设置1天不使用则自动回收
+ "idleTime": 1440,
+ //多数据库
+ //定义DbKeys枚举
+ //使用仓储访问 public ModuleRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.AppDb, muowm)
+ //使用FreeSqlCloud访问 freeSqlCloud.Use(DbKeys.AppDb);
+ "dbs": [
+ // "key": "appdb",
+ // "type": "Sqlite",
+ // "syncStructure": false,
+ // "syncData": false,
+ // "connectionString": "Data Source=|DataDirectory|\\appdb.db; Pooling=true;Min Pool Size=1",
+ // "providerType": ""
+ "createDbConnectionString": "Server=localhost; Port=3306; Database=mysql; Uid=root; Pwd=pwd; Charset=utf8mb4;",
+ "createDbSql": "CREATE DATABASE `admindb` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'",
+ "type": "Sqlite",
+ "connectionString": "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1",
+ //发行者
+ "issuer": "http://127.0.0.1:8000",
+ //订阅者
+ "audience": "http://127.0.0.1:8000",
+ //密钥
+ "securityKey": "ertJKl#521*a@790asD&1#",
+ //有效期(分钟) 120 = 2小时
+ "expires": 120,
+ //刷新有效期(分钟) 1440 = 1天
+ "refreshExpires": 1440
@@ -0,0 +1,3 @@
@@ -0,0 +1,91 @@
+ //本地上传配置
+ "LocalUploadConfig": {
+ //上传目录
+ "Directory": "upload",
+ //日期目录
+ "DateTimeDirectory": "yyyy/MM/dd",
+ "Md5": false,
+ //文件最大大小
+ "MaxSize": 104857600,
+ //包含文件拓展名列表
+ "IncludeExtension": [],
+ //排除文件拓展名列表
+ "ExcludeExtension": [ ".exe", ".dll", ".jar" ]
+ //文件存储供应商
+ "Provider": "Minio",
+ //OSS配置列表
+ "OSSConfigs": [
+ //Minio
+ "Endpoint": "127.0.0.1:9006",
+ "Region": "",
+ "AccessKey": "minio",
+ "SecretKey": "minio",
+ "IsEnableHttps": false,
+ "IsEnableCache": true,
+ "BucketName": "admin",
+ "Url": "", //文件外链
+ "Enable": false
+ //阿里云
+ "Provider": "Aliyun",
+ "Endpoint": "oss-cn-shenzhen.aliyuncs.com",
+ "AccessKey": "",
+ "SecretKey": "",
+ "IsEnableHttps": true,
+ "Url": "",
+ //腾讯云
+ "Provider": "QCloud",
+ "Endpoint": "", //AppId
+ //七牛
+ "Provider": "Qiniu",
+ "Endpoint": "",
+ //华为云
+ "Provider": "HuaweiCloud",
@@ -0,0 +1,33 @@
+ /*
+ https://github.com/stefanprodan/AspNetCoreRateLimit/wiki/IpRateLimitMiddleware
+ https://github.com/stefanprodan/AspNetCoreRateLimit/wiki/Using-Redis-as-a-distributed-counter-store
+ */
+ "IpRateLimiting": {
+ "EnableEndpointRateLimiting": true,
+ "StackBlockedRequests": false,
+ "RealIpHeader": "X-Real-IP",
+ "ClientIdHeader": "X-ClientId",
+ "IpWhitelist": [], // "127.0.0.1"
+ "EndpointWhitelist": [ "get:/api/admin/auth/refresh" ], // "get:/api/a", "*:/api/b"
+ "ClientWhitelist": [],
+ "HttpStatusCode": 429,
+ "QuotaExceededResponse": {
+ "Content": "{{\"code\":429,\"msg\":\"访问过于频繁!\",\"success\": false}}",
+ "ContentType": "application/json; charset=utf-8",
+ "StatusCode": 429
+ "GeneralRules": [
+ "Endpoint": "*",
+ "Period": "1s",
+ "Limit": 3
+ "Period": "10m",
+ "Limit": 200
@@ -0,0 +1,38 @@
+ //头像
+ "avatar": {
+ //上传路径 D:/upload/admin/avatar
+ "uploadPath": "../upload/admin/avatar",
+ //请求路径
+ "requestPath": "/upload/admin/avatar",
+ //路径日期格式 yyyy/MM/dd
+ "dateTimeFormat": "",
+ //{用户编号}
+ "format": "{Id}",
+ //图片大小不超过 1M = 1 * 1024 * 1024
+ "maxSize": 1048576,
+ //最大允许上传张数,-1不限制
+ "limit": 1,
+ //图片格式
+ "contentType": [ "image/jpg", "image/png", "image/jpeg", "image/gif" ]
+ //文档图片
+ "document": {
+ //上传路径 D:/upload/admin/document
+ "uploadPath": "../upload/admin/document",
+ "requestPath": "/images",
+ //{文档编号}
+ "limit": -1,
@@ -0,0 +1,56 @@
+<Project Sdk="Microsoft.NET.Sdk.Web">
+ <PropertyGroup>
+ <TargetFramework>net7.0</TargetFramework>
+ <Description>中台接口宿主</Description>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+ <DocumentationFile></DocumentationFile>
+ <NoWarn>1701;1702;1591</NoWarn>
+ <ItemGroup>
+ <Content Include="Configs\createdbsql.txt">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ <ItemGroup Condition="'$(Configuration)'=='Debug'">
+ <PackageReference Include="FreeSql.Provider.MySql" Version="3.2.693" />
+ <PackageReference Include="FreeSql.Provider.SqlServer" Version="3.2.693" />
+ <PackageReference Include="FreeSql.Provider.PostgreSQL" Version="3.2.693" />
+ <PackageReference Include="FreeSql.Provider.Oracle" Version="3.2.693" />
+ <PackageReference Include="FreeSql.Provider.Sqlite" Version="3.2.693" />
+ <PackageReference Include="FreeSql.Provider.MySqlConnector" Version="3.2.693" />
+ <ProjectReference Include="..\..\platform\ZhonTai.Admin\ZhonTai.Admin.csproj" />
+ <ProjectReference Include="..\..\platform\ZhonTai.ApiUI\ZhonTai.ApiUI.csproj" />
+ <InternalsVisibleTo Include="ZhonTai.Tests" />
+ <PackageReference Include="DotNetCore.CAP.Dashboard" Version="7.1.1" />
+ <PackageReference Include="DotNetCore.CAP.InMemoryStorage" Version="7.1.1" />
+ <PackageReference Include="Savorboard.CAP.InMemoryMessageQueue" Version="7.0.0" />
+ <PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.88.3" />
+ <Content Update="wwwroot\*\*">
+ <Content Update="wwwroot\*\*\*\*">
+ <Content Update="wwwroot\*\*\*\*\*">
+ <ProjectExtensions><VisualStudio><UserProperties /></VisualStudio></ProjectExtensions>
+</Project>
@@ -0,0 +1,1426 @@
+[
+ "id": 161227167658053,
+ "label": "接口服务",
+ "path": "api",
+ "description": "",
+ "enabled": true,
+ "childs": [
+ "id": 161227168079941,
+ "parentId": 161227167658053,
+ "label": "查询接口",
+ "path": "/api/admin/api/get",
+ "httpMethods": "get",
+ "childs": []
+ "id": 161227168116805,
+ "label": "查询列表",
+ "path": "/api/admin/api/get-list",
+ "id": 161227168116806,
+ "label": "查询分页",
+ "path": "/api/admin/api/get-page",
+ "httpMethods": "post",
+ "id": 161227168120901,
+ "label": "添加",
+ "path": "/api/admin/api/add",
+ "id": 161227168120902,
+ "label": "修改",
+ "path": "/api/admin/api/update",
+ "httpMethods": "put",
+ "id": 161227168120903,
+ "label": "删除",
+ "path": "/api/admin/api/soft-delete",
+ "httpMethods": "delete",
+ "id": 161227168124997,
+ "label": "批量删除",
+ "path": "/api/admin/api/batch-soft-delete",
+ "id": 161227168124998,
+ "label": "同步",
+ "path": "/api/admin/api/sync",
+ "id": 271618651914309,
+ "label": "彻底删除",
+ "path": "/api/admin/api/delete",
+ "id": 161227167719493,
+ "label": "认证授权服务",
+ "path": "auth",
+ "id": 161227168129094,
+ "parentId": 161227167719493,
+ "label": "查询密钥",
+ "path": "/api/admin/auth/get-password-encrypt-key",
+ "id": 161227168133189,
+ "label": "登录",
+ "path": "/api/admin/auth/login",
+ "id": 161227168133190,
+ "label": "刷新Token",
+ "path": "/api/admin/auth/refresh",
+ "description": "以旧换新",
+ "id": 271618651922501,
+ "label": "查询用户信息",
+ "path": "/api/admin/auth/get-user-info",
+ "id": 271618651922502,
+ "label": "获取验证数据",
+ "path": "/api/admin/auth/get-captcha",
+ "id": 271618651922503,
+ "label": "检查验证数据",
+ "path": "/api/admin/auth/check-captcha",
+ "id": 161227167719494,
+ "label": "数据字典服务",
+ "path": "dictionary",
+ "id": 161227168137285,
+ "parentId": 161227167719494,
+ "label": "查询数据字典",
+ "path": "/api/admin/dictionary/get",
+ "id": 161227168137286,
+ "label": "查询数据字典列表",
+ "path": "/api/admin/dictionary/get-page",
+ "id": 161227168137287,
+ "label": "新增",
+ "path": "/api/admin/dictionary/add",
+ "id": 161227168141381,
+ "path": "/api/admin/dictionary/update",
+ "id": 161227168141382,
+ "path": "/api/admin/dictionary/soft-delete",
+ "id": 184100551516229,
+ "path": "/api/admin/dictionary/batch-soft-delete",
+ "id": 271618651922504,
+ "path": "/api/admin/dictionary/delete",
+ "id": 161227167719495,
+ "label": "权限服务",
+ "path": "permission",
+ "id": 161227168141383,
+ "parentId": 161227167719495,
+ "label": "查询权限列表",
+ "path": "/api/admin/permission/get-list",
+ "id": 161227168145477,
+ "label": "查询分组",
+ "path": "/api/admin/permission/get-group",
+ "id": 161227168145478,
+ "label": "查询菜单",
+ "path": "/api/admin/permission/get-menu",
+ "id": 161227168149573,
+ "path": "/api/admin/permission/get-api",
+ "id": 161227168149574,
+ "label": "查询角色权限-权限列表",
+ "path": "/api/admin/permission/get-permission-list",
+ "id": 161227168149575,
+ "label": "查询角色权限列表",
+ "path": "/api/admin/permission/get-role-permission-list",
+ "id": 161227168153669,
+ "label": "新增分组",
+ "path": "/api/admin/permission/add-group",
+ "id": 161227168153670,
+ "label": "新增菜单",
+ "path": "/api/admin/permission/add-menu",
+ "id": 161227168153671,
+ "label": "新增接口",
+ "path": "/api/admin/permission/add-api",
+ "id": 161227168157765,
+ "label": "修改分组",
+ "path": "/api/admin/permission/update-group",
+ "id": 161227168157766,
+ "label": "修改菜单",
+ "path": "/api/admin/permission/update-menu",
+ "id": 161227168161861,
+ "label": "修改接口",
+ "path": "/api/admin/permission/update-api",
+ "id": 161227168161862,
+ "path": "/api/admin/permission/soft-delete",
+ "id": 161227168165957,
+ "label": "保存角色权限",
+ "path": "/api/admin/permission/assign",
+ "id": 161227168165958,
+ "label": "查询权限点",
+ "path": "/api/admin/permission/get-dot",
+ "id": 161227168165959,
+ "label": "新增权限点",
+ "path": "/api/admin/permission/add-dot",
+ "id": 161227168170053,
+ "label": "修改权限点",
+ "path": "/api/admin/permission/update-dot",
+ "id": 170317848645701,
+ "label": "查询租户权限列表",
+ "path": "/api/admin/permission/get-tenant-permission-list",
+ "id": 170317848662085,
+ "label": "保存租户权限",
+ "path": "/api/admin/permission/save-tenant-permissions",
+ "id": 187384805367877,
+ "path": "/api/admin/permission/delete",
+ "id": 161227167719496,
+ "label": "角色服务",
+ "path": "role",
+ "id": 161227168170054,
+ "parentId": 161227167719496,
+ "label": "查询角色",
+ "path": "/api/admin/role/get",
+ "id": 161227168170055,
+ "label": "查询角色列表",
+ "path": "/api/admin/role/get-page",
+ "id": 161227168174149,
+ "path": "/api/admin/role/add",
+ "id": 161227168178245,
+ "path": "/api/admin/role/update",
+ "id": 161227168178246,
+ "path": "/api/admin/role/soft-delete",
+ "id": 161227168182341,
+ "path": "/api/admin/role/batch-soft-delete",
+ "id": 271618651926604,
+ "path": "/api/admin/role/delete",
+ "id": 336555241422917,
+ "path": "/api/admin/role/get-list",
+ "id": 336555241422918,
+ "label": "查询角色用户列表",
+ "path": "/api/admin/role/get-role-user-list",
+ "id": 336555241422919,
+ "label": "新增角色用户",
+ "path": "/api/admin/role/add-role-user",
+ "id": 336555241422920,
+ "label": "移除角色用户",
+ "path": "/api/admin/role/remove-role-user",
+ "id": 336555241422921,
+ "label": "批量彻底删除",
+ "path": "/api/admin/role/batch-delete",
+ "id": 161227167719497,
+ "label": "用户服务",
+ "path": "user",
+ "id": 161227168182342,
+ "parentId": 161227167719497,
+ "label": "查询用户基本信息",
+ "path": "/api/admin/user/get-basic",
+ "id": 161227168182343,
+ "label": "查询用户",
+ "path": "/api/admin/user/get",
+ "id": 161227168186437,
+ "path": "/api/admin/user/get-page",
+ "id": 161227168186438,
+ "label": "新增用户",
+ "path": "/api/admin/user/add",
+ "id": 161227168190533,
+ "label": "修改用户",
+ "path": "/api/admin/user/update",
+ "id": 161227168190534,
+ "label": "删除用户",
+ "path": "/api/admin/user/soft-delete",
+ "id": 161227168190535,
+ "label": "批量删除用户",
+ "path": "/api/admin/user/batch-soft-delete",
+ "id": 161227168194629,
+ "label": "修改用户密码",
+ "path": "/api/admin/user/change-password",
+ "id": 161227168194630,
+ "label": "更新用户基本信息",
+ "path": "/api/admin/user/update-basic",
+ "id": 161227168194631,
+ "label": "上传头像",
+ "path": "/api/admin/user/avatar-upload",
+ "id": 271618651926606,
+ "label": "查询用户权限信息",
+ "path": "/api/admin/user/get-permissions",
+ "id": 271618651926607,
+ "label": "彻底删除用户",
+ "path": "/api/admin/user/delete",
+ "id": 336555241427019,
+ "label": "批量彻底删除用户",
+ "path": "/api/admin/user/batch-delete",
+ "id": 349749396615237,
+ "label": "重置密码",
+ "path": "/api/admin/user/reset-password",
+ "id": 349749396619333,
+ "label": "设置主管",
+ "path": "/api/admin/user/set-manager",
+ "id": 161227167719498,
+ "label": "视图服务",
+ "path": "view",
+ "id": 161227168198725,
+ "parentId": 161227167719498,
+ "label": "查询视图",
+ "path": "/api/admin/view/get",
+ "id": 161227168198726,
+ "path": "/api/admin/view/get-list",
+ "id": 161227168202822,
+ "path": "/api/admin/view/add",
+ "id": 161227168202823,
+ "path": "/api/admin/view/update",
+ "id": 161227168206917,
+ "path": "/api/admin/view/soft-delete",
+ "id": 161227168206918,
+ "path": "/api/admin/view/batch-soft-delete",
+ "id": 161227168206919,
+ "path": "/api/admin/view/sync",
+ "id": 271618651926608,
+ "path": "/api/admin/view/delete",
+ "id": 161227167723589,
+ "label": "缓存服务",
+ "path": "cache",
+ "id": 161227168211013,
+ "parentId": 161227167723589,
+ "path": "/api/admin/cache/get-list",
+ "id": 161227168211014,
+ "label": "清除缓存",
+ "path": "/api/admin/cache/clear",
+ "id": 161227167723590,
+ "label": "登录日志服务",
+ "path": "login-log",
+ "id": 161227168215109,
+ "parentId": 161227167723590,
+ "label": "查询登录日志列表",
+ "path": "/api/admin/login-log/get-page",
+ "id": 271618651926601,
+ "path": "/api/admin/login-log/add",
+ "id": 161227167723591,
+ "label": "操作日志服务",
+ "path": "opration-log",
+ "id": 161227168215110,
+ "parentId": 161227167723591,
+ "label": "查询操作日志列表",
+ "path": "/api/admin/opration-log/get-page",
+ "id": 271618651926602,
+ "path": "/api/admin/opration-log/add",
+ "id": 161227167723592,
+ "label": "文档服务",
+ "path": "document",
+ "id": 161227168215111,
+ "parentId": 161227167723592,
+ "label": "查询文档列表",
+ "path": "/api/admin/document/get-list",
+ "id": 161227168219205,
+ "path": "/api/admin/document/get-group",
+ "id": 161227168219206,
+ "path": "/api/admin/document/get-menu",
+ "id": 161227168223301,
+ "label": "查询精简文档列表",
+ "path": "/api/admin/document/get-plain-list",
+ "id": 161227168223302,
+ "path": "/api/admin/document/add-group",
+ "id": 161227168227397,
+ "path": "/api/admin/document/add-menu",
+ "id": 161227168227398,
+ "path": "/api/admin/document/update-group",
+ "id": 161227168231493,
+ "path": "/api/admin/document/update-menu",
+ "id": 161227168231494,
+ "label": "删除文档",
+ "path": "/api/admin/document/soft-delete",
+ "id": 161227168235589,
+ "label": "查询文档内容",
+ "path": "/api/admin/document/get-content",
+ "id": 161227168235590,
+ "label": "修改文档内容",
+ "path": "/api/admin/document/update-content",
+ "id": 161227168235591,
+ "label": "上传文档图片",
+ "path": "/api/admin/document/upload-image",
+ "id": 161227168239685,
+ "label": "查询图片列表",
+ "path": "/api/admin/document/get-image-list",
+ "id": 161227168239686,
+ "label": "彻底删除图片",
+ "path": "/api/admin/document/delete-image",
+ "id": 271618651926599,
+ "label": "新增图片",
+ "path": "/api/admin/document/add-image",
+ "id": 271618651926600,
+ "label": "彻底删除文档",
+ "path": "/api/admin/document/delete",
+ "id": 161227167723593,
+ "label": "租户服务",
+ "path": "tenant",
+ "id": 161227168243781,
+ "parentId": 161227167723593,
+ "label": "查询租户",
+ "path": "/api/admin/tenant/get",
+ "id": 161227168243782,
+ "label": "查询租户列表",
+ "path": "/api/admin/tenant/get-page",
+ "id": 161227168243783,
+ "path": "/api/admin/tenant/add",
+ "id": 161227168247877,
+ "path": "/api/admin/tenant/update",
+ "id": 161227168247878,
+ "path": "/api/admin/tenant/soft-delete",
+ "id": 161227168251973,
+ "path": "/api/admin/tenant/batch-soft-delete",
+ "id": 163579785756741,
+ "path": "/api/admin/tenant/delete",
+ "id": 174219034718277,
+ "label": "部门服务",
+ "path": "org",
+ "id": 174219034734672,
+ "parentId": 174219034718277,
+ "label": "查询部门",
+ "path": "/api/admin/org/get",
+ "id": 174219034734674,
+ "path": "/api/admin/org/add",
+ "id": 174219034738757,
+ "path": "/api/admin/org/update",
+ "id": 174219034738758,
+ "path": "/api/admin/org/soft-delete",
+ "id": 188049296683077,
+ "path": "/api/admin/org/get-list",
+ "id": 342274923528261,
+ "path": "/api/admin/org/delete",
+ "id": 174219034718279,
+ "label": "字典类型服务",
+ "path": "dictionary-type",
+ "id": 174219034734661,
+ "parentId": 174219034718279,
+ "label": "查询字典类型",
+ "path": "/api/admin/dictionary-type/get",
+ "id": 174219034734662,
+ "label": "查询字典类型列表",
+ "path": "/api/admin/dictionary-type/get-page",
+ "id": 174219034734663,
+ "path": "/api/admin/dictionary-type/add",
+ "id": 174219034734664,
+ "path": "/api/admin/dictionary-type/update",
+ "id": 174219034734665,
+ "path": "/api/admin/dictionary-type/soft-delete",
+ "id": 184100551532613,
+ "path": "/api/admin/dictionary-type/batch-soft-delete",
+ "id": 271618651926597,
+ "path": "/api/admin/dictionary-type/delete",
+ "id": 336555241189445,
+ "label": "任务日志服务",
+ "path": "task-log",
+ "id": 336555241427018,
+ "parentId": 336555241189445,
+ "label": "查询任务日志列表",
+ "path": "/api/admin/task-log/get-page",
+ "id": 336555241193541,
+ "label": "任务服务",
+ "path": "task",
+ "id": 336555241422922,
+ "parentId": 336555241193541,
+ "label": "查询任务",
+ "path": "/api/admin/task/get",
+ "id": 336555241427013,
+ "label": "查询任务列表",
+ "path": "/api/admin/task/get-page",
+ "id": 336555241427014,
+ "path": "/api/admin/task/add",
+ "id": 336555241427015,
+ "path": "/api/admin/task/update",
+ "id": 336555241427016,
+ "label": "删除任务",
+ "path": "/api/admin/task/delete",
+ "id": 343342310699077,
+ "label": "暂停任务",
+ "path": "/api/admin/task/pause",
+ "id": 343342310703173,
+ "label": "启动任务",
+ "path": "/api/admin/task/resume",
+ "id": 343342310703174,
+ "label": "执行任务",
+ "path": "/api/admin/task/run",
+]
@@ -0,0 +1,20 @@
+ "id": 187395320303685,
+ "dictionaryTypeId": 187395320434757,
+ "name": "男",
+ "code": "male",
+ "value": "1",
+ "enabled": true
+ "id": 187395320369221,
+ "name": "女",
+ "code": "female",
+ "value": "2",
@@ -0,0 +1,22 @@
+ "tenantId": 161223412138053,
@@ -0,0 +1,9 @@
+ "id": 187395320434757,
+ "name": "性别",
+ "code": "sex",
@@ -0,0 +1,10 @@
+ "id": 189097691009093,
+ "name": "中台",
+ "code": "",
+ "value": "",
@@ -0,0 +1,11 @@
@@ -0,0 +1,1328 @@
+ "id": 161227168464965,
+ "label": "个人管理",
+ "type": 1,
+ "path": "",
+ "icon": "el-icon-s-custom",
+ "closable": false,
+ "opened": true,
+ "sort": 3,
+ "id": 161227168624709,
+ "parentId": 161227168464965,
+ "label": "个人设置",
+ "type": 2,
+ "viewId": 161227168436293,
+ "path": "/account/settings",
+ "icon": "el-icon-setting",
+ "closable": true,
+ "opened": false,
+ "newWindow": false,
+ "external": false,
+ "sort": 1,
+ "id": 161227168628805,
+ "parentId": 161227168624709,
+ "label": "查询基本信息",
+ "code": "api:admin:user:getbasic",
+ "type": 3,
+ "icon": "",
+ "id": 161227168628806,
+ "label": "更新基本信息",
+ "code": "api:admin:user:updatebasic",
+ "sort": 2,
+ "id": 161227168632901,
+ "label": "更新密码",
+ "code": "api:admin:user:changepassword",
+ "path": " ",
+ "id": 161227168497733,
+ "label": "平台管理",
+ "icon": "el-icon-s-platform",
+ "id": 161227168632902,
+ "parentId": 161227168497733,
+ "label": "更新日志",
+ "viewId": 161227168428101,
+ "path": "/",
+ "icon": "el-icon-notebook-2",
+ "id": 161227168636997,
+ "label": "权限管理",
+ "icon": "fa fa-sitemap",
+ "id": 161227168636998,
+ "parentId": 161227168636997,
+ "label": "用户管理",
+ "viewId": 161227168436295,
+ "path": "/admin/user",
+ "external": true,
+ "id": 161227168641093,
+ "parentId": 161227168636998,
+ "label": "查询",
+ "code": "api:admin:user:getpage",
+ "id": 161227168641094,
+ "code": "api:admin:user:add",
+ "id": 161227168645189,
+ "code": "api:admin:user:update",
+ "id": 161227168645190,
+ "code": "api:admin:user:delete",
+ "sort": 4,
+ "id": 161227168649285,
+ "code": "api:admin:user:batchdelete",
+ "sort": 5,
+ "id": 349749511946309,
+ "code": "api:admin:user:reset-password",
+ "sort": 0,
+ "id": 349749778899013,
+ "code": "api:admin:user:set-manager",
+ "id": 161227168653381,
+ "label": "角色管理",
+ "viewId": 161227168440389,
+ "path": "/admin/role",
+ "id": 161227168653382,
+ "parentId": 161227168653381,
+ "code": "api:admin:role:get-list",
+ "id": 161227168657477,
+ "code": "api:admin:role:add",
+ "id": 161227168657478,
+ "code": "api:admin:role:update",
+ "id": 161227168661573,
+ "code": "api:admin:role:delete",
+ "id": 161227168665669,
+ "code": "api:admin:role:batchdelete",
+ "id": 340645133123653,
+ "label": "设置菜单权限",
+ "code": "api:admin:permission:assign",
+ "id": 340890474405957,
+ "label": "添加员工",
+ "code": "api:admin:role:add-role-user",
+ "id": 340890633515077,
+ "label": "移除员工",
+ "code": "api:admin:role:remove-role-user",
+ "id": 161227168669765,
+ "label": "接口管理",
+ "viewId": 161227168440390,
+ "path": "/admin/api",
+ "id": 161227168669766,
+ "parentId": 161227168669765,
+ "code": "api:admin:api:getlist",
+ "id": 161227168673861,
+ "code": "api:admin:api:add",
+ "id": 161227168673862,
+ "code": "api:admin:api:update",
+ "id": 161227168677957,
+ "code": "api:admin:api:softdelete",
+ "id": 161227168677958,
+ "code": "api:admin:api:batchsoftdelete",
+ "id": 161227168682053,
+ "code": "api:admin:api:sync",
+ "sort": 6,
+ "id": 161227168686149,
+ "label": "视图管理",
+ "viewId": 161227168444485,
+ "path": "/admin/view",
+ "id": 161227168686150,
+ "parentId": 161227168686149,
+ "code": "api:admin:view:getlist",
+ "id": 161227168690245,
+ "code": "api:admin:view:add",
+ "id": 161227168690246,
+ "code": "api:admin:view:update",
+ "id": 161227168694341,
+ "code": "api:admin:view:softdelete",
+ "id": 161227168694342,
+ "code": "api:admin:view:batchsoftdelete",
+ "id": 161227168698437,
+ "code": "api:admin:view:sync",
+ "id": 161227168702533,
+ "viewId": 161227168444486,
+ "path": "/admin/permission",
+ "id": 161227168702534,
+ "parentId": 161227168702533,
+ "code": "api:admin:permission:getlist",
+ "id": 161227168706629,
+ "code": "api:admin:permission:addgroup",
+ "id": 161227168706630,
+ "code": "api:admin:permission:addmenu",
+ "id": 161227168710725,
+ "code": "api:admin:permission:addapi",
+ "id": 161227168710726,
+ "code": "api:admin:permission:updategroup",
+ "id": 161227168714821,
+ "code": "api:admin:permission:updatemenu",
+ "id": 161227168714822,
+ "code": "api:admin:permission:updateapi",
+ "sort": 7,
+ "id": 161227168718917,
+ "code": "api:admin:permission:softdelete",
+ "sort": 8,
+ "id": 161227168727110,
+ "code": "api:admin:permission:adddot",
+ "id": 161227168731205,
+ "code": "api:admin:permission:updatedot",
+ "id": 187385577599045,
+ "code": "api:admin:permission:delete",
+ "id": 161227168731206,
+ "label": "角色权限",
+ "viewId": 161227168448581,
+ "path": "/admin/role-permisson",
+ "id": 161227168735301,
+ "parentId": 161227168731206,
+ "code": "api:admin:role-permisson:list",
+ "id": 161227168739398,
+ "label": "保存",
+ "id": 161227168743493,
+ "label": "缓存管理",
+ "viewId": 161227168448582,
+ "path": "/admin/cache",
+ "id": 161227168747589,
+ "parentId": 161227168743493,
+ "code": "api:admin:cache:list",
+ "id": 161227168747590,
+ "code": "api:admin:cache:clear",
+ "id": 161227168751685,
+ "label": "租户管理",
+ "viewId": 161227168448583,
+ "path": "/admin/tenant",
+ "id": 161227168751686,
+ "parentId": 161227168751685,
+ "code": "api:admin:tenant:getpage",
+ "id": 161227168755781,
+ "code": "api:admin:tenant:add",
+ "id": 161227168755782,
+ "code": "api:admin:tenant:update",
+ "id": 161227168759877,
+ "code": "api:admin:tenant:softdelete",
+ "id": 161227168759878,
+ "code": "api:admin:tenant:batchsoftdelete",
+ "id": 161807358345285,
+ "label": "设置权限",
+ "code": "api:admin:permission:savetenantpermissions",
+ "id": 163579955331141,
+ "code": "api:admin:tenant:delete",
+ "id": 188053882503237,
+ "label": "部门管理",
+ "viewId": 174312361087045,
+ "path": "/admin/org",
+ "id": 188054258278469,
+ "parentId": 188053882503237,
+ "code": "api:admin:org:getlist",
+ "id": 188054341582917,
+ "code": "api:admin:org:add",
+ "id": 188054416891973,
+ "code": "api:admin:org:update",
+ "id": 188054509027397,
+ "code": "api:admin:org:softdelete",
+ "id": 161227168763974,
+ "label": "系统管理",
+ "id": 187055743545413,
+ "parentId": 161227168763974,
+ "label": "数据字典",
+ "viewId": 187053736300613,
+ "path": "/admin/dictionary/index",
+ "id": 187375358951493,
+ "parentId": 187055743545413,
+ "code": "api:admin:dictionary:getpage",
+ "id": 187389970825285,
+ "code": "api:admin:dictionary:update",
+ "id": 187390547820613,
+ "code": "api:admin:dictionary:softdelete",
+ "id": 187391371018309,
+ "code": "api:admin:dictionary:batchsoftdelete",
+ "id": 187391980761157,
+ "code": "api:admin:dictionary:add",
+ "id": 342340463398981,
+ "label": "任务管理",
+ "viewId": 336556164300869,
+ "path": "/admin/task",
+ "id": 343342945812549,
+ "parentId": 342340463398981,
+ "code": "api:admin:task:get",
+ "id": 343343120306245,
+ "code": "api:admin:task:get-page",
+ "id": 343343209164869,
+ "code": "api:admin:task:add",
+ "id": 343343735894085,
+ "code": "api:admin:task:update",
+ "id": 343343926595653,
+ "code": "api:admin:task:pause",
+ "id": 343343989960773,
+ "code": "api:admin:task:resume",
+ "id": 343344066166853,
+ "code": "api:admin:task:run",
+ "id": 343344158351429,
+ "code": "api:admin:task:delete",
+ "id": 343344363630661,
+ "label": "查询任务日志",
+ "code": "api:admin:task-log:get-page",
+ "id": 161227168780358,
+ "label": "日志管理",
+ "id": 161227168784453,
+ "parentId": 161227168780358,
+ "label": "登录日志",
+ "viewId": 161227168456773,
+ "path": "/admin/login-log",
+ "id": 161227168784454,
+ "parentId": 161227168784453,
+ "code": "api:admin:loginlog:getpage",
+ "id": 161227168788549,
+ "label": "操作日志",
+ "viewId": 161227168452678,
+ "path": "/admin/opration-log",
+ "id": 161227168788550,
+ "parentId": 161227168788549,
+ "code": "api:admin:oprationlog:getpage",
+ "id": 161227168497734,
+ "label": "帮助文档",
+ "icon": "el-icon-question",
+ "id": 161227168792645,
+ "parentId": 161227168497734,
+ "label": "Admin",
+ "path": "https://zhontai.net",
+ "icon": "el-icon-s-promotion",
+ "id": 161227168792646,
+ "label": "FreeSql",
+ "path": "http://freesql.net/guide",
+ "id": 161227168796741,
+ "label": "文档管理",
+ "viewId": 161227168456774,
+ "path": "/admin/document",
+ "id": 161227168800838,
+ "parentId": 161227168796741,
+ "code": "api:admin:document:addgroup",
+ "id": 161227168804933,
+ "code": "api:admin:document:addmenu",
+ "id": 161227168809029,
+ "code": "api:admin:document:updategroup",
+ "id": 161227168813125,
+ "code": "api:admin:document:updatemenu",
+ "id": 161227168813126,
+ "code": "api:admin:document:softdelete",
+ "sort": 9,
+ "id": 161227168821318,
+ "label": "查询文档",
+ "code": "api:admin:document:getlist",
+ "id": 161227168825414,
+ "label": "修改文档",
+ "code": "api:admin:document:updatecontent",
+ "sort": 11,
+ "id": 161227168829509,
+ "label": "上传图片",
+ "code": "api:admin:document:uploadimage",
+ "sort": 14,
+ "id": 161227168833605,
+ "label": "查询图片",
+ "code": "api:admin:document:getimagelist",
+ "sort": 12,
+ "id": 161227168833606,
+ "label": "删除图片",
+ "code": "api:admin:document:deleteimage",
+ "sort": 13,
@@ -0,0 +1,687 @@
+ "id": 171046015770694,
+ "permissionId": 161227168628805,
+ "apiId": 161227168182342
+ "id": 171045671936071,
+ "permissionId": 161227168628806,
+ "id": 171045671936072,
+ "apiId": 161227168194630
+ "id": 171045702873158,
+ "permissionId": 161227168632901,
+ "apiId": 161227168194629
+ "id": 342275178242117,
+ "permissionId": 161227168641093,
+ "apiId": 161227168186437
+ "id": 342275178246213,
+ "apiId": 188049296683077
+ "id": 349750459183174,
+ "permissionId": 161227168641094,
+ "id": 349750459183175,
+ "apiId": 161227168186438
+ "id": 349750459183176,
+ "id": 349750459183173,
+ "apiId": 336555241422917
+ "id": 349750499344454,
+ "permissionId": 161227168645189,
+ "apiId": 161227168182343
+ "id": 349750499344455,
+ "id": 349750499344456,
+ "apiId": 161227168190533
+ "id": 349750499344457,
+ "id": 349750499344453,
+ "id": 342282197545029,
+ "permissionId": 161227168645190,
+ "apiId": 161227168190534
+ "id": 342282197545030,
+ "apiId": 271618651926607
+ "id": 342282494840901,
+ "permissionId": 161227168649285,
+ "apiId": 161227168190535
+ "id": 342282494840902,
+ "apiId": 336555241427019
+ "id": 340637112541253,
+ "permissionId": 161227168653382,
+ "id": 340637112541254,
+ "apiId": 336555241422918
+ "id": 171039545122886,
+ "permissionId": 161227168657477,
+ "apiId": 161227168174149
+ "id": 171039733657671,
+ "permissionId": 161227168657478,
+ "apiId": 161227168170054
+ "id": 171039733657672,
+ "apiId": 161227168178245
+ "id": 342280979902533,
+ "permissionId": 161227168661573,
+ "apiId": 161227168178246
+ "id": 342280979902534,
+ "apiId": 271618651926604
+ "id": 342281320968261,
+ "permissionId": 161227168665669,
+ "apiId": 161227168182341
+ "id": 342281320968262,
+ "apiId": 336555241422921
+ "id": 171039848452166,
+ "permissionId": 161227168669766,
+ "apiId": 161227168116805
+ "id": 171039883370566,
+ "permissionId": 161227168673861,
+ "apiId": 161227168120901
+ "id": 171039935344711,
+ "permissionId": 161227168673862,
+ "apiId": 161227168079941
+ "id": 171039935344712,
+ "apiId": 161227168120902
+ "id": 171039984590918,
+ "permissionId": 161227168677957,
+ "apiId": 161227168120903
+ "id": 171040049598534,
+ "permissionId": 161227168677958,
+ "apiId": 161227168124997
+ "id": 171040100655174,
+ "permissionId": 161227168682053,
+ "apiId": 161227168124998
+ "id": 171040178724934,
+ "permissionId": 161227168686150,
+ "apiId": 161227168198726
+ "id": 171040219164742,
+ "permissionId": 161227168690245,
+ "apiId": 161227168202822
+ "id": 171040256553031,
+ "permissionId": 161227168690246,
+ "apiId": 161227168198725
+ "id": 171040256553032,
+ "apiId": 161227168202823
+ "id": 171040295129157,
+ "permissionId": 161227168694341,
+ "apiId": 161227168206917
+ "id": 171040330653766,
+ "permissionId": 161227168694342,
+ "apiId": 161227168206918
+ "id": 171040379768902,
+ "permissionId": 161227168698437,
+ "apiId": 161227168206919
+ "id": 171040930574406,
+ "permissionId": 161227168702534,
+ "apiId": 161227168141383
+ "id": 171041051480134,
+ "permissionId": 161227168706629,
+ "apiId": 161227168153669
+ "id": 171040981246021,
+ "permissionId": 161227168706630,
+ "apiId": 161227168153670
+ "id": 171041490071623,
+ "permissionId": 161227168710726,
+ "apiId": 161227168145477
+ "id": 171041490071624,
+ "apiId": 161227168157765
+ "id": 171041379016773,
+ "permissionId": 161227168714821,
+ "apiId": 161227168145478
+ "id": 171041379016774,
+ "apiId": 161227168157766
+ "id": 171041229475910,
+ "permissionId": 161227168718917,
+ "apiId": 161227168161862
+ "id": 171040863215686,
+ "permissionId": 161227168727110,
+ "apiId": 161227168165959
+ "id": 171040714301511,
+ "permissionId": 161227168731205,
+ "apiId": 161227168165958
+ "id": 171040714301512,
+ "apiId": 161227168170053
+ "id": 171044150452296,
+ "permissionId": 161227168735301,
+ "apiId": 161227168149574
+ "id": 171044150452297,
+ "apiId": 161227168149575
+ "id": 171044150452298,
+ "apiId": 161227168170055
+ "id": 171043491364937,
+ "permissionId": 161227168739398,
+ "id": 171043491364938,
+ "id": 171043491364939,
+ "apiId": 161227168165957
+ "id": 171043491364940,
+ "id": 171044112568390,
+ "permissionId": 161227168747589,
+ "apiId": 161227168211013
+ "id": 171042505658439,
+ "permissionId": 161227168747590,
+ "id": 171042505658440,
+ "apiId": 161227168211014
+ "id": 171044276404294,
+ "permissionId": 161227168751686,
+ "apiId": 161227168243782
+ "id": 171044306128966,
+ "permissionId": 161227168755781,
+ "apiId": 161227168243783
+ "id": 171044724113479,
+ "permissionId": 161227168755782,
+ "apiId": 161227168243781
+ "id": 171044724113480,
+ "apiId": 161227168247877
+ "id": 171044355190854,
+ "permissionId": 161227168759877,
+ "apiId": 161227168247878
+ "id": 171044388511814,
+ "permissionId": 161227168759878,
+ "apiId": 161227168251973
+ "id": 171045341298758,
+ "permissionId": 161227168784454,
+ "apiId": 161227168215109
+ "id": 171045383643206,
+ "permissionId": 161227168788550,
+ "apiId": 161227168215110
+ "id": 171046614102086,
+ "permissionId": 161227168800838,
+ "apiId": 161227168223302
+ "id": 171046647849030,
+ "permissionId": 161227168804933,
+ "apiId": 161227168227397
+ "id": 171046740811847,
+ "permissionId": 161227168809029,
+ "apiId": 161227168219205
+ "id": 171046740811848,
+ "apiId": 161227168227398
+ "id": 171046827180103,
+ "permissionId": 161227168813125,
+ "apiId": 161227168219206
+ "id": 171046827180104,
+ "apiId": 161227168231493
+ "id": 171046899044422,
+ "permissionId": 161227168813126,
+ "apiId": 161227168231494
+ "id": 185974955921477,
+ "permissionId": 161227168821318,
+ "apiId": 161227168215111
+ "id": 185974955921478,
+ "apiId": 161227168235589
+ "id": 171047159746631,
+ "permissionId": 161227168825414,
+ "id": 171047159746632,
+ "apiId": 161227168235590
+ "id": 171046199644230,
+ "permissionId": 161227168829509,
+ "apiId": 161227168235591
+ "id": 171046300762182,
+ "permissionId": 161227168833605,
+ "apiId": 161227168239685
+ "id": 171046127857734,
+ "permissionId": 161227168833606,
+ "apiId": 161227168239686
+ "id": 171044607758405,
+ "permissionId": 161807358345285,
+ "apiId": 170317848645701
+ "id": 171044607758406,
+ "apiId": 170317848662085
+ "id": 171044440813638,
+ "permissionId": 163579955331141,
+ "apiId": 163579785756741
+ "id": 187390793699399,
+ "permissionId": 187375358951493,
+ "apiId": 161227168137286
+ "id": 187390793703493,
+ "apiId": 174219034734662
+ "id": 187385577730117,
+ "permissionId": 187385577599045,
+ "apiId": 187384805367877
+ "id": 187390759231560,
+ "permissionId": 187389970825285,
+ "apiId": 161227168137285
+ "id": 187390759231561,
+ "apiId": 161227168141381
+ "id": 187390759231562,
+ "apiId": 174219034734661
+ "id": 187390759231563,
+ "apiId": 174219034734664
+ "id": 187391074381895,
+ "permissionId": 187390547820613,
+ "apiId": 161227168141382
+ "id": 187391074381896,
+ "apiId": 174219034734665
+ "id": 187391371079750,
+ "permissionId": 187391371018309,
+ "apiId": 184100551516229
+ "id": 187391371079751,
+ "apiId": 184100551532613
+ "id": 187391980814407,
+ "permissionId": 187391980761157,
+ "apiId": 161227168137287
+ "id": 187391980814408,
+ "apiId": 174219034734663
+ "id": 188054258307141,
+ "permissionId": 188054258278469,
+ "id": 188054341591109,
+ "permissionId": 188054341582917,
+ "apiId": 174219034734674
+ "id": 188054416900167,
+ "permissionId": 188054416891973,
+ "apiId": 174219034734672
+ "id": 188054416900168,
+ "apiId": 174219034738757
+ "id": 188054509035590,
+ "permissionId": 188054509027397,
+ "apiId": 174219034738758
+ "id": 188054656598086,
+ "permissionId": 188054656589893,
+ "apiId": 174219034738760
+ "id": 188054719275078,
+ "permissionId": 188054719266885,
+ "apiId": 174219034738761
+ "id": 188054776557639,
+ "permissionId": 188054776545349,
+ "apiId": 174219034738759
+ "id": 188054776557640,
+ "apiId": 174219034738762
+ "id": 188054835359813,
+ "permissionId": 188054834004037,
+ "apiId": 174219034738763
+ "id": 188799732666437,
+ "permissionId": 188799732494405,
+ "apiId": 174219034734667
+ "id": 188799795204165,
+ "permissionId": 188799795101765,
+ "apiId": 174219034734668
+ "id": 188799878713413,
+ "permissionId": 188799878676549,
+ "apiId": 174219034734666
+ "id": 188799878713414,
+ "apiId": 174219034734669
+ "id": 188799949889606,
+ "permissionId": 188799949844549,
+ "apiId": 174219034734670
+ "id": 188799997497414,
+ "permissionId": 188799997452357,
+ "apiId": 174219034734671
+ "id": 189345990312005,
+ "permissionId": 189345990168645,
+ "apiId": 174219034738764
+ "id": 342277088911429,
+ "permissionId": 340645133123653,
+ "id": 342277088911430,
+ "id": 342277088911431,
+ "id": 342277691510854,
+ "permissionId": 340890474405957,
+ "id": 342277691510855,
+ "id": 342277691510853,
+ "apiId": 336555241422919
+ "id": 340890633531462,
+ "permissionId": 340890633515077,
+ "apiId": 336555241422920
+ "id": 343342945849413,
+ "permissionId": 343342945812549,
+ "apiId": 336555241422922
+ "id": 343343121375302,
+ "permissionId": 343343120306245,
+ "apiId": 336555241427013
+ "id": 343343209173062,
+ "permissionId": 343343209164869,
+ "apiId": 336555241427014
+ "id": 343343795257413,
+ "permissionId": 343343735894085,
+ "id": 343343795261509,
+ "apiId": 336555241427015
+ "id": 343343926603846,
+ "permissionId": 343343926595653,
+ "apiId": 343342310699077
+ "id": 343343989968966,
+ "permissionId": 343343989960773,
+ "apiId": 343342310703173
+ "id": 343344066175046,
+ "permissionId": 343344066166853,
+ "apiId": 343342310703174
+ "id": 343344158363718,
+ "permissionId": 343344158351429,
+ "apiId": 336555241427016
+ "id": 343344474333253,
+ "permissionId": 343344363630661,
+ "apiId": 336555241427018
+ "id": 349749511979077,
+ "permissionId": 349749511946309,
+ "apiId": 349749396615237
+ "id": 349749778911302,
+ "permissionId": 349749778899013,
+ "apiId": 349749396619333
@@ -0,0 +1,44 @@
+ "id": 161223412080709,
+ "parentId": 336557474730053,
+ "name": "主管理员",
+ "code": "main-admin",
+ "dataScope": 1,
+ "id": 162605510979653,
+ "parentId": 336557578817605,
+ "name": "普通员工",
+ "code": "emp",
+ "id": 336557474730053,
+ "name": "系统默认",
+ "sort": 1
+ "id": 336557508276293,
+ "name": "职务",
+ "sort": 2
+ "id": 336557578817605,
+ "name": "岗位",
+ "sort": 3
+ "id": 340428577087557,
+ "parentId": 336557508276293,
+ "name": "IT",
+ "code": "it",
@@ -0,0 +1,50 @@
+[]
@@ -0,0 +1,16 @@
+ "id": 161223412138053,
+ "code": "zhontai",
+ "realName": "小雪",
+ "phone": "13122223333",
+ "email": "xiaoxue@zhontai.com",
+ "userId": 161223411986501,
+ "tenantType": 1,
+ "dbKey": "masterdb",
+ "connectionString": "",
+ "password": "96E79218965EB72C92A549DD5A330112",
+ "name": "管理员",
+ "mobile": "13122223333",
+ "orgId": 189097691009093,
+ "nickName": "小雪",
+ "type": 100
@@ -0,0 +1,7 @@
+ "id": 340793613013061,
+ "orgId": 189097691009093
+ "id": 340793613008965,
+ "roleId": 161223412080709
@@ -0,0 +1,6 @@
+ "sex": 0
@@ -0,0 +1,200 @@
+ "id": 161227168313413,
+ "cache": true,
+ "id": 161227168428101,
+ "parentId": 161227168313413,
+ "name": "Home",
+ "label": "首页",
+ "path": "admin/home",
+ "id": 161227168432197,
+ "label": "系统配置",
+ "id": 187053736300613,
+ "parentId": 161227168432197,
+ "name": "Dictionary",
+ "path": "admin/dictionary/index",
+ "description": "数据字典",
+ "cache": true
+ "id": 161227168432199,
+ "id": 161227168436293,
+ "parentId": 161227168432199,
+ "name": "Settins",
+ "path": "account/settings",
+ "id": 161227168436294,
+ "id": 161227168436295,
+ "parentId": 161227168436294,
+ "name": "User",
+ "path": "admin/user/index",
+ "id": 161227168440389,
+ "name": "Role",
+ "path": "admin/role/index",
+ "id": 161227168440390,
+ "name": "Api",
+ "path": "admin/api",
+ "id": 161227168444485,
+ "name": "AdminView",
+ "path": "admin/view",
+ "id": 161227168444486,
+ "name": "Permission",
+ "path": "admin/permission",
+ "id": 161227168448581,
+ "name": "RolePermission",
+ "path": "admin/role-permission",
+ "id": 161227168448582,
+ "name": "Cache",
+ "path": "admin/cache",
+ "id": 161227168448583,
+ "name": "Tenant",
+ "path": "admin/tenant",
+ "id": 174312361087045,
+ "name": "Org",
+ "path": "admin/org",
+ "id": 161227168452677,
+ "id": 161227168452678,
+ "parentId": 161227168452677,
+ "name": "OprationLog",
+ "path": "admin/opration-log",
+ "id": 161227168456773,
+ "name": "LoginLog",
+ "path": "admin/login-log",
+ "id": 161227168456774,
+ "name": "Document",
+ "path": "admin/document",
+ "id": 336556164300869,
+ "name": "Task",
+ "path": "admin/task/index",
@@ -0,0 +1,3518 @@
+ "id": 373083895201861,
+ "parentId": 0,
+ "name": null,
+ "label": "中台Admin",
+ "path": "admin",
+ "httpMethods": null,
+ "parentId": 373083895201861,
+ "sort": 56,
+ "childs": null,
+ "isDeleted": false,
+ "createdUserId": 161223411986501,
+ "createdUserName": "admin",
+ "createdTime": "2023-04-13T15:13:43",
+ "modifiedUserId": null,
+ "modifiedUserName": null,
+ "modifiedTime": null
+ "sort": 57,
+ "sort": 58,
+ "sort": 59,
+ "sort": 60,
+ "sort": 63,
+ "sort": 64,
+ "sort": 65,
+ "sort": 61,
+ "id": 372400615755845,
+ "path": "/api/admin/api/batch-delete",
+ "sort": 62,
+ "sort": 175,
+ "sort": 180,
+ "sort": 182,
+ "sort": 179,
+ "id": 394672333692998,
+ "label": "查询用户个人信息",
+ "path": "/api/admin/auth/get-user-profile",
+ "sort": 176,
+ "id": 394672333692999,
+ "label": "查询用户菜单列表",
+ "path": "/api/admin/auth/get-user-menus",
+ "sort": 177,
+ "id": 394672333697093,
+ "label": "查询用户权限列表",
+ "path": "/api/admin/auth/get-user-permissions",
+ "sort": 178,
+ "id": 399372669796424,
+ "label": "手机号登录",
+ "path": "/api/admin/auth/mobile-login",
+ "sort": 181,
+ "id": 399372669796425,
+ "label": "是否开启验证码",
+ "path": "/api/admin/auth/is-captcha",
+ "sort": 183,
+ "path": "dict",
+ "path": "/api/admin/dict/get",
+ "sort": 85,
+ "path": "/api/admin/dict/get-page",
+ "sort": 86,
+ "path": "/api/admin/dict/add",
+ "sort": 89,
+ "path": "/api/admin/dict/update",
+ "sort": 90,
+ "path": "/api/admin/dict/soft-delete",
+ "sort": 93,
+ "path": "/api/admin/dict/batch-soft-delete",
+ "sort": 94,
+ "path": "/api/admin/dict/delete",
+ "sort": 91,
+ "id": 372390893649989,
+ "path": "/api/admin/dict/batch-delete",
+ "sort": 92,
+ "id": 402196463136837,
+ "path": "/api/admin/dict/get-list",
+ "sort": 87,
+ "id": 402830164910149,
+ "label": "根据字典类型名称列表查询字典列表",
+ "path": "/api/admin/dict/get-list-by-names",
+ "sort": 88,
+ "sort": 122,
+ "sort": 118,
+ "sort": 119,
+ "sort": 120,
+ "label": "查询授权权限列表",
+ "sort": 123,
+ "sort": 124,
+ "sort": 126,
+ "sort": 127,
+ "sort": 128,
+ "sort": 130,
+ "sort": 131,
+ "sort": 132,
+ "sort": 135,
+ "sort": 136,
+ "sort": 121,
+ "sort": 129,
+ "sort": 133,
+ "sort": 125,
+ "sort": 137,
+ "sort": 134,
+ "sort": 144,
+ "sort": 146,
+ "sort": 150,
+ "sort": 151,
+ "sort": 154,
+ "sort": 155,
+ "sort": 152,
+ "sort": 145,
+ "sort": 147,
+ "label": "添加角色用户",
+ "sort": 148,
+ "sort": 149,
+ "sort": 153,
+ "id": 361090412425285,
+ "label": "设置数据权限",
+ "path": "/api/admin/role/set-data-scope",
+ "sort": 156,
+ "sort": 159,
+ "sort": 157,
+ "sort": 158,
+ "sort": 161,
+ "sort": 162,
+ "sort": 172,
+ "sort": 173,
+ "sort": 166,
+ "sort": 165,
+ "sort": 174,
+ "sort": 160,
+ "sort": 170,
+ "sort": 171,
+ "sort": 167,
+ "sort": 168,
+ "id": 361090412441669,
+ "label": "新增会员",
+ "path": "/api/admin/user/add-member",
+ "sort": 163,
+ "id": 361090412441670,
+ "label": "修改会员",
+ "path": "/api/admin/user/update-member",
+ "sort": 164,
+ "id": 394672333692997,
+ "label": "设置启用",
+ "path": "/api/admin/user/set-enable",
+ "sort": 169,
+ "sort": 47,
+ "sort": 48,
+ "sort": 49,
+ "sort": 50,
+ "sort": 53,
+ "sort": 54,
+ "sort": 55,
+ "sort": 51,
+ "id": 372401403850821,
+ "path": "/api/admin/view/batch-delete",
+ "sort": 52,
+ "sort": 66,
+ "sort": 67,
+ "sort": 17,
+ "sort": 25,
+ "sort": 26,
+ "sort": 18,
+ "sort": 23,
+ "sort": 24,
+ "sort": 16,
+ "sort": 30,
+ "sort": 27,
+ "sort": 28,
+ "sort": 41,
+ "sort": 32,
+ "sort": 33,
+ "sort": 35,
+ "sort": 36,
+ "sort": 40,
+ "sort": 29,
+ "sort": 37,
+ "sort": 42,
+ "sort": 31,
+ "sort": 39,
+ "sort": 34,
+ "sort": 38,
+ "sort": 110,
+ "sort": 111,
+ "sort": 112,
+ "sort": 113,
+ "sort": 115,
+ "sort": 116,
+ "sort": 114,
+ "id": 394672333688901,
+ "path": "/api/admin/tenant/set-enable",
+ "sort": 117,
+ "sort": 138,
+ "sort": 140,
+ "sort": 141,
+ "sort": 143,
+ "sort": 139,
+ "sort": 142,
+ "label": "数据字典类型服务",
+ "path": "dict-type",
+ "path": "/api/admin/dict-type/get",
+ "sort": 77,
+ "path": "/api/admin/dict-type/get-page",
+ "sort": 78,
+ "path": "/api/admin/dict-type/add",
+ "sort": 79,
+ "path": "/api/admin/dict-type/update",
+ "sort": 80,
+ "path": "/api/admin/dict-type/soft-delete",
+ "sort": 83,
+ "path": "/api/admin/dict-type/batch-soft-delete",
+ "sort": 84,
+ "path": "/api/admin/dict-type/delete",
+ "sort": 81,
+ "id": 372390893666373,
+ "path": "/api/admin/dict-type/batch-delete",
+ "sort": 82,
+ "sort": 68,
+ "sort": 10,
+ "sort": 69,
+ "sort": 70,
+ "sort": 71,
+ "sort": 72,
+ "sort": 76,
+ "sort": 73,
+ "sort": 74,
+ "sort": 75,
+ "id": 371292589752389,
+ "label": "文件服务",
+ "path": "file",
+ "sort": 15,
+ "id": 371292589764677,
+ "parentId": 371292589752389,
+ "path": "/api/admin/file/get-page",
+ "sort": 43,
+ "id": 371678435708997,
+ "label": "上传文件",
+ "path": "/api/admin/file/upload-file",
+ "sort": 45,
+ "id": 371678435725381,
+ "label": "上传多文件",
+ "path": "/api/admin/file/upload-files",
+ "sort": 46,
+ "id": 372031353708613,
+ "path": "/api/admin/file/delete",
+ "sort": 44,
+ "id": 399372669788229,
+ "label": "验证码服务",
+ "path": "captcha",
+ "sort": 19,
+ "id": 399372669796421,
+ "parentId": 399372669788229,
+ "label": "生成",
+ "path": "/api/admin/captcha/generate",
+ "sort": 20,
+ "id": 399372669796422,
+ "label": "验证",
+ "path": "/api/admin/captcha/check",
+ "sort": 21,
+ "id": 399372669796423,
+ "label": "发送短信验证码",
+ "path": "/api/admin/captcha/send-sms-code",
+ "sort": 22,
+ "id": 402830164901957,
+ "label": "套餐服务",
+ "path": "pkg",
+ "id": 402830164910150,
+ "parentId": 402830164901957,
+ "path": "/api/admin/pkg/get",
+ "sort": 95,
+ "id": 402830164910151,
+ "path": "/api/admin/pkg/get-list",
+ "sort": 96,
+ "id": 402830164910152,
+ "path": "/api/admin/pkg/get-page",
+ "sort": 97,
+ "id": 402830164914245,
+ "label": "查询套餐租户列表",
+ "path": "/api/admin/pkg/get-pkg-tenant-list",
+ "sort": 98,
+ "id": 402830164914246,
+ "label": "查询套餐权限列表",
+ "path": "/api/admin/pkg/get-pkg-permission-list",
+ "sort": 100,
+ "id": 402830164914247,
+ "label": "设置套餐权限",
+ "path": "/api/admin/pkg/set-pkg-permissions",
+ "sort": 101,
+ "id": 402830164914248,
+ "label": "添加套餐租户",
+ "path": "/api/admin/pkg/add-pkg-tenant",
+ "sort": 102,
+ "id": 402830164914249,
+ "label": "移除套餐租户",
+ "path": "/api/admin/pkg/remove-pkg-tenant",
+ "sort": 103,
+ "id": 402830164914250,
+ "path": "/api/admin/pkg/add",
+ "sort": 104,
+ "id": 402830164914251,
+ "path": "/api/admin/pkg/update",
+ "sort": 105,
+ "id": 402830164914252,
+ "path": "/api/admin/pkg/delete",
+ "sort": 106,
+ "id": 402830164914253,
+ "path": "/api/admin/pkg/batch-delete",
+ "sort": 107,
+ "id": 402830164914254,
+ "path": "/api/admin/pkg/soft-delete",
+ "sort": 108,
+ "id": 402830164914255,
+ "path": "/api/admin/pkg/batch-soft-delete",
+ "sort": 109,
+ "id": 403173446250565,
+ "label": "查询套餐租户分页",
+ "path": "/api/admin/pkg/get-pkg-tenant-page",
+ "sort": 99,
@@ -0,0 +1,36 @@
+ "dictTypeId": 187395320434757,
@@ -0,0 +1,17 @@
@@ -0,0 +1,21 @@
+ "memberCount": 0,
@@ -0,0 +1,3370 @@
+ "code": null,
+ "viewId": null,
+ "path": "/platform",
+ "redirect": "/platform/workbench",
+ "icon": "ele-Platform",
+ "hidden": false,
+ "isKeepAlive": true,
+ "isAffix": false,
+ "link": null,
+ "isIframe": false,
+ "description": null,
+ "label": "工作台",
+ "name": "admin/workbench",
+ "path": "/platform/workbench",
+ "redirect": null,
+ "icon": "iconfont icon-shuju1",
+ "isAffix": true,
+ "childs": [],
+ "path": "/platform/auth",
+ "redirect": "/platform/auth/user",
+ "icon": "iconfont icon-quanxian",
+ "name": "admin/user",
+ "path": "/platform/auth/user",
+ "icon": "ele-Avatar",
+ "icon": null,
+ "path": null,
+ "id": 394672570462277,
+ "label": "禁用",
+ "code": "api:admin:user:set-enable",
+ "name": "admin/role",
+ "path": "/platform/auth/role",
+ "icon": "fa fa-universal-access",
+ "name": "admin/permission",
+ "path": "/platform/auth/permission",
+ "icon": "iconfont icon-zidingyibuju",
+ "name": "admin/tenant",
+ "path": "/platform/auth/tenant",
+ "icon": "fa fa-user-circle",
+ "modifiedUserId": 161223411986501,
+ "modifiedUserName": "admin",
+ "modifiedTime": "2023-04-13T15:21:23"
+ "id": 394672685342789,
+ "code": "api:admin:tenant:set-enable",
+ "modifiedTime": "2023-04-13T15:16:21"
+ "name": "admin/org",
+ "path": "/platform/auth/org",
+ "code": "api:admin:org:delete",
+ "id": 402829461262405,
+ "label": "套餐管理",
+ "viewId": 402829224460357,
+ "path": "/platform/auth/pkg",
+ "icon": "ele-Memo",
+ "id": 402838978203717,
+ "parentId": 402829461262405,
+ "code": "api:admin:pkg:get",
+ "modifiedTime": "2023-04-13T15:17:34"
+ "id": 402839687192645,
+ "code": "api:admin:pkg:add",
+ "id": 402840395829317,
+ "code": "api:admin:pkg:update",
+ "id": 402840520048709,
+ "code": "api:admin:pkg:delete",
+ "id": 402840810463301,
+ "label": "添加租户",
+ "code": "api:admin:pkg:add-pkg-tenant",
+ "id": 402840869605445,
+ "label": "移除租户",
+ "code": "api:admin:pkg:remove-pkg-tenant",
+ "id": 402843985313861,
+ "code": "api:admin:pkg:set-pkg-permissions",
+ "modifiedTime": "2023-04-13T15:16:11"
+ "path": "/platform/system",
+ "redirect": "/platform/system/dict",
+ "icon": "fa fa-windows",
+ "name": "admin/api",
+ "path": "/platform/system/api",
+ "icon": "ele-Operation",
+ "code": "api:admin:api:delete",
+ "code": "api:admin:api:batchdelete",
+ "name": "admin/view",
+ "path": "/platform/system/view",
+ "icon": "fa fa-credit-card",
+ "code": "api:admin:view:delete",
+ "code": "api:admin:view:batchdelete",
+ "name": "admin/cache",
+ "path": "/platform/system/cache",
+ "icon": "ele-Brush",
+ "name": "admin/doc",
+ "path": "/platform/system/document",
+ "icon": "iconfont icon-gongju",
+ "hidden": true,
+ "name": "admin/dict",
+ "path": "/platform/system/dict",
+ "icon": "fa fa-database",
+ "code": "api:admin:dict:getpage",
+ "code": "api:admin:dict:update",
+ "code": "api:admin:dict:delete",
+ "code": "api:admin:dict:batchsoftdelete",
+ "code": "api:admin:dict:add",
+ "label": "任务调度",
+ "name": "admin/task",
+ "path": "/platform/system/task",
+ "icon": "fa fa-tasks",
+ "id": 371247914160197,
+ "label": "文件管理",
+ "viewId": 371247502852165,
+ "name": "admin/file",
+ "path": "/platform/system/file",
+ "id": 372004430860357,
+ "parentId": 371247914160197,
+ "code": "api:admin:file:get-page",
+ "id": 372004589551685,
+ "label": "上传",
+ "code": "api:admin:file:upload-file",
+ "id": 372031447494725,
+ "code": "api:admin:file:delete",
+ "path": "/platform/log",
+ "redirect": "/platform/log/login-log",
+ "icon": "ele-Tickets",
+ "name": "admin/login-log",
+ "path": "/platform/logs/login-log",
+ "icon": "ele-Document",
+ "name": "admin/opration-log",
+ "path": "/platform/logs/opration-log",
+ "path": "/help",
+ "redirect": "/help/admin",
+ "icon": "ele-Notebook",
+ "viewId": 361047593013317,
+ "path": "/help/admin",
+ "icon": "ele-Promotion",
+ "link": "https://zhontai.net",
+ "path": "/help/freesql",
+ "link": "http://freesql.net/guide",
+ "id": 361084141387845,
+ "label": "个人中心",
+ "name": "personal",
+ "path": "/personal",
+ "icon": "iconfont icon-gerenzhongxin",
@@ -0,0 +1,1170 @@
+ "apiId": 161227168174149,
+ "createdTime": "2023-04-13T15:13:43"
+ "apiId": 161227168170054,
+ "apiId": 161227168178245,
+ "apiId": 161227168116805,
+ "apiId": 161227168120901,
+ "apiId": 161227168079941,
+ "apiId": 161227168120902,
+ "apiId": 161227168124998,
+ "apiId": 161227168198726,
+ "apiId": 161227168202822,
+ "apiId": 161227168198725,
+ "apiId": 161227168202823,
+ "apiId": 161227168206919,
+ "apiId": 161227168141383,
+ "apiId": 161227168153669,
+ "apiId": 161227168145478,
+ "apiId": 161227168157766,
+ "apiId": 161227168145477,
+ "apiId": 161227168157765,
+ "apiId": 161227168211013,
+ "apiId": 161227168211014,
+ "apiId": 161227168215109,
+ "apiId": 161227168215110,
+ "apiId": 161227168215111,
+ "apiId": 161227168235589,
+ "apiId": 161227168137285,
+ "apiId": 161227168141381,
+ "apiId": 174219034734661,
+ "apiId": 174219034734664,
+ "apiId": 161227168137286,
+ "apiId": 174219034734662,
+ "apiId": 184100551516229,
+ "apiId": 184100551532613,
+ "apiId": 161227168137287,
+ "apiId": 174219034734663,
+ "apiId": 174219034738760,
+ "apiId": 174219034738761,
+ "apiId": 174219034738759,
+ "apiId": 174219034738762,
+ "apiId": 174219034738763,
+ "apiId": 174219034734667,
+ "apiId": 174219034734668,
+ "apiId": 174219034734666,
+ "apiId": 174219034734669,
+ "apiId": 174219034734670,
+ "apiId": 174219034734671,
+ "apiId": 174219034738764,
+ "apiId": 336555241422917,
+ "apiId": 336555241422918,
+ "apiId": 161227168186437,
+ "apiId": 188049296683077,
+ "apiId": 161227168186438,
+ "apiId": 161227168182343,
+ "apiId": 161227168190533,
+ "id": 360708999491653,
+ "apiId": 349749396619333,
+ "id": 360709017350213,
+ "apiId": 349749396615237,
+ "id": 360709080879173,
+ "apiId": 336555241422919,
+ "id": 360709080879174,
+ "apiId": 0,
+ "id": 360709080879175,
+ "id": 360709099552837,
+ "apiId": 336555241422920,
+ "id": 360709121323077,
+ "apiId": 161227168149574,
+ "id": 360709121327173,
+ "apiId": 161227168149575,
+ "id": 360709121327174,
+ "apiId": 161227168165957,
+ "id": 360709189963845,
+ "id": 360709215817797,
+ "apiId": 174219034734674,
+ "id": 360709237321797,
+ "apiId": 174219034734672,
+ "id": 360709237325893,
+ "apiId": 174219034738757,
+ "id": 360709600628805,
+ "apiId": 161227168165958,
+ "id": 360709600628806,
+ "apiId": 161227168170053,
+ "id": 360709844901957,
+ "apiId": 161227168153670,
+ "id": 360709952303173,
+ "apiId": 161227168165959,
+ "id": 360710163017797,
+ "apiId": 336555241427013,
+ "id": 360710186348613,
+ "apiId": 336555241422922,
+ "id": 360710210654277,
+ "apiId": 336555241427018,
+ "id": 360710378074181,
+ "apiId": 336555241427014,
+ "id": 360710409134149,
+ "id": 360710409134150,
+ "apiId": 336555241427015,
+ "id": 360710429880389,
+ "apiId": 336555241427016,
+ "id": 360710497280069,
+ "apiId": 343342310703173,
+ "id": 360710512681029,
+ "apiId": 343342310699077,
+ "id": 360710534180933,
+ "apiId": 343342310703174,
+ "id": 360710689267781,
+ "apiId": 161227168239685,
+ "id": 360710797463621,
+ "apiId": 161227168223302,
+ "id": 360710817820741,
+ "apiId": 161227168227397,
+ "id": 360710880665669,
+ "apiId": 161227168219205,
+ "id": 360710880665670,
+ "apiId": 161227168227398,
+ "id": 360710901760069,
+ "apiId": 161227168219206,
+ "id": 360710901760070,
+ "apiId": 161227168231493,
+ "id": 360711132024901,
+ "id": 360711132024902,
+ "apiId": 161227168235590,
+ "id": 363544618700869,
+ "apiId": 161227168231494,
+ "id": 363544634417221,
+ "apiId": 161227168239686,
+ "id": 363544652439621,
+ "apiId": 161227168235591,
+ "id": 372004983631941,
+ "permissionId": 372004430860357,
+ "apiId": 371292589764677,
+ "id": 372387123470405,
+ "apiId": 336555241427019,
+ "id": 372387205976133,
+ "apiId": 271618651926607,
+ "id": 372387273650245,
+ "apiId": 271618651926604,
+ "id": 372387357708357,
+ "apiId": 336555241422921,
+ "id": 372387722547269,
+ "apiId": 342274923528261,
+ "id": 372387852169285,
+ "apiId": 187384805367877,
+ "id": 372388163334213,
+ "apiId": 163579785756741,
+ "id": 372389074755653,
+ "apiId": 271618651926597,
+ "id": 372389074755654,
+ "apiId": 271618651922504,
+ "id": 372393512312901,
+ "permissionId": 372031447494725,
+ "apiId": 372031353708613,
+ "id": 372398462337093,
+ "permissionId": 372004589551685,
+ "apiId": 371678435708997,
+ "id": 372398462349381,
+ "apiId": 371678435725381,
+ "id": 372400081883205,
+ "apiId": 271618651914309,
+ "id": 372400964571205,
+ "apiId": 372400615755845,
+ "id": 372401035112517,
+ "apiId": 271618651926608,
+ "id": 372401476096069,
+ "apiId": 372401403850821,
+ "id": 394676138577989,
+ "permissionId": 394672570462277,
+ "apiId": 394672333692997,
+ "id": 394676175425605,
+ "permissionId": 394672685342789,
+ "apiId": 394672333688901,
+ "id": 402840520056901,
+ "permissionId": 402840520048709,
+ "apiId": 402830164914252,
+ "id": 402840869609541,
+ "permissionId": 402840869605445,
+ "apiId": 402830164914249,
+ "id": 402843803623493,
+ "permissionId": 402840810463301,
+ "apiId": 402830164914248,
+ "id": 402843803623494,
+ "apiId": 161227168243782,
+ "id": 402846230683717,
+ "apiId": 170317848645701,
+ "id": 402846230696005,
+ "apiId": 170317848662085,
+ "id": 402846230696006,
+ "id": 402846305517637,
+ "permissionId": 402843985313861,
+ "apiId": 402830164914247,
+ "id": 402846305521733,
+ "id": 402846305521734,
+ "apiId": 402830164914246,
+ "id": 403174061850693,
+ "permissionId": 402839687192645,
+ "apiId": 402830164914250,
+ "id": 403174104182853,
+ "permissionId": 402840395829317,
+ "apiId": 402830164914251,
+ "id": 403174104182854,
+ "apiId": 402830164910150,
+ "id": 403174168866885,
+ "apiId": 161227168243783,
+ "id": 403174168866886,
+ "apiId": 402830164910151,
+ "id": 403174230675525,
+ "apiId": 161227168243781,
+ "id": 403174230675526,
+ "apiId": 161227168247877,
+ "id": 403174230675527,
+ "id": 406343893172293,
+ "permissionId": 402838978203717,
+ "createdTime": "2023-04-13T15:17:34"
+ "id": 406343893180485,
+ "apiId": 402830164910152,
+ "id": 406343893180486,
+ "apiId": 402830164914245,
+ "id": 406343893180487,
+ "id": 406343893180488,
+ "apiId": 403173446250565,
+ "id": 406343893180489,
+ "id": 406344832528453,
+ "createdTime": "2023-04-13T15:21:23"
+ "id": 406344832528454,
+ "id": 406344832528455,
@@ -0,0 +1,116 @@
+ "dataScope": 4,
@@ -0,0 +1,122 @@
+ "dbType": null,
@@ -0,0 +1,25 @@
+ "passwordEncryptType": null,
+ "managerUserId": null,
+ "nickName": "小雪转中雪",
+ "avatar": null,
+ "status": null,
+ "type": 100,
@@ -0,0 +1,26 @@
@@ -0,0 +1,14 @@
+ "id": 371677390377029,
+ "isManager": true,
+ "id": 371677390233669,
+ "roleId": 161223412080709,
@@ -0,0 +1,18 @@
+ "position": null,
+ "jobNumber": null,
+ "sex": 0,
+ "entryTime": null,
+ "workWeChatCard": null,
+ "introduce": null,
@@ -0,0 +1,19 @@
@@ -0,0 +1,463 @@
+ "path": "admin/workbench/index",
+ "path": "admin/api/index",
+ "path": "admin/view/index",
+ "path": "admin/cache/index",
+ "name": "admin/document",
+ "path": "admin/document/index",
+ "path": "admin/dict/index",
+ "id": 371247502852165,
+ "path": "admin/file/index",
+ "name": "admin/personal",
+ "path": "admin/personal/index",
+ "path": "admin/permission/index",
+ "path": "admin/tenant/index",
+ "path": "admin/org/index",
+ "id": 402829224460357,
+ "name": "admin/pkg",
+ "path": "admin/pkg/index",
+ "name": "admin/oprationLog",
+ "path": "admin/logs/opration-log",
+ "name": "admin/loginLog",
+ "path": "admin/logs/login-log",
+ "id": 361047466754117,
+ "name": "",
+ "label": "布局管理",
+ "id": 361047593013317,
+ "parentId": 361047466754117,
+ "name": "link",
+ "label": "链接",
+ "path": "layout/routerView/link",
+ "id": 361047841796165,
+ "name": "iframe",
+ "label": "内嵌窗口",
+ "path": "layout/routerView/iframes",
@@ -0,0 +1,120 @@
+using FreeScheduler;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Savorboard.CAP.InMemoryMessageQueue;
+using System.Reflection;
+using ZhonTai;
+using ZhonTai.Admin.Core;
+using ZhonTai.Admin.Core.Configs;
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Db;
+using ZhonTai.Admin.Core.Startup;
+using ZhonTai.Admin.Tools.TaskScheduler;
+using ZhonTai.ApiUI;
+using ZhonTai.Common.Helpers;
+new DiTuiHost(new HostAppOptions
+ //配置FreeSql
+ ConfigureFreeSql = (freeSql, dbConfig) =>
+ if (dbConfig.Key == DbKeys.AppDb)
+ freeSql.SyncSchedulerStructure(dbConfig, (fsql) =>
+ fsql.CodeFirst
+ .ConfigEntity<TaskInfo>(a =>
+ a.Name("app_task");
+ })
+ .ConfigEntity<TaskLog>(a =>
+ a.Name("app_task_log");
+ });
+ //配置后置服务
+ ConfigurePostServices = context =>
+ //context.Services.AddTiDb(context);
+ //添加cap事件总线
+ var appConfig = ConfigHelper.Get<AppConfig>("appconfig", context.Environment.EnvironmentName);
+ Assembly[] assemblies = AssemblyHelper.GetAssemblyList(appConfig.AssemblyNames);
+ //var dbConfig = ConfigHelper.Get<DbConfig>("dbconfig", context.Environment.EnvironmentName);
+ //var rabbitMQ = context.Configuration.GetSection("CAP:RabbitMq").Get<RabbitMQOptions>();
+ context.Services.AddCap(config =>
+ config.UseInMemoryStorage();
+ config.UseInMemoryMessageQueue();
+ config.UseDashboard();
+ }).AddSubscriberAssembly(assemblies);
+ //添加任务调度
+ context.Services.AddTaskScheduler(DbKeys.AppDb, options =>
+ options.ConfigureFreeSql = freeSql =>
+ freeSql.CodeFirst
+ };
+ //模块任务处理器
+ options.TaskHandler = new CloudTaskHandler(options.FreeSqlCloud, DbKeys.AppDb);
+ //配置Autofac容器
+ ConfigureAutofacContainer = (builder, context) =>
+ //配置Mvc
+ ConfigureMvcBuilder = (builder, context) =>
+ //配置后置中间件
+ ConfigurePostMiddleware = context =>
+ var app = context.App;
+ var env = app.Environment;
+ var appConfig = app.Services.GetService<AppConfig>();
+ #region 新版Api文档
+ if (env.IsDevelopment() || appConfig.ApiUI.Enable)
+ app.UseApiUI(options =>
+ options.RoutePrefix = appConfig.ApiUI.RoutePrefix;
+ var routePath = options.RoutePrefix.NotNull() ? $"{options.RoutePrefix}/" : "";
+ appConfig.Swagger.Projects?.ForEach(project =>
+ options.SwaggerEndpoint($"/{routePath}swagger/{project.Code.ToLower()}/swagger.json", project.Name);
+ #endregion
+ app.UseTaskScheduler();
+}).Run(args);
+#if DEBUG
+public partial class Program { }
+#endif
@@ -0,0 +1,29 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:8000"
+ "profiles": {
+ "ZhonTai.Host": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "dotnetRunMessages": true,
+ "launchUrl": "admin",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ "applicationUrl": "http://localhost:7000"
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchUrl": "",
+ //"Logging": {
+ // "LogLevel": {
+ // "Default": "Debug",
+ // "System": "Information",
+ // "Microsoft": "Information"
+ // }
@@ -0,0 +1,57 @@
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ "AllowedHosts": "*",
+ "CAP": {
+ "RabbitMq": {
+ "HostName": "",
+ "Port": 5672,
+ "UserName": "",
+ "Password": ""
+ "SlideCaptcha": {
+ "ExpirySeconds": 300, // 缓存过期时长
+ "StoreageKeyPrefix": "admin:captcha:", // 缓存前缀
+ "Tolerant": 0.02, // 容错值(校验时用,缺口位置与实际滑动位置匹配容错范围)
+ "Backgrounds": [ // 背景图配置
+ "Type": "file",
+ "Data": "wwwroot/captcha/jigsaw/backgrounds/1.jpg"
+ "Data": "wwwroot/captcha/jigsaw/backgrounds/2.jpg"
+ "Data": "wwwroot/captcha/jigsaw/backgrounds/3.jpg"
+ "Data": "wwwroot/captcha/jigsaw/backgrounds/4.jpg"
+ "Data": "wwwroot/captcha/jigsaw/backgrounds/5.jpg"
+ // Templates不配置,则使用默认模板
+ "Templates": [
+ // "Slider": {
+ // "Type": "file",
+ // "Data": "wwwroot/captcha/jigsaw/templates/1/transparent.png"
+ // },
+ // "Hole": {
+ // "Data": "wwwroot/captcha/jigsaw/templates/1/dark.png"
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 配置文档 https://nlog-project.org/config -->
+<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="Info">
+ <!-- 启用.net core的核心布局渲染器 -->
+ <extensions>
+ <add assembly="NLog.Web.AspNetCore" />
+ </extensions>
+ <!-- 写入日志的目标配置 archiveAboveSize="102400" maxArchiveDays="60" -->
+ <targets>
+ <!-- 调试 -->
+ <target xsi:type="File" name="debug" fileName="../logs/debug-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
+ <!-- 信息 -->
+ <target xsi:type="File" name="info" fileName="../logs/info-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
+ <!-- 警告 -->
+ <target xsi:type="File" name="warn" fileName="../logs/warn-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
+ <!-- 错误 -->
+ <target xsi:type="File" name="error" fileName="../logs/error-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
+ <!-- 控制台 -->
+ <target xsi:type="Console" name="console" layout="${message}" />
+ <!-- 数据库 https://github.com/NLog/NLog/wiki/Database-target -->
+ <target name="db" xsi:type="Database" connectionString="Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1" dbProvider="System.Data.SQLite.SQLiteConnection, System.Data.SQLite">
+ <commandText>
+ INSERT INTO "ad_log"("Id", "Logged", "Level", "Message", "Logger", "Properties", "Callsite", "Exception") VALUES(@Id, @Logged, @Level, @Message, @Logger, @Properties, @Callsite, @Exception)
+ </commandText>
+ <!-- 自定义主键 -->
+ <parameter name="@Id" layout="${event-properties:id}" />
+ <parameter name="@Logged" layout="${date}" />
+ <parameter name="@Level" layout="${level}" />
+ <parameter name="@Message" layout="${message}" />
+ <parameter name="@Logger" layout="${logger}" />
+ <!-- 自定义属性 -->
+ <parameter name="@properties" layout="${all-event-properties:separator=|}" />
+ <parameter name="@Callsite" layout="${callsite}" />
+ <parameter name="@Exception" layout="${exception:tostring}" />
+ </target>
+ </targets>
+ <!-- 映射规则 -->
+ <rules>
+ <!--跳过不重要的微软日志-->
+ <logger name="Microsoft.*" maxlevel="Info" final="true" />
+ <!--跳过不重要的CAP日志-->
+ <logger name="DotNetCore.CAP.*" maxlevel="Info" final="true" />
+ <!-- 数据库 -->
+ <logger name="db" writeTo="db" />
+ <logger name="*" minlevel="Trace" maxlevel="Debug" writeTo="debug" />
+ <logger name="*" minlevel="Trace" writeTo="console" />
+ <logger name="*" minlevel="Info" maxlevel="Info" writeTo="info" />
+ <logger name="*" minlevel="Warn" maxlevel="Warn" writeTo="warn" />
+ <logger name="*" minlevel="Error" maxlevel="Fatal" writeTo="error" />
+ </rules>
+</nlog>
+.mp-results{
+ display: block!important;
+//在路由中调试获取新版脚本 var script = MiniProfiler.Current.RenderIncludes(Request.HttpContext);
+document.write('<script async="async" id="mini-profiler" src="/mini-profiler-resources/includes.min.js?v=4.2.22+4563a9e1ab" data-version="4.2.22+4563a9e1ab" data-path="/mini-profiler-resources/" data-current-id="17d6dc2f-274b-4044-9d5c-f8bd229cdfd1" data-ids="c31e5864-5463-4d93-b0a5-62fa55bec631,2bab71ec-5f6f-4112-a7df-b214c13ee32b,d5bc51f5-5b0d-4971-bde8-0a339fafd68c,41130f68-5e18-4fe3-a6ad-eab5bf8ee473,83b6b654-a7b4-4b62-9b1b-0a43bc333ff2,116b78d8-cc84-473d-bc97-52bb80609e6e,7703d982-2bdb-4564-b689-453c2781f2e1,14e29678-0477-403b-ad82-87918f255d7f,18ab017e-a66d-438d-be1c-b67499d85c64,842fcd4f-a77d-46e2-9476-795743b86bef,b463870a-896c-408b-bac5-9af967a292ac,af01c39e-a23d-4b74-8fdc-201209245b14,576e8a42-eac2-4884-9c4a-e2d632155464,57572c02-be2d-4c37-ab36-19f07b11e47e,b10692ae-409c-43fe-b6f8-a4c48346eda6,17d6dc2f-274b-4044-9d5c-f8bd229cdfd1" data-position="Left"" data-scheme="Light" data-authorized="true" data-max-traces="15" data-toggle-shortcut="Alt+P" data-trivial-milliseconds="2.0" data-ignored-duplicate-execute-types="Open,OpenAsync,Close,CloseAsync"></script>');
@@ -21,4 +21,8 @@ public static partial class AdminConsts
/// 允许所有源访问策略
/// </summary>
public const string AllowAnyPolicyName = "AllowAnyPolicy";
+ /// <summary>
+ /// 地推
+ /// </summary>
+ public const string DiTuiName = "DiTui";
}
@@ -0,0 +1,796 @@
+using AspNetCoreRateLimit;
+using Autofac;
+using Autofac.Extensions.DependencyInjection;
+using FluentValidation;
+using FluentValidation.AspNetCore;
+using FreeRedis;
+using HealthChecks.UI.Client;
+using IdentityServer4.AccessTokenValidation;
+using Mapster;
+using MapsterMapper;
+using Microsoft.AspNetCore.Authentication;
+using Microsoft.AspNetCore.Authentication.JwtBearer;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Diagnostics.HealthChecks;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Controllers;
+using Microsoft.Extensions.Caching.Distributed;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+using Microsoft.IdentityModel.Tokens;
+using Microsoft.OpenApi.Any;
+using Microsoft.OpenApi.Models;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
+using NLog;
+using NLog.Web;
+using Swashbuckle.AspNetCore.SwaggerGen;
+using System;
+using System.Collections.Generic;
+using System.IdentityModel.Tokens.Jwt;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Text.Json.Serialization;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using Yitter.IdGenerator;
+using ZhonTai.Admin.Core.Attributes;
+using ZhonTai.Admin.Core.Auth;
+using ZhonTai.Admin.Core.Captcha;
+using ZhonTai.Admin.Core.Conventions;
+using ZhonTai.Admin.Core.Dto;
+using ZhonTai.Admin.Core.Extensions;
+using ZhonTai.Admin.Core.Filters;
+using ZhonTai.Admin.Core.Logs;
+using ZhonTai.Admin.Core.Middlewares;
+using ZhonTai.Admin.Core.RegisterModules;
+using ZhonTai.Admin.Services.User;
+using ZhonTai.Admin.Tools.Cache;
+using ZhonTai.DynamicApi;
+using ZhonTai.DynamicApi.Attributes;
+namespace ZhonTai.Admin.Core
+ /// 宿主应用
+ public class DiTuiHost
+ readonly HostAppOptions _hostAppOptions;
+ public DiTuiHost()
+ public DiTuiHost(HostAppOptions hostAppOptions)
+ _hostAppOptions = hostAppOptions;
+ /// 运行应用
+ /// <param name="args"></param>
+ public void Run(string[] args)
+ var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();
+ try
+ //应用程序启动
+ logger.Info("Application startup");
+ var builder = WebApplication.CreateBuilder(args);
+ //使用NLog日志
+ builder.Host.UseNLog();
+ var services = builder.Services;
+ var env = builder.Environment;
+ var configuration = builder.Configuration;
+ var configHelper = new ConfigHelper();
+ var appConfig = ConfigHelper.Get<AppConfig>("appconfig", env.EnvironmentName) ?? new AppConfig();
+ //添加配置
+ builder.Configuration.AddJsonFile("./Configs/ratelimitconfig.json", optional: true, reloadOnChange: true);
+ if (env.EnvironmentName.NotNull())
+ builder.Configuration.AddJsonFile($"./Configs/ratelimitconfig.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
+ builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
+ builder.Configuration.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
+ var oSSConfigRoot = ConfigHelper.Load("ossconfig", env.EnvironmentName, true);
+ services.Configure<OSSConfig>(oSSConfigRoot);
+ //应用配置
+ services.AddSingleton(appConfig);
+ var hostAppContext = new HostAppContext()
+ Services = services,
+ Environment = env,
+ Configuration = configuration
+ //使用Autofac容器
+ builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
+ builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
+ // 控制器注入
+ builder.RegisterModule(new ControllerModule());
+ // 单例注入
+ builder.RegisterModule(new SingleInstanceModule(appConfig));
+ // 模块注入
+ builder.RegisterModule(new RegisterModule(appConfig));
+ _hostAppOptions?.ConfigureAutofacContainer?.Invoke(builder, hostAppContext);
+ //配置Kestrel服务器
+ builder.WebHost.ConfigureKestrel((context, options) =>
+ //设置应用服务器Kestrel请求体最大为100MB
+ options.Limits.MaxRequestBodySize = appConfig.MaxRequestBodySize;
+ //访问地址
+ builder.WebHost.UseUrls(appConfig.Urls);
+ //配置服务
+ ConfigureServices(services, env, configuration, configHelper, appConfig);
+ var app = builder.Build();
+ //配置中间件
+ ConfigureMiddleware(app, env, configuration, appConfig);
+ app.Run();
+ //应用程序停止
+ logger.Info("Application shutdown");
+ catch (Exception exception)
+ //应用程序异常
+ logger.Error(exception, "Application stopped because of exception");
+ throw;
+ finally
+ LogManager.Shutdown();
+ /// 配置服务
+ /// <param name="services"></param>
+ /// <param name="env"></param>
+ /// <param name="configuration"></param>
+ /// <param name="configHelper"></param>
+ /// <param name="appConfig"></param>
+ private void ConfigureServices(IServiceCollection services, IWebHostEnvironment env, IConfiguration configuration, ConfigHelper configHelper, AppConfig appConfig)
+ _hostAppOptions?.ConfigurePreServices?.Invoke(hostAppContext);
+ services.AddHealthChecks();
+ //雪花漂移算法
+ var idGeneratorOptions = new IdGeneratorOptions(1) { WorkerIdBitLength = 6 };
+ _hostAppOptions?.ConfigureIdGenerator?.Invoke(idGeneratorOptions);
+ YitIdHelper.SetIdGenerator(idGeneratorOptions);
+ //权限处理
+ services.AddScoped<IPermissionHandler, PermissionHandler>();
+ // ClaimType不被更改
+ JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
+ //用户信息
+ services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
+ services.TryAddScoped<IUser, User>();
+ //数据库配置
+ var dbConfig = ConfigHelper.Get<DbConfig>("dbconfig", env.EnvironmentName);
+ services.AddSingleton(dbConfig);
+ //添加数据库
+ if (!_hostAppOptions.CustomInitDb)
+ services.AddDb(env, _hostAppOptions);
+ //上传配置
+ var uploadConfig = ConfigHelper.Load("uploadconfig", env.EnvironmentName, true);
+ services.Configure<UploadConfig>(uploadConfig);
+ //程序集
+ #region Mapster 映射配置
+ services.AddScoped<IMapper>(sp => new Mapper());
+ if (assemblies?.Length > 0)
+ TypeAdapterConfig.GlobalSettings.Scan(assemblies);
+ #endregion Mapster 映射配置
+ #region Cors 跨域
+ services.AddCors(options =>
+ options.AddPolicy(AdminConsts.RequestPolicyName, policy =>
+ var hasOrigins = appConfig.CorUrls?.Length > 0;
+ if (hasOrigins)
+ policy.WithOrigins(appConfig.CorUrls);
+ else
+ policy.AllowAnyOrigin();
+ policy
+ .AllowAnyHeader()
+ .AllowAnyMethod();
+ policy.AllowCredentials();
+ //允许任何源访问Api策略,使用时在控制器或者接口上增加特性[EnableCors(AdminConsts.AllowAnyPolicyName)]
+ options.AddPolicy(AdminConsts.AllowAnyPolicyName, policy =>
+ .AllowAnyOrigin()
+ #endregion Cors 跨域
+ #region 身份认证授权
+ var jwtConfig = ConfigHelper.Get<JwtConfig>("jwtconfig", env.EnvironmentName);
+ services.TryAddSingleton(jwtConfig);
+ services.AddAuthentication(options =>
+ options.DefaultScheme = appConfig.IdentityServer.Enable ? IdentityServerAuthenticationDefaults.AuthenticationScheme : JwtBearerDefaults.AuthenticationScheme;
+ options.DefaultChallengeScheme = nameof(ResponseAuthenticationHandler); //401
+ options.DefaultForbidScheme = nameof(ResponseAuthenticationHandler); //403
+ .AddJwtBearer(options =>
+ //ids4
+ if (appConfig.IdentityServer.Enable)
+ options.Authority = appConfig.IdentityServer.Url;
+ options.RequireHttpsMetadata = appConfig.IdentityServer.RequireHttpsMetadata;
+ options.Audience = appConfig.IdentityServer.Audience;
+ options.TokenValidationParameters = new TokenValidationParameters
+ ValidateIssuer = true,
+ ValidateAudience = true,
+ ValidateLifetime = true,
+ ValidateIssuerSigningKey = true,
+ ValidIssuer = jwtConfig.Issuer,
+ ValidAudience = jwtConfig.Audience,
+ IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtConfig.SecurityKey)),
+ ClockSkew = TimeSpan.Zero
+ .AddScheme<AuthenticationSchemeOptions, ResponseAuthenticationHandler>(nameof(ResponseAuthenticationHandler), o => { });
+ #endregion 身份认证授权
+ #region Swagger Api文档
+ if (env.IsDevelopment() || appConfig.Swagger.Enable)
+ services.AddSwaggerGen(options =>
+ options.SwaggerDoc(project.Code.ToLower(), new OpenApiInfo
+ Title = project.Name,
+ Version = project.Version,
+ Description = project.Description
+ options.CustomOperationIds(apiDesc =>
+ var controllerAction = apiDesc.ActionDescriptor as ControllerActionDescriptor;
+ var api = controllerAction.AttributeRouteInfo.Template;
+ api = Regex.Replace(api, @"[\{\\\/\}]", "-") + "-" + apiDesc.HttpMethod.ToLower();
+ return api.Replace("--", "-");
+ options.ResolveConflictingActions(apiDescription => apiDescription.First());
+ string DefaultSchemaIdSelector(Type modelType)
+ var modelName = modelType.Name;
+ if (appConfig.Swagger.EnableSchemaIdNamespace)
+ var nameSpaceList = appConfig.Swagger.AssemblyNameList;
+ if (nameSpaceList?.Length > 0)
+ var nameSpace = modelType.Namespace;
+ if (nameSpaceList.Where(a => nameSpace.Contains(a)).Any())
+ modelName = modelType.FullName;
+ if (modelType.IsConstructedGenericType)
+ var prefix = modelType.GetGenericArguments()
+ .Select(DefaultSchemaIdSelector)
+ .Aggregate((previous, current) => previous + current);
+ modelName = modelName.Split('`').First() + prefix;
+ modelName = modelName.Replace("[]", "Array");
+ if (modelType.IsDefined(typeof(SchemaIdAttribute)))
+ var swaggerSchemaIdAttribute = modelType.GetCustomAttribute<SchemaIdAttribute>();
+ if (swaggerSchemaIdAttribute.SchemaId.NotNull())
+ return swaggerSchemaIdAttribute.SchemaId;
+ return swaggerSchemaIdAttribute.Prefix + modelName + swaggerSchemaIdAttribute.Suffix;
+ return modelName;
+ options.CustomSchemaIds(modelType => DefaultSchemaIdSelector(modelType));
+ //支持多分组
+ options.DocInclusionPredicate((docName, apiDescription) =>
+ var nonGroup = false;
+ var groupNames = new List<string>();
+ var dynamicApiAttribute = apiDescription.ActionDescriptor.EndpointMetadata.FirstOrDefault(x => x is DynamicApiAttribute);
+ if (dynamicApiAttribute != null)
+ var dynamicApi = dynamicApiAttribute as DynamicApiAttribute;
+ if (dynamicApi.GroupNames?.Length > 0)
+ groupNames.AddRange(dynamicApi.GroupNames);
+ var apiGroupAttribute = apiDescription.ActionDescriptor.EndpointMetadata.FirstOrDefault(x => x is ApiGroupAttribute);
+ if (apiGroupAttribute != null)
+ var apiGroup = apiGroupAttribute as ApiGroupAttribute;
+ if (apiGroup.GroupNames?.Length > 0)
+ groupNames.AddRange(apiGroup.GroupNames);
+ nonGroup = apiGroup.NonGroup;
+ return docName == apiDescription.GroupName || groupNames.Any(a => a == docName) || nonGroup;
+ string[] xmlFiles = Directory.GetFiles(AppContext.BaseDirectory, "*.xml");
+ if (xmlFiles.Length > 0)
+ foreach (var xmlFile in xmlFiles)
+ options.IncludeXmlComments(xmlFile, true);
+ var server = new OpenApiServer()
+ Url = appConfig.Swagger.Url,
+ Description = ""
+ if (appConfig.ApiUI.Footer.Enable)
+ server.Extensions.Add("extensions", new OpenApiObject
+ ["copyright"] = new OpenApiString(appConfig.ApiUI.Footer.Content)
+ options.AddServer(server);
+ if (appConfig.Swagger.EnableEnumSchemaFilter)
+ options.SchemaFilter<EnumSchemaFilter>();
+ if (appConfig.Swagger.EnableOrderTagsDocumentFilter)
+ options.DocumentFilter<OrderTagsDocumentFilter>();
+ options.OrderActionsBy(apiDesc =>
+ var order = 0;
+ var objOrderAttribute = apiDesc.CustomAttributes().FirstOrDefault(x => x is OrderAttribute);
+ if (objOrderAttribute != null)
+ var orderAttribute = objOrderAttribute as OrderAttribute;
+ order = orderAttribute.Value;
+ return (int.MaxValue - order).ToString().PadLeft(int.MaxValue.ToString().Length, '0');
+ #region 添加设置Token的按钮
+ //添加Jwt验证设置
+ options.AddSecurityRequirement(new OpenApiSecurityRequirement()
+ new OpenApiSecurityScheme
+ Reference = new OpenApiReference
+ Id = "oauth2",
+ Type = ReferenceType.SecurityScheme
+ new List<string>()
+ //统一认证
+ options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
+ Type = SecuritySchemeType.OAuth2,
+ Description = "oauth2登录授权",
+ Flows = new OpenApiOAuthFlows
+ Implicit = new OpenApiOAuthFlow
+ AuthorizationUrl = new Uri($"{appConfig.IdentityServer.Url}/connect/authorize", UriKind.Absolute),
+ TokenUrl = new Uri($"{appConfig.IdentityServer.Url}/connect/token", UriKind.Absolute),
+ Scopes = new Dictionary<string, string>
+ { "admin.server.api", "admin后端api" }
+ Id = "Bearer",
+ options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
+ Description = "Value: Bearer {token}",
+ Name = "Authorization",
+ In = ParameterLocation.Header,
+ Type = SecuritySchemeType.ApiKey
+ #endregion 添加设置Token的按钮
+ #endregion Swagger Api文档
+ #region 操作日志
+ if (appConfig.Log.Operation)
+ services.AddScoped<ILogHandler, LogHandler>();
+ #endregion 操作日志
+ #region 控制器
+ void mvcConfigure(MvcOptions options)
+ //options.Filters.Add<ControllerExceptionFilter>();
+ options.Filters.Add<ValidateInputFilter>();
+ if (appConfig.Validate.Login || appConfig.Validate.Permission)
+ options.Filters.Add<ValidatePermissionAttribute>();
+ //在具有较高的 Order 值的筛选器之前运行 before 代码
+ //在具有较高的 Order 值的筛选器之后运行 after 代码
+ if (appConfig.DynamicApi.FormatResult)
+ options.Filters.Add<FormatResultFilter>(20);
+ options.Filters.Add<ControllerLogFilter>(10);
+ //禁止去除ActionAsync后缀
+ //options.SuppressAsyncSuffixInActionNames = false;
+ //API分组约定
+ options.Conventions.Add(new ApiGroupConvention());
+ var mvcBuilder = appConfig.AppType switch
+ AppType.Controllers => services.AddControllers(mvcConfigure),
+ AppType.ControllersWithViews => services.AddControllersWithViews(mvcConfigure),
+ AppType.MVC => services.AddMvc(mvcConfigure),
+ _ => services.AddControllers(mvcConfigure)
+ foreach (var assembly in assemblies)
+ services.AddValidatorsFromAssembly(assembly);
+ services.AddFluentValidationAutoValidation();
+ mvcBuilder.AddNewtonsoftJson(options =>
+ //忽略循环引用
+ options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
+ //使用驼峰 首字母小写
+ options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
+ //设置时间格式
+ options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
+ .AddControllersAsServices();
+ if (appConfig.Swagger.EnableJsonStringEnumConverter)
+ mvcBuilder.AddJsonOptions(options => options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));
+ _hostAppOptions?.ConfigureMvcBuilder?.Invoke(mvcBuilder, hostAppContext);
+ #endregion 控制器
+ services.AddHttpClient();
+ _hostAppOptions?.ConfigureServices?.Invoke(hostAppContext);
+ #region 缓存
+ var cacheConfig = ConfigHelper.Get<CacheConfig>("cacheconfig", env.EnvironmentName);
+ if (cacheConfig.Type == CacheType.Redis)
+ var redis = new RedisClient(cacheConfig.Redis.ConnectionString)
+ Serialize = JsonConvert.SerializeObject,
+ Deserialize = JsonConvert.DeserializeObject
+ services.AddSingleton(redis);
+ services.AddSingleton<ICacheTool, RedisCacheTool>();
+ services.AddSingleton<IDistributedCache>(new DistributedCache(redis));
+ services.AddMemoryCache();
+ services.AddDistributedMemoryCache();
+ services.AddSingleton<ICacheTool, MemoryCacheTool>();
+ #endregion 缓存
+ #region IP限流
+ if (appConfig.RateLimit)
+ services.AddIpRateLimit(configuration, cacheConfig);
+ #endregion IP限流
+ //阻止NLog接收状态消息
+ services.Configure<ConsoleLifetimeOptions>(opts => opts.SuppressStatusMessages = true);
+ //性能分析
+ if (appConfig.MiniProfiler)
+ services.AddMiniProfiler();
+ services.AddDynamicApi(options =>
+ options.FormatResult = appConfig.DynamicApi.FormatResult;
+ options.FormatResultType = typeof(ResultOutput<>);
+ _hostAppOptions?.ConfigureDynamicApi?.Invoke(options);
+ //oss文件上传
+ services.AddOSS();
+ //滑块验证码
+ services.AddSlideCaptcha(configuration, options =>
+ options.StoreageKeyPrefix = CacheKeys.Captcha;
+ services.AddScoped<ISlideCaptcha, SlideCaptcha>();
+ _hostAppOptions?.ConfigurePostServices?.Invoke(hostAppContext);
+ /// 配置中间件
+ /// <param name="app"></param>
+ private void ConfigureMiddleware(WebApplication app, IWebHostEnvironment env, IConfiguration configuration, AppConfig appConfig)
+ var hostAppMiddlewareContext = new HostAppMiddlewareContext()
+ App = app,
+ _hostAppOptions?.ConfigurePreMiddleware?.Invoke(hostAppMiddlewareContext);
+ //异常处理
+ app.UseMiddleware<ExceptionMiddleware>();
+ //IP限流
+ app.UseIpRateLimiting();
+ app.UseMiniProfiler();
+ //静态文件
+ app.UseDefaultFiles();
+ app.UseStaticFiles();
+ app.UseUploadConfig();
+ //路由
+ app.UseRouting();
+ //跨域
+ app.UseCors(AdminConsts.RequestPolicyName);
+ //认证
+ app.UseAuthentication();
+ //授权
+ app.UseAuthorization();
+ //登录用户初始化数据权限
+ if (appConfig.Validate.DataPermission)
+ app.Use(async (ctx, next) =>
+ var user = ctx.RequestServices.GetRequiredService<IUser>();
+ if (user?.Id > 0)
+ var userService = ctx.RequestServices.GetRequiredService<IUserService>();
+ await userService.GetDataPermissionAsync();
+ await next();
+ //配置端点
+ app.MapControllers();
+ _hostAppOptions?.ConfigureMiddleware?.Invoke(hostAppMiddlewareContext);
+ var routePrefix = appConfig.ApiUI.RoutePrefix;
+ if (!appConfig.ApiUI.Enable && routePrefix.IsNull())
+ routePrefix = appConfig.Swagger.RoutePrefix;
+ var routePath = routePrefix.NotNull() ? $"{routePrefix}/" : "";
+ app.UseSwagger(optoins =>
+ optoins.RouteTemplate = routePath + optoins.RouteTemplate;
+ app.UseSwaggerUI(options =>
+ options.RoutePrefix = appConfig.Swagger.RoutePrefix;
+ options.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.None);//折叠Api
+ //options.DefaultModelsExpandDepth(-1);//不显示Models
+ options.InjectJavascript("/swagger/mini-profiler.js?v=4.2.22+2.0");
+ options.InjectStylesheet("/swagger/mini-profiler.css?v=4.2.22+2.0");
+ //使用健康检查
+ if (appConfig.HealthChecks.Enable)
+ app.MapHealthChecks(appConfig.HealthChecks.Path, new HealthCheckOptions()
+ Predicate = _ => true,
+ ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
+ _hostAppOptions?.ConfigurePostMiddleware?.Invoke(hostAppMiddlewareContext);
@@ -0,0 +1,37 @@
+using Microsoft.AspNetCore.Authorization;
+using ZhonTai.Admin.Domain.User;
+using ZhonTai.Admin.Services.DiTuiAPI.Dto;
+namespace ZhonTai.Admin.Services.DiTuiAPI
+ /// 前端接口
+ [DynamicApi(Area = AdminConsts.DiTuiName)]
+ public class DiTuiAPIService : BaseService, IDiTuiAPIService, IDynamicApi
+ private readonly IUserRepository _userRepository;
+ public DiTuiAPIService(IUserRepository userRepository)
+ _userRepository = userRepository;
+ [HttpPost]
+ [AllowAnonymous]
+ [NoOprationLog]
+ public Task<dynamic> LoginAsync(LoginInput input)
+ throw new NotImplementedException();
+using System;
+namespace ZhonTai.Admin.Services.DiTuiAPI.Dto
+ public class LoginInput
+ public string mobile { get; set; }
+ public string pwd { get; set; }
@@ -0,0 +1,15 @@
+using ZhonTai.Admin.Services.Auth.Dto;
+ public interface IDiTuiAPIService
+ Task<dynamic> LoginAsync(LoginInput input);
@@ -1015,6 +1015,11 @@
允许所有源访问策略
</summary>
</member>
+ <member name="F:ZhonTai.Admin.Core.Consts.AdminConsts.DiTuiName">
+ <summary>
+ 地推
+ </summary>
+ </member>
<member name="T:ZhonTai.Admin.Core.Consts.CacheKeys">
<summary>
缓存键
@@ -1290,6 +1295,36 @@
</remarks>
<returns></returns>
+ <member name="T:ZhonTai.Admin.Core.DiTuiHost">
+ 宿主应用
+ <member name="M:ZhonTai.Admin.Core.DiTuiHost.Run(System.String[])">
+ 运行应用
+ <param name="args"></param>
+ <member name="M:ZhonTai.Admin.Core.DiTuiHost.ConfigureServices(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.AspNetCore.Hosting.IWebHostEnvironment,Microsoft.Extensions.Configuration.IConfiguration,ZhonTai.Common.Helpers.ConfigHelper,ZhonTai.Admin.Core.Configs.AppConfig)">
+ 配置服务
+ <param name="services"></param>
+ <param name="env"></param>
+ <param name="configuration"></param>
+ <param name="configHelper"></param>
+ <param name="appConfig"></param>
+ <member name="M:ZhonTai.Admin.Core.DiTuiHost.ConfigureMiddleware(Microsoft.AspNetCore.Builder.WebApplication,Microsoft.AspNetCore.Hosting.IWebHostEnvironment,Microsoft.Extensions.Configuration.IConfiguration,ZhonTai.Admin.Core.Configs.AppConfig)">
+ 配置中间件
+ <param name="app"></param>
<member name="P:ZhonTai.Admin.Core.Dto.CreateFreeSqlTenantDto.DbKey">
数据库注册键
@@ -4942,6 +4977,11 @@
数据字典接口
+ <member name="T:ZhonTai.Admin.Services.DiTuiAPI.DiTuiAPIService">
+ 前端接口
<member name="T:ZhonTai.Admin.Services.Document.DocumentService">
文档服务