Compare commits

...

983 Commits

Author SHA1 Message Date
Argo-Lenovo e4b2f70ae3 feat: 增加任务日志滚动条样式 2022-01-29 18:39:54 +08:00
Argo-Lenovo 41b0dce852 feat: 任务日志增加最大数功能 2022-01-29 16:03:57 +08:00
Argo-Lenovo 188470bc1d feat: 增加任务日志功能 2022-01-29 15:26:44 +08:00
Argo-Lenovo 92e3aa4c35 feat: 实现缓存清楚逻辑 2022-01-29 14:34:00 +08:00
Argo-Tianyi 5e136d1815 fix: 修复 Client 工程编译报错问题 2022-01-28 12:24:49 +08:00
Argo-Tianyi 7506665052 feat: 登录首页增加切换功能 2022-01-27 16:00:21 +08:00
Argo-Tianyi fc2f0e84b2 feat: 增加 AdminLoginFooter 组件用于切换登录页 2022-01-27 15:43:29 +08:00
Argo-Tianyi 6ba2ef3a96 feat: 增加码云高仿登录界面 2022-01-27 15:14:09 +08:00
Argo-Tianyi 2674c6278d feat: 增加登录首页切换功能 2022-01-27 13:42:48 +08:00
Argo-Tianyi 6e881fbff4 feat: 登录首页配置增加顺序 2022-01-27 13:31:59 +08:00
Argo-Tianyi 135f0615f5 refactor: 改造登录首页组件 2022-01-27 13:31:37 +08:00
Argo-Tianyi a53c0cd791 feat: 增加更新 DisplayName 逻辑 2022-01-27 12:53:36 +08:00
Argo-Tianyi 71d5ff0a24 chore: 更新依赖包 2022-01-27 12:53:18 +08:00
Argo-Tianyi acf4ed75dc feat: 用户服务增加缓存 2022-01-27 11:15:59 +08:00
Argo-Tianyi b6ddd637db feat: 用户服务增加缓存 2022-01-27 11:02:03 +08:00
Argo-Tianyi 383bec6e20 feat: 应用程序服务增加缓存 2022-01-27 10:51:59 +08:00
Argo-Tianyi 3f0839b12c feat: 角色服务增加缓存 2022-01-27 10:49:52 +08:00
Argo-Tianyi 3c99d1e76a feat: NavigationService 增加缓存 2022-01-27 10:45:34 +08:00
Argo-Tianyi 195802e87f refactor: 格式化代码 2022-01-27 01:45:38 +08:00
Argo-Tianyi 063390e255 refactor: 组服务增加缓存 2022-01-27 01:45:19 +08:00
Argo-Tianyi a987e8eda3 refactor: 角色服务增加缓存 2022-01-27 01:44:58 +08:00
Argo-Tianyi 919f543cbd chore: 更改命名空间 2022-01-27 01:15:32 +08:00
Argo-Tianyi 617c72771d revert: 移除 swagger 功能 2022-01-27 01:15:12 +08:00
Argo-Tianyi 82cc6befaa fix: 返回前台防止多次跳转 2022-01-27 00:18:11 +08:00
Argo-Tianyi 4035c96c83 feat: 更新 ICacheManager 服务 2022-01-26 20:47:07 +08:00
Argo-Tianyi 7465b7f890 fix: 修复首页一直跳转问题 2022-01-26 20:46:35 +08:00
Argo-Tianyi 5c7b29ee04 refactor: 格式化代码 2022-01-26 19:46:11 +08:00
Argo-Tianyi a946424275 chore: 更新命名空间 2022-01-26 19:37:07 +08:00
Argo-Tianyi 8de82f119f chore: 增加 LGPL 协议声明 2022-01-26 17:57:38 +08:00
zhangpeihang 979361b20c fix: 修改sql 2022-01-26 16:58:06 +08:00
Argo-Tianyi 540694a4e1 refactor: 获得应用程序首页逻辑增加 Define 条件 2022-01-26 16:39:12 +08:00
Argo-Tianyi 8b8d8d5111 refactor: 精简客户端数据业务层代码 2022-01-26 16:31:01 +08:00
zhangpeihang 58c4d6d5b2 feat: 配置实体 2022-01-26 15:40:33 +08:00
zhangpeihang 889f03189d refactor: 重构服务 2022-01-26 15:40:21 +08:00
zhangpeihang 7eb06c1df6 feat: 开启 EFCore 服务 2022-01-26 15:40:04 +08:00
zhangpeihang a549d87acd feat: 添加 RoleApp 中间表 2022-01-26 15:39:44 +08:00
zhangpeihang 88268b450b feat: 添加 Trace 服务 2022-01-26 15:39:09 +08:00
zhangpeihang 51ff64fb2a feat: 添加 Exception 服务 2022-01-26 15:38:35 +08:00
zhangpeihang 25197d9cb3 refactor: 修改 Dict 服务 2022-01-26 15:38:07 +08:00
zhangpeihang 3280d00472 feat: 添加 App 服务 2022-01-26 15:37:47 +08:00
zhangpeihang 5dc6bc066a chore: web 工程依赖 EFCore 2022-01-26 15:37:21 +08:00
zhangpeihang d09be53f2b refactor: 重构中间表 2022-01-26 15:36:55 +08:00
zhangpeihang b25d6df9a7 feat: 增加缓存服务 2022-01-26 15:36:35 +08:00
zhangpeihang 0df75c019f chore: 升级 bb 组件 2022-01-26 13:48:46 +08:00
zhangpeihang 2fb1e406d6 chore: 添加缓存依赖 2022-01-26 13:39:53 +08:00
zhangpeihang 1de338c6b7 refactor: 重构 EFCore 2022-01-26 13:39:39 +08:00
Argo-Tianyi 8c102946d7 feat: 增加获取后台地址方法 2022-01-25 00:40:15 +08:00
Argo-Tianyi 331f034d9b refactor: 移动 Context 初始化到 MainLayout 组件中 2022-01-25 00:39:47 +08:00
Argo-Tianyi 10e5b1d26c feat: 后台应用通过当前请求拼接前台地址 2022-01-25 00:08:29 +08:00
Argo-Tianyi 1a896cf994 refactor: 精简代码 2022-01-25 17:03:04 +08:00
Argo-Tianyi 2107b70d94 refactor: 根据最新依赖包更新 OnUpdate 回调 2022-01-23 21:20:08 +08:00
Argo-Tianyi f4490c3395 feat: 增加地理位置定位功能 2022-01-23 20:50:59 +08:00
Argo-Tianyi 50bc67c5d8 feat: 更新 IDict 接口 2022-01-24 01:35:43 +08:00
Argo-Tianyi 97836b447f chore: 更新依赖包 2022-01-24 00:07:28 +08:00
Argo-Tianyi 9d2c3dfdac feat: 网站设置触发 MainLayout 更新 UI 2022-01-24 02:00:26 +08:00
Argo-Tianyi 1ff9891331 fix: 修复前台用户头像后台链接 2022-01-24 01:13:29 +08:00
Argo-Tianyi 25fae681ae refactor: 移除字典表中菜单配置项 2022-01-24 01:06:43 +08:00
Argo-Tianyi e14b053c72 chore: 格式化文档更新配置文件 2022-01-24 00:48:34 +08:00
Argo-Tianyi 24fe9e7d35 feat: 增加系统上下文服务 2022-01-24 00:48:09 +08:00
Argo-Tianyi ebf60eabf7 feat: 更新获取菜单脚本 2022-01-24 00:47:46 +08:00
Argo-Tianyi b4aea5974c chore: 更新依赖 2022-01-24 00:47:19 +08:00
Argo-Tianyi 65756b458c db: 更新数据库 2022-01-24 00:46:37 +08:00
Argo-Tianyi 8536fadf2c feat: 移除转换器使用 PetaPoco 扩展程序集内置转化器 2022-01-24 00:46:22 +08:00
Argo-Tianyi f0a3c85f43 chore: 更新依赖包 2022-01-23 13:15:02 +08:00
Argo-Tianyi 3898d0c7d5 refactor: 更新路由大小写问题 2022-01-23 12:53:38 +08:00
Argo-Tianyi 434e7ab82b feat: 根据最新组件更改 SortList 为 SortString 2022-01-23 12:49:51 +08:00
Argo-Tianyi 0d609c41b0 feat: 登录日志增加默认 LoginTime 倒序排序功能 2022-01-21 12:30:16 +08:00
Argo-Tianyi d7b7bef4c2 chore: 移除 Tasks 组件 DEBUG 模式下日志输出问题 2022-01-21 12:25:35 +08:00
Argo-Tianyi 49ca3503eb fix: 修复菜单维护中图标垂直不居中问题 2022-01-21 12:25:14 +08:00
Argo-Tianyi 41e94ca677 feat: 增加 Debug 模式下禁用 Caching 设置 2022-01-21 12:24:52 +08:00
Argo-Tianyi 7411047ea3 refactor: 更新网站设置配置项顺序 2022-01-21 12:08:26 +08:00
Argo-Tianyi 71956f9a36 doc: 更新客户端配置项顺序 2022-01-21 12:08:09 +08:00
Argo-Tianyi 43fe7cf209 refactor: 健康检查数据显示重置 2022-01-21 12:00:33 +08:00
Argo-Tianyi d6d5ec0ee8 chore: 更新依赖包 2022-01-21 08:56:49 +08:00
Argo-Tianyi 32bad4adcb fix: 修复新建前台应用报错问题 2022-01-20 20:28:03 +08:00
Argo-Tianyi 1bf2e4141c feat: 更新网站设置前台应用配置功能 2022-01-20 20:25:15 +08:00
Argo-Tianyi e6d5cacefa feat: 增加 ClientApp 实体类 2022-01-20 20:24:48 +08:00
Argo-Tianyi f68ec04269 feat: 更新地理位置定位器设置 2022-01-20 15:26:57 +08:00
Argo-Tianyi 18ace08ea9 feat: 菜单行内分配按钮增加权限 2022-01-20 14:27:51 +08:00
Argo-Tianyi 658d616cfb feat: 健康检查增加检查中状态 2022-01-20 13:50:26 +08:00
Argo-Tianyi a602539ec5 feat: 重构代码 2022-01-20 13:22:25 +08:00
Argo-Tianyi 08b02e9579 feat: 重构 Block 授权逻辑 2022-01-20 13:17:46 +08:00
Argo-Tianyi 3e5de3e936 feat: 网站设置增加时否开启默认程序 2022-01-20 13:09:54 +08:00
Argo-Tianyi f0e3e60514 feat: 用户维护使用 AdminTable 组件 2022-01-20 13:09:19 +08:00
Argo 4182d86fd4 !101 feat(#I4RK0W): 合并分支
* Merge branch 'dev' into dev-frontApp
* fix: 完成保存默认应用功能
* refactor: 修改前台字典表方法名称
* refactor: 修改 Client 设置方法名称
* refactor: 调整前台设置ui
* refactor: 重构 Client 弹窗
* refactor: 重构添加 Client 功能
* feat: 添加 Client dialog 组件
* feat: 添加 Client 列表组件
* feat: 前台应用相关方法
2022-01-20 03:36:29 +00:00
Argo-Tianyi 36aa19dd6e feat: 增加登录帮助类用于获取默认导航页面 2022-01-20 10:52:11 +08:00
Argo-Tianyi f18229d58c refactor: 重构 GetHomeUrlByAppId 接口 2022-01-20 10:51:47 +08:00
zhangpeihang d77d4786aa feat: 用户页面添加按钮权限 2022-01-20 00:20:03 +08:00
zhangpeihang 503c1a4a2b feat: 生成 xml 文档 2022-01-20 00:16:49 +08:00
zhangpeihang 554614aa4a feat: 添加 swagger 配置 2022-01-20 00:16:48 +08:00
Argo-Tianyi 84e4c68413 feat: 增加地理位置定位功能 2022-01-19 15:41:43 +08:00
zhangpeihang 3a0525f11f feat: 基础 table 是否显示添加删除编辑按钮 2022-01-19 15:08:16 +08:00
zhangpeihang cacea459c1 feat: 添加 Card 是否显示 2022-01-19 15:07:39 +08:00
zhangpeihang 267d0e68bd feat: 添加代码块是否授权方法 2022-01-19 15:06:57 +08:00
zhangpeihang 05f0d1d344 db: 前台应用改为 appid 做为字典表分类 2022-01-19 10:39:15 +08:00
zhangpeihang 6840c1d851 refactor: 更新删除前台应用方法 2022-01-19 10:33:30 +08:00
zhangpeihang 35ed1f654f feat: 前台应用相关方法 2022-01-19 10:31:37 +08:00
Argo-Tianyi 6657c29c79 fix: 更新 Converter 使枚举转变成 Int 2022-01-18 20:02:00 +08:00
Argo-Tianyi f12b2d254a feat: 更新 Client 工程逻辑 2022-01-18 20:00:45 +08:00
Argo-Tianyi 18cbde111b feat: 访问日志路径使用相对路径 2022-01-17 21:02:14 +08:00
Argo-Tianyi e484961576 chore: 更新依赖 2022-01-17 21:01:51 +08:00
Argo-Tianyi df6098f1dc feat: 增加访问日志查询界面功能 2022-01-17 19:08:40 +08:00
Argo-Tianyi 7fd4a83b52 feat: 增加访问日志功能 2022-01-17 12:34:20 +08:00
Argo-Tianyi 2892a2780f feat: 增加访问日志 2022-01-17 12:33:46 +08:00
Argo-Tianyi 2a7c42071a refactor: 增加路由 2022-01-16 17:16:20 +08:00
Argo-Tianyi b04d45b624 refactor: 增加操作日志页面 2022-01-16 17:14:33 +08:00
Argo-Tianyi 09146b9acf feat: 增加 SQL 日志页面 2022-01-16 17:13:06 +08:00
Argo-Tianyi f5bc782097 feat: 增加访问日志页面 2022-01-16 17:11:27 +08:00
Argo-Tianyi 23e43ff248 refactor: 更新登录日志结果改用 Tag 组件 2022-01-16 12:21:10 +08:00
Argo-Tianyi 95bec59886 feat: 重构登录日志 2022-01-15 13:18:07 +08:00
Argo-Tianyi 4d98083434 feat: 增加客户端信息中间件 2022-01-15 13:07:55 +08:00
Argo-Tianyi 9f3777209c feat: 更新 ILogin 接口 2022-01-15 13:06:59 +08:00
Argo-Tianyi b8078fd505 feat: 移除对 Longbow.Web 依赖 2022-01-15 11:51:22 +08:00
Argo-Tianyi d0860e57a5 feat: 增加 IPAddress 扩展 2022-01-15 11:51:02 +08:00
Argo-Tianyi 22f5907bc4 fix: 修复编译错误 2022-01-15 00:35:32 +08:00
Argo-Tianyi c19cd5ca85 refactor: 尝试使用 Token 解决依赖问题改造 CacheManager 接口 2022-01-15 00:17:05 +08:00
zhangpeihang 943c620c55 feat: 添加登录日志自定义搜索 2022-01-15 00:07:26 +08:00
Argo-Tianyi b6cd8ddcdd refactor: 健康检查移除缓存 2022-01-14 23:36:19 +08:00
zhangpeihang d60bdd3bc8 feat: 添加登陆页面 2022-01-14 23:38:20 +08:00
zhangpeihang b391d109cd feat: 记录登录日志 2022-01-14 23:38:20 +08:00
zhangpeihang 5aab0908c4 feat: 添加日志接口 2022-01-14 23:38:19 +08:00
zhangpeihang aa11b1fa96 chore: 添加依赖 2022-01-14 23:38:18 +08:00
zhangpeihang 53a8eb614f refactor: 修改文件名称 2022-01-14 23:38:17 +08:00
Argo-Tianyi 0e64331bc3 refactor: 重构代码删除 CacheKeyChangeToken 2022-01-14 23:30:51 +08:00
Argo-Tianyi 8ec06d9199 refactor: 更改 IDict 方法为 ExistsAppId 2022-01-14 23:30:18 +08:00
zhangpeihang e7b8a9ef51 feat: 添加前台应用功能,未完成 2022-01-14 22:37:34 +08:00
Argo-Tianyi 7e66b50b79 db: 更新数据库 2022-01-14 21:35:20 +08:00
Argo-Tianyi 61ac109d2e feat: 准备实现 IChangeToken 类 2022-01-14 21:34:52 +08:00
Argo-Tianyi eb67bbf26e refacot: 精简代码 2022-01-14 21:34:31 +08:00
Argo-Tianyi 66f803c73b refactor: 更新删除头像提示 2022-01-14 18:19:10 +08:00
Argo-Tianyi a4599b835e refactor: 重构个人中心头像上传 2022-01-14 18:12:09 +08:00
zhangpeihang fb0d42b02e feat: 添加日志缓存功能 2022-01-14 13:36:45 +08:00
zhangpeihang 5bdb883947 feat: 增加地理位置设置 2022-01-14 11:41:55 +08:00
zhangpeihang cdeee4b3b2 feat: 增加自动锁屏设置 2022-01-14 10:53:15 +08:00
zhangpeihang 2a52d139a6 chore: 升级依赖 2022-01-14 10:52:52 +08:00
zhangpeihang 74cf29ad13 fix: 修复类型转换错误 2022-01-14 10:39:38 +08:00
zhangpeihang 86640d3b64 feat: 添加自动锁屏功能 2022-01-14 10:38:11 +08:00
zhangpeihang fcaa0244c2 feat: 添加登陆方式设置 2022-01-14 10:17:56 +08:00
zhangpeihang 7b2b7490fa feat: 增加网站功能设置 2022-01-14 09:49:09 +08:00
Argo-Tianyi 16ed058850 feat: 个人中心头像上传功能 2022-01-13 15:32:48 +08:00
Argo-Tianyi 926cd75cf6 feat: 完成个人中心网站样式功能 2022-01-13 13:46:28 +08:00
Argo-Tianyi 7c2935bb1b feat: 个人中心完成保存显示名称与更改密码功能 2022-01-13 13:37:43 +08:00
Argo-Tianyi 8b280cef15 refactor: 密码框改用 BootstrapPassword 组件 2022-01-13 12:44:48 +08:00
Argo-Tianyi d683f392f2 feat: 使用新的缓存组件 2022-01-13 10:56:24 +08:00
Argo-Tianyi 4695b8e17e feat: 更新缓存工程逻辑 2022-01-13 10:55:57 +08:00
Argo-Tianyi 01c2857be6 chore: Sugar 更新依赖包 2022-01-13 10:55:40 +08:00
Argo-Tianyi 5bd40bd487 fix: 更新 FreeSql 接口实现修复报错问题 2022-01-13 10:55:17 +08:00
Argo-Tianyi 0df8267cb2 feat: 增加缓存层 2022-01-12 23:25:08 +08:00
Argo-Tianyi 1317b2828f chore: 增加数据服务实现层 2022-01-12 22:41:44 +08:00
Argo-Tianyi 663580b8ae refactor: 移除基类 2022-01-12 22:41:15 +08:00
Argo-Tianyi 92f615c730 feat: 完成个人中心默认应用设置 2022-01-12 13:18:34 +08:00
Argo-Tianyi e79b2d3007 doc: 更新提示信息 2022-01-12 12:15:15 +08:00
Argo-Tianyi e148aa5c57 chore: 更新配置 2022-01-12 12:14:21 +08:00
Argo-Tianyi 57537d50d3 feat: 增加默认应用设置功能 2022-01-12 12:13:05 +08:00
Argo e25fecb164 !99 feat: 增加默认应用功能
* chore: 更新数据服务为 PetaPoco
* feat: 增加默认应用配置 api
* feat: 重命名服务
2022-01-12 03:22:42 +00:00
Argo-Tianyi 5096910ba3 refactor: 代码重构 2022-01-12 12:56:15 +08:00
Argo-Tianyi eb3ce91948 fix: 修复保存方法错误 2022-01-12 12:56:02 +08:00
Argo-Tianyi cf164c57c7 feat: 增加 SqlSugar ORM 示例 2022-01-12 12:55:43 +08:00
Argo-Tianyi 81ce2b70e0 fix: 修复脚本错误 2022-01-11 12:30:46 +08:00
Argo-Tianyi bb6aa0723e doc: 格式化代码 2022-01-11 10:09:36 +08:00
Argo-Tianyi 76fe5d7fcd feat: 更新登录时获取默认应用逻辑 2022-01-11 10:05:14 +08:00
Argo-Lenovo f712b0ab0e feat: 显示缓存 Clear 方法 2022-01-10 19:09:42 +08:00
Argo-Lenovo b281d05c5d chore: 重命名注入服务扩展方法 2022-01-10 19:09:22 +08:00
Argo-Tianyi bbf51ea3f4 feat: 增加异步缓存方法 2022-01-10 15:28:40 +08:00
Argo-Tianyi 70e42a8268 chore: 更新依赖包 2022-01-10 14:44:56 +08:00
Argo-Tianyi 9720ae85ef feat: 增加 ICacheManager 缓存管理类接口 2022-01-10 14:44:38 +08:00
Argo-Tianyi 78078e6d6f refactor: 重构保存类方法统一使用 SaveDict 方法 2022-01-10 13:14:49 +08:00
Argo-Tianyi 614d3d6b43 feat: 重构扩展类命名空间 2022-01-10 13:13:24 +08:00
Argo-Tianyi 19a2123cee feat: 增加返回首页菜单逻辑 2022-01-10 02:46:27 +08:00
Argo-Tianyi 11984e20e7 feat: 客户端登录后直接返回本应用 2022-01-10 01:54:15 +08:00
Argo-Tianyi c00895a848 db: 更改系统首页为系统配置 2022-01-10 01:23:32 +08:00
Argo-Tianyi fae54caea1 feat: 健康检查移除多选与显示 Empty 空数据 2022-01-09 20:45:46 +08:00
Argo-Tianyi b19a9cb955 chore: 更新依赖包到 6.2.6 2022-01-09 20:45:17 +08:00
Argo-Tianyi 78ab4ad0d0 refactor: 移除 UseInjectDataService 参数 2022-01-09 12:05:40 +08:00
Argo-Tianyi 4436a74b60 chore: 更新依赖包 6.2.4 2022-01-09 12:05:12 +08:00
Nine 5ee01d88be !98 feat(#I4PYQ2): add freesql support
* feat: 增加 PageIf 扩展精简代码
* feat: 支持高级搜索与自定义搜索
* feat: 完善菜单搜索与过滤功能
* chore: 增加 xml 注释
* feat: 菜单维护界面开启二级菜单
* chore: 更新依赖包
* feat: 健康检查单独开启 ShowLoading
* refactor: 格式化代码
* Merge branch 'master' into dev-blazor-freesql
* refactor: 更新代码注释
* refactor: 修复编译错误
* feat: 改用 petapoco 服务
* fix: 修复合并代码错误
* feat: 增加异常日志字段排序
* Merge remote-tracking branch 'origin/master' into dev-blazor-freesql
* fix: 修复插入命令并未执行
* feat: 添加 Exception 服务
* feat: 添加 Exception 服务
* feat: 添加 App 服务
* feat: 添加 Navigation 服务
* feat: 添加 Group 和 Role 服务
* feat: 添加中间表实体
* feat: 添加用户功能
* feat: 完善用户服务
* feat: 完善字典服务
* feat: 增加 GetUserByUserName 实现
* chore: 更新配置
* feat: 增加实体类映射
* feat: 移除 LongExtensions 扩展方法
* feat: 完善数据服务方法
* chore: 格式化代码
* refactor: 优化注册服务接口
* Merge remote-tracking branch 'origin/master' into dev-blazor-freesql
* feat: 初始化 FreeSql
2022-01-08 18:05:59 +00:00
Argo-Tianyi 57f78cc7f5 refactor: 更改扩展类为私有类 2022-01-09 00:55:44 +08:00
Argo-Tianyi d46602b4f7 chore: 更新依赖包 2022-01-09 00:40:42 +08:00
Argo-Tianyi 87438838b5 feat: 关闭健康检查工具栏 2022-01-07 13:05:43 +08:00
Argo-Tianyi 97eeba961a feat: 重构 AdminTable 内置编辑模板 2022-01-07 12:56:17 +08:00
Argo-Tianyi 88fbd32ee8 fix: 修复枚举类型入库操作转为 int 2022-01-07 12:29:08 +08:00
Argo-Tianyi d381ef1e51 fix: 修复 Client 工程编译错误 2022-01-07 12:28:44 +08:00
Argo-Lenovo b32e28ca2c feat: 移除 LongExtensions 扩展方法 2022-01-07 02:15:34 +08:00
Argo-Lenovo 15007cd2fc refactor: 优化 PetaPoco 数据服务接口 2022-01-07 01:14:06 +08:00
Argo-Tianyi 913f4db051 feat: 增加 Header 图标显示功能 2022-01-06 09:31:01 +08:00
Argo-Tianyi 06b3368a9f feat: 增加 Where 关键字 2022-01-06 09:00:15 +08:00
Argo-Tianyi bdae9766dc feat: 更新手机用户首次登录逻辑 2022-01-06 08:54:21 +08:00
Argo-Tianyi 0d0443fddb feat: 重构 AdminLogin 组件 2022-01-06 08:53:59 +08:00
Argo-Tianyi e1a6e7379d feat: 拆分登录组件 2022-01-06 06:45:10 +08:00
Argo-Tianyi 18bf30fe83 feat: 高级搜索条件使用 Equal 2022-01-06 04:10:38 +08:00
Argo-Tianyi c28ef26e8e feat: 菜单维护增加自定义高级搜索功能 2022-01-06 03:54:55 +08:00
Argo-Tianyi 808dc444b1 feat: 用户维护增加给定默认授权功能 2022-01-06 02:45:05 +08:00
Argo-Tianyi 4cb59e5d03 feat: 新建用户时增加判断 2022-01-06 01:54:30 +08:00
Argo-Tianyi f9e4efd84e feat: 微调登录界面 UI 采用客户端 js 验证后期移动到组件内 2022-01-06 01:06:47 +08:00
Argo-Tianyi 4e3f7cfab1 feat: 增加用户名密码错误提示功能 2022-01-05 23:05:05 +08:00
Argo-Tianyi f8870109c3 feat: 增加用户登录名称验证 2022-01-05 08:26:40 +08:00
Argo-Tianyi e0fd45f15a feat: 增加高级搜索支持 2022-01-05 05:50:48 +08:00
Argo-Tianyi f5f0a7b735 feat: 程序异常增加默认排序规则 2022-01-05 04:10:56 +08:00
Argo-Tianyi a7fe25c67d feat: 菜单用户增加默认排序规则 2022-01-05 04:10:39 +08:00
Argo-Tianyi 0323b5ca3b feat: DEBUG 模式下自动填充登录账号与密码 2022-01-05 03:47:06 +08:00
Argo-Tianyi ecff092ea4 feat: 更新依赖包支持多列排序 2022-01-05 03:46:41 +08:00
Argo-Tianyi 09de55a641 refactor: 格式化代码消除警告信息 2022-01-05 03:46:04 +08:00
Argo-Tianyi 7ce614554f chore: 更新依赖包 2022-01-04 08:33:40 +08:00
Argo-Tianyi 0e81c0e257 feat: 健康检查增加更新按钮 2022-01-04 08:21:09 +08:00
Argo-Tianyi 3ebfe8cd56 feat: 完善 Task 任务管理功能 2022-01-04 08:05:33 +08:00
Argo-Tianyi 23dd2d05df feat: 更新 TaskEditor 组件 2022-01-04 08:04:55 +08:00
Argo-Tianyi 794d90731a doc: 格式化文档 2022-01-04 04:04:20 +08:00
Argo-Tianyi 8e4066e6e2 feat: 健康检查结束后更新总时长与状态 2022-01-04 02:16:14 +08:00
Argo-Tianyi 1ddef32a83 feat: 增加 LogoutLink 组件 2022-01-04 01:58:42 +08:00
Argo-Tianyi cbb75e58d8 doc: 增加关于页面 2022-01-04 01:58:23 +08:00
Argo-Lenovo d3f73e62b1 feat: 增加折行 2022-01-03 12:29:45 +08:00
Argo-Lenovo 56733878da feat: 格式化文档 2022-01-03 12:27:22 +08:00
Argo-Lenovo b062a01afb feat: 更新数据为空时逻辑 2022-01-03 11:41:49 +08:00
Argo-Lenovo b51782e796 feat: 微调程序异常界面移除固定表头设置 2022-01-03 10:59:10 +08:00
Argo-Lenovo b18bc89175 feat: 任务管理设置为不固定表头 2022-01-03 10:54:31 +08:00
Argo-Tianyi 4b707e9bc4 chore: 更新 AdminService 到 Core 工程 Client 复用 2022-01-03 10:17:25 +08:00
Argo-Lenovo f87efc7c20 doc: 更改类名 2022-01-03 02:39:46 +08:00
Argo-Lenovo 9612e48bbb feat: 完善健康检查界面 2022-01-03 02:31:07 +08:00
Argo-Lenovo 383eaaf14e feat: 增加 HealthCheckDetails 组件 2022-01-03 02:30:45 +08:00
Argo-Tianyi c633dd4a81 feat: 增加健康检查页面 2022-01-03 00:15:56 +08:00
Argo-Tianyi 490c8f87eb refactor: 重构 GiteeClient 2022-01-03 00:15:30 +08:00
Argo-Tianyi 0bf9f2a4b5 feat: 增加健康检查 html 版本 2022-01-03 00:15:00 +08:00
Argo-Tianyi 441cdfb336 feat: 增加健康检查 2022-01-02 21:46:31 +08:00
Argo-Tianyi 86522a81a4 feat: 程序异常增加高级搜索功能 2022-01-02 19:29:14 +08:00
Argo-Tianyi 6bd7303d82 feat: 增加 AdminTable 参数 2022-01-02 17:09:52 +08:00
Argo-Tianyi ebbaba0f59 feat: 增加程序异常分页逻辑 2022-01-02 17:09:33 +08:00
Argo-Tianyi 93630f99b4 feat: 增加 Long 转型扩展 2022-01-02 17:08:58 +08:00
Argo-Tianyi c83725bfa1 refactor: 增加自定义异常处理逻辑 2022-01-02 16:13:36 +08:00
Argo-Tianyi 106d85acf4 chore: 更新解决方案配置文件 2022-01-02 13:49:17 +08:00
Argo-Tianyi 9e550a896c refactor: 使用 Error 作为 Exception 表实体类 2022-01-02 13:48:59 +08:00
Argo-Lenovo eab30a9a6d feat: 增加异常数据库日志功能 2022-01-02 13:33:39 +08:00
Argo-Lenovo 3c658dba46 refactor: 移动 AdminService 到 Web 工程 2022-01-02 13:20:20 +08:00
Argo-Lenovo 1a87ac25f5 feat: 增加数据库日志扩展 2022-01-02 13:05:25 +08:00
Argo-Lenovo 76a6628865 feat: Client 增加登出弹框功能 2022-01-02 12:06:26 +08:00
Argo-Lenovo 580055c688 refactor: 数据库异常更改日志等级为 Error 2022-01-02 11:36:50 +08:00
Argo-Lenovo 5d44d2c5ca chore: 移除对 Extensions 工程的依赖 2022-01-02 11:25:24 +08:00
Argo-Lenovo fc1a0f113f chore: 移除对 Extensions 工程的依赖 2022-01-02 11:25:00 +08:00
Argo-Lenovo 1e0203472e refactor: 移除 Extensions 工程 2022-01-02 11:24:31 +08:00
Argo-Tianyi e4cb1b4a9d refactor: 更新缓存逻辑 2022-01-01 20:26:27 +08:00
Argo-Tianyi b417eb04c8 refactor: 格式化文档 2022-01-01 20:26:08 +08:00
Argo-Tianyi e150e33bfe refactor: 移除 TabItemTextDictionary 参数 2022-01-01 20:25:56 +08:00
Argo-Lenovo d1d1811fd3 feat: 增加前台登录后自动跳转功能 2022-01-01 17:06:43 +08:00
Argo-Lenovo 17ae71c72e db: 更新系统菜单 2022-01-01 15:54:00 +08:00
Argo-Lenovo 57225c0937 feat: 更新系统演示保存结果弹窗功能 2022-01-01 15:44:08 +08:00
Argo-Lenovo 1086b7d6a1 feat: 网站设置功能更新 2022-01-01 15:40:13 +08:00
Argo-Lenovo 0e0f016cd9 feat: 完成网站标题页脚设置功能 2022-01-01 14:41:29 +08:00
Argo-Lenovo b72899b658 feat: 完成短信登录功能 2022-01-01 14:32:42 +08:00
Argo-Lenovo ee28d845f2 refactor: 移除 EFCore 的引用使用 PetaPoco 2022-01-01 14:05:44 +08:00
Argo-Tianyi bafa4f1aa4 chore: 更新项目启动配置 2022-01-01 12:19:14 +08:00
Argo-Tianyi ec02aeef82 chore: 更新依赖包 2022-01-01 11:00:07 +08:00
Argo-Tianyi 46641a8696 feat: 修复 Client 编译无法通过问题 2022-01-01 10:03:39 +08:00
Argo-Tianyi 310795568c feat: 增加 Extensions 工程 2022-01-01 10:03:22 +08:00
Argo-Tianyi 176ac6d4b1 feat: 增加 Cookie 缓存时长 2021-12-31 20:16:39 +08:00
Argo-Tianyi e1fcf586e5 feat: 更新字典服务增加 Cookie 缓存时长设置 2021-12-31 19:23:16 +08:00
Argo-Tianyi bd58a29fca feat: Card 增加阴影效果 2021-12-31 19:21:31 +08:00
Nine bc6ec6be12 !95 feat(#I4OWBZ): add EFCore support
* refactor: 修改方法签名
* refactor: GetAll 改为公开接口
* refactor: 移除枚举转换
* fix: 消除警告
* Merge remote-tracking branch 'origin/master' into dev-blazor-ef
* feat: 配置实体
* fix: 修复菜单获取不正确
* feat: 开启EF数据服务
* feat: 修复菜单导航
* chore: 格式化文档
* chore: 更新网站端口
* feat: 增加数据库日志任务
* feat: 增加任务管理
* feat: 增加保存健康检查方法
* feat: 完善EF数据服务
* feat: 开启EF数据服务
* chore: 升级EF包
* feat: 配置EF表关系
* feat: 添加 EFCore 服务
2021-12-31 06:41:51 +00:00
Argo-Tianyi 541a2714b7 chore: 更新包与项目依赖 2021-12-31 13:27:11 +08:00
Argo-Tianyi 3c7ce9cf24 feat: 增加 GetAll 接口实现自定义排序功能 2021-12-31 13:26:57 +08:00
Argo-Tianyi 2e11fce1fd feat: 更改数据库数据类型为整形 2021-12-30 19:55:35 +08:00
Argo-Tianyi ed8dcc9296 feat: 设置自动刷新 2021-12-30 19:55:12 +08:00
Argo-Tianyi bbe2631541 feat: 设置默认排序列 2021-12-30 13:48:35 +08:00
Argo-Tianyi 39aa8bfd1d doc: 格式化文档 2021-12-30 13:31:40 +08:00
Argo-Tianyi eea8838963 feat: 角色对菜单授权增加排序 2021-12-29 16:28:55 +08:00
Argo-Tianyi 7e7b9d0ec0 feat: 增加菜单默认排序规则 2021-12-29 15:31:11 +08:00
Argo-Tianyi 0a6317ec5c style: 增加 Card 阴影效果 2021-12-29 13:45:08 +08:00
Argo-Tianyi a5866b13b1 feat: 系统演示增加 Label 2021-12-29 13:44:50 +08:00
Argo-Tianyi 25af048f77 feat: 修复菜单导航 2021-12-29 12:25:37 +08:00
Argo-Tianyi c7b385cd67 chore: 格式化文档 2021-12-29 11:23:25 +08:00
Argo-Tianyi 08b194c33d chore: 更新网站端口 2021-12-29 11:23:03 +08:00
Argo-Tianyi 3ef333f6ec feat: 增加数据库日志任务 2021-12-29 11:22:36 +08:00
Argo-Tianyi 5a61625f6f feat: 增加任务管理 2021-12-29 11:21:56 +08:00
Argo-Tianyi edf691a506 feat: 增加保存健康检查方法 2021-12-29 11:21:19 +08:00
Argo-Tianyi 6703d510b2 feat: 增加任务管理界面 2021-12-26 13:35:07 +08:00
Argo-Tianyi 97503e4a81 feat: 增加任务界面 2021-12-26 13:07:07 +08:00
Argo-Tianyi 7768c9ea49 feat: 网站设置增加系统模式开关功能 2021-12-26 10:14:09 +08:00
Argo-Tianyi 915e2371b1 feat: 字典服务增加系统模式获取与保存方法 2021-12-26 10:13:40 +08:00
Argo-Tianyi 083bd15d91 feat: 增加网站设置 2021-12-25 20:44:34 +08:00
Argo-Tianyi d517d57163 refactor: 重构个人中心保存按钮显示名称 2021-12-25 20:44:13 +08:00
Argo-Tianyi ce74be1f6d feat: 增加获取登录页面方法 2021-12-25 20:43:34 +08:00
Argo-Tianyi ec83350830 feat: 菜单增加按应用排序 2021-12-25 18:58:31 +08:00
Argo-Tianyi 184b0e2a14 refactor: 微调操作列宽度 2021-12-25 18:56:08 +08:00
Argo-Tianyi 374392afb3 feat: 更新组件变量为 IsShow 2021-12-25 18:55:42 +08:00
Argo-Tianyi d716b340e6 feat: 移除 SubmitButton 组件 2021-12-25 18:54:58 +08:00
Argo-Tianyi 55f673cacc feat: 增加模型约束条件 2021-12-25 16:40:46 +08:00
Argo-Tianyi 2eced5eadd refactor: 使用 Css 表示主题 2021-12-25 16:02:09 +08:00
Argo-Tianyi 35339d7ebf refactor: 重构 AdminAlert 组件 2021-12-25 15:47:27 +08:00
Argo-Tianyi 99b6da65af feat: 增加主题 UI 2021-12-25 15:47:14 +08:00
Argo-Tianyi 1e95e722f9 feat: 增加 GetThemes 接口定义 2021-12-25 15:46:55 +08:00
Argo-Tianyi 0cdcb0eec9 feat: 增加保存 App UI 2021-12-25 15:04:33 +08:00
Argo-Tianyi db8da6b3ed feat: 增加修改密码 UI 2021-12-25 14:48:23 +08:00
Argo-Tianyi 927a9bfd90 refactor: 更新个人中心组件 2021-12-25 13:03:18 +08:00
Argo-Tianyi 874b45b29b feat: 增加 AdminCard 组件 2021-12-25 13:02:54 +08:00
Argo-Tianyi edf50b0a7a feat: 增加 SubmitButton 组件 2021-12-25 13:02:27 +08:00
Argo-Tianyi 9946294160 refactor: 重命名 BlazorTable 为 AdminTable 2021-12-25 12:46:47 +08:00
Argo-Tianyi d542c4675e chore: 更新项目依赖 2021-12-25 12:37:58 +08:00
Argo-Tianyi c15de686c0 feat: 增加 Profiles 页面 2021-12-25 12:37:05 +08:00
Argo-Tianyi dfb5fffcef refactor: 控制器移除 BootstrapAppContext 依赖 2021-12-25 12:36:33 +08:00
Argo-Tianyi b0a3a35396 refactor: 移除 UserStatus 属性 2021-12-25 12:35:59 +08:00
Argo-Tianyi 578bfc6710 feat: 增加 AdminAlert 组件 2021-12-25 12:35:29 +08:00
Argo-Tianyi 9912d73e70 chore: 重构依赖关系 2021-12-25 12:35:10 +08:00
Argo-Tianyi 5eaca5d5dc refactor: 更新字典转 List 扩展方法 2021-12-25 12:33:58 +08:00
Argo-Tianyi 90e06fedc2 refactor: App 接口移除重复 GetAll 方法统一使用 Dict 接口服务 2021-12-25 12:32:58 +08:00
Argo-Tianyi eadf199649 refactor: 移动 MenuExtensions 到 Web 层 2021-12-25 12:31:39 +08:00
Argo-Tianyi 289ed3f4a3 refactor: 重构代码修复 Table 不刷新问题 2021-12-24 13:33:58 +08:00
Argo-Tianyi 7fdef045ca chore: 开启 file-scope 命名空间 2021-12-23 22:15:21 +08:00
Argo-Tianyi a395512a24 feat: 更新手机登录逻辑 2021-12-23 12:36:48 +08:00
Argo-Tianyi ae746cd352 feat: 格式化短信服务 2021-12-23 12:36:11 +08:00
Argo-Tianyi 4b6b1e2d6e feat: IUser 增加手机登录逻辑 2021-12-23 12:35:37 +08:00
Argo-Tianyi 9ed1fd8f20 feat: 增加下发短息按钮 2021-12-22 18:34:02 +08:00
Argo-Tianyi fa3c2e4557 feat: 增加登出组件 2021-12-22 12:34:04 +08:00
Argo-Tianyi e903eac47b refactor: 消除警告信息 2021-12-22 12:33:51 +08:00
Argo-Tianyi 7ca930a12c refactor: 更改参数名称 2021-12-22 10:15:24 +08:00
Argo-Tianyi 2d9dc116d6 refactor: 精简按钮名称 2021-12-22 10:15:09 +08:00
Argo-Tianyi e4dea27c12 style: 微调菜单树样式 2021-12-22 02:21:51 +08:00
Argo-Tianyi ee8387f620 feat: 增加角色对菜单授权功能 2021-12-22 01:55:32 +08:00
Argo-Tianyi dee2e909a4 feat: 增加授权组件基类 2021-12-22 01:55:00 +08:00
Argo-Tianyi fe36e7d888 feat: 增加 SQL 语句执行输出 2021-12-22 00:20:59 +08:00
Argo-Tianyi 5eddf6ad24 feat: 开启骨架屏 2021-12-21 23:41:06 +08:00
Argo-Tianyi 4a3582748b feat: 增加枚举类型入库时 ToString 2021-12-21 23:40:50 +08:00
Argo-Tianyi fa6c0e302f refactor: 重构菜单获取数据改为异步 2021-12-21 23:40:17 +08:00
Argo-Tianyi ae88de413a fix: 修复 Lambda 表达式解析 2021-12-21 23:30:19 +08:00
Argo-Tianyi da261c6405 feat: 菜单维护增加类别 2021-12-21 15:16:50 +08:00
Argo-Tianyi 719c9ace72 feat: 微调菜单维护小箭头 2021-12-21 15:12:41 +08:00
Argo-Tianyi e385ad798b feat: 菜单维护增加 Lookup 功能 2021-12-21 14:40:15 +08:00
Argo-Tianyi 0b828ff38c feat: 增加菜单授权角色功能 2021-12-21 12:30:13 +08:00
Argo-Tianyi 77f1f2e0d9 feat: 增加角色对应用授权功能 2021-12-21 12:22:40 +08:00
Argo-Tianyi 570775ad1b feat: 增加角色对用户授权功能 2021-12-21 12:02:04 +08:00
Argo-Tianyi f2095cac40 feat: 增加角色对部门授权功能 2021-12-21 11:55:49 +08:00
Argo-Tianyi 6029e86072 feat: 更新 IRole 接口方法 2021-12-21 11:47:15 +08:00
Argo-Tianyi 30614bd223 feat(#I4NFRH): 增加部门服务
close https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues/I4NFRH
2021-12-21 11:35:30 +08:00
Argo-Tianyi 69e8428b2e chore: 增加授权弹窗 2021-12-21 10:36:06 +08:00
Argo-Tianyi c9396cc163 chore: 重命名接口名称 2021-12-21 10:34:09 +08:00
Argo-Lenovo d3eb00b93d feat: 完善角色维护菜单界面 2021-12-20 00:13:27 +08:00
Argo-Lenovo 4b3a61ed39 feat: 完善菜单维护界面 2021-12-20 00:13:02 +08:00
Argo-Lenovo fcee12335e feat: 完善部门维护界面 2021-12-20 00:12:45 +08:00
Argo-Lenovo accc58a6b0 refactor: 细化用户维护界面 2021-12-20 00:12:22 +08:00
Argo-Lenovo 840a78db95 feat: 增加操作列宽度设置 2021-12-20 00:11:58 +08:00
Argo-Lenovo f581e761e8 feat: 增加固定表头设置 2021-12-19 19:36:44 +08:00
Argo-Tianyi ab8508a0cb style: 增加 Tab 内表格滚动条样式 2021-12-19 19:17:24 +08:00
Argo-Tianyi fa3374a492 feat: 增加 Tab 标签页固定样式 2021-12-19 19:01:31 +08:00
Argo-Tianyi fa3d6ba274 doc: 增加网页组件 2021-12-19 17:46:38 +08:00
Argo-Tianyi 7b0902435c refactor: 增加 Tab 默认首页 2021-12-17 20:30:58 +08:00
Argo-Tianyi 7369db6778 chore: 客户端项目样式更新 2021-12-17 20:23:04 +08:00
Argo-Tianyi 85537a1dec chore: 更新配置文件 2021-12-17 20:20:29 +08:00
Argo-Tianyi d106b8eeb4 chore: 更改 Blazor 客户端示例 2021-12-17 19:26:47 +08:00
Argo-Tianyi e63226e755 chore: 更新依赖包 2021-12-17 15:09:14 +08:00
Argo-Tianyi 5037b16123 feat: Home 页面下增加授权 2021-12-17 13:50:49 +08:00
Argo-Tianyi 05cfdeefb3 feat: 增加未认证时不渲染页面逻辑 2021-12-17 13:28:57 +08:00
Argo-Tianyi 8b3ac481e9 refactor: 移除组件使用 BB 包 2021-12-17 13:28:18 +08:00
Argo-Tianyi 359a01e7ea refactor: 其他登录方式改用 Divider 组件 2021-12-17 10:55:12 +08:00
Argo-Tianyi 972c9da4cf feat: 更新 LinkButton 精简代码 2021-12-17 10:03:01 +08:00
Argo-Tianyi 0109e5fbb9 feat: 内置 fa 字体库 2021-12-17 10:02:34 +08:00
Argo-Tianyi 92bc630e4f refactor: 移除 captcha 库 2021-12-17 10:02:12 +08:00
Argo-Tianyi 8ae21413f4 feat: Layout 组件集成菜单授权方法 2021-12-16 20:15:05 +08:00
Argo-Tianyi 2c20e23ba3 feat: 更改方法为 GetAllMenus 2021-12-16 20:12:45 +08:00
Argo-Tianyi 892049c2cb feat: 增加手机登录 2021-12-16 15:18:43 +08:00
Argo-Tianyi 1d94e53866 feat: 改用表单提交方式进行用户鉴权 2021-12-16 14:52:02 +08:00
Argo-Tianyi 0df111ee42 feat: 母版页保存当前登录用户名与显示名称 2021-12-16 14:51:22 +08:00
Argo-Tianyi 61827b87eb feat: 更新登录逻辑 2021-12-16 14:05:38 +08:00
Argo-Tianyi f21df83abc feat: 增加 LinkButton 组件 2021-12-16 14:04:59 +08:00
Argo-Tianyi fd2fca1d90 feat: 增加 SwitchButton 组件 2021-12-16 14:04:45 +08:00
Argo-Tianyi ede1f1fead refactor: 代码重构 Users 页面 2021-12-15 22:34:55 +08:00
Argo-Tianyi 99477b8ede chore: 更新依赖包 2021-12-15 16:04:11 +08:00
Argo-Tianyi ac2df1436d feat: 移动 EFCore 配置到 Web 工程 2021-12-15 16:02:53 +08:00
Argo-Tianyi eaf36fec5e feat: 用户维护增加分配授权按钮逻辑 2021-12-15 14:59:58 +08:00
Argo-Tianyi 31c9c4de7b feat: Users 自定义菜单增加禁用功能 2021-12-15 14:20:19 +08:00
Argo-Tianyi 08d5e498a0 feat: 更新 Home 首页逻辑 2021-12-15 12:37:57 +08:00
Argo-Tianyi 54431a131d chore: 更新依赖包 2021-12-15 12:23:43 +08:00
Argo-Tianyi 32cc5c184a feat: 支持模糊查询 2021-12-15 12:20:00 +08:00
Argo-Tianyi 2232cd2eb9 feat: 增加显示名称功能 2021-12-15 10:31:35 +08:00
Argo-Tianyi b8f2851dab feat: MainLayout 增加登录用户信息 2021-12-15 10:17:19 +08:00
Argo-Tianyi 0b682fd3d7 feat: 更新接口定义 2021-12-15 10:16:42 +08:00
Argo-Tianyi 206368282d feat: 增加用户登录授权方法 2021-12-15 10:16:07 +08:00
Argo-Tianyi 9ed6fc4541 feat: 增加 UseBootstrapBlazorAdmin 中间件 2021-12-14 19:38:31 +08:00
Argo-Tianyi 5b8ca016c2 feat: 增加 ILogin 业务逻辑 2021-12-14 19:38:07 +08:00
Argo-Lenovo 3de89cd94e refactor: 移除 LoginView 方法 2021-12-14 18:41:54 +08:00
Argo-Lenovo 500f0f148e feat: 增加 Cookie 认证模块 2021-12-14 17:52:38 +08:00
Argo-Lenovo 33054356d0 refactor: 重构服务基类增加用户服务 2021-12-14 16:09:41 +08:00
Argo-Lenovo 0b1a110b22 chore: 增加包集成 Blazor 权限 2021-12-14 15:28:27 +08:00
Argo-Lenovo c0c417ca29 refactor: 更新扩展服务 2021-12-14 15:21:47 +08:00
Argo 647cc252d4 !93 feat(#I4ME4A): 增加模拟用户登录模块
* feat: 增加模拟账户登录逻辑
* feat: 增加认证服务模块
* feat: 增加重定向组件
* refactor: 增加后台文件
* wip: 临时提交
2021-12-14 04:50:25 +00:00
Argo-Tianyi affbfe1d88 feat: 更新自定义搜索模型增加 Display 标签 2021-12-13 15:17:35 +08:00
Argo-Tianyi b14d9d5752 feat: PetaPoco 增加对枚举类型搜索支持 2021-12-13 15:17:14 +08:00
Argo-Tianyi fea8e572fd style: 更新网站报错 z-index 值 2021-12-12 15:11:20 +08:00
Argo-Tianyi 4e8a7b2cdd refactor: 增加字典表高级搜索项 2021-12-12 15:11:00 +08:00
Argo-Tianyi bf4fedc544 refactor: 增加 Display 标签 2021-12-12 20:54:40 +08:00
Argo-Tianyi b0651c755e feat: 菜单表更改成枚举类型 2021-12-12 20:07:04 +08:00
Argo-Tianyi 513dce940f refactor: 增加可为空类型逻辑 2021-12-12 19:03:09 +08:00
Argo-Tianyi 334a1efbd9 feat: 增加枚举类型转化器 2021-12-12 18:58:35 +08:00
Argo-Tianyi bee6c5b895 chore: 更新数据库 2021-12-12 18:58:15 +08:00
Argo-Tianyi 5bc293dd50 feat: 增加字符串转枚举转化器 2021-12-12 18:58:04 +08:00
Argo-Tianyi 4260dd6888 refactor: 字典表增加枚举类型 2021-12-12 18:57:39 +08:00
Argo-Tianyi 17fac05da1 refactor: 增加列忽略列配置 2021-12-12 10:56:53 +08:00
Argo-Tianyi ee5558d817 chore: 更新组件依赖微调侧边栏菜单样式 2021-12-11 16:28:22 +08:00
Argo-Tianyi 1ccd30b337 chore: 更新项目配置信息 2021-12-11 14:41:32 +08:00
Argo-Tianyi 8ed5a6981f refactor: 代码重构 2021-12-11 14:27:47 +08:00
Argo-Tianyi 27e25c9907 chore: 更新命名空间 2021-12-11 14:24:36 +08:00
Argo-Tianyi ead25a3390 chore: 更改 Interface 工程为 Core 2021-12-11 14:21:53 +08:00
Argo-Tianyi 801ea3a957 refactor: 更新依赖包增加 EF 扩展 2021-12-11 14:09:48 +08:00
Argo-Tianyi 67942d615b feat: 增加 Users 2021-12-11 14:06:01 +08:00
Argo-Tianyi 311195f86d refactor: 增加过滤条件 2021-12-11 14:05:38 +08:00
Argo-Tianyi 1085708123 feat: 增加 PetaPoco Mapper 移除 Models 对 ORM 的耦合 2021-12-11 13:54:23 +08:00
Argo-Tianyi 5845c87e69 feat: 重构模型移除对 ORM 的依赖 2021-12-11 13:53:57 +08:00
Argo-Tianyi 3deea2b478 chore: 增加 xml 文件忽略规则 2021-12-11 12:08:00 +08:00
zhangpeihang 63680b0b6f wip: 去掉 PetaPoco 服务 2021-12-11 11:59:16 +08:00
zhangpeihang 6cc1ccaa5a feat: EFCore 数据服务实现 2021-12-11 11:58:23 +08:00
Argo-Tianyi 80c7f9aa8c chore: 更改 PetaPoco 工程名称服务下沉 2021-12-11 10:42:54 +08:00
Argo-Tianyi f4ba67baf9 chore: 增加接口类工程 2021-12-11 10:21:35 +08:00
Argo-Tianyi 16d3d52005 chore: 增加 Models 工程 2021-12-11 09:54:10 +08:00
Argo-Tianyi 33ed7abc0d refactor: 增加字典服务 2021-12-11 09:30:04 +08:00
Argo-Tianyi 816019e202 chore: 更新依赖组件 2021-12-11 00:18:08 +08:00
Argo-Tianyi d9da2119a6 chore: 增加菜单服务 2021-12-11 00:52:43 +08:00
Argo-Tianyi 0675e5de8c chore: 重构工程 2021-12-11 12:01:13 +08:00
Argo 4e4a6a61e0 !92 feat(#I4M1N3): 增加 Blazor 工程准备集成 BootstrapBlazor 组件库
* chore: 更新过滤解决方案文件
* refactor: 重新整理项目结构
* refactor: 改用 Update 方法
* refactor: 代码重构
* chore: 移除不使用的组件
* chore: 更新数据服务
* wip: 临时提交
* chore: 首页更新路由
* chore: 增加过滤项目文件
* feat: 更新菜单组件
* refactor: 移除不用的组件
* feat: 增加 BootstrapAppContext 服务
* refactor: 移除命名空间
* !91 feat(#I4LVUZ): 增加用户维护界面
* !90 feat(#I4LVUW): 增加字典表维护页面
* feat: 初始化 Blazor 版本
2021-12-10 13:36:08 +00:00
Argo-Tianyi 5c3be3a19f refactor: 增加 Gitee 接口默认配置 2021-11-07 12:10:34 +08:00
Argo-Tianyi 03ceefcd11 refactor: 重构 Gitee 健康检查 2021-11-07 12:10:07 +08:00
Argo-Tianyi edac104fbc refactor: 消除二义性错误 2021-10-21 12:54:56 +08:00
Argo-Tianyi 42d56b9dbc doc: 更改组织名称 2021-10-08 15:29:06 +08:00
Argo-Tianyi 24baec9cea doc: 修复 ccflow 链接错误 2021-08-15 02:35:35 +08:00
Argo-Tianyi 4204cf2e19 refactor: 消除警告信息 2021-08-15 02:35:20 +08:00
Argo-Tianyi 2308252fd9 chore: 升级 sdk 5.0.9 2021-08-15 02:35:06 +08:00
Argo-Tianyi 1b1481e86a Squashed commit of the following:
commit aa22b359cd73bfda5382cbb73c31747fcdd7d1f6
Author: Argo-Tianyi <argo@163.com>
Date:   Fri Aug 13 17:48:49 2021 +0800

    doc: 更新链接

commit 1367f17e8dd993ffcff85e55260b558aa4585a80
Author: Argo-Tianyi <argo@163.com>
Date:   Fri Aug 13 17:46:16 2021 +0800

    doc: 增加圆角样式

commit 22fb22f76968723092da8406e184548b53ba6026
Author: Argo-Tianyi <argo@163.com>
Date:   Fri Aug 13 17:44:40 2021 +0800

    doc: 更新 ccflow 链接

commit 11fabfdeca4491cb5865f4d97355b53a799a8480
Author: Argo-Tianyi <argo@163.com>
Date:   Fri Aug 13 17:44:19 2021 +0800

    doc: client 增加 ccflow 广告

commit 7aeefaf530f59590876c8bb61c08d87f8c7fad52
Author: Argo-Tianyi <argo@163.com>
Date:   Fri Aug 13 17:25:19 2021 +0800

    doc: add ccflow AD
2021-08-13 17:49:19 +08:00
Argo-Tianyi a755e68ee6 doc: 更新演示网站地址 2021-08-12 09:27:00 +08:00
Argo-Tianyi 0028688ffb chore: 更新项目依赖 2021-08-08 14:55:07 +08:00
Argo-Tianyi 500d564cd6 chore: add scripts for github actions 2021-08-08 14:27:44 +08:00
Argo-Tianyi c0fb0a7beb chore: update dockerfile 2021-08-08 14:25:50 +08:00
Argo-Tianyi d79ad95f6f Merge branch 'dev-wip' into master
# Conflicts:
#	src/client/Bootstrap.Client.DataAccess/Bootstrap.Client.DataAccess.csproj
2021-08-08 14:15:52 +08:00
Argo-Tianyi f78a64ee4e doc: update readme md 2021-08-08 12:30:48 +08:00
Argo-Tianyi cad6b19f02 chore: 更新依赖组件包 2021-08-08 12:29:45 +08:00
Argo-Tianyi c4da4cc9dc test: 修复失败的单元测试 2021-07-25 21:40:47 +08:00
Argo-Tianyi e1b1c3cbb1 refactor: 修复单元测试 2021-07-25 21:40:37 +08:00
Argo-Tianyi 4a2e077dce fix: 修复 Widget 头像图表路径不正确问题 2021-07-25 21:40:28 +08:00
Argo-Tianyi 64033be9f2 fix: 修复图标问题 2021-07-25 21:40:18 +08:00
Argo-Tianyi ac7ce48a8c core: 移除 BB 工程使用包 2021-07-25 21:40:09 +08:00
Argo-Tianyi 5524b909a9 chore: 更新 json 请求相关方法 2021-07-25 21:40:01 +08:00
Argo-Tianyi ddaeee11c7 chore: bump dependence version to latest 2021-07-25 21:39:52 +08:00
Argo-Tianyi a3e6697500 chore: 增加模拟用户 admin 设置 2021-07-25 21:39:43 +08:00
Argo-Tianyi 429c9ed6f1 chore: 移除 Linux.Dockerfile 2021-07-25 21:39:34 +08:00
Argo-Tianyi 0a1302dbc6 feat: 多层菜单支持 2021-07-25 21:39:26 +08:00
Argo-Tianyi 198c016099 refactor: 移除 NotAuthorized 代码 2021-07-25 21:39:17 +08:00
Argo-Tianyi 6dfcc4b90c doc: update readme.md 2021-07-18 19:21:22 +08:00
Argo-Tianyi 2c1334a4a9 doc: 增加驰骋工作流链接 2021-07-17 00:57:23 +08:00
Argo-Tianyi 4d15c8ffa4 doc: 集成 ccflow 工作流 2021-07-17 00:54:51 +08:00
Argo-Tianyi 0442af36ab test: 修复失败的单元测试 2021-07-02 22:22:12 +08:00
Argo-Tianyi a7c1789eb2 refactor: 修复单元测试 2021-07-02 22:05:00 +08:00
Argo-Tianyi b12d75f2cd fix: 修复 Widget 头像图表路径不正确问题 2021-07-02 20:59:12 +08:00
Argo-Tianyi 0157c571ad fix: 修复图标问题 2021-07-02 20:58:55 +08:00
Argo-Tianyi 2819af41e2 core: 移除 BB 工程使用包 2021-06-16 10:18:41 +08:00
Argo-Tianyi 3ba8bd4ba8 chore: 更新 json 请求相关方法 2021-06-01 16:17:07 +08:00
Argo-Tianyi 45a70fe238 chore: bump dependence version to latest 2021-05-29 09:24:28 +08:00
Argo-Tianyi 5daeab89dd chore: 增加模拟用户 admin 设置 2021-05-29 09:19:12 +08:00
Argo-Tianyi 1f2865807a chore: 移除 Linux.Dockerfile 2021-05-28 21:26:52 +08:00
Argo-Tianyi d31b056292 feat: 多层菜单支持 2021-05-25 20:00:52 +08:00
Argo-Tianyi d9a80affcf refactor: 移除 NotAuthorized 代码 2021-05-25 14:35:17 +08:00
Argo-Tianyi b6f0e08257 refactor: 精简代码移动 NotAuthorized 到 razor 文件中 2021-05-25 14:34:46 +08:00
Argo 361037cdbd !88 feat(#I3S4R1): 增加未授权自动跳转功能
* feat: 增加未授权自动跳转功能
* refactor: 重构代码
2021-05-20 12:26:53 +08:00
Argo 4b39a2da63 !87 feat(#I3RQ9N): 增加 blazor 客户端项目模板
* feat: 增加路由
* feat: 增加用户显示名功能
* chore: 更新 AppId
* feat: 增加 BA 权限认证
* feat: 增加 BA 认证集成
* refactor: 重构代码消除警告信息
* chore: 增加资源文件
* feat: 增加 Layout 布局
* feat: 增加默认命名空间与授权
* feat: 增加 RedirectToLogin 组件
* refactor: 更新网站 logo
* refactor: 删除不用的文件
* refactor: 增加 blazor 相关工程
* refactor: 移动 Blazor 工程到 blazor 目录下
* feat: 增加 blazor 工程
* chore: 更新依赖组件
* chore: 移动框架版本约束到 props 文件中
* chore: props 文件缩进格式化
2021-05-18 09:13:21 +08:00
Argo-Cloud d95e066b7d chore: 依赖组件升级到最新版 2021-04-05 19:23:47 +08:00
Argo-Cloud bb55697dda feat: 增加 Git 版本获取 api 2021-04-05 19:18:39 +08:00
Argo-Cloud ed072c229d feat: add Exceptionless 2021-04-05 19:14:35 +08:00
Argo-Cloud 80f5c1be1f fix: 修复 Blazor 模式无法打开问题 2021-03-12 01:47:17 +08:00
Argo-Cloud 6a3b006cc1 refactor: 更新依赖到最新版本 2021-03-12 01:46:53 +08:00
Argo-Cloud 6fe9de3ac9 refactor: 更新 api 默认参数值 2021-03-11 11:24:35 +08:00
Argo-Cloud d97e0c5ba5 docs: 更新 readme 文件 2021-03-10 00:04:55 +08:00
Argo-Cloud 59852d3bd3 docs: 更新开源地址链接 2021-03-09 17:23:52 +08:00
Argo-Unicom 9a288c91de chore: 更新依赖 2021-03-01 19:14:45 +08:00
Argo-Unicom 6270102c99 docs: 格式化文档 2021-03-01 19:14:35 +08:00
Argo-Unicom 2ab14c25d1 chore: 增加统计脚本 2021-02-28 10:51:03 +08:00
Argo-Unicom 6d814a2e2d chore: 更新依赖组件 2021-02-18 11:57:13 +08:00
Argo-Unicom 1b59098fa4 chore: 更新 github action sdk 版本 2021-02-12 11:51:18 +08:00
Argo-Unicom d83a96ed63 chore: 更新依赖组件 2021-02-12 11:49:45 +08:00
Argo-Clound 88607e9419 chore: 更新依赖组件 2021-01-28 15:37:15 +08:00
Argo-Clound a04d2213c4 chore: 更新依赖组件版本 2021-01-27 17:37:56 +08:00
Argo-Cloud cc3af1218c fix: 修复表头显示英文问题 2021-01-22 22:26:24 +08:00
Argo-Cloud 32071fe0ad chore: 更新依赖组件版本 2021-01-14 12:24:09 +08:00
Argo 14d3413f1e !85 chore: 更新 readme.md 文件
* chore: 更改奖杯地址
* chore: 更改奖杯图片大小
* chore: 更新项目奖杯图片
2021-01-12 11:56:59 +08:00
Argo-Cloud 534a3a80f0 refactor: 增加 static 关键字 2021-01-02 21:45:48 +08:00
Argo-Cloud 23c9db651c chore: 更新依赖组件到最新版 2021-01-02 21:45:02 +08:00
Argo-Cloud 2f2bb8f440 chore: 升级依赖组件到最新版 2020-12-26 12:57:52 +08:00
Argo-Cloud 49b33137e6 refactor: 更改 Layout 母版页 2020-12-25 01:55:39 +08:00
Argo-Cloud 531cafc11c refactor: 调整文件位置 2020-12-25 01:49:15 +08:00
Argo-Cloud 7762b36e37 chore: 项目依赖增加 BootstrapBlazor 2020-12-25 01:11:40 +08:00
Argo-Cloud 30fd07591e chore: 格式化项目文件缩进 2020-12-25 01:10:32 +08:00
Argo-Cloud dcfe691fd3 fix(#I29S4F): 修复 MongoDB 用户名比对导致保存失败问题
#Issues
https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues/I29S4F
2020-12-20 16:26:06 +08:00
Argo-Tencent 549cd8ff48 build: 更新 action 脚本 2020-12-14 00:06:41 +08:00
Argo-Tencent 76b7043bdf doc: 更改域名 2020-12-14 21:51:16 +08:00
Argo-Cloud b513d19b60 docker: 更新 linux dockerfile 2020-11-20 11:52:47 +08:00
Argo Zhang e800937321
docker: 更新 dockerfile 2020-11-20 10:21:08 +08:00
Argo-Cloud 1c0e5f05d5 fix: 修复 BaiDu138Svr 单元测试 2020-11-19 20:32:52 +08:00
Argo-Cloud 2e13e2c5b7 doc: 更新演示网站为 admin.blazor.zone 2020-11-19 17:33:25 +08:00
Argo-Cloud 582b5a0aee refactor: 更新项目依赖 2020-11-18 22:08:20 +08:00
Argo-Cloud bab4abe978 refactor: 更新部署脚本 2020-11-18 17:07:14 +08:00
Argo-Cloud 988e71402c refactor: MongoDB 消除警告信息 2020-11-18 17:04:44 +08:00
Argo-Cloud 5728ee8983 test: 更新单元测试增加 Exception Put 方法代码覆盖 2020-11-18 17:01:29 +08:00
Argo-Cloud 763061caf8 test: 消除单元测试警告信息 2020-11-18 14:50:30 +08:00
Argo-Cloud 2da0738339 refactor: DataAccess 消灭警告信息 2020-11-18 14:50:15 +08:00
Argo-Cloud 986c6c7ab4 refactor: 消除 Admin 工程警告信息 2020-11-18 14:49:55 +08:00
Argo-Cloud cebb4e7beb refactor: Admin 项目升级到 NET 5.0 2020-11-18 12:27:05 +08:00
Argo-Cloud 829bbcd588 refactor: Client 项目升级到 NET5.0 2020-11-18 12:26:38 +08:00
Argo-Cloud f608d88c9d build: 更新 CI 运行环境 2020-11-18 12:26:06 +08:00
Argo-Cloud cea0a9744f refactor: 单元测试升级到 net5.0 2020-11-15 00:09:08 +08:00
Argo-Cloud 7150e86473 refactor: Admin 项目升级到 net5.0 2020-11-15 00:08:34 +08:00
Argo-Cloud 3f49c7fecd refactor: client 项目升级到 net5.0 2020-11-15 00:07:55 +08:00
Argo-Cloud 188709e4a5 fix(#I22OLG): MongtoDB 更新密码判断条件错误
#Issue
https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues/I22OLG
2020-10-26 17:48:23 +08:00
Argo-Cloud 23015c318a refactor: 更新 MongoDB 用户名查找时忽略大小写 2020-10-26 17:33:47 +08:00
Argo-Cloud ec87210310 fix(#I22OG7): 修复 MongoDB 无法更改用户密码问题
#Issue
https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues/I22OG7
2020-10-26 17:33:03 +08:00
Argo-PD 94ffea202f doc: 增加 Fur 互链 2020-10-08 01:53:08 +08:00
一事冇诚 4814786ab3 !84 修复用户输入错误用户名或密码错误,登录页面变成默认样式问题
* fix(#I1JTDF): 修复用户输入错误用户名或密码错误,登录页面变成默认样式问题
2020-08-06 15:21:01 +08:00
Argo-PD 9e963aba7b db: 更新数据库脚本增加浏览器操作系统等字段大小为 2000 2020-08-06 12:11:27 +08:00
Argo-PD c911fd99b2 refactor: 移除 pragma 代码 2020-07-31 23:41:31 +08:00
Argo Window10 0a94117088 doc: 增加配置项示例 2020-07-04 15:04:50 +08:00
Argo Window10 e9dc4404ca refactor: Gitee Webhook 回调 AppVeyor 支持多个节点 2020-07-04 14:52:34 +08:00
Argo Window10 db5b324eec refactor: 重命名类 2020-07-04 06:58:38 +08:00
Argo Window10 c5ccfef7d0 feat: 增加私有 Appveyor Webhook 调用接口 2020-07-04 06:45:37 +08:00
Argo-SHCX fde8231177 fix(Client:MongoDB): 修复MongoDB 客户端 App 值为 'BA' 2020-05-20 14:47:59 +08:00
Argo Zhang 045b5861e7
fix(#I1FEC1): 修复用户维护页面更新显示名称不同步问题
#Comment
comment #I1FEC1

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I1FEC1
2020-04-24 14:45:27 +08:00
Argo Zhang 004e591076
db: 更改 MySQL 脚本
#Comment
SQL 日志字段更改为 Text 类型
2020-04-18 16:23:46 +08:00
Argo-PD 842827ad22 feat(BC): 增加弹窗出现 Table 示例代码 2020-04-18 10:39:16 +08:00
Argo Zhang 4131b5e51d
style: 微调样式设置 nav 控制范围 2020-04-10 21:45:18 +08:00
Argo-PD 78c82af2dc script: 更新多选时提示信息内容 2020-04-05 20:12:24 +08:00
Argo Zhang 612331e5e9
feat: 增加邮件黑名单功能 2020-04-05 13:40:56 +08:00
Argo Zhang e20e51a3b1
doc: 更新前台介绍网页 2020-04-03 12:34:48 +08:00
Argo Zhang 09a3f34f12
feat: OAuth 认证支持多库操作 2020-04-03 11:57:09 +08:00
Argo Zhang 393e3ee1d6
fix(#I1DIKG): 前台地址通过配置支持绝对路径
#Comment
comment #I1DIKG

#Issue
close https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues/I1DIKG
2020-04-03 08:51:06 +08:00
Argo Zhang 144151fc0c
doc: 更新 readme.md 文件
#Comment
更新捐助码适配高清图片
2020-03-29 01:29:51 +08:00
Argo Zhang 7b6dac9bd5
doc: 捐助二维码使用 Pictures 仓库的连接图片 2020-03-27 18:19:53 +08:00
Argo Zhang e0563c17c8
Merge branch 'master' into dev
# Conflicts:
#	src/client/Bootstrap.Client/Controllers/ToolsController.cs
2020-03-27 14:52:27 +08:00
Argo b6324ba2b9 !83 重构代码:Client 工程重构邮件发送机制
Merge pull request !83 from Argo/dev-scripts
2020-03-27 14:50:45 +08:00
Argo-PD 62e3d6b54a refactor: 重构邮件发送机制 2020-03-27 14:40:58 +08:00
Argo-PD 23c20628d9 refactor: 移除 MailClient 配置项
#Comment
测试邮件与正式邮件配置项使用同一个
2020-03-27 12:52:20 +08:00
Argo-PD 861dbee3b0 doc: 增加 fork 配置提交模板文档 2020-03-27 12:51:16 +08:00
Argo Zhang f9937cd32c
doc: 更新二维码大小 2020-03-26 18:55:45 +08:00
Argo Zhang d3e93c7c7b
doc: 更新捐助二维码 2020-03-23 22:43:15 +08:00
Argo Zhang be7a2f80bd
doc: 更新捐助二维码 2020-03-20 20:23:57 +08:00
Argo Zhang 33641b85d8
feat: Blazor 多 Tabs 挂架脚本功能增强 2020-03-20 12:10:50 +08:00
Argo 2422950925 !82 增加功能:合并分支到 master
Merge pull request !82 from Argo/dev
2020-03-20 10:48:30 +08:00
Argo a0b25da459 !81 修复BUG:修复 Client 示例页面无法打开问题
Merge pull request !81 from Argo/publish
2020-03-20 10:46:17 +08:00
Argo a242a2b395 !80 增加功能:Blazor 网站设置增加前台站点等设置
Merge pull request !80 from Argo/dev-settings
2020-03-20 10:41:17 +08:00
Argo Zhang fb40cfff10
fix: Client 演示工程无法打开 Home/Dummy 视图错误 2020-03-19 14:14:06 +08:00
Argo Zhang e50cda5478
refactor: Blazor 网站设置增加后台登录地址配置 2020-03-19 11:32:13 +08:00
Argo-PD d003d2aaac build: Cache 组件升级到 3.1.4 提高 GetOrAdd 性能 2020-03-18 19:59:15 +08:00
Argo-PD a3c07e0392 test: 移除冗余代码 2020-03-18 19:42:32 +08:00
Argo Zhang 1cae5ea56d
db: 设置系统设置演示系统默认为 0 关闭 2020-03-18 19:36:09 +08:00
Argo Zhang b268c4a9e1
refactor: 增加侧滑块验证码图床路径 2020-03-18 17:15:40 +08:00
Argo Zhang d5fbb09d77
db: 增加 Admin-LTE 风格登录界面 2020-03-18 17:15:39 +08:00
Argo Zhang d10e2ec4fa
test: 增加 Login-TEC 视图单元测试 2020-03-18 17:00:35 +08:00
Argo Zhang c0b601130b
refactor: 微调 Admin-LTE 风格登录界面 2020-03-18 16:56:45 +08:00
Argo 159fa782c0 !79 AdminLTE风格登录页
Merge pull request !79 from finally44177/master
2020-03-18 16:23:27 +08:00
Argo Zhang 8c076f95bd
fix(#I1C06B): 网站设置后台网站标题与页脚
#Comment
comment #I1C06B

#Issue
close https://gitee.com/LongbowEnterprise/dashboard?issue_id=I1C06B
2020-03-18 16:15:14 +08:00
guoxiaojing db9acc1cde AdminLTE登录风格 2020-03-18 15:40:10 +08:00
Argo Zhang 635e3cdcb7
build: Cache 组件升级到 3.1.3 2020-03-17 12:27:14 +08:00
Argo bf1459a778 !78 增加功能:增加一个科技动感登录界面
* db: 增加 MongoDB 科技动感界面脚本
* refactor: 增加科技动感登录界面
* feat: 增加绿色登录界面
* test: 增加登录界面单元测试
* db: 增加蓝色登录首页
* feat: 增加蓝色登录界面
* refactor: 修正路径问题
2020-03-15 12:44:46 +08:00
Argo Zhang efb02ff3bb
style: 移动端隐藏 Login-Footer 2020-03-14 16:01:08 +08:00
Argo Zhang bcf426bfda
refactor: 登录页面增加 Login-Footer 2020-03-14 15:30:15 +08:00
Argo Zhang e83c02e161
test: 修正单元测试顺序代码 2020-03-14 14:58:22 +08:00
Argo Zhang 9ae9d5ccf4
test: 更改登录单元测试登录首页 2020-03-14 14:52:34 +08:00
Argo Zhang d42bfba824
build: Appveyor dev 分支增加单元测试 2020-03-14 14:45:24 +08:00
Argo Zhang a320208253
fix: MongoDB 脚本文件丢失逗号 2020-03-14 14:43:03 +08:00
Argo Zhang 03cc7d445c
fix(#I1BMCY): 修复 JWT 认证 Token 配置不生效问题
#Comment
comment #I1BMCY

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I1BMCY
2020-03-14 13:34:10 +08:00
Argo a9ae7ed140 !77 增加功能:网站设置增加登录界面切换功能
Merge pull request !77 from Argo/dev-login
2020-03-13 23:19:33 +08:00
Argo Zhang 2e08a6b26b
refactor: 增加登录页切换链接 2020-03-13 23:15:05 +08:00
Argo Zhang 19206c564a
feat: 网站设置增加登录界面配置 2020-03-13 22:31:43 +08:00
Argo Zhang be1c6919be
db: 增加登录页面初始化数据 2020-03-13 18:45:37 +08:00
Argo Zhang f163b1becf
feat: 增加高仿码云登录界面 2020-03-13 15:32:26 +08:00
Argo Zhang 368401f35a
feat: 配置文件增加 JWT Token 颁发配置项 2020-03-13 11:08:55 +08:00
Argo Zhang f27843d493
feat: 前台应用配置增加了网站图标与 Icon 的设置 2020-03-13 10:59:16 +08:00
Argo Zhang 4de4630dbc
test: 移除 Settings Post 单元测试 2020-03-12 15:25:38 +08:00
Argo 55d5e7f4fe !76 增加功能:网站设置前台应用增加标题与页脚设置
Merge pull request !76 from Argo/dev
2020-03-12 15:09:16 +08:00
Argo Zhang 9a407f2293
fix(#I1BF4I): 网站设置增加前台标题与页脚设置
#Comment
comment #I1BF4I

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I1BF4I
2020-03-12 15:04:44 +08:00
Argo Zhang 459a55f658
refactor: 前台设置移动到后台设置后面 2020-03-12 10:42:59 +08:00
Argo Zhang 28c7523223
fix(#I1BFCB): 增加前台应用后管理员个人中心不可见
#Comment
comment #I1BFCB

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I1BFCB
2020-03-12 10:42:35 +08:00
Argo Zhang f65cbcb461
feat: 前台系统增加演示系统开关 2020-03-12 10:17:20 +08:00
Argo Zhang 8d516e4882
doc: 首页微调排版增加空格 2020-03-12 10:06:22 +08:00
Argo Zhang fb49d646ef
refactor: Client 前台 LTE 样式微调滚动条 2020-03-11 13:47:38 +08:00
Argo Zhang 98b6f3d9d9
style: Client 工程微调 card-body 样式 2020-03-11 11:54:49 +08:00
Argo Zhang b1ab285f75
style: 微调蓝色样式 card 鼠标悬停效果 2020-03-10 11:13:06 +08:00
Argo Zhang 625267d354
refactor: 微调脚本与样式适配固定表头是表格高度 2020-03-10 10:50:29 +08:00
Argo Zhang 41d967c910
feat: 移除 Toast 服务器端组件
#Comment
使用 JavaScript 实现
2020-03-09 16:53:11 +08:00
Argo Zhang 04c769c84b
feat: 演示模式设置增加授权码检查 2020-03-09 13:34:55 +08:00
Argo Zhang 2ddcf5c827
refactor: 网站设置中使用正确的 card-footer 2020-03-09 13:24:58 +08:00
Argo Zhang 118864f50c
Merge branch 'dev' 2020-03-09 13:04:00 +08:00
Argo Zhang 678ed236be
doc: Readme 文件增加视频链接地址 2020-03-09 12:29:56 +08:00
Argo Zhang ad05215260
fix(#I1B42I): 子菜单与父级菜单联动问题
#Issue
close #I1B42I
2020-03-09 12:19:03 +08:00
Argo Zhang b455118844
doc: 纠正 master 拼写错误 2020-03-09 11:42:34 +08:00
Argo Zhang 3d255edb0f
refactor: 重构 Client 模板页 2020-03-08 12:50:26 +08:00
Argo Zhang 5cf09ff1a7
style: 同步样式 2020-03-08 12:40:13 +08:00
Argo Zhang 62a8abd29a
style: 同步样式到 client 工程 2020-03-07 19:41:41 +08:00
Argo Zhang 693e07588c
feat: Client 增加一个 Dummy 示例 2020-03-07 19:22:43 +08:00
Argo Zhang 0b96082364
feat: Client 工程增加 _Default 模板页 2020-03-07 19:21:53 +08:00
Argo Zhang 435c5529a3
refactor: Client 工程同步 lib 文件夹 2020-03-07 19:17:59 +08:00
Argo Zhang 73ac43e97f
feat: Client 增加同时操作多种类型数据库示例 2020-03-07 14:57:36 +08:00
Argo Zhang 5ade081cf2
feat: Blazor 模式下网站设置增加健康检查开关 2020-03-06 17:05:05 +08:00
Argo b112e5ab6e !75 增加功能:网站设置增加健康检查开关
Merge pull request !75 from Argo/dev-healths
2020-03-05 22:14:00 +08:00
Argo Zhang df915cbf4d
refactor: 演示模式禁止删除健康检查设置后台任务 2020-03-05 22:01:49 +08:00
Argo Zhang 24f521f5ad
feat: 增加周期性任务设置健康检查开启状态 2020-03-05 21:58:55 +08:00
Argo Zhang 4172a5a934
refactor: 发送云健康检查结果时判断是否开启健康检查 2020-03-05 21:52:16 +08:00
Argo Zhang 12f63aac31
feat: 增加健康检查开关 2020-03-05 21:43:52 +08:00
Argo Zhang 8142953979
db: 增加健康检查开关 2020-03-05 16:38:45 +08:00
Argo Zhang 4d30f25b47
feat: 数据库健康检查增加可读检查 2020-03-04 22:17:18 +08:00
Argo Zhang 64f1ddbf39
refactor: 移除 customModal Section 2020-03-04 17:12:50 +08:00
Argo Zhang c617cde4c3
refactor: 重构 Task 页面 2020-03-04 17:12:09 +08:00
Argo 8f37290072 !74 重构代码:移除 Modal 相关布局代码
Merge pull request !74 from Argo/dev-Modal
2020-03-04 15:47:41 +08:00
Argo Zhang 26c0a7cd99
build: Sentry 升级到 2.1 2020-03-04 15:03:18 +08:00
Argo Zhang 452b89e239
fix: 任务管理演示 Cron 表达式错误 2020-03-04 15:02:59 +08:00
Argo Zhang bd2c4823ae
refactor: 移除 Modal Toast 等组件移动代码 2020-03-03 15:58:30 +08:00
Argo Zhang 5c3aaea05d
doc: 增加 Github 两个小挂件 2020-03-03 13:21:02 +08:00
Argo Zhang daf3e32724
fix(#I1AL3V): 修复角色维护中可以更改角色名称问题
#Comment
comment #I1AL3V

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I1AL3V
2020-03-02 15:47:32 +08:00
Argo Zhang 819890dff2
fix: Blazor 模式下个人中心链接地址不正确 2020-03-02 14:06:42 +08:00
Argo Zhang 780bf046d0
scripts: 更新 init.sh 脚本路径错误 2020-03-01 17:36:51 +08:00
Argo Zhang 5f5df6f868
refactor: 重构演示模式授权码判断方式 2020-03-01 13:10:24 +08:00
Argo Zhang 7e69d580d1
db: 增加演示模式授权盐值与哈希值配置项 2020-03-01 13:06:22 +08:00
Argo Zhang d1770d5326
feat: 客户端模式增加加密工具 2020-03-01 12:41:05 +08:00
Argo Zhang 0cf1d3cb60
test: 重构更改系统模式方法增加单元测试 2020-02-29 13:43:17 +08:00
Argo Zhang c0fab60865
doc: Client 工程增加 MySQL 配置项 2020-02-28 21:47:29 +08:00
Argo Zhang d1e8e104c6
refactor: 应用程序保存地址增加 / 符号去除功能 2020-02-28 13:23:01 +08:00
Argo Zhang c6f32ddff8
refactor: 微调网站设置标题文字 2020-02-28 12:52:06 +08:00
Argo Zhang 9ac5b21c60
style: 调整 card-header lgbinfo 样式 2020-02-28 11:53:34 +08:00
Argo Zhang f10e36031f
test: 修复单元测试 2020-02-27 22:21:08 +08:00
Argo Zhang 8f6263814c
fix: 个人中心设置为前台站点时网站图标显示前台图标 2020-02-27 16:52:55 +08:00
Argo fe30ec09e8 !73 增加功能:网站设置增加前台站点配置功能
Merge pull request !73 from Argo/dev-pathbase
2020-02-27 15:53:03 +08:00
Argo Zhang 712455ebe2
feat: 网站设置增加前台站点配置功能 2020-02-27 15:45:00 +08:00
Argo Zhang e547a84f5a
fix: 修正客户端用户面板导航条 2020-02-26 21:06:39 +08:00
Argo Zhang da31d6522d
feat: 网站设置提供后台地址设置 2020-02-26 18:13:24 +08:00
Argo Zhang 4bc7ccb12a
feat: 数据库增加网站后台地址配置项 2020-02-26 18:08:46 +08:00
Argo Zhang 045e663ca6
refactor: 数据库健康检查增加问题解决办法 2020-02-25 23:13:34 +08:00
Argo Zhang d2e22eb856
fix: 修复健康检查 api 接口允许匿名 2020-02-25 23:12:59 +08:00
Argo Zhang bc1b9b0ffe
feat: 健康检查增加数据库驱动未引用时解决办法 2020-02-25 18:38:37 +08:00
Argo Zhang 181fd03e17
refactor: 格式化邮件正文内容 2020-02-25 15:39:15 +08:00
Argo Zhang b02d5ad53c
refactor: 增加 Issue 连接地址 2020-02-25 15:23:21 +08:00
Argo Zhang 01c6a52089
fix(#I1A739): 翻页再查询无数据问题
#Comment
comment #I1A739

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I1A739
2020-02-25 15:14:18 +08:00
Argo Zhang 8515419fed
refactor: 移除 HeaderBase 未使用的 Navigation 实例 2020-02-25 13:18:12 +08:00
Argo Zhang c9c32da5be
fix: 异常邮件正文未折行 2020-02-25 13:17:15 +08:00
Argo e8c39fb25e !72 增加功能:Blazor 移除 Pages 硬编码
* refactor: 移除 Pages 硬编码
* refactor: 重构资源路径问题
* style: 重构 userinfo 样式
2020-02-25 12:51:04 +08:00
Argo Zhang 7192fe8313
refactor: 邮件发送者增加显示名称 2020-02-24 17:44:16 +08:00
Argo Zhang c010555e0d
refactor: 移除配置文件中的信箱密码 2020-02-24 17:41:55 +08:00
Argo Zhang 735acfb0d1
refactor: 邮件正文为 HTML 更改换行符为 br 2020-02-24 17:00:28 +08:00
Argo Zhang e2a216919d
build: SQLite 依赖组件更新到最新 2020-02-24 16:59:01 +08:00
Argo Zhang 8c38717f73
feat: 格式化健康检查邮件 2020-02-24 00:16:38 +08:00
Argo Zhang 9fe03299a4
feat: 增加保存默认应用程序功能 2020-02-23 14:45:49 +08:00
Argo Zhang feb1b3b90c
feat: Blazor 网站设置增加开启关闭演示模式开关 2020-02-23 14:39:06 +08:00
Argo Zhang 31d4c3d38e
feat: 网站设置增加演示系统切换功能 2020-02-22 17:09:02 +08:00
Argo Zhang 70af25a63f
feat: 增加邮件发送测试工具 2020-02-22 15:42:18 +08:00
Argo Zhang 2c49fbff42
refactor: 重构 SQL 功能到 Tools 控制器下 2020-02-22 13:01:04 +08:00
Argo Zhang dd85f12e79
test: 增加任务管理单元测试 2020-02-21 17:58:13 +08:00
Argo Zhang 2454ea3684
feat: Blazor 路径转换方法支持 http https 协议 2020-02-21 13:14:56 +08:00
Argo Zhang 97ebce39ac
test: 增加腾讯与阿里 OAuth 认证登录单元测试 2020-02-21 13:03:37 +08:00
Argo Zhang 6e594b08a7
refactor: 优化 Exception 与 任务管理页面 2020-02-20 13:26:11 +08:00
Argo 9eff344f7e !71 增加功能:增加任务管理可视化管理功能
Merge pull request !71 from Argo/dev
2020-02-19 16:11:52 +08:00
Argo Zhang 921180b5c4
feat: 增加系统内置任务保护 2020-02-19 15:32:35 +08:00
Argo Zhang 6187cf8fc9
Merge branch 'dev-Tasks' into dev 2020-02-19 15:26:07 +08:00
Argo Zhang 7538d5fbe0
fix: 修复误判有子节点情况 2020-02-19 15:25:38 +08:00
Argo Zhang 1ba16e0e4b
feat: 增加任务编辑功能 2020-02-19 15:24:26 +08:00
Argo Zhang 34d1f87a51
feat: 任务管理增加新建任务功能 2020-02-19 13:28:23 +08:00
Argo 97be2c0eff !70 增加功能:增加支付宝登录
* build: Alipay 使用正式版组件
* Revert "revert: 移除 Alipay 相关代码"
* revert: 移除 Alipay 相关代码
* feat: 增加 Alipay 功能
* fix: 修正微信登录配置文件名称错误
* refactor: 更新支付宝登录按钮提示文字
* feat: 增加支付宝登录
2020-02-19 12:12:48 +08:00
Argo-2016 e3bd7cbbfa fix: 修正微信登录配置文件名称错误 2020-02-18 19:42:34 +08:00
Argo-2016 0d64c69596 feat: 增加 QQ 登录 2020-02-17 22:00:29 +08:00
Argo Zhang ec692efaa3
feat: Blazor 增加日志缓存时长配置信息 2020-02-17 13:32:26 +08:00
Argo-2016 c9bd585d57 test: 更改 SaveUISettings 单元测试 2020-02-17 12:32:55 +08:00
Argo Zhang ac3eaa58b6 refactor: 重构 GiteeController 接口参数 2020-02-17 12:32:22 +08:00
Argo Zhang 4041a2d4f8
feat: 网站设置增加缓存时长设置 2020-02-16 15:20:51 +08:00
Argo Zhang fb10318b29
db: 更改网站样式类别为网站设置 2020-02-16 14:31:30 +08:00
Argo Zhang e5dfcfe398
refactor: 重构网站设置脚本
#Comment
防止暴露字典表配置信息到客户端脚本中
2020-02-16 14:18:07 +08:00
Argo Zhang 5d141b3b78
feat: Blazor 网站页脚保存成功 2020-02-15 16:59:11 +08:00
Argo Zhang 488ac6be60
feat: Blazor 增加网站标题更新功能 2020-02-15 16:53:35 +08:00
Argo-2016 bcd344c433 db: 删除重复脚本 2020-02-15 12:55:53 +08:00
Argo-2016 9575a7eb93 test: 增加 BaiduIP138 地理位置单元测试 2020-02-15 12:55:27 +08:00
Argo Zhang dc495b82f8
feat: Blazor 网站设置增加地理位置配置功能 2020-02-15 12:23:58 +08:00
Argo Zhang a099b9e4a9
db: 增加地理位置服务数据 2020-02-14 19:14:21 +08:00
Argo Zhang 2e8705b8b0
refactor: 增加地理位置汉字信息 2020-02-14 19:07:47 +08:00
Argo 37c74dfeee !68 增加功能:网站设置中增加地理位置服务配置功能
Merge pull request !68 from Argo/dev-IP
2020-02-14 18:39:52 +08:00
Argo Zhang eefed96ad5
feat: 网站设置增加地理位置配置信息 2020-02-14 18:05:13 +08:00
Argo-2016 29a7766945 refactor: 整理脚本目录结构 2020-02-13 14:26:13 +08:00
Argo-2016 722b2e1a52 build: 增加 MySql 单元测试 2020-02-13 13:53:09 +08:00
Argo Zhang 78f41e4aa0
test: 更正单元测试推送脚本 2020-02-13 02:14:34 +08:00
Argo Zhang 6321500dd7
fix: Blazor 站点首页防止重复添加 PathBase 2020-02-12 22:53:27 +08:00
Argo Zhang 5fbb942a26
fix: 修复侧边栏菜单缺失问题 2020-02-12 22:35:02 +08:00
Argo bddefe3971 !67 单元测试:重构单元测试
* test: 增加地理位置服务单元测试
* build: 依赖组件升级
* test: 增加健康检查代码覆盖率
* test: 增加启用默认应用后访问首页代码覆盖
* build: 移除 AutoDB 相关测试
* test: 修复 MongoDB 单元测试
* build: 单元测试移除 MySql
* test: 更新 Mobile 单元测试
* build: 更改单元测试脚本
* test: 整合其他数据库单元测试
* test: 增加首页链接单元测试
* test: 增加数据库回滚测试
* refactor: DBLogTask 移动到单独文件中
* build: 依赖组件升级
* test: 增加演示模式相关单元测试
* test: 增加 Serch 相关单元测试
* refactor: 移动 Blazor Model 到 Models 目录下
* build: 排除 healths 控制器的代码覆盖率
* refactor: 移除 ConfigurationHelperExtensions 文件
* refactor: 健康检查结果接口移动到单独文件中
* refactor: 新加 SQLite 单元测试
* build: 增加 Sqlite 单元测试
2020-02-12 21:56:35 +08:00
Argo Zhang 43fdbf1d03
fix: DefaultLayout 组件 HomeUrl 属性支持 PathBase 2020-02-11 15:57:33 +08:00
argo zhang 1867653767 fix: 侧边栏链接支持 pathbase 2020-02-11 14:11:03 +08:00
Argo Zhang 4bb1612b3f fix: Header 组件地址链接支持 PathBase 2020-02-11 14:11:03 +08:00
Argo Zhang a028c1fbf8 refactor: 优化 HeaderBase 组件性能 2020-02-11 14:11:03 +08:00
Argo Zhang 5812d7a3a8 fix: 修正 多 Tabs 挂件地址 2020-02-11 14:11:03 +08:00
Argo Zhang 8262b0c83e
fix: 网站设置缓存数据禁止出现分页控件 2020-02-11 00:11:16 +08:00
Argo Zhang 9f67ac65b8
doc: 增加 Oracle 数据库说明 2020-02-10 10:28:59 +08:00
Argo-2016 43b48fc9ae feat: Blazor 程序异常页面增加文件日志明细功能 2020-02-09 13:28:21 +08:00
Argo-2016 06dae58db1 refactor: 程序异常日志文件集合代码整理到 Helper 中 2020-02-08 13:27:27 +08:00
Argo Zhang 8d8e3977ac
feat: 增加通知管理页面 2020-02-07 17:41:42 +08:00
Argo Zhang 0a13ba4744
feat: Blazor 增加User扩展方法格式化显示名称 2020-02-06 13:42:57 +08:00
Argo Zhang e510054076
feat: 格式化用户显示名称 2020-02-06 13:33:16 +08:00
Argo Zhang 36d71bfb89
feat: 角色对用户授权页面用户显示名为空时显示登录用户名 2020-02-06 13:25:23 +08:00
Argo Zhang 7ef09fae6c
feat: 角色维护页面增加授权按钮方法 2020-02-06 13:20:33 +08:00
Argo Zhang 4d83bf470b
feat: 部门维护增加授权按钮方法 2020-02-06 13:20:14 +08:00
Argo Zhang 30c4dc9b91
feat: 用户维护界面增加授权按钮方法 2020-02-06 13:19:34 +08:00
Argo Zhang 22b3d760b6
feat: 菜单维护页面增加保存提示信息 2020-02-05 18:43:48 +08:00
Argo Zhang 7ea6d0a4e1
feat: 菜单维护页面增加对角色授权功能 2020-02-05 17:46:28 +08:00
Argo Zhang 928afdf0d5
fix: 菜单维护页面增加 CategorName 显示名称 2020-02-05 16:26:17 +08:00
Argo Zhang 4c3a0da671
style: 固定表头时 th 不折行 2020-02-05 16:24:24 +08:00
Argo Zhang 35ae9a84d7
refactor: 优化性能 2020-02-05 14:34:12 +08:00
Argo Zhang b22e097fe0
fix: 菜单维护页面缺失菜单类别表头 2020-02-05 14:32:36 +08:00
Argo Zhang 95c963a4e5
feat: 网站设置缓存表格提供一键清除与刷新按钮 2020-02-05 13:25:05 +08:00
Argo Zhang 45bf73114e
style: 设置每页数据条数样式 2020-02-04 16:02:51 +08:00
Argo Zhang 4202871c29
refactor: 未设置 DisplayName 时显示字段名 2020-02-04 16:02:21 +08:00
Argo Zhang 667e482687
style: 设置列不折行 2020-02-04 15:06:06 +08:00
Argo Zhang 721bccf3af
refactor: 优化 Table 组件代码 2020-02-04 14:57:54 +08:00
Argo Zhang 626d0c6cc1
refactor: Table 组件整理属性排序 2020-02-04 14:30:30 +08:00
Argo Zhang 37e54d121a
refactor: Table 组件 ShowLineNo 默认值更改为 true 2020-02-04 14:16:40 +08:00
Argo Zhang 35fb697651
refactor: Table 组件 ShowPagination 默认值改为 true 2020-02-04 14:16:01 +08:00
Argo Zhang a34d621f42
refactor: Table 组件移除 OnDataSourceQuery 方法
#Comment
统一使用 OnQuery 方法
2020-02-04 14:14:50 +08:00
Argo Zhang 729fb3bde0
feat: 增加工具菜单导航到 mvc 框架内 2020-02-04 11:44:47 +08:00
Argo Zhang 8d55776c70
feat: Blazor 增加程序异常页面 2020-02-04 11:37:51 +08:00
Argo Zhang 47c98c1466
fix: Exceptions 排序错误 2020-02-04 11:37:21 +08:00
Argo Zhang 6d5eac8cd0
fix: 更改 Table Id 属性值 2020-02-04 11:12:36 +08:00
Argo Zhang 8da9dd0fb6
style: 时间列宽更改为 170px 2020-02-04 11:07:02 +08:00
Argo Zhang 57b3e9519a
feat: Blazor 增加任务管理页面 2020-02-04 11:02:30 +08:00
Argo Zhang a9dd132586
feat: Blazor 登录日志增加登录结果格式化 2020-02-03 18:19:43 +08:00
Argo Zhang 79175dcbe2
feat: Blazor 增加 SQL日志功能 2020-02-03 18:09:14 +08:00
Argo Zhang 364c718cd2
feat: Blazor LgbTableHeader 支持扩展属性 2020-02-03 18:08:39 +08:00
Argo Zhang b2b4192d55
feat: Blazor 增加访问日志功能 2020-02-03 17:38:11 +08:00
Argo Zhang 3a8621825d
feat: Blazor 增加登录日志功能 2020-02-03 17:32:12 +08:00
Argo Zhang e13b87d202
feat: Blazor 操作日志功能完成 2020-02-03 16:47:08 +08:00
Argo Zhang f0fff56a6b
fix: 更正无自定义按钮时移动端出现 gear 组件 2020-02-02 11:28:51 +08:00
Argo Zhang e1c6cf7a1e
refactor: 修改 Table 组件默认值为 false 2020-02-02 11:28:18 +08:00
Argo Zhang 94d3e1201e
feat: 增加在线用户页面 2020-02-01 17:25:15 +08:00
Argo Zhang eb47622725
refactor: 移除不使用的 Table @ref 2020-02-01 16:27:10 +08:00
Argo Zhang e8b39af55f
refactor: TableToolbarContent 组件内置 2020-02-01 16:26:38 +08:00
Argo Zhang 32fbf10c92
style: 可排序表头禁止折行 2020-02-01 15:23:24 +08:00
Argo Zhang add11c0327
fix: Blazor 网站设置缓存列表无表头 2020-02-01 14:59:21 +08:00
Argo Zhang 213eadefec
fix: Blazor 模式下固定表头时表格内部始终出现横向滚动条 2020-02-01 14:10:34 +08:00
Argo Zhang fef2976c1f
refactor: 移除 no-toolbar 样式 2020-02-01 13:58:25 +08:00
Argo Zhang 0e49f723da
refactor: 重构 Table Border 样式增加圆角 2020-01-31 13:23:54 +08:00
Argo Zhang 8d119f9897
feat: Blazor 模式下完善访问日志 2020-01-30 14:32:48 +08:00
Argo Zhang 4010fb8efb
fix: Blazor 网页跟踪确实 Pages 路径 2020-01-30 12:05:15 +08:00
Argo Zhang b7bede8921
fix: 更新命名空间紧急修复编译失败错误 2020-01-29 10:37:18 +08:00
Argo Zhang fdfce4e56d
refactor: 更改 TaskLogHub 文件路径 2020-01-29 10:16:49 +08:00
Argo Zhang cd3817dfb3
build: 依赖组件更新到最新版 2020-01-29 10:08:09 +08:00
Argo 69c24b83c9 !66 重构代码:Blazor 模式代码统一到 Pages 目录下
Merge pull request !66 from Argo/dev-blazor
2020-01-29 10:03:33 +08:00
Argo Zhang bef576efe5
refactor: 调整 Tab 网页路由 2020-01-28 19:46:22 +08:00
Argo-2016 344a6cbca0 refactor: 目录结构调整 2020-01-28 19:35:07 +08:00
Argo 111000c55e !65 增加功能:Blazor 模式下增加访问日志
Merge pull request !65 from Argo/dev-trace
2020-01-28 10:16:25 +08:00
Argo Zhang 45e4d734fb
feat(#I18PRL): Blazor 模式增加访问日志
#Issue
link https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18PRL
2020-01-28 10:14:28 +08:00
Argo 1645f5f657 !64 增加功能:Blazor 模式下权限维护页面增加表头排序功能
Merge pull request !64 from Argo/dev-sort
2020-01-27 15:18:42 +08:00
Argo Zhang 91b174f296
feat: 权限维护页面增加表头排序功能 2020-01-27 15:15:22 +08:00
Argo Zhang c620323461
feat: 字典表维护增加表头排序功能 2020-01-27 15:05:28 +08:00
Argo Zhang b00359b60d
style: 增加排序样式 2020-01-27 14:39:16 +08:00
Argo Zhang 8fb2867b94
style: 更新分页组件样式自动折行 2020-01-26 15:59:23 +08:00
Argo Zhang bc359dca8d
style: Blazor 模式增加 Table 圆角样式 2020-01-26 15:52:34 +08:00
Argo Zhang 54835998dc
feat: 网站设置增加缓存列表与清除功能 2020-01-26 14:24:45 +08:00
Argo Zhang e8b824c6a0
refactor: 更改 Table 组件属性默认值 2020-01-26 12:54:11 +08:00
Argo Zhang 09e72eb0ee
style: Client 微调侧边栏顶部间隙 2020-01-25 10:30:04 +08:00
Argo Zhang f171685d1c
fix(#I18PAH): 移动端点击 lgbInfo 组件时导航到顶部
#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18PAH
2020-01-25 09:41:11 +08:00
Argo Zhang 1a3c75299d
refactor: 更改适配默认高度 2020-01-24 11:35:20 +08:00
Argo Zhang 673df763b5
feat: 适配12寸小屏幕加载数据时防止出现滚动条 2020-01-24 11:23:34 +08:00
Argo Zhang 099dfc483a
refactor: blazor 模式下固定表头时设置 Table 最小高度为 300 2020-01-24 10:40:56 +08:00
Argo Zhang f0bf03b368
refactor: 网站设置 MVC 切换设置提示框内容 2020-01-24 10:32:46 +08:00
Argo 425d4ce180 !63 增加功能:Blazor 模式下增加搜索功能
Merge pull request !63 from Argo/dev-blazor-toolbar
2020-01-23 17:22:09 +08:00
Argo Zhang dca64218c1
refactor: 消除可为空警告信息 2020-01-23 17:09:56 +08:00
Argo Zhang 0cd470f233
fix: 菜单维护页面 Id 与角色维护页面重复 2020-01-23 17:09:18 +08:00
Argo Zhang 18f13a6cca
feat: 权限维护界面增加 SearchText 搜索功能 2020-01-23 16:57:34 +08:00
Argo Zhang fe9184cf8d
feat: 搜索文本框支持键盘 2020-01-23 16:20:59 +08:00
Argo Zhang a0c249719a
feat: 支持 SearchText 参数传递给页面 2020-01-23 16:04:19 +08:00
Argo Zhang 09a3523432
feat: 完善重置查询按钮 2020-01-23 14:55:17 +08:00
Argo Zhang af80525198
feat: 增加高级查询按钮弹窗 2020-01-23 11:14:40 +08:00
Argo Zhang c3cee0dc58
refactor: 重构 Modal 弹窗逻辑 2020-01-23 11:10:49 +08:00
Argo Zhang 11a121cc63
refactor: 权限相关页面增加 ShowSearch 属性 2020-01-22 22:49:16 +08:00
Argo Zhang 533498797a
fix: 固定表头时高度多 38 像素
#Comment
Table Body 样式 margin-top: -38px 导致
2020-01-22 22:21:10 +08:00
Argo Zhang 301565d8c8
feat: 增加 ShowSearch 属性 2020-01-22 22:19:56 +08:00
Argo 65fda668bf !62 增加功能:Blazor 模式下支持固定表头设置
Merge pull request !62 from Argo/dev-blazor-table
2020-01-22 15:45:06 +08:00
Argo Zhang ca3cbdc6e5
feat: Blazor 模式下固定表头是增加高度动态调整功能 2020-01-22 15:34:25 +08:00
Argo Zhang 38134e2f0a
feat: 增加固定表头 table border 样式 2020-01-22 10:43:21 +08:00
Argo Zhang 0aabbb8c50
feat: 消除调整表格宽度时屏幕抖动问题 2020-01-22 10:28:27 +08:00
Argo Zhang ef1718360e
feat: 仅一次加载初始化滚动条 2020-01-22 10:24:14 +08:00
Argo Zhang 261f91683f
fix: 菜单维护固定表头不起作用 2020-01-22 09:34:33 +08:00
Argo Zhang 08adc81d1d
feat: 增加动态调整表头宽度脚本 2020-01-21 21:42:08 +08:00
Argo Zhang acdf57a0f8
feat: Blazor 模式下增加固定表头属性 2020-01-20 21:12:07 +08:00
Argo e2cb79b4ec !61 增加功能:Blazor 模式下增加网页组件路由
Merge pull request !61 from Argo/dev-blazor-wip
2020-01-20 17:14:18 +08:00
Argo Zhang 4c889a5a52
feat(#I18MYN): 增加网页路由
#Comment
comment #I18MYN

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18MYN
2020-01-20 17:10:00 +08:00
Argo Zhang 5159ed3f19
refactor: 重构 Toast 组件防止多个 toast 组件同时显示问题 2020-01-20 16:31:10 +08:00
Argo eb7ccebf90 !60 增加功能:Blazor 增加菜单维护
Merge pull request !60 from Argo/dev-blazor-wip
2020-01-20 12:00:22 +08:00
Argo Zhang 2da705ec22
feat: 菜单维护页面支持 int 属性类型的 Order 2020-01-20 11:57:39 +08:00
Argo Zhang aeee739b8f
refactor: QueryPageBase Add 方法增加 virtual 关键字 2020-01-20 10:52:44 +08:00
Argo Zhang 5b3fea70eb
feat: Blazor 下拉框组件支持 Disabled 属性 默认为 false
#Comment
comment #BUGID

#Issue
close link fix https://gitee.com/LongbowEnterprise/dashboard/issues?id=BUGID

#     样式 :    feat(location): 接入登录API
#
#                  登录功能与服务器对接
#
<type>(<scope>): <subject>

<body>

<footer>

#其中 type 的值可以有
#    feat: 新功能
#    fix: 修复bug
#    doc: 文档改变
#    style: 代码格式改变
#    refactor: 某个已有功能重构
#    perf: 性能优化
#    test: 增加测试
#    build: 改变了build工具 如 grunt 换成了 npm
#    revert: 撤销上一次的 commit
#    db: 数据库文件或者脚本更改
#
#scope: 用来说明此次修改的影响范围
#     all: 表示影响面大 ,如修改了网络框架  会对真个程序产生影响
#     location: 表示影响小,某个小小的功能
#     module: 表示会影响某个模块 如登录模块、首页模块 、用户管理模块等等
#
#subject: 用来简要描述本次改动,概述就好了
#
#body: 具体的修改信息 应该尽量详细
#
#footer: 放置写备注啥的,如果是 bug ,可以把bug id放入
#
2020-01-20 10:37:27 +08:00
Argo Zhang 49cdbbb3f7
feat: Blazor 模式增加菜单维护网页 2020-01-19 22:25:22 +08:00
Argo Zhang 4b3e6fd04c
feat: Blazor 模式下增加未开发网页默认文字 2020-01-19 19:50:20 +08:00
Argo Zhang d0c05b4f78
refactor: 默认应用使用 lgbinfo 组件 2020-01-19 17:32:50 +08:00
Argo-2016 98b8eac888 feat: 增加 lgbinfo 组件
#Comment
网站设置 Blazor 开关更新为 lgbinfo 组件
2020-01-19 16:36:59 +08:00
Argo-2016 be80b0c629 refactor: 重构 bootstrap-toggle 默认值
#Comment
默认值为开启
2020-01-19 14:52:40 +08:00
Argo Zhang ba8320708a
refactor: 增加 PageContent 组件的描述信息 2020-01-19 11:50:15 +08:00
Argo Zhang f66aac9d30
test: SaveSettings 接口定义变更 2020-01-19 11:49:27 +08:00
Argo Zhang b0ac8c8545
refactor: 系统日志关闭搜索功能 2020-01-19 11:00:53 +08:00
Argo Zhang f493ce3f64
refactor: 优化 bootstrap-table 工具栏性能
#Commnet
高级查询按钮逻辑内置于启用搜索功能后
2020-01-18 21:59:21 +08:00
Argo Zhang 863eb5ef09
feat: 宽度小于 768 时禁止固定表头 2020-01-18 21:58:30 +08:00
Argo Zhang 57170ae810
style: Search Input Tooltip 样式调整 2020-01-18 21:55:20 +08:00
Argo Zhang 6846a32769
style: 查询结果数据表格工具栏适配 2020-01-18 21:38:37 +08:00
Argo Zhang 1432ab640f
feat: 程序异常禁用搜索功能 2020-01-18 21:38:05 +08:00
Argo Zhang 3f72af3757
feat: 任务管理页面移除高级查询按钮 2020-01-18 21:25:46 +08:00
Argo Zhang b03289d10f
feat: 程序异常页面增加高级查询 2020-01-18 21:25:06 +08:00
Argo Zhang 80a0e2794d
fix(#I18IU3): 修复脚本错误
#Issue
link https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18IU3
2020-01-18 21:17:45 +08:00
Argo Zhang f0954645b4
refactor: 动态计算高度支持 onresize 事件 2020-01-18 21:08:37 +08:00
Argo Zhang c73df8dceb
refactor: 固定表头计算表格高度支持面包屑导航条 2020-01-18 20:41:07 +08:00
Argo Zhang 614c49083e
fix(#I18KJ6): 部门维护页脚不正常
#Comment
comment #I18KJ6
部门维护内超链接 A 未闭合导致

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18KJ6
2020-01-18 18:48:24 +08:00
Argo Zhang 38c0b41433
refactor: 动态计算数据表格高度 2020-01-18 18:21:54 +08:00
Argo Zhang cae1be17c6
Merge branch 'dev-table'
# Conflicts:
#	src/admin/Bootstrap.Admin/wwwroot/css/site.css
2020-01-18 17:48:19 +08:00
Argo Zhang 217d432b72
feat(#I18IU2): blazor 网站设置增加固定表头选项
#Issue
link https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18IU2
2020-01-18 17:47:50 +08:00
Argo Zhang 59b7dc6134
style: 增加表格工具条样式 2020-01-18 17:37:48 +08:00
Argo Zhang 1ddbd95d30
revert: 更新刷新按钮显示文字 2020-01-18 17:37:24 +08:00
Argo Zhang e769dedd17
style: 搜索框增加 KBD 样式 2020-01-18 17:27:10 +08:00
Argo Zhang 8584152673
feat(#I18IU2): 固定表头
#Comment
comment #I18IU2

#Issue
link https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18IU2
2020-01-18 17:09:39 +08:00
Argo Zhang 86622f169c
db: 增加网站设置固定表头选项 2020-01-18 16:36:37 +08:00
Argo c972da88f5 !59 增加功能:重新设计搜索区域 UI
Merge pull request !59 from Argo/dev
2020-01-18 12:25:10 +08:00
Argo Zhang 80e1b2ebc1
feat(#I18IU3): 重新设计搜索区域UI
#Comment
comment #I18IU3

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18IU3
2020-01-18 12:21:16 +08:00
Argo Zhang ce976d3353
db: MySQL 数据增加控件集合菜单脚本 2020-01-17 15:07:44 +08:00
Argo Zhang 562b8dfe3e
feat(#I18ITV): 网站顶端增加Blazor MVC 切换按钮
#Comment
comment #I18ITV

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18ITV
2020-01-17 12:56:16 +08:00
Argo Zhang 9e081f6340
feat(#I18IRV): 增加网站调整功能
#Comment
comment #I18IRV

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18IRV
2020-01-17 11:53:29 +08:00
Argo Zhang 9ac820c4b9
feat(#I18IE6): 增加 Blazor 关闭功能
#Comment
comment #I18IE6

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18IE6
2020-01-17 11:51:23 +08:00
Argo Zhang bf0398fe91
fix(#I18IIH): 默认样式下增加用户信息面板鼠标悬停效果
#Comment
comment #I18IIH
个人中心 设置 消息 三个选项颜色设置为 #fff

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18IIH
2020-01-17 10:31:51 +08:00
Argo Zhang d6d5c09bbe
style: 微调个人中心样式下拉框 Item 颜色 2020-01-17 10:12:06 +08:00
Argo Zhang 28cf98e763
fix: 登录用户信息样式错乱 2020-01-16 21:59:26 +08:00
Argo 9ca7df8578 !58 增加功能:Blazor 个人中心增加保存应用与样式功能
Merge pull request !58 from Argo/dev-blazor-wip
2020-01-16 21:46:53 +08:00
Argo-2016 d63be129b1 feat: 个人中心增加保存应用与保存样式功能 2020-01-16 21:42:56 +08:00
Argo Zhang 2f8c01b633
refactor: 微调客户端首页介绍 2020-01-16 17:59:12 +08:00
Argo Zhang 8239fe5d4a
fix: 网站设置样式下拉框赋值 2020-01-16 16:23:28 +08:00
Argo-2016 bae10baf5d
feat: 增加 Bootstrap-Toggle 组件 2020-01-16 16:15:58 +08:00
Argo Zhang c3d4b2577d
feat(I18FVE): ConditionComponent 改造成通用组件
comment #I18FVE

close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18FVE
2020-01-16 16:15:58 +08:00
Argo Zhang 2d1506ba8d
feat: 用户维护增加分配按钮空函数 2020-01-16 13:00:37 +08:00
Argo Zhang 91627fac3f
feat: 角色维护增加分配空函数 2020-01-16 13:00:17 +08:00
Argo Zhang 44b19579b9
feat: 增加 Table Toolbar 组件 2020-01-16 12:42:52 +08:00
Argo Zhang 7c5e40c472
feat(#I18G4N): Blazor EditPage 组件支持提示信息
#Comment
comment #I18G4N

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18G4N
2020-01-15 19:44:26 +08:00
Argo Zhang 5a3ea87d61
feat(#I18G4J): 网站设置中开启 Blazor 后自动跳转到 Blazor
#Comment
comment #I18G4J

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18G4J
2020-01-15 19:26:18 +08:00
Argo Zhang 7698ce5a1c
feat(#I18G05): Blazor 编辑弹窗 Title 可配置
#Comment
comment #I18G05

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18G05
2020-01-15 18:15:36 +08:00
Argo Zhang ae385233ec
refactor(#I18FVE): ConditionComponenet 准备改造成通用组件
#Comment
comment #I18FVE

#Issue
link https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18FVE
2020-01-15 17:30:29 +08:00
Argo Zhang 9614a69a22
refactor: 更新组件ID 2020-01-15 17:22:23 +08:00
Argo 01b9dd7a1e !57 增加功能:Blazor 增加角色维护
Merge pull request !57 from Argo/dev-blazor
2020-01-15 17:20:57 +08:00
Argo Zhang d9a1ae8034
feat(#I18FTM): Blazor 模式下增加角色维护
#Comment
comment #I18FTM

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18FTM
2020-01-15 17:18:38 +08:00
Argo Zhang 9341dc1089
feat: 条件查询支持包含 2020-01-15 16:03:37 +08:00
Argo Zhang 9c15d0ed15
feat: 查询区域查询按钮默认 col-sm-auto 2020-01-15 15:53:40 +08:00
Argo Zhang b8017288e8
feat: 下拉框增加 ColumnClass 属性 2020-01-15 15:53:15 +08:00
Argo Zhang ce8f10046d
refactor: 查询区域控件增加 col-sm-auto 自适应样式 2020-01-15 15:52:45 +08:00
Argo 3b9e40ad9c !56 增加功能:Blazor 增加用户维护
Merge pull request !56 from Argo/dev-User
2020-01-15 15:43:41 +08:00
Argo Zhang 33b54ae7b9
Merge branch 'master' into dev-User
# Conflicts:
#	src/admin/Bootstrap.Admin/Extensions/DisplayNamesExtensions.cs
2020-01-15 15:42:59 +08:00
Argo Zhang 94ddc1be82
fix(#I18FGZ): Blazor 增加用户维护
#Comment
comment #I18FGZ

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18FGZ
2020-01-15 15:37:18 +08:00
Argo f7be77741b !55 增加功能:Blazor 模式下增加部门维护
Merge pull request !55 from Argo/dev
2020-01-15 15:13:41 +08:00
Argo Zhang 47ca087360
refactor: 部门维护描述字段大小调整为500与数据库一致 2020-01-15 15:08:42 +08:00
Argo Zhang 1ba3c042cf
fix(#I18FEB): Blazor 模式下增加部门维护
#Comment
comment #I18FEB

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18FEB
2020-01-15 15:07:46 +08:00
Argo Zhang 3562d92a9a
fix(#I18F5S): 修复关闭弹窗后 Tooltip 依然存在
#Comment
comment #I18F5S

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I18F5S
2020-01-15 14:14:54 +08:00
Argo Zhang 62d4051ec8
style: 微调首页欢迎字间隙 2020-01-14 21:07:42 +08:00
Argo Zhang 325301acf7
build: 增加了Blazor 页面临时移除单元测试 2020-01-14 20:06:59 +08:00
Argo-2016 22ba715cc4 test: 更新单元测试 2020-01-14 19:11:43 +08:00
Argo Zhang 601edacebe
refactor: 部门维护页面增加部门说明 2020-01-13 23:10:12 +08:00
Argo 41589aca4a !54 增加功能:合并 Blazor 分支代码修复BUG
Merge pull request !54 from Argo/dev
2020-01-13 18:49:28 +08:00
Argo-2016 68ddbae784 build: 组件升级到正式版 2020-01-13 18:43:33 +08:00
Argo-2016 360f0cdaab build: 依赖组件升级
#Comment
Bootstrap.Security.Mvc 环境变量检查使用 Envrionment 静态方法代替反射
Longbow.Web BaiDuIP38 地理位置定位器增加 BaiduSearch 二次查询方法
2020-01-13 13:29:41 +08:00
Argo Zhang 46ea84fa94
db: 增加 BaiDuIP138 地理定位器 2020-01-12 16:46:52 +08:00
Argo-2016 99cbd930c6 refactor: IP 定位器增加 BaiduIP138 类型
#Comment
移除 Locator 属性,增加 LocatorFactory 回调与 LocatorName 属性
2020-01-12 16:37:50 +08:00
Argo-2016 aea2b8e607 feat: 反序列化支持中文 2020-01-12 16:36:40 +08:00
Argo ca1f843606 !53 增加功能:个人中心用户显示名称使用双向绑定
Merge pull request !53 from Argo/dev-blazor-wip
2020-01-12 12:03:09 +08:00
Argo-2016 e3dbedf24a feat: 用户显示名称使用双向绑定 2020-01-12 11:58:46 +08:00
Argo-2016 f90833ae1a revert: 显示名称字段公有
#Comment
link commit:d0ecd71a4633dfeb69c56a5d1d066f9b12f44442
2020-01-12 11:39:09 +08:00
Argo-2016 d0ecd71a46 feat: 显示名称支持私有字段 2020-01-12 11:17:39 +08:00
Argo Zhang e800e1889c
refactor: 更新在线更改演示模式接口 2020-01-11 21:11:06 +08:00
Argo Zhang de4d10fafd
feat(#I1899Q): Blazor 多标签页栏固定
#Comment
comment #I1899Q

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I1899Q
2020-01-11 21:05:51 +08:00
Argo bf98514e1a !52 增加功能:Blazor 多标签功能网站设置中可以切换
Merge pull request !52 from Argo/dev-blazor-wip
2020-01-11 20:35:39 +08:00
Argo Zhang ecdbe52334
feat: UseBlazor 配置项功能移动到网站设置中 2020-01-11 20:29:44 +08:00
Argo Zhang 5e09284d83
refactor: 更改地理位置接口配置 2020-01-11 20:00:33 +08:00
Argo-2016 fe5aac13fd fix(#I188NA): 角色保存时判断内置角色名称不重复
#Issue
link https://gitee.com/LongbowEnterprise/dashboard/issues?id=I188NA
2020-01-11 19:43:52 +08:00
Argo-2016 0d01ea8c0e fix: 系统锁定页面增加空判断 2020-01-11 19:24:04 +08:00
Argo Zhang 8d5b161e97 test: 增加 RetrieveEnableBlazor 单元测试 2020-01-11 19:21:28 +08:00
Argo Zhang 25e09a944b db: 合并系统设置与网站设置配置项 2020-01-11 19:21:28 +08:00
Argo Zhang ce0fcb99bf
feat(#I184LO): 网站设置增加 Blazor 配置项
#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I184LO
2020-01-11 15:25:48 +08:00
Argo Zhang ad3b64481f
db: 增加 Blazor 多标签功能配置项 2020-01-11 15:25:47 +08:00
Argo Zhang ab75bbdc72
feat: 增加 Home 页面负责解析屏幕锁屏等页面 2020-01-11 14:14:40 +08:00
Argo Zhang fc0fb71ad0
style: 微调 Toast 宽度适配移动端 2020-01-11 13:41:22 +08:00
Argo Zhang 76a80d6a97
fix(#I188NA): Administrators Default 内置角色增加保护
#Comment
comment #I188NA

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I188NA
2020-01-11 11:42:50 +08:00
Argo-2016 69f31a3ba4 feat: 健康检查增加环境变量输出 2020-01-10 22:59:27 +08:00
Argo-2016 5911328cc7 fix(#I1884C): 升级 Longbow.Logging 组件修复 Exception 死循环问题
#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I1884C
2020-01-10 18:35:50 +08:00
Argo-2016 9de164f9dd fix(#I187TU): 健康检查支持 PathBase
#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I187TU
2020-01-10 18:32:15 +08:00
Argo-2016 acd45aa741 doc: 增加 Oracle 数据库连接字符串配置项 2020-01-10 12:51:01 +08:00
Argo-2016 8349517e97 feat: 支持 Oracle 数据库 2020-01-10 12:44:49 +08:00
Argo-2016 f750a4e60f db: 增加 Oracle 脚本 2020-01-10 12:43:06 +08:00
Argo Zhang 2935c2b1e4
feat: Table 组件 ID 生成规则更新 2020-01-09 13:07:42 +08:00
Argo Zhang aee783baea
refactor: 增加 QueryPageBase 基类 2020-01-09 12:51:18 +08:00
Argo Zhang 1e3fabc46f
refactor: 增加 PageBase 基类 2020-01-09 12:35:38 +08:00
Argo Zhang 9169775718
refactor: 选择列与行号互换位置 2020-01-09 11:46:58 +08:00
Argo Zhang 887a7cda0c
refactor: 移除不使用的 menuId 2020-01-09 11:46:28 +08:00
Argo-2016 eb26862702 fix(#I181HZ): 健康检查页面报错
#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I181HZ
2020-01-08 15:03:31 +08:00
Argo-2016 ff5518bd3a refactor: 使用 switch 新语法 2020-01-08 13:28:57 +08:00
Argo-2016 57282285cc refactor: 适配图片 2020-01-07 18:54:51 +08:00
Argo-2016 fedee6e7c7 doc: 前台首页增加 Blazor 链接地址 2020-01-07 18:32:24 +08:00
Argo-2016 1a99c85e85 feat: 个人中心修复拼音无法录入问题 2020-01-07 17:46:53 +08:00
Argo-2016 74fef7fdc6 feat: Toast 增加 Id 防止多个 toast 时产生错误 2020-01-07 17:12:05 +08:00
Argo Zhang a90a478348
Merge branch 'dev' into dev-blazor 2020-01-07 16:37:38 +08:00
Argo-2016 c7bc96432e style: 修复表格最后一行无边框问题 2020-01-07 16:32:23 +08:00
Argo-2016 e479aa590a fix: 文本框无法录入汉字问题 2020-01-07 16:31:58 +08:00
Argo Zhang b312858d40
Merge branch 'master' into dev 2020-01-07 13:09:43 +08:00
Argo Zhang 5c4f33d3a1
refactor: 密码为空时不进行云端记录日志 2020-01-07 12:56:24 +08:00
Argo Zhang 12e70675c8
feat: 云端日志功能一分钟发送一次 2020-01-07 12:50:45 +08:00
Argo-2016 3fd62056ba Merge branch 'dev' into dev-blazor
# Conflicts:
#	src/admin/Bootstrap.Admin/BootstrapAdmin.db
#	src/admin/Bootstrap.Admin/Controllers/HomeController.cs
#	src/admin/Bootstrap.DataAccess/Bootstrap.DataAccess.csproj
#	src/admin/Bootstrap.DataAccess/Dict.cs
#	src/client/Bootstrap.Client.DataAccess/Bootstrap.Client.DataAccess.csproj
2020-01-06 16:13:02 +08:00
Argo Zhang e2b1a42ca2
fix(#I17UM5): 移除父级菜单时判断所属应用是否可用
#Issue
linkhttps://gitee.com/LongbowEnterprise/dashboard/issues?id=I17UM5
2020-01-05 15:31:23 +08:00
Argo Zhang 2f33a5bbe6
feat(#I17UM5): 菜单维护中所属应用下拉框在适当情况下不可编辑
#Issue
link https://gitee.com/LongbowEnterprise/dashboard/issues?id=I17UM5
2020-01-05 15:19:20 +08:00
Argo Zhang bd3c725e4d
revert: 健康检查脚本移动到 healths.js 脚本中 2020-01-04 18:05:07 +08:00
Argo Zhang db09c2ecc4
refactor: 字典表维护页面查询条件调整顺序 2020-01-03 19:39:43 +08:00
Argo Zhang f92bfce833
style: 微调蓝色样式下 card 鼠标悬停样式 2020-01-03 19:39:16 +08:00
Argo Zhang 1c639942ed
build: 更新部署脚本路径为 3.1 2020-01-03 19:20:13 +08:00
Argo-2016 b65040af7e
test: 增加单元测试 2020-01-03 18:59:39 +08:00
Argo Zhang 4b0e8c22de
test: 更新 RetrieveHomeUrl 方法单元测试 2020-01-03 16:12:05 +08:00
Argo Zhang d772e73f81
style: 微调 card 组件下 modal-footer 间隙 2020-01-03 16:08:43 +08:00
Argo Zhang c569af0bd7
feat(#I17SD0): 首页登录时导航到系统配置默认应用首页
#Issue
link https://gitee.com/LongbowEnterprise/dashboard/issues?id=I17SD0
2020-01-03 16:08:11 +08:00
Argo Zhang 22809d7984
feat(#I17SD0): 网站设置增加默认应用配置功能
#Issue
link https://gitee.com/LongbowEnterprise/dashboard/issues?id=I17SD0
2020-01-03 16:05:28 +08:00
Argo Zhang 4390e3e7db
db: 字典表增加配置项默认应用程序
#Comment
开发环境下关闭,上线系统开启

#Issue
link https://gitee.com/LongbowEnterprise/dashboard/issues?id=I17SD0
2020-01-03 16:04:24 +08:00
Argo-2016 d754d42b9d fix(#I17P4U): 角色对菜单授权界面增加所属应用
#Issue
close https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues/I17P4U?from=project-issue
2020-01-02 17:17:46 +08:00
Argo-2016 5855df9240 refactor: 移除不使用的 js 库 2020-01-02 11:56:38 +08:00
Argo-2016 350b0dc3a2 refactor: 更新 libman 脚本
#Comment
SignalR 升级到 3.1.0
2020-01-02 11:47:03 +08:00
Argo-2016 924b987156 test: 删除注释代码 2019-12-31 12:18:40 +08:00
Argo Window10 a2f043fb05 test: 增加空字符串ID保存时单元测试 2019-12-23 20:32:15 +08:00
Argo Window10 22ed63278a fix(#I177E5): 修复 MongoDB 无法保存新建项
#Comment
MongoDB 主键设置为 null

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I177E5
2019-12-23 18:36:52 +08:00
Argo Zhang 2a84ecf4f4
lic: 更改开源协议为 LGPL-3.0 2019-12-23 17:54:13 +08:00
Argo Window10 fd2b4bcfd9 build: 依赖组件升级到 beta 版 2019-12-17 16:51:02 +08:00
Argo Window10 3aa8d0c326 fix(#I16TXU): 登陆认证接口调用记录登陆日志方法参数有误
#Issue
link https://gitee.com/LongbowEnterprise/dashboard/issues?id=I16TXU
2019-12-17 15:51:01 +08:00
Argo Zhang 0806d2b902
refactor: 删除 Toast 组件引用 2019-12-14 11:54:37 +08:00
Argo Window10 5cd8fc1629 refactor: 个人中心页面改变密码功能完成 2019-12-13 21:51:48 +08:00
Argo Window10 f0fb88d86f feat: 增加授权检查控件与条件输出控件 2019-12-13 17:43:31 +08:00
Argo Window10 ee8842c13a build: 版本升级使用 beta 版增加功能 2019-12-13 17:42:20 +08:00
Argo Zhang 902c9435a6
refactor: 个人中心 2019-12-13 14:46:57 +08:00
Argo Zhang 3b0d371ec1
Revert "feat: 不分页时不显示分页组件"
This reverts commit ecd008d846.
2019-12-13 14:36:15 +08:00
Argo Zhang 5a9dd7a4d5
refactor: 重构个人中心更新显示名称功能 2019-12-13 14:36:00 +08:00
Argo Window10 0c49b3ebbf refactor: 个人中心保存用户显示名称 2019-12-13 12:17:41 +08:00
Argo Window10 81948f4693 refactor: 重构 NavigationBarModel 提高性能 2019-12-12 22:43:41 +08:00
Argo Window10 37f742cca2 refactor: 移除 BootstrapComponentBase 类 2019-12-12 21:54:26 +08:00
Argo Window10 ecd008d846 feat: 不分页时不显示分页组件 2019-12-12 21:06:30 +08:00
Argo Window10 5528dbebbe refactor: 精简代码移除未找到视图级联授权状态 2019-12-12 18:56:15 +08:00
Argo Window10 b14089affb refactor: 使用新组件标签 2019-12-12 18:54:29 +08:00
Argo Window10 210209b94d build: 更新 linux 部署脚本 2019-12-12 15:33:38 +08:00
Argo Window10 69378a96d8 refactor(common): 移除健康检查脚本
#Comment
健康检查脚本移动到 healths 脚本文件中
2019-12-12 14:59:34 +08:00
Argo Window10 173626490e doc: 字典表增加 xml 描述信息 2019-12-12 13:03:03 +08:00
Argo Window10 182f598d84 feat: 访问日志不跟踪 _blazor 地址 2019-12-12 13:01:50 +08:00
Argo Window10 02c503c977 build: 项目升级到 NETCore 3.1 版本 2019-12-12 12:34:31 +08:00
Argo Window10 8297b05081 fix: 修复侧边栏默认 active 菜单项 2019-12-12 12:34:01 +08:00
Argo Zhang 642616c424
build: 更新编译版本号 2019-12-12 00:45:27 +08:00
Argo Zhang 81347cd0e6
doc: 移除开发环境章节中的分支说明 2019-12-12 00:43:42 +08:00
Argo Window10 001f5921a5
build: 项目升级到 NETCore 3.1 版本 2019-12-12 00:43:33 +08:00
Argo Zhang 954b7556a7
Merge branch 'dev-blazor' into publish
# Conflicts:
#	src/admin/Bootstrap.Admin/appsettings.json
2019-12-10 22:15:39 +08:00
Argo Window10 e554f58fa2 refactor: 增加页面路由以及 Tab 自动调整 2019-12-10 22:11:22 +08:00
Argo Window10 8fae244170 feat: 表头支持自动获取显示名称 2019-12-10 18:20:06 +08:00
Argo Window10 f383b62864 refactor: 增加 Clone 扩展方法 2019-12-10 16:54:17 +08:00
Argo Window10 60b0f2225d refactor: 字典表功能完善 2019-12-10 15:39:06 +08:00
Argo c9c591a582 !51 增加功能:webapi 路由不使用 /api 开头时抛错 403
Merge pull request !51 from Argo/dev
2019-12-08 11:41:30 +08:00
Argo Window10 02a07ec1c8 fix(#I168UP): 更新 Mvc 组件移除权限判断中对 /api 路径的过滤
#comment
改用判断路由是否继承 ApiController 来判断
#Issue
link https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues/I168UP?from=project-issue
2019-12-08 11:33:06 +08:00
Argo Window10 3da4d11857 refactor: 增加角色对用户授权弹框过滤条件按钮事件 2019-12-08 11:00:01 +08:00
Argo 4f60ca085f !50 增加功能:角色对用户授权弹窗增加过滤条件框
Merge pull request !50 from Argo/dev-I1645P
2019-12-08 10:25:04 +08:00
Argo Window10 1fe48553f6 Merge branch 'refs/heads/dev-I1645P' into publish 2019-12-08 10:18:04 +08:00
Argo Window10 9a1e482a80 fix(#I1645P): 角色对用户授权弹窗内增加过滤条件框
#Issue
link https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues/I1645P
2019-12-08 10:17:39 +08:00
Argo Window10 2c92d56547 feat: Login 登录接口增加保护机制
#Comment
用户名密码为空时直接返回到登录页面,防止 PostMan 类似软件攻击
2019-12-08 09:40:03 +08:00
Argo Window10 60d7f5d5ac fix: 修复短信登录接口被调用时手机号或验证码为空时直接返回登录页面 2019-12-07 10:48:38 +08:00
Argo Window10 9c5064c4c3 Merge branch 'refs/heads/dev' 2019-12-06 23:48:07 +08:00
Argo Window10 964a1e7ca8 build: 依赖组件升级到正式版 2019-12-06 23:47:52 +08:00
Argo Window10 7b548051f8 fix(#I16BFG): 个人中心保存按钮在特殊情况下失效
#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I16BFG
2019-12-06 23:20:53 +08:00
Argo Window10 f109b2126e fix(#I16BFG): 个人中心保存按钮在特殊情况下失效
#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I16BFG
2019-12-06 23:20:08 +08:00
Argo Window10 f5abd580ff fix: 修复 Longbow.Cache ToList 异常问题
#Comment
版本临时升级到 beta-3
2019-12-04 21:26:13 +08:00
Argo Zhang c65c75ac69
fix: 同步 longbow-select 组件 2019-12-04 19:55:24 +08:00
Argo Zhang 0ef303540e
feat: 增加 UseHttps 配置
#Comment
通过配置可以使用纯 http 协议
2019-12-03 22:56:02 +08:00
Argo 93af3948be !49 增加功能:Blazor 框架下字典表维护功能完成
* feat: Query 组件支持泛型
* refactor: Dicts 组件移除不用的引用
* refactor: EditPage 组件增加 Id 保护
* doc: 增加程序注释
* feat: 增加验证控件扩展
* refactor: IValidateComponent 更改方法名
* refactor: 重构 checkbox 选中机制
* fix: 查询按钮过滤条件不生效问题
* fix: 修复查询区域按钮点击不能切换到首页数据问题
* feat: 完善保存功能
* refactor: Save 方法参数更改为实体类
* refactor: 优化每页显示数据算法
* fix: 修复新建数据项时清除已选数据功能
* feat: 完善删除功能
* feat: 查询后清楚已选条目
* feat: 修复编辑按钮功能
* feat: 增加行号设置
* refactor: 重构分页组件移除 Table 组件对其引用
* refactor: 重构 Dicts 页面组件化
* feat: 增加 Validate 功能
* refactor: 查询方法增加默认参数值
* feat: 增加删除确认功能
* style: 微调表格内按钮高度
* style: 微调 gear 样式
* fix: 修复表格数据删除后仍然可编辑
* feat: 增加 Table 表格内按钮组
* refactor: 增加删除数据是否成功提示
* feat: 增加 Toast 组件
* feat: 增加 Alert 控件
* feat: 增加保存功能
* feat: 表格首列设置为 checkbox 功能
* feat: 增加选择列
2019-12-03 01:42:19 +08:00
Argo Window10 81bb7132b1 refactor: 统一字典表 Define 字段显示名称为字典类型 2019-11-29 12:59:28 +08:00
Argo Window10 c824c008fc feat: Table 增加双向绑定功能 2019-11-28 21:34:12 +08:00
Argo Window10 9484a6e598 feat: 分页栏增加自定义每页数据数量 2019-11-28 17:50:46 +08:00
Argo Window10 8bda9c416f feat: 增加 Select 组件 2019-11-28 17:07:13 +08:00
Argo Window10 193b73f0be style: 增加 tab-content 顶端间隙 2019-11-28 15:56:42 +08:00
Argo Window10 6004c0c8f1 feat: 增加分页组件 2019-11-28 15:22:01 +08:00
Argo Window10 5b05c4b9ab feat: Modal 组件模板化 2019-11-28 11:49:13 +08:00
Argo Window10 bfc1869d5f feat: 支持 modal 组件 2019-11-28 10:47:13 +08:00
Argo Window10 41e69b820c refactor: 侧边栏菜单 Active 使用绑定 2019-11-28 00:20:39 +08:00
Argo Window10 d1525e0651 refactor: TabSet/PageSet 增加 Active 属性 2019-11-27 23:11:39 +08:00
Argo Window10 a901aa4ee6 fix: 移动健康检查脚本到 longbow.common 中 2019-11-26 17:39:22 +08:00
Argo Zhang df57e0b249
doc: 更新 readme master 编译分支挂件链接地址 2019-11-26 14:35:05 +08:00
Argo Window10 0eac1de73d test: 修复 Dicts 单元测试失败 2019-11-26 14:18:18 +08:00
Argo Window10 72c5cd9414 test: appveyor 自动测试禁止发送邮件 2019-11-26 14:18:18 +08:00
Argo 030cd53eb5 !47 Task,加注释
Merge pull request !47 from zzgzzgok/dev-blazor
2019-11-26 13:38:11 +08:00
zzgzzgok cd99e6ec50 // 此处代码可注释掉
//TaskServicesManager.GetOrAdd("故障任务", token => throw new Exception("故障任务"));

加注释
2019-11-26 12:58:14 +08:00
Argo Window10 05d5557a90 fix(#I15O20): 修复 longbow-select 丢失 readonly 属性
#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I15O20
2019-11-26 11:19:15 +08:00
Argo Window10 14ac39c61d refactor: 移动组件 NavigationManager 与 JSRuntime 到基类 2019-11-26 01:42:39 +08:00
Argo Window10 08ff785719 feat: 多 Tabs 导航切换功能 2019-11-25 18:19:27 +08:00
Argo Zhang e1c7c3fff3
build(#I15JR7): 修复 docker 编译失败问题
#Comment
编译环境中未启用空检查

#Issue
close https://gitee.com/LongbowEnterprise/dashboard/issues?id=I15JR7
2019-11-24 11:01:09 +08:00
Argo Window10 5ec8eb4cce feat: 完成首页功能 2019-11-17 16:46:51 +08:00
Argo Window10 bda547f321 Merge branch 'refs/heads/dev' into dev-blazor
# Conflicts:
#	src/admin/Bootstrap.DataAccess/Bootstrap.DataAccess.csproj
2019-11-17 15:57:43 +08:00
Argo Windows 7c33399891 feat: 登录功能 2019-11-04 18:41:42 +08:00
1325 changed files with 65066 additions and 7486 deletions

View File

@ -16,7 +16,7 @@ indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
charset = utf-8-bom
[*.{json,yml,xml}]
[*.{json,yml,xml,csproj,props}]
indent_size = 2
###############################
# .NET Coding Conventions #
@ -123,9 +123,13 @@ csharp_space_between_method_call_empty_parameter_list_parentheses = false
# Wrapping preferences
csharp_preserve_single_line_statements = true
csharp_preserve_single_line_blocks = true
csharp_style_namespace_declarations=file_scoped:silent
###############################
# VB Coding Conventions #
###############################
[*.vb]
# Modifier preferences
visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion
[*.cs]
# Add file header
file_header_template = Copyright (c) Argo Zhang (argo@163.com). All rights reserved.\nLicensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.\nWebsite: https://admin.blazor.zone

View File

@ -14,6 +14,6 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.0.100
dotnet-version: 5.0.103
- name: Build with dotnet
run: dotnet build src/admin/Bootstrap.Admin/ --configuration Release

View File

@ -12,4 +12,4 @@ jobs:
steps:
- uses: actions/checkout@v1
- name: Build the Docker image
run: docker build . --file src/admin/Bootstrap.Admin/Linux.Dockerfile --tag ba:$(date +%s)
run: docker build . --file src/admin/Bootstrap.Admin/Dockerfile --tag ba:$(date +%s)

5
.gitignore vendored
View File

@ -85,7 +85,6 @@ StyleCopReport.xml
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
@ -348,10 +347,10 @@ ASALocalRun/
# Net Core Keys
**/[Kk]eys/*.xml
Bootstrap.*.xml
Bootstrap*.xml
###### -- Custom Ignore Section, Make sure all files you add to the git repo are below this line -- ######
# Coverage
coverage*.xml
tools/
tools/

View File

@ -0,0 +1,20 @@
{
"solution": {
"path": "BootstrapAdmin.sln",
"projects": [
"src\\blazor\\admin\\BootstrapAdmin.Caching\\BootstrapAdmin.Caching.csproj",
"src\\blazor\\admin\\BootstrapAdmin.DataAccess.Models\\BootstrapAdmin.DataAccess.Models.csproj",
"src\\blazor\\admin\\BootstrapAdmin.DataAccess.PetaPoco\\BootstrapAdmin.DataAccess.PetaPoco.csproj",
"src\\blazor\\admin\\BootstrapAdmin.Web.Core\\BootstrapAdmin.Web.Core.csproj",
"src\\blazor\\admin\\BootstrapAdmin.Web\\BootstrapAdmin.Web.csproj",
"src\\blazor\\client\\BootstrapClient.DataAccess\\BootstrapClient.DataAccess.PetaPoco.csproj",
"src\\blazor\\client\\BootstrapClient.Shared\\BootstrapClient.Web.Shared.csproj",
"src\\blazor\\client\\BootstrapClient.Web.Core\\BootstrapClient.Web.Core.csproj",
"src\\blazor\\client\\BootstrapClient.Web.Models\\BootstrapClient.DataAccess.Models.csproj",
"src\\blazor\\client\\BootstrapClient.Web\\BootstrapClient.Web.csproj",
"src\\mvc\\admin\\Bootstrap.Admin\\Bootstrap.Admin.csproj",
"src\\mvc\\admin\\Bootstrap.DataAccess\\Bootstrap.DataAccess.csproj",
"test\\UnitTest\\UnitTest.csproj"
]
}
}

View File

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29215.179
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SQLServer", "SQLServer", "{87319AF5-7C40-4362-B67C-35F9DD737DB4}"
ProjectSection(SolutionItems) = preProject
@ -10,15 +10,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SQLServer", "SQLServer", "{
db\SqlServer\Install.sql = db\SqlServer\Install.sql
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.Admin", "src\admin\Bootstrap.Admin\Bootstrap.Admin.csproj", "{7B2B7043-3CB2-4C5A-BDF2-8C47F1A5471A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.Admin", "src\mvc\admin\Bootstrap.Admin\Bootstrap.Admin.csproj", "{7B2B7043-3CB2-4C5A-BDF2-8C47F1A5471A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "db", "db", "{586410F2-C1F0-47CD-AB28-2CF506DED2C8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.Client", "src\client\Bootstrap.Client\Bootstrap.Client.csproj", "{C82A6E45-AB90-43D1-8429-5CBE953D8151}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.Client", "src\mvc\client\Bootstrap.Client\Bootstrap.Client.csproj", "{C82A6E45-AB90-43D1-8429-5CBE953D8151}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "client", "client", "{C7F51A14-2D89-4D1F-AD78-C42B79AB0BF0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.DataAccess", "src\admin\Bootstrap.DataAccess\Bootstrap.DataAccess.csproj", "{8D62BE79-BE13-43C8-969B-C9B00B3C84B7}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.DataAccess", "src\mvc\admin\Bootstrap.DataAccess\Bootstrap.DataAccess.csproj", "{8D62BE79-BE13-43C8-969B-C9B00B3C84B7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SQLite", "SQLite", "{523515EC-2AD7-4282-9AF4-9D20371183B0}"
ProjectSection(SolutionItems) = preProject
@ -26,7 +26,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SQLite", "SQLite", "{523515
db\SQLite\Install.sql = db\SQLite\Install.sql
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.DataAccess.MongoDB", "src\admin\Bootstrap.DataAccess.MongoDB\Bootstrap.DataAccess.MongoDB.csproj", "{8336F096-4B4A-4710-A1FA-0F5E44CD8D26}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.DataAccess.MongoDB", "src\mvc\admin\Bootstrap.DataAccess.MongoDB\Bootstrap.DataAccess.MongoDB.csproj", "{8336F096-4B4A-4710-A1FA-0F5E44CD8D26}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MongoDB", "MongoDB", "{A06A0AD8-A246-4329-B024-7174AE4A3EDE}"
ProjectSection(SolutionItems) = preProject
@ -57,9 +57,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Postgresql", "Postgresql",
db\Postgresql\install.sql = db\Postgresql\install.sql
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.Client.DataAccess", "src\client\Bootstrap.Client.DataAccess\Bootstrap.Client.DataAccess.csproj", "{843811A2-FE49-410F-BF9F-9F1FB14A1DEE}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.Client.DataAccess", "src\mvc\client\Bootstrap.Client.DataAccess\Bootstrap.Client.DataAccess.csproj", "{843811A2-FE49-410F-BF9F-9F1FB14A1DEE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.Client.DataAccess.MongoDB", "src\client\Bootstrap.Client.DataAccess.MongoDB\Bootstrap.Client.DataAccess.MongoDB.csproj", "{BC1C6D63-ADA9-4C3B-89F0-CEB191A86BF5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.Client.DataAccess.MongoDB", "src\mvc\client\Bootstrap.Client.DataAccess.MongoDB\Bootstrap.Client.DataAccess.MongoDB.csproj", "{BC1C6D63-ADA9-4C3B-89F0-CEB191A86BF5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{6AD32A76-F3AA-423E-96EA-E5CC679934D1}"
EndProject
@ -67,13 +67,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{41B6D37A-5E5
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "admin", "admin", "{E03B7391-B52F-4449-B400-5CD9DE01F085}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{D8F90830-15D0-4031-94EE-6E5D93CB734A}"
ProjectSection(SolutionItems) = preProject
appveyor.build.ps1 = appveyor.build.ps1
appveyor.test.ps1 = appveyor.test.ps1
appveyor.yml = appveyor.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{E057452E-00EB-4C46-9F8D-14096AAE8148}"
ProjectSection(SolutionItems) = preProject
README.md = README.md
@ -81,46 +74,97 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{E057452E-0
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{85574E7C-7D58-4135-AB4B-76678552D271}"
ProjectSection(SolutionItems) = preProject
src\admin\Bootstrap.Admin\Dockerfile = src\admin\Bootstrap.Admin\Dockerfile
src\admin\Bootstrap.Admin\Linux.Dockerfile = src\admin\Bootstrap.Admin\Linux.Dockerfile
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "srcipts", "srcipts", "{72C103DB-E1D3-449F-97C2-DF12CA111FD4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "win", "win", "{C6F2DCA0-7941-4C28-9328-2D495F5DCB00}"
ProjectSection(SolutionItems) = preProject
publish-admin.cmd = publish-admin.cmd
publish-client.cmd = publish-client.cmd
watch-run-admin.cmd = watch-run-admin.cmd
watch-run-client.cmd = watch-run-client.cmd
scripts\windows\publish-admin.cmd = scripts\windows\publish-admin.cmd
scripts\windows\publish-client.cmd = scripts\windows\publish-client.cmd
scripts\windows\watch-run-admin.cmd = scripts\windows\watch-run-admin.cmd
scripts\windows\watch-run-client.cmd = scripts\windows\watch-run-client.cmd
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "linux", "linux", "{FDCFC3E3-14CF-40B2-9FE5-5BC239AAC110}"
ProjectSection(SolutionItems) = preProject
deploy-admin.sh = deploy-admin.sh
deploy-client.sh = deploy-client.sh
init.sh = init.sh
publish-admin.sh = publish-admin.sh
publish-client.sh = publish-client.sh
watch-run-admin.sh = watch-run-admin.sh
watch-run-client.sh = watch-run-client.sh
scripts\linux\deploy-admin.sh = scripts\linux\deploy-admin.sh
scripts\linux\deploy-client.sh = scripts\linux\deploy-client.sh
scripts\linux\init.sh = scripts\linux\init.sh
scripts\linux\publish-admin.sh = scripts\linux\publish-admin.sh
scripts\linux\publish-client.sh = scripts\linux\publish-client.sh
scripts\linux\watch-run-admin.sh = scripts\linux\watch-run-admin.sh
scripts\linux\watch-run-client.sh = scripts\linux\watch-run-client.sh
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ci", "ci", "{5F732D4E-133B-4DA6-811B-C369CDC3FB89}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "appveyor", "appveyor", "{5F732D4E-133B-4DA6-811B-C369CDC3FB89}"
ProjectSection(SolutionItems) = preProject
appveyor.build.ps1 = appveyor.build.ps1
appveyor.test.ps1 = appveyor.test.ps1
scripts\appveyor\appveyor.build.ps1 = scripts\appveyor\appveyor.build.ps1
scripts\appveyor\appveyor.install.ps1 = scripts\appveyor\appveyor.install.ps1
scripts\appveyor\appveyor.test.ps1 = scripts\appveyor\appveyor.test.ps1
appveyor.yml = appveyor.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{68F7C160-3FB2-4129-8F89-96F78B2DA0A9}"
ProjectSection(SolutionItems) = preProject
services\ba.admin.service = services\ba.admin.service
services\ba.client.service = services\ba.client.service
services\nginx.service = services\nginx.service
scripts\linux\services\ba.admin.service = scripts\linux\services\ba.admin.service
scripts\linux\services\ba.client.service = scripts\linux\services\ba.client.service
scripts\linux\services\nginx.service = scripts\linux\services\nginx.service
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Oracle", "Oracle", "{41E078CA-F005-4B66-B440-FD7EB731AD61}"
ProjectSection(SolutionItems) = preProject
db\Oracle\InitData.sql = db\Oracle\InitData.sql
db\Oracle\Install.sql = db\Oracle\Install.sql
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "git", "git", "{64EACBD1-23DD-4168-BEED-55D47DB1A8BB}"
ProjectSection(SolutionItems) = preProject
scripts\git\commit_msg_template.txt = scripts\git\commit_msg_template.txt
scripts\git\readme.md = scripts\git\readme.md
scripts\git\run.cmd = scripts\git\run.cmd
scripts\git\run.sh = scripts\git\run.sh
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "blazor", "blazor", "{DAE3826B-AAAB-468A-9A06-2F56EF5C0767}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "github", "github", "{C07631B9-5E5E-417A-9A16-3C88956D574E}"
ProjectSection(SolutionItems) = preProject
.github\workflows\build.yml = .github\workflows\build.yml
.github\workflows\docker.yml = .github\workflows\docker.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "mvc", "mvc", "{C996F427-DA93-49D6-9804-4E665D195FC2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "admin", "admin", "{45ADEF9B-C8BD-4224-9E12-F6716E85A22C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "client", "client", "{55A2459A-6BDE-4493-B2C0-5BE1673E99EE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapAdmin.Web", "src\blazor\admin\BootstrapAdmin.Web\BootstrapAdmin.Web.csproj", "{EF5EF5A4-616A-4BA7-9E1E-1407E8EC0395}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapAdmin.DataAccess.EFCore", "src\blazor\admin\BootstrapAdmin.DataAccess.EFCore\BootstrapAdmin.DataAccess.EFCore.csproj", "{D8ED2DF7-F7E1-4DE7-B097-D0BEE51D58E9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapAdmin.DataAccess.Models", "src\blazor\admin\BootstrapAdmin.DataAccess.Models\BootstrapAdmin.DataAccess.Models.csproj", "{7E3861AB-F797-4A9F-B7CE-0E35751FFCD9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapAdmin.DataAccess.PetaPoco", "src\blazor\admin\BootstrapAdmin.DataAccess.PetaPoco\BootstrapAdmin.DataAccess.PetaPoco.csproj", "{20D03C52-0F8B-47B6-BCA8-CF0812F82722}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapAdmin.Web.Core", "src\blazor\admin\BootstrapAdmin.Web.Core\BootstrapAdmin.Web.Core.csproj", "{DA143654-C258-410D-B5DC-FE446ED99CE4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapClient.DataAccess.PetaPoco", "src\blazor\client\BootstrapClient.DataAccess\BootstrapClient.DataAccess.PetaPoco.csproj", "{640F598B-6586-4AD6-B544-78CFF2602DFB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapClient.Web.Shared", "src\blazor\client\BootstrapClient.Shared\BootstrapClient.Web.Shared.csproj", "{93770088-3463-427B-9CD8-88B8D7945C83}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapClient.Web", "src\blazor\client\BootstrapClient.Web\BootstrapClient.Web.csproj", "{6CD7A35B-93A8-4DB2-B078-EE5A81F40032}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootStarpAdmin.DataAccess.FreeSql", "src\blazor\admin\BootStarpAdmin.DataAccess.FreeSql\BootStarpAdmin.DataAccess.FreeSql.csproj", "{11122D97-B349-4A3E-B7DD-73B8B363C47C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BootStarpAdmin.DataAccess.SqlSugar", "src\blazor\admin\BootStarpAdmin.DataAccess.SqlSugar\BootStarpAdmin.DataAccess.SqlSugar.csproj", "{1D20E6CF-9825-4CDE-B732-AE586BD1AABA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapClient.Web.Core", "src\blazor\client\BootstrapClient.Web.Core\BootstrapClient.Web.Core.csproj", "{FFDF9FF9-0B29-47D3-AD42-53A476B570EC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapClient.DataAccess.Models", "src\blazor\client\BootstrapClient.Web.Models\BootstrapClient.DataAccess.Models.csproj", "{CC3DF23A-2880-438F-BDEB-DB093E919ABA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapAdmin.Caching", "src\blazor\admin\BootstrapAdmin.Caching\BootstrapAdmin.Caching.csproj", "{ADD20515-1C1C-418B-84F6-8B05A7AA315B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -155,6 +199,58 @@ Global
{BC1C6D63-ADA9-4C3B-89F0-CEB191A86BF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BC1C6D63-ADA9-4C3B-89F0-CEB191A86BF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BC1C6D63-ADA9-4C3B-89F0-CEB191A86BF5}.Release|Any CPU.Build.0 = Release|Any CPU
{EF5EF5A4-616A-4BA7-9E1E-1407E8EC0395}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EF5EF5A4-616A-4BA7-9E1E-1407E8EC0395}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EF5EF5A4-616A-4BA7-9E1E-1407E8EC0395}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EF5EF5A4-616A-4BA7-9E1E-1407E8EC0395}.Release|Any CPU.Build.0 = Release|Any CPU
{D8ED2DF7-F7E1-4DE7-B097-D0BEE51D58E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D8ED2DF7-F7E1-4DE7-B097-D0BEE51D58E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D8ED2DF7-F7E1-4DE7-B097-D0BEE51D58E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D8ED2DF7-F7E1-4DE7-B097-D0BEE51D58E9}.Release|Any CPU.Build.0 = Release|Any CPU
{7E3861AB-F797-4A9F-B7CE-0E35751FFCD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7E3861AB-F797-4A9F-B7CE-0E35751FFCD9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7E3861AB-F797-4A9F-B7CE-0E35751FFCD9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7E3861AB-F797-4A9F-B7CE-0E35751FFCD9}.Release|Any CPU.Build.0 = Release|Any CPU
{20D03C52-0F8B-47B6-BCA8-CF0812F82722}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{20D03C52-0F8B-47B6-BCA8-CF0812F82722}.Debug|Any CPU.Build.0 = Debug|Any CPU
{20D03C52-0F8B-47B6-BCA8-CF0812F82722}.Release|Any CPU.ActiveCfg = Release|Any CPU
{20D03C52-0F8B-47B6-BCA8-CF0812F82722}.Release|Any CPU.Build.0 = Release|Any CPU
{DA143654-C258-410D-B5DC-FE446ED99CE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DA143654-C258-410D-B5DC-FE446ED99CE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DA143654-C258-410D-B5DC-FE446ED99CE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DA143654-C258-410D-B5DC-FE446ED99CE4}.Release|Any CPU.Build.0 = Release|Any CPU
{640F598B-6586-4AD6-B544-78CFF2602DFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{640F598B-6586-4AD6-B544-78CFF2602DFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{640F598B-6586-4AD6-B544-78CFF2602DFB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{640F598B-6586-4AD6-B544-78CFF2602DFB}.Release|Any CPU.Build.0 = Release|Any CPU
{93770088-3463-427B-9CD8-88B8D7945C83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{93770088-3463-427B-9CD8-88B8D7945C83}.Debug|Any CPU.Build.0 = Debug|Any CPU
{93770088-3463-427B-9CD8-88B8D7945C83}.Release|Any CPU.ActiveCfg = Release|Any CPU
{93770088-3463-427B-9CD8-88B8D7945C83}.Release|Any CPU.Build.0 = Release|Any CPU
{6CD7A35B-93A8-4DB2-B078-EE5A81F40032}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6CD7A35B-93A8-4DB2-B078-EE5A81F40032}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6CD7A35B-93A8-4DB2-B078-EE5A81F40032}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6CD7A35B-93A8-4DB2-B078-EE5A81F40032}.Release|Any CPU.Build.0 = Release|Any CPU
{11122D97-B349-4A3E-B7DD-73B8B363C47C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{11122D97-B349-4A3E-B7DD-73B8B363C47C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{11122D97-B349-4A3E-B7DD-73B8B363C47C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{11122D97-B349-4A3E-B7DD-73B8B363C47C}.Release|Any CPU.Build.0 = Release|Any CPU
{1D20E6CF-9825-4CDE-B732-AE586BD1AABA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1D20E6CF-9825-4CDE-B732-AE586BD1AABA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1D20E6CF-9825-4CDE-B732-AE586BD1AABA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1D20E6CF-9825-4CDE-B732-AE586BD1AABA}.Release|Any CPU.Build.0 = Release|Any CPU
{FFDF9FF9-0B29-47D3-AD42-53A476B570EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FFDF9FF9-0B29-47D3-AD42-53A476B570EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FFDF9FF9-0B29-47D3-AD42-53A476B570EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FFDF9FF9-0B29-47D3-AD42-53A476B570EC}.Release|Any CPU.Build.0 = Release|Any CPU
{CC3DF23A-2880-438F-BDEB-DB093E919ABA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CC3DF23A-2880-438F-BDEB-DB093E919ABA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CC3DF23A-2880-438F-BDEB-DB093E919ABA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC3DF23A-2880-438F-BDEB-DB093E919ABA}.Release|Any CPU.Build.0 = Release|Any CPU
{ADD20515-1C1C-418B-84F6-8B05A7AA315B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ADD20515-1C1C-418B-84F6-8B05A7AA315B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ADD20515-1C1C-418B-84F6-8B05A7AA315B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ADD20515-1C1C-418B-84F6-8B05A7AA315B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -163,7 +259,7 @@ Global
{87319AF5-7C40-4362-B67C-35F9DD737DB4} = {586410F2-C1F0-47CD-AB28-2CF506DED2C8}
{7B2B7043-3CB2-4C5A-BDF2-8C47F1A5471A} = {E03B7391-B52F-4449-B400-5CD9DE01F085}
{C82A6E45-AB90-43D1-8429-5CBE953D8151} = {C7F51A14-2D89-4D1F-AD78-C42B79AB0BF0}
{C7F51A14-2D89-4D1F-AD78-C42B79AB0BF0} = {41B6D37A-5E5E-42B3-85E4-D81A81E3D757}
{C7F51A14-2D89-4D1F-AD78-C42B79AB0BF0} = {C996F427-DA93-49D6-9804-4E665D195FC2}
{8D62BE79-BE13-43C8-969B-C9B00B3C84B7} = {E03B7391-B52F-4449-B400-5CD9DE01F085}
{523515EC-2AD7-4282-9AF4-9D20371183B0} = {586410F2-C1F0-47CD-AB28-2CF506DED2C8}
{8336F096-4B4A-4710-A1FA-0F5E44CD8D26} = {E03B7391-B52F-4449-B400-5CD9DE01F085}
@ -173,11 +269,30 @@ Global
{6F61C2AC-84D4-48A9-8A48-680657CC8175} = {586410F2-C1F0-47CD-AB28-2CF506DED2C8}
{843811A2-FE49-410F-BF9F-9F1FB14A1DEE} = {C7F51A14-2D89-4D1F-AD78-C42B79AB0BF0}
{BC1C6D63-ADA9-4C3B-89F0-CEB191A86BF5} = {C7F51A14-2D89-4D1F-AD78-C42B79AB0BF0}
{E03B7391-B52F-4449-B400-5CD9DE01F085} = {41B6D37A-5E5E-42B3-85E4-D81A81E3D757}
{E03B7391-B52F-4449-B400-5CD9DE01F085} = {C996F427-DA93-49D6-9804-4E665D195FC2}
{C6F2DCA0-7941-4C28-9328-2D495F5DCB00} = {72C103DB-E1D3-449F-97C2-DF12CA111FD4}
{FDCFC3E3-14CF-40B2-9FE5-5BC239AAC110} = {72C103DB-E1D3-449F-97C2-DF12CA111FD4}
{5F732D4E-133B-4DA6-811B-C369CDC3FB89} = {72C103DB-E1D3-449F-97C2-DF12CA111FD4}
{68F7C160-3FB2-4129-8F89-96F78B2DA0A9} = {FDCFC3E3-14CF-40B2-9FE5-5BC239AAC110}
{41E078CA-F005-4B66-B440-FD7EB731AD61} = {586410F2-C1F0-47CD-AB28-2CF506DED2C8}
{64EACBD1-23DD-4168-BEED-55D47DB1A8BB} = {72C103DB-E1D3-449F-97C2-DF12CA111FD4}
{DAE3826B-AAAB-468A-9A06-2F56EF5C0767} = {41B6D37A-5E5E-42B3-85E4-D81A81E3D757}
{C996F427-DA93-49D6-9804-4E665D195FC2} = {41B6D37A-5E5E-42B3-85E4-D81A81E3D757}
{45ADEF9B-C8BD-4224-9E12-F6716E85A22C} = {DAE3826B-AAAB-468A-9A06-2F56EF5C0767}
{55A2459A-6BDE-4493-B2C0-5BE1673E99EE} = {DAE3826B-AAAB-468A-9A06-2F56EF5C0767}
{EF5EF5A4-616A-4BA7-9E1E-1407E8EC0395} = {45ADEF9B-C8BD-4224-9E12-F6716E85A22C}
{D8ED2DF7-F7E1-4DE7-B097-D0BEE51D58E9} = {45ADEF9B-C8BD-4224-9E12-F6716E85A22C}
{7E3861AB-F797-4A9F-B7CE-0E35751FFCD9} = {45ADEF9B-C8BD-4224-9E12-F6716E85A22C}
{20D03C52-0F8B-47B6-BCA8-CF0812F82722} = {45ADEF9B-C8BD-4224-9E12-F6716E85A22C}
{DA143654-C258-410D-B5DC-FE446ED99CE4} = {45ADEF9B-C8BD-4224-9E12-F6716E85A22C}
{640F598B-6586-4AD6-B544-78CFF2602DFB} = {55A2459A-6BDE-4493-B2C0-5BE1673E99EE}
{93770088-3463-427B-9CD8-88B8D7945C83} = {55A2459A-6BDE-4493-B2C0-5BE1673E99EE}
{6CD7A35B-93A8-4DB2-B078-EE5A81F40032} = {55A2459A-6BDE-4493-B2C0-5BE1673E99EE}
{11122D97-B349-4A3E-B7DD-73B8B363C47C} = {45ADEF9B-C8BD-4224-9E12-F6716E85A22C}
{1D20E6CF-9825-4CDE-B732-AE586BD1AABA} = {45ADEF9B-C8BD-4224-9E12-F6716E85A22C}
{FFDF9FF9-0B29-47D3-AD42-53A476B570EC} = {55A2459A-6BDE-4493-B2C0-5BE1673E99EE}
{CC3DF23A-2880-438F-BDEB-DB093E919ABA} = {55A2459A-6BDE-4493-B2C0-5BE1673E99EE}
{ADD20515-1C1C-418B-84F6-8B05A7AA315B} = {45ADEF9B-C8BD-4224-9E12-F6716E85A22C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {221EAE38-5F75-4391-9A48-E462A9F3B8FC}

View File

@ -11,17 +11,17 @@
<Target Condition=" $(IsWebProject) == true Or $(IsTestProject) == true" Name="PostBuild" AfterTargets="PostBuildEvent">
<Message Text="Copy lic file -> $(TargetDir)" Importance="high" />
<Copy Condition="'$(OS)' == 'Windows_NT'" DestinationFolder="$(TargetDir)" SourceFiles="$(MSBuildThisFileDirectory)src\admin\keys\Longbow.lic" SkipUnchangedFiles="true" />
<Copy Condition="'$(OS)' == 'UNIX'" DestinationFolder="$(TargetDir)" SourceFiles="$(MSBuildThisFileDirectory)src/admin/keys/Longbow.lic" SkipUnchangedFiles="true" />
<Copy Condition="'$(OS)' == 'Windows_NT'" DestinationFolder="$(TargetDir)" SourceFiles="$(MSBuildThisFileDirectory)src\mvc\admin\keys\Longbow.lic" SkipUnchangedFiles="true" />
<Copy Condition="'$(OS)' == 'UNIX'" DestinationFolder="$(TargetDir)" SourceFiles="$(MSBuildThisFileDirectory)src/mvc/admin/keys/Longbow.lic" SkipUnchangedFiles="true" />
</Target>
<Target Condition=" $(IsWebProject) == true " Name="PostPublish" AfterTargets="Publish">
<Message Text="Publish lic file -> $(PublishDir)" Importance="high" />
<Copy Condition="'$(OS)' == 'Windows_NT'" DestinationFolder="$(PublishDir)" SourceFiles="$(MSBuildThisFileDirectory)src\admin\keys\Longbow.lic" SkipUnchangedFiles="true" />
<Copy Condition="'$(OS)' == 'UNIX'" DestinationFolder="$(PublishDir)" SourceFiles="$(MSBuildThisFileDirectory)src/admin/keys/Longbow.lic" SkipUnchangedFiles="true" />
<Copy Condition="'$(OS)' == 'Windows_NT'" DestinationFolder="$(PublishDir)" SourceFiles="$(MSBuildThisFileDirectory)src\mvc\admin\keys\Longbow.lic" SkipUnchangedFiles="true" />
<Copy Condition="'$(OS)' == 'UNIX'" DestinationFolder="$(PublishDir)" SourceFiles="$(MSBuildThisFileDirectory)src/mvc/admin/keys/Longbow.lic" SkipUnchangedFiles="true" />
<Message Text="Publish db file -> $(PublishDir)" Importance="high" />
<Copy Condition="'$(OS)' == 'Windows_NT'" DestinationFolder="$(PublishDir)" SourceFiles="$(MSBuildThisFileDirectory)src\admin\Bootstrap.Admin\BootstrapAdmin.db" SkipUnchangedFiles="true" />
<Copy Condition="'$(OS)' == 'UNIX'" DestinationFolder="$(PublishDir)" SourceFiles="$(MSBuildThisFileDirectory)src/admin/Bootstrap.Admin/BootstrapAdmin.db" SkipUnchangedFiles="true" />
<Copy Condition="'$(OS)' == 'Windows_NT'" DestinationFolder="$(PublishDir)" SourceFiles="$(MSBuildThisFileDirectory)src\mvc\admin\Bootstrap.Admin\BootstrapAdmin.db" SkipUnchangedFiles="true" />
<Copy Condition="'$(OS)' == 'UNIX'" DestinationFolder="$(PublishDir)" SourceFiles="$(MSBuildThisFileDirectory)src/mvc/admin/Bootstrap.Admin/BootstrapAdmin.db" SkipUnchangedFiles="true" />
</Target>
</Project>

284
LICENSE
View File

@ -1,191 +1,165 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
0. Additional Definitions.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
1. Exception to Section 3 of the GNU GPL.
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Grant of Copyright License.
2. Conveying Modified Versions.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
3. Grant of Patent License.
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
4. Redistribution.
3. Object Code Incorporating Material from Library Header Files.
You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
5. Submission of Contributions.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.
4. Combined Works.
6. Trademarks.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
7. Disclaimer of Warranty.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
8. Limitation of Liability.
d) Do one of the following:
In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
9. Accepting Warranty or Additional Liability.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
END OF TERMS AND CONDITIONS
5. Combined Libraries.
APPENDIX: How to apply the Apache License to your work
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "{}" replaced with your own
identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included on
the same "printed page" as the copyright notice for easier identification within
third-party archives.
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
Copyright 2019 LaoGanDie
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
6. Revised Versions of the GNU Lesser General Public License.
http://www.apache.org/licenses/LICENSE-2.0
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

View File

@ -5,21 +5,22 @@
---
##### Version & Coverage
[![Release](https://img.shields.io/endpoint.svg?logo=Groupon&logoColor=red&color=green&label=release&url=https://ba.sdgxgz.com/api/Gitee/Releases)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/releases)
[![Release](https://img.shields.io/endpoint.svg?logo=Groupon&logoColor=red&color=green&label=release&url=https://admin.blazor.zone/api/Gitee/Releases?userName=LongbowEnterprise)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/releases)
[![Coveralls](https://img.shields.io/coveralls/github/ArgoZhang/BootstrapAdmin/master.svg?logo=ReverbNation&logoColor=green&label=coveralls)](https://coveralls.io/github/ArgoZhang/BootstrapAdmin)
[![Codecov](https://img.shields.io/codecov/c/gh/argozhang/bootstrapadmin/master.svg?logo=codecov&label=codecov)](https://codecov.io/gh/argozhang/bootstrapadmin/branch/master)
##### Gitee
[![Appveyor build](https://img.shields.io/endpoint.svg?logo=appveyor&label=build&color=blueviolet&url=https://ba.sdgxgz.com/api/Gitee/Builds?projName=bootstrapadmin-9m1jm)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin-9m1jm)
[![Build Status](https://img.shields.io/appveyor/ci/ArgoZhang/bootstrapadmin-9m1jm/master.svg?logo=appveyor&label=maser)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin-9m1jm)
[![Test](https://img.shields.io/appveyor/tests/ArgoZhang/bootstrapadmin-9m1jm/master.svg?logo=appveyor&)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin-9m1jm/build/tests)
[![Issue Status](https://img.shields.io/endpoint.svg?logo=Groupon&logoColor=critical&label=issues&url=https://ba.sdgxgz.com/api/Gitee/Issues)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues)
[![Pull Status](https://img.shields.io/endpoint.svg?logo=Groupon&logoColor=green&color=success&label=pulls&url=https://ba.sdgxgz.com/api/Gitee/Pulls)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/pulls)
[![Appveyor build](https://img.shields.io/endpoint.svg?logo=appveyor&label=build&color=blueviolet&url=https://admin.blazor.zone/api/Gitee/Builds?projName=bootstrapadmin-9m1jm)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin-9m1jm)
[![Build Status](https://img.shields.io/appveyor/ci/ArgoZhang/bootstrapadmin-9m1jm/master.svg?logo=appveyor&label=master)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin-9m1jm/branch/master)
[![Test](https://img.shields.io/appveyor/tests/ArgoZhang/bootstrapadmin-9m1jm/master.svg?logo=appveyor&)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin-9m1jm/branch/master/tests)
[![Issue Status](https://img.shields.io/endpoint.svg?logo=Groupon&logoColor=critical&label=issues&url=https://admin.blazor.zone/api/Gitee/Issues?userName=LongbowEnterprise)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues)
[![Pull Status](https://img.shields.io/endpoint.svg?logo=Groupon&logoColor=green&color=success&label=pulls&url=https://admin.blazor.zone/api/Gitee/Pulls?userName=LongbowEnterprise)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/pulls)
##### GitHub
[![Appveyor build](https://img.shields.io/endpoint.svg?logo=appveyor&label=build&color=blueviolet&url=https://ba.sdgxgz.com/api/Gitee/Builds?projName=bootstrapadmin)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin)
[![Appveyor build](https://img.shields.io/endpoint.svg?logo=appveyor&label=build&color=blueviolet&url=https://admin.blazor.zone/api/Gitee/Builds?projName=bootstrapadmin)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin)
[![master status](https://img.shields.io/appveyor/ci/ArgoZhang/bootstrapadmin/master.svg?logo=appveyor&label=master)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin/branch/master)
[![Test](https://img.shields.io/appveyor/tests/argozhang/bootstrapadmin/master.svg?logo=appveyor&)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin/branch/master/tests)
[![Github build](https://img.shields.io/github/workflow/status/ArgoZhang/BootstrapAdmin/Auto%20Build%20CI/master?label=master&logoColor=green&logo=github)](https://github.com/ArgoZhang/BootstrapAdmin/actions?query=workflow%3A%22Auto+Build+CI%22+branch%3Amaster)
[![Repo Size](https://img.shields.io/github/repo-size/ArgoZhang/BootstrapAdmin.svg?logo=github&logoColor=green&label=repo)](https://github.com/ArgoZhang/BootstrapAdmin)
[![Commit Date](https://img.shields.io/github/last-commit/ArgoZhang/BootstrapAdmin/master.svg?logo=github&logoColor=green&label=commit)](https://github.com/ArgoZhang/BootstrapAdmin)
@ -59,7 +60,7 @@ Departments Authorize Users
For more information, please click [wiki](https://gitee.com/LongbowEnterprise/BootstrapAdmin/wikis/%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D)
### Database
**MSSQL/Oracle/SQLite/MySql/MariaDB/Postgresql/Firebird/MongoDB**
**MSSQL/Oracle/SQLite/MySql/MariaDB/Firebird/MongoDB**
For more information, please click [wiki](https://gitee.com/LongbowEnterprise/BootstrapAdmin/wikis/数据库连接配置?sort_id=1333482)
@ -121,7 +122,7 @@ For more information, please click [wiki](https://gitee.com/LongbowEnterprise/Bo
## Online Demonstration
[![website1](https://img.shields.io/badge/linux-http://ba.zylweb.cn-success.svg?logo=buzzfeed&logoColor=green)](http://ba.zylweb.cn)
[![website2](https://img.shields.io/badge/linux-http://ba.sdgxgz.com-success.svg?logo=buzzfeed&logoColor=green)](http://ba.sdgxgz.com)
[![website2](https://img.shields.io/badge/linux-http://admin.blazor.zone-success.svg?logo=buzzfeed&logoColor=green)](http://admin.blazor.zone)
### Login
Administrator: Admin/123789
@ -130,6 +131,7 @@ User: User/123789
## Docker Images
[![Docker](https://img.shields.io/docker/cloud/automated/argozhang/ba.svg?logo=docker&logoColor=success)](https://hub.docker.com/r/argozhang/ba)
[![Docker](https://img.shields.io/docker/cloud/build/argozhang/ba.svg?logo=docker&logoColor=success)](https://hub.docker.com/r/argozhang/ba/builds)
[![Docker](https://img.shields.io/github/workflow/status/ArgoZhang/BootstrapAdmin/Docker%20Image%20CI/master?label=Docker%20Image%20CI&logo=github&logoColor=green)](https://github.com/ArgoZhang/BootstrapAdmin/actions?query=workflow%3A%22Docker+Image+CI%22%3Amaster)
### Docker Hub
Mirror [Portal](https://hub.docker.com/r/argozhang/ba)
@ -152,7 +154,7 @@ Please click [wikis](https://gitee.com/LongbowEnterprise/BootstrapAdmin/wikis/%E
[![Gitee license](https://img.shields.io/github/license/argozhang/bootstrapadmin.svg?logo=git&logoColor=red)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/blob/master/LICENSE)
## GVP award
[View](https://images.gitee.com/uploads/images/2019/0516/124055_96cc9f8d_554725.png "GiteeGVP.png")
[View](https://images.gitee.com/uploads/images/2021/0112/112021_9d570be1_554725.png "GiteeGVP.png")
## Screenshots

View File

@ -5,21 +5,22 @@
---
##### Version & Coverage
[![Release](https://img.shields.io/endpoint.svg?logo=Groupon&logoColor=red&color=green&label=release&url=https://ba.sdgxgz.com/api/Gitee/Releases)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/releases)
[![Coveralls](https://img.shields.io/coveralls/github/ArgoZhang/BootstrapAdmin/master.svg?logo=ReverbNation&logoColor=green&label=coveralls)](https://coveralls.io/github/ArgoZhang/BootstrapAdmin)
[![Release](https://img.shields.io/endpoint.svg?logo=Groupon&logoColor=red&color=green&label=release&url=https://admin.blazor.zone/api/Gitee/Releases?userName=LongbowEnterprise)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/releases)
[![Coveralls](https://img.shields.io/coveralls/github/ArgoZhang/BootstrapAdmin/master.svg?logo=ReverbNation&logoColor=green&label=coveralls)](https://coveralls.io/github/ArgoZhang/BootstrapAdmin?branch=master)
[![Codecov](https://img.shields.io/codecov/c/gh/argozhang/bootstrapadmin/master.svg?logo=codecov&label=codecov)](https://codecov.io/gh/argozhang/bootstrapadmin/branch/master)
##### Gitee
[![Appveyor build](https://img.shields.io/endpoint.svg?logo=appveyor&label=build&color=blueviolet&url=https://ba.sdgxgz.com/api/Gitee/Builds?projName=bootstrapadmin-9m1jm)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin-9m1jm)
[![Build Status](https://img.shields.io/appveyor/ci/ArgoZhang/bootstrapadmin-9m1jm/master.svg?logo=appveyor&label=maser)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin-9m1jm)
[![Test](https://img.shields.io/appveyor/tests/ArgoZhang/bootstrapadmin-9m1jm/master.svg?logo=appveyor&)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin-9m1jm/build/tests)
[![Issue Status](https://img.shields.io/endpoint.svg?logo=Groupon&logoColor=critical&label=issues&url=https://ba.sdgxgz.com/api/Gitee/Issues)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues)
[![Pull Status](https://img.shields.io/endpoint.svg?logo=Groupon&logoColor=green&color=success&label=pulls&url=https://ba.sdgxgz.com/api/Gitee/Pulls)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/pulls)
[![Appveyor build](https://img.shields.io/endpoint.svg?logo=appveyor&label=build&color=blueviolet&url=https://admin.blazor.zone/api/Gitee/Builds?projName=bootstrapadmin-9m1jm)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin-9m1jm)
[![Build Status](https://img.shields.io/appveyor/ci/ArgoZhang/bootstrapadmin-9m1jm/master.svg?logo=appveyor&label=master)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin-9m1jm/branch/master)
[![Test](https://img.shields.io/appveyor/tests/ArgoZhang/bootstrapadmin-9m1jm/master.svg?logo=appveyor&)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin-9m1jm/branch/master/tests)
[![Issue Status](https://img.shields.io/endpoint.svg?logo=Groupon&logoColor=critical&label=issues&url=https://admin.blazor.zone/api/Gitee/Issues?userName=LongbowEnterprise)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/issues)
[![Pull Status](https://img.shields.io/endpoint.svg?logo=Groupon&logoColor=green&color=success&label=pulls&url=https://admin.blazor.zone/api/Gitee/Pulls?userName=LongbowEnterprise)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/pulls)
##### GitHub
[![Appveyor build](https://img.shields.io/endpoint.svg?logo=appveyor&label=build&color=blueviolet&url=https://ba.sdgxgz.com/api/Gitee/Builds?projName=bootstrapadmin)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin)
[![Appveyor build](https://img.shields.io/endpoint.svg?logo=appveyor&label=build&color=blueviolet&url=https://admin.blazor.zone/api/Gitee/Builds?projName=bootstrapadmin)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin)
[![master status](https://img.shields.io/appveyor/ci/ArgoZhang/bootstrapadmin/master.svg?logo=appveyor&label=master)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin/branch/master)
[![Test](https://img.shields.io/appveyor/tests/argozhang/bootstrapadmin/master.svg?logo=appveyor&)](https://ci.appveyor.com/project/ArgoZhang/bootstrapadmin/branch/master/tests)
[![Github build](https://img.shields.io/github/workflow/status/ArgoZhang/BootstrapAdmin/Auto%20Build%20CI/master?label=master&logoColor=green&logo=github)](https://github.com/ArgoZhang/BootstrapAdmin/actions?query=workflow%3A%22Auto+Build+CI%22+branch%3Amaster)
[![Repo Size](https://img.shields.io/github/repo-size/ArgoZhang/BootstrapAdmin.svg?logo=github&logoColor=green&label=repo)](https://github.com/ArgoZhang/BootstrapAdmin)
[![Commit Date](https://img.shields.io/github/last-commit/ArgoZhang/BootstrapAdmin/master.svg?logo=github&logoColor=green&label=commit)](https://github.com/ArgoZhang/BootstrapAdmin)
@ -28,6 +29,15 @@
使用 NET Core + Bootstrap + PetaPoco + HTML 5 + jQuery 构建的后台管理平台
**BootstrapAdmin****开源驰骋 ccflow** 达成如下协议.
1. 驰骋工作流引擎、表单引擎、快速开发平台系统采用 `GPL` 协议.
2. 驰骋 `.net` 版本成为 `ccflow`, `java` 版本成为 `jflow` 两个版本代码 100% 开源.
3. 与 BootstrapAdmin 签订服务合同的并且付费的 BootstrapAdmin 客户使用ccflow不开源系统代码受到法律保护.
4. 驰骋 BPM 代码下载地址: [传送门](http://ccflow.org/down.htm?from=argo)
<a href='http://ccflow.org/?from=argo' target=_blank ><img src='https://images.gitee.com/uploads/images/2021/0718/172630_7ebb560a_554725.png' /></a>
### 特别说明
**BootstrapAdmin** 无需二次开发,要做的仅仅是与前台系统集成,前台系统模板工程为 **Bootstrap.Client**
项目原始出发点是把权限系统从业务系统中剥离出来,项目开发专注于功能,详细配置说明请点击 [查看文档](https://gitee.com/LongbowEnterprise/BootstrapAdmin/wikis/%E7%B3%BB%E7%BB%9F%E9%9B%86%E6%88%90)
@ -65,6 +75,10 @@
数据库支持列表如下:
**MSSQL/Oracle/SQLite/MySql/MariaDB/Postgresql/Firebird/MongoDB**
### 工作流
**驰骋工作流** 进行深度集成,欢迎访问其主页 [传送门](http://ccflow.org/?from=argo)
### 浏览器支持
![chrome](https://img.shields.io/badge/chrome->%3D4.5-success.svg?logo=google%20chrome&logoColor=red)
@ -115,12 +129,10 @@
## 开发环境搭建
1. 安装 .net core sdk [官方网址](http://www.microsoft.com/net/download)
2. 安装 Visual Studio 2019 以上 [官方网址](https://visualstudio.microsoft.com/vs/getting-started/)
2. 安装 Visual Studio 2019 最新版 [官方网址](https://visualstudio.microsoft.com/vs/getting-started/)
3. 获取本项目代码 [BootstrapAdmin](https://gitee.com/LongbowEnterprise/BootstrapAdmin)
*注意*
master 分支为 NETCore 3.0 框架 必须使用 Visual Studio 2019 (v16.3)
netcore-2.2 分支为 NETCore 2.2 框架支持 Visual Studio 2017 (v15.9+)
环境搭建教程 [详细说明](https://gitee.com/LongbowEnterprise/BootstrapAdmin/wikis/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B?sort_id=1333477)
### 安装数据库
@ -128,7 +140,7 @@ netcore-2.2 分支为 NETCore 2.2 框架支持 Visual Studio 2017 (v15.9+)
1. SQLite
2. SqlServer
3. MySql
4. PostgresSql
4. Oracle
5. MongoDB
数据库配置 [详细说明](https://gitee.com/LongbowEnterprise/BootstrapAdmin/wikis/数据库连接配置?sort_id=1333482)
@ -138,7 +150,7 @@ netcore-2.2 分支为 NETCore 2.2 框架支持 Visual Studio 2017 (v15.9+)
## 演示地址
[![website1](https://img.shields.io/badge/linux-http://ba.zylweb.cn-success.svg?logo=buzzfeed&logoColor=green)](http://ba.zylweb.cn)
[![website2](https://img.shields.io/badge/linux-http://ba.sdgxgz.com-success.svg?logo=buzzfeed&logoColor=green)](http://ba.sdgxgz.com)
[![website2](https://img.shields.io/badge/linux-http://admin.blazor.zone-success.svg?logo=buzzfeed&logoColor=green)](http://admin.blazor.zone)
### 登录用户名与密码
管理账号Admin/123789
@ -147,6 +159,7 @@ netcore-2.2 分支为 NETCore 2.2 框架支持 Visual Studio 2017 (v15.9+)
## Docker 镜像
[![Docker](https://img.shields.io/docker/cloud/automated/argozhang/ba.svg?logo=docker&logoColor=success)](https://hub.docker.com/r/argozhang/ba)
[![Docker](https://img.shields.io/docker/cloud/build/argozhang/ba.svg?logo=docker&logoColor=success)](https://hub.docker.com/r/argozhang/ba/builds)
[![Docker](https://img.shields.io/github/workflow/status/ArgoZhang/BootstrapAdmin/Docker%20Image%20CI/master?label=Docker%20Image%20CI&logo=github&logoColor=green)](https://github.com/ArgoZhang/BootstrapAdmin/actions?query=workflow%3A%22Docker+Image+CI%22%3Amaster)
### Docker Hub
镜像拉取 [传送门](https://hub.docker.com/r/argozhang/ba)
@ -169,7 +182,7 @@ docker pull reg.qiniu.com/argozhang/ba
[![Gitee license](https://img.shields.io/github/license/argozhang/bootstrapadmin.svg?logo=git&logoColor=red)](https://gitee.com/LongbowEnterprise/BootstrapAdmin/blob/master/LICENSE)
## GVP 奖杯
[查看照片](https://images.gitee.com/uploads/images/2019/0516/124055_96cc9f8d_554725.png "GiteeGVP.png")
![项目奖杯](https://images.gitee.com/uploads/images/2021/0112/112021_9d570be1_554725.png "GVP.png")
## 项目截图
@ -194,8 +207,12 @@ docker pull reg.qiniu.com/argozhang/ba
3. 提交代码
4. 新建 Pull Request
## 相关视频讲解
[视频教材](https://gitee.com/LongbowEnterprise/BootstrapAdmin/wikis/%E8%AF%BE%E7%A8%8B%E5%88%97%E8%A1%A8?sort_id=1916635#%E8%AF%BE%E7%A8%8B%E5%88%97%E8%A1%A8)
## 捐助
如果这个项目对您有所帮助,请扫下方二维码打赏一杯咖啡。
![WeChat](https://gitee.com/LongbowEnterprise/Pictures/raw/master/WeChat/WeChat.png "微信扫码")
<img src="https://gitee.com/LongbowEnterprise/Pictures/raw/master/WeChat/BarCode@2x.png" width="382px;" />

View File

@ -1,75 +0,0 @@
function installDB() {
write-host "init sqlserver database..." -ForegroundColor Cyan
$startPath = "$($env:appveyor_build_folder)\db\SqlServer"
$sqlInstance = "(local)\SQL2017"
$outFile = join-path $startPath "output.log"
$sqlFile = join-path $startPath "Install.sql"
$initFile = join-path $startPath "InitData.sql"
sqlcmd -S "$sqlInstance" -U sa -P Password12! -i "$sqlFile" -i "$initFile" -o "$outFile"
#write-host "init mysql database..." -ForegroundColor Cyan
#$env:MYSQL_PWD="Password12!"
#$mysql = '"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe"'
#$cmd = $mysql + ' -e "create database BootstrapAdmin;" -uroot'
#cmd.exe /c $cmd
#$startPath = "$($env:appveyor_build_folder)\db\MySQL"
#$para = ' -hlocalhost -uroot -DBootstrapAdmin < '
#$sqlFile = join-path $startPath "Install.sql"
#$cmd = $mysql + $para + $sqlFile
#cmd.exe /c $cmd
#$initFile = join-path $startPath "InitData.sql"
#$cmd = $mysql + $para + $initFile
#cmd.exe /c $cmd
write-host "init mongodb data..." -ForegroundColor Cyan
$initFolder = "$($env:appveyor_build_folder)\db\MongoDB"
cd $initFolder
cmd.exe /c "C:\mongodb\bin\mongo init.js"
$cmd = 'C:\mongodb\bin\mongo BootstrapAdmin --eval "printjson(db.getCollectionNames())"'
iex "& $cmd"
cd $($env:appveyor_build_folder)
}
function runUnitTest() {
write-host "dotnet test test\UnitTest" -ForegroundColor Cyan
dotnet test test\UnitTest --filter="FullyQualifiedName!~MySql" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Include="[Bootstrap.Admin*]*%2c[Bootstrap.DataAccess*]*" /p:Exclude="[*]*Program%2c[*]*Startup%2c[Bootstrap.DataAccess]*AutoDB%2c[Bootstrap.DataAccess]*WeChatHelper" /p:ExcludeByFile="**/SMSExtensions.cs%2c**/Helper/OAuthHelper.cs" /p:CoverletOutput=..\..\
}
function coverallUnitTest() {
write-host "install coveralls.net tools" -ForegroundColor Cyan
dotnet tool install coveralls.net --version 1.0.0 --tool-path ".\tools"
runUnitTest
write-host "report UnitTest with Coveralls" -ForegroundColor Cyan
cmd.exe /c ".\tools\csmacnz.Coveralls.exe --opencover -i coverage.opencover.xml --useRelativePaths"
}
function codecovUnitTest() {
Set-AppveyorBuildVariable COVERALLS_REPO_TOKEN $($env:COVERALLS_REPO_TOKEN)
Set-AppveyorBuildVariable CODECOV_TOKEN $($env:CODECOV_TOKEN)
$codecovCmd = "C:\ProgramData\chocolatey\lib\codecov\tools\codecov.exe"
$codecov = Test-Path $codecovCmd
if (!$codecov) {
write-host "install codecov tools" -ForegroundColor Cyan
choco install codecov
}
$coverageFile = Test-Path coverage.opencover.xml
if (!$coverageFile) {
runUnitTest
}
write-host "report UnitTest with Codecov" -ForegroundColor Cyan
cmd.exe /c "$codecovCmd -f ""coverage.opencover.xml"""
}
$branch = $($env:APPVEYOR_REPO_BRANCH)
if ($branch -ne "dev") {
installDB
coverallUnitTest
codecovUnitTest
}

View File

@ -1,4 +1,4 @@
version: 1.0.{build}
version: 5.0.{build}
branches:
only:
- release
@ -9,6 +9,7 @@ clone_depth: 1
init:
- ps: git version
environment:
CI: true
Appveyor: true
COVERALLS_REPO_TOKEN:
secure: 5L1b6XqSNTOfU1iZrARo5eUOi1HOleVO3VDCW0pr6yaspgkC5jxL+gBDK0OEY8EI
@ -18,25 +19,21 @@ environment:
secure: 6rKKLXCmy3HZBxW5SjoO4Ox7G09FC0NJgGnvukWkYyJ2rx1GCzu4JvmLin69SHRz
CODECOV_TOKEN_GITLAB:
secure: +22PuAn5seq4bbCVCly8zDFuyEV3m2NjW3QuM0+2gm4c8akwicNFmv2T/ZGd0Jpd
cache: C:\ProgramData\chocolatey\lib\codecov\tools
services:
- mssql2017
- mysql
- mongodb
install:
- ps: >-
#copy my.ini into mysql folder
dotnet --version
#xcopy "$($env:appveyor_build_folder)\db\MySQL\my.ini" "C:\Program Files\MySQL\MySQL Server 5.7" /y
.\scripts\appveyor\appveyor.install.ps1
build_script:
- ps: >-
.\appveyor.build.ps1
.\scripts\appveyor\appveyor.build.ps1
test_script:
- ps: >-
.\appveyor.test.ps1
.\scripts\appveyor\appveyor.test.ps1
artifacts:
- path: src\admin\Bootstrap.Admin\bin\release\netcoreapp3.0\publish\
- path: src\admin\Bootstrap.Admin\bin\release\net5.0\publish\
name: BootstrapAdmin
type: WebDeployPackage
deploy:

View File

@ -108,7 +108,7 @@
"Define": NumberInt(0)
},
{
"Category": "当前样式",
"Category": "网站设置",
"Name": "使用样式",
"Code": "blue.css",
"Define": NumberInt(0)
@ -158,90 +158,126 @@
{
"Category": "测试平台",
"Name": "个人中心地址",
"Code": "http://localhost:50852/Admin/Profiles",
"Code": "/Admin/Profiles",
"Define": NumberInt(1)
},
{
"Category": "测试平台",
"Name": "系统设置地址",
"Code": "http://localhost:50852/Admin/Index",
"Code": "/Admin/Index",
"Define": NumberInt(1)
},
{
"Category": "测试平台",
"Name": "系统通知地址",
"Code": "http://localhost:50852/Admin/Notifications",
"Code": "/Admin/Notifications",
"Define": NumberInt(1)
},
{
"Category": "应用首页",
"Name": "Demo",
"Code": "http://localhost:49185/",
"Code": "http://localhost:49185",
"Define": NumberInt(0)
},
{
"Category": "系统设置",
"Category": "网站设置",
"Name": "程序异常保留时长",
"Code": "1",
"Define": NumberInt(0)
},
{
"Category": "系统设置",
"Category": "网站设置",
"Name": "操作日志保留时长",
"Code": "12",
"Define": NumberInt(0)
},
{
"Category": "系统设置",
"Category": "网站设置",
"Name": "登录日志保留时长",
"Code": "12",
"Define": NumberInt(0)
},
{
"Category": "系统设置",
"Category": "网站设置",
"Name": "Cookie保留时长",
"Code": "7",
"Define": NumberInt(0)
},
{
"Category": "系统设置",
"Category": "网站设置",
"Name": "IP地理位置接口",
"Code": "None",
"Define": NumberInt(0)
},
{
"Category": "系统设置",
"Category": "地理位置服务",
"Name": "百度地图开放平台",
"Code": "BaiDuIPSvr",
"Define": NumberInt(0)
},
{
"Category": "地理位置服务",
"Name": "聚合地理位置",
"Code": "百度138地理位置",
"Define": NumberInt(0)
},
{
"Category": "地理位置服务",
"Name": "https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?resource_id=6006&query=",
"Code": "BaiDuIP138Svr",
"Define": NumberInt(0)
},
{
"Category": "地理位置",
"Name": "BaiDuIPSvr",
"Code": "http://api.map.baidu.com/location/ip?ak=6lvVPMDlm2gjLpU0aiqPsHXi2OiwGQRj&ip=",
"Define": NumberInt(0)
},
{
"Category": "系统设置",
"Category": "地理位置",
"Name": "JuheIPSvr",
"Code": "http://apis.juhe.cn/ip/ipNew?key=f57102d1b9fadd3f4a1c29072d0c0206&ip=",
"Define": NumberInt(0)
},
{
"Category": "系统设置",
"Category": "地理位置",
"Name": "BaiDuIP138Svr",
"Code": "https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?resource_id=6006&query=",
"Define": NumberInt(0)
},
{
"Category": "网站设置",
"Name": "访问日志保留时长",
"Code": "1",
"Define": NumberInt(0)
},
{
"Category": "系统设置",
"Category": "网站设置",
"Name": "IP请求缓存时长",
"Code": "10",
"Define": NumberInt(0)
},
{
"Category": "系统设置",
"Category": "网站设置",
"Name": "演示系统",
"Code": "0",
"Define": NumberInt(0)
},
{
"Category": "系统设置",
"Category": "网站设置",
"Name": "授权盐值",
"Code": "yjglE2eddCGcS7tTFTDd2DfvqXHgCnMhNhpmx9HJaC9l8GAZ",
"Define": NumberInt(0)
},
{
"Category": "网站设置",
"Name": "哈希结果",
"Code": "6jTT50HGuk8V+AIsiE4IfqjcER71PBN1DY7gqOLZE7E=",
"Define": NumberInt(0)
},
{
"Category": "网站设置",
"Name": "验证码图床",
"Code": "http://imgs.sdgxgz.com/images/",
"Define": NumberInt(0)
@ -264,6 +300,12 @@
"Code": "1",
"Define": NumberInt(0)
},
{
"Category": "网站设置",
"Name": "固定表头",
"Code": "1",
"Define": NumberInt(0)
},
{
"Category": "网站设置",
"Name": "OAuth 认证登录",
@ -282,16 +324,76 @@
"Code": "0",
"Define": NumberInt(0)
},
{
"Category": "网站设置",
"Name": "Blazor",
"Code": "0",
"Define": NumberInt(0)
},
{
"Category": "网站设置",
"Name": "健康检查",
"Code": "0",
"Define": NumberInt(0)
},
{
"Category": "网站设置",
"Name": "默认应用程序",
"Code": "0",
"Define": NumberInt(0)
},
{
"Category": "网站设置",
"Name": "后台地址",
"Code": "http://localhost:50852",
"Define": NumberInt(0)
},
{
"Category": "测试平台",
"Name": "favicon",
"Code": "http://localhost:49185/favicon.ico",
"Code": "/favicon.ico",
"Define": NumberInt(1)
},
{
"Category": "测试平台",
"Name": "网站图标",
"Code": "http://localhost:49185/favicon.png",
"Code": "/favicon.png",
"Define": NumberInt(1)
},
{
"Category": "系统首页",
"Name": "高仿码云",
"Code": "Login-Gitee",
"Define": NumberInt(0)
},
{
"Category": "系统首页",
"Name": "蓝色清新",
"Code": "Login-Blue",
"Define": NumberInt(0)
},
{
"Category": "系统首页",
"Name": "系统默认",
"Code": "Login",
"Define": NumberInt(0)
},
{
"Category": "系统首页",
"Name": "科技动感",
"Code": "Login-Tec",
"Define": NumberInt(0)
},
{
"Category": "系统首页",
"Name": "Admin-LTE",
"Code": "Login-LTE",
"Define": NumberInt(0)
},
{
"Category": "网站设置",
"Name": "登录界面",
"Code": "Login",
"Define": NumberInt(0)
}
];

View File

@ -215,6 +215,18 @@
"IsResource": NumberInt(2),
"Application": "BA"
},
{
"_id": ObjectId("5bd7b8445fa31256f77e4b08"),
"ParentId": "5bd7b8445fa31256f77e4b93",
"Name": "默认应用",
"Order": NumberInt(80),
"Icon": "fa fa-fa",
"Url": "defaultApp",
"Category": "0",
"Target": "_self",
"IsResource": NumberInt(2),
"Application": "BA"
},
{
"_id": ObjectId("5bd7b8445fa31256f77e4b94"),
"ParentId": "0",

View File

@ -26,12 +26,13 @@ INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('头像地址', '头像
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站样式', '蓝色样式', 'blue.css', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站样式', '黑色样式', 'black.css', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站样式', 'AdminLTE', 'lte.css', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('当前样式', '使用样式', 'blue.css', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '使用样式', 'blue.css', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '前台首页', '~/Home/Index', 0);
-- 网站UI设置
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '侧边栏状态', '1', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '卡片标题状态', '1', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '固定表头', '1', 0);
-- 登录配置
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '短信验证码登录', '1', 0);
@ -41,22 +42,49 @@ INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', 'OAuth
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '自动锁屏时长', '30', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '自动锁屏', '0', 0);
-- 是否启用 Blazor 默认为 0 未启用
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', 'Blazor', '0', 0);
-- 是否启用 健康检查 默认为 0 未启用 1 启用
INSERT INTO Dicts (Category, Name, Code, Define) Values ('网站设置', '健康检查', '1', 0);
-- 时长单位 月
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', '程序异常保留时长', '1', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', '操作日志保留时长', '12', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', '登录日志保留时长', '12', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', '访问日志保留时长', '1', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '程序异常保留时长', '1', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '操作日志保留时长', '12', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '登录日志保留时长', '12', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '访问日志保留时长', '1', 0);
-- 时长单位 天
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', 'Cookie保留时长', '7', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', 'Cookie保留时长', '7', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', 'IP地理位置接口', 'None', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('地理位置服务', '百度地图开放平台', 'BaiDuIPSvr', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('地理位置服务', '聚合地理位置', 'JuheIPSvr', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('地理位置服务', '百度138地理位置', 'BaiDuIP138Svr', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('地理位置', 'BaiDuIPSvr', 'http://api.map.baidu.com/location/ip?ak=6lvVPMDlm2gjLpU0aiqPsHXi2OiwGQRj&ip=', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('地理位置', 'JuheIPSvr', 'http://apis.juhe.cn/ip/ipNew?key=f57102d1b9fadd3f4a1c29072d0c0206&ip=', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('地理位置', 'BaiDuIP138Svr', 'https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?resource_id=6006&query=', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', 'IP地理位置接口', 'None', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', 'BaiDuIPSvr', 'http://api.map.baidu.com/location/ip?ak=6lvVPMDlm2gjLpU0aiqPsHXi2OiwGQRj&ip=', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', 'JuheIPSvr', 'http://apis.juhe.cn/ip/ipNew?key=f57102d1b9fadd3f4a1c29072d0c0206&ip=', 0);
-- 时长单位 分钟
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', 'IP请求缓存时长', '10', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', '演示系统', '0', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', '验证码图床', 'http://imgs.sdgxgz.com/images/', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', 'IP请求缓存时长', '10', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '演示系统', '0', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '授权盐值', 'yjglE2eddCGcS7tTFTDd2DfvqXHgCnMhNhpmx9HJaC9l8GAZ', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '哈希结果', '6jTT50HGuk8V+AIsiE4IfqjcER71PBN1DY7gqOLZE7E=', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '验证码图床', 'http://imgs.sdgxgz.com/images/', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '默认应用程序', '0', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '后台地址', 'http://localhost:50852', 0);
-- 系统登录首页设置
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统首页', '高仿码云', 'Login-Gitee', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统首页', '蓝色清新', 'Login-Blue', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统首页', '系统默认', 'Login', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统首页', '科技动感', 'Login-Tec', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统首页', 'Admin-LTE', 'Login-LTE', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '登录界面', 'Login', 0);
DELETE FROM Navigations Where Category = '0';
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category) VALUES (0, '后台管理', 10, 'fa fa-gear', '~/Admin/Index', '0');
@ -77,6 +105,7 @@ INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category, IsResourc
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category, IsResource) VALUES (@@identity - 4, '清理全部缓存', 50, 'fa fa-fa', 'clearAllCache', '0', 2);
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category, IsResource) VALUES (@@identity - 5, '登录设置', 60, 'fa fa-fa', 'loginSettings', '0', 2);
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category, IsResource) VALUES (@@identity - 6, '自动锁屏', 70, 'fa fa-fa', 'lockScreen', '0', 2);
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category, IsResource) VALUES (@@identity - 7, '默认应用', 80, 'fa fa-fa', 'defaultApp', '0', 2);
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category) VALUES (0, '菜单管理', 50, 'fa fa-dashboard', '~/Admin/Menus', '0');
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category, IsResource) VALUES (@@identity, '新增', 10, 'fa fa-fa', 'add', '0', 2);
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category, IsResource) VALUES (@@identity - 1, '编辑', 20, 'fa fa-fa', 'edit', '0', 2);
@ -128,6 +157,11 @@ INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category) VALUES (@
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category) VALUES (@@identity - 1, 'API文档', 10, 'fa fa-wrench', '~/swagger', '0');
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category) VALUES (@@identity - 2, '图标集', 10, 'fa fa-dashboard', '~/Admin/FAIcon', '0');
-- 控件集合菜单
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category) VALUES (0, '控件集合', 170, 'fa fa-stethoscope', '#', '0');
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category) VALUES (@@identity, '行为式验证码', 10, 'fa fa-wrench', 'https://gitee.com/LongbowEnterprise/SliderCaptcha', '0');
INSERT INTO Navigations (ParentId, Name, `Order`, Icon, Url, Category) VALUES (@@identity - 1, '下拉框', 20, 'fa fa-bars', 'http://longbowenterprise.gitee.io/longbow-select/', '0');
DELETE FROM `Groups` WHERE GroupName = 'Admin';
INSERT INTO `Groups` (GroupCode, GroupName, Description) VALUES ('001', 'Admin', '系统默认组');
@ -153,16 +187,16 @@ INSERT INTO NavigationRole (NavigationID, RoleID) SELECT n.Id, r.Id FROM Navigat
Delete From Dicts Where Category = '应用程序' and Code = 'Demo';
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('应用程序', '测试平台', 'Demo', 0);
Delete From Dicts Where Category = '应用首页' and Name = 'Demo';
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('应用首页', 'Demo', 'http://localhost:49185/', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('应用首页', 'Demo', 'http://localhost:49185', 0);
Delete From Dicts Where Category = '测试平台';
Insert into Dicts (Category, Name, Code, Define) values ('测试平台', '网站标题', '前台演示系统', 1);
Insert into Dicts (Category, Name, Code, Define) values ('测试平台', '网站页脚', '前台演示程序后台权限管理框架', 1);
Insert into Dicts (Category, Name, Code, Define) values ('测试平台', '个人中心地址', 'http://localhost:50852/Admin/Profiles', 1);
Insert into Dicts (Category, Name, Code, Define) values ('测试平台', '系统设置地址', 'http://localhost:50852/Admin/Index', 1);
Insert into Dicts (Category, Name, Code, Define) values ('测试平台', '系统通知地址', 'http://localhost:50852/Admin/Notifications', 1);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('测试平台', 'favicon', 'http://localhost:49185/favicon.ico', 1);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('测试平台', '网站图标', 'http://localhost:49185/favicon.png', 1);
Insert into Dicts (Category, Name, Code, Define) values ('测试平台', '个人中心地址', '/Admin/Profiles', 1);
Insert into Dicts (Category, Name, Code, Define) values ('测试平台', '系统设置地址', '/Admin/Index', 1);
Insert into Dicts (Category, Name, Code, Define) values ('测试平台', '系统通知地址', '/Admin/Notifications', 1);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('测试平台', 'favicon', '/favicon.ico', 1);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('测试平台', '网站图标', '/favicon.png', 1);
Delete from Navigations where Application = 'Demo';
INSERT into Navigations (ParentId, Name, `Order`, Icon, Url, Category, Application) VALUES (0, '首页', 10, 'fa fa-fa', '~/Home/Index', '1', 'Demo');

View File

@ -178,10 +178,10 @@ CREATE TABLE Traces(
UserName VARCHAR (50) NOT NULL,
LogTime DATETIME NOT NULL,
IP VARCHAR (15) NOT NULL,
Browser VARCHAR (50),
OS VARCHAR (50),
Browser VARCHAR (2000),
OS VARCHAR (2000),
City VARCHAR (50),
RequestUrl VARCHAR (500) NOT NULL,
RequestUrl VARCHAR (2000) NOT NULL,
UserAgent VARCHAR (2000) NULL,
Referer VARCHAR (2000)
);
@ -189,6 +189,6 @@ CREATE TABLE Traces(
CREATE TABLE DBLogs (
ID INTEGER PRIMARY KEY Auto_increment,
UserName VARCHAR (50) NULL,
`SQL` VARCHAR (2000) NOT NULL,
`SQL` Text NOT NULL,
LogTime DATETIME NOT NULL
);

View File

@ -1,9 +1,10 @@
[client]
[mysqld]
basedir=C:\\Program Files\\MySQL\\MySQL Server 5.7
datadir=C:\\Program Files\\MySQL\\MySQL Server 5.7\\data
character-set-server=utf8
[client]
default-character-set=utf8
[mysqld]
charcater_set_client=utf8
character_set_connection=utf8
character_set_results=utf8
character_set_server=utf8
character_set_database=utf8
[mysql]
default-character-set=utf8

214
db/Oracle/InitData.sql Normal file
View File

@ -0,0 +1,214 @@
-- ADMIN/123789
-- User/123789
DELETE From Users where UserName in ('Admin', 'User');
INSERT INTO Users (Id, UserName, Password, PassSalt, DisplayName, RegisterTime, ApprovedTime, ApprovedBy, Description) values (SEQ_USERS_ID.NEXTVAL, 'Admin', 'Es7WVgNsJuELwWK8daCqufUBknCsSC0IYDphQZAiGOo=', 'W5vpBEOYRGHkQXatN0t+ECM/U8cHDuEgrq56+zZBk4J481xH', 'Administrator', sysdate, sysdate, 'system', '系统默认创建');
INSERT INTO Users (Id, UserName, Password, PassSalt, DisplayName, RegisterTime, ApprovedTime, ApprovedBy, Description, App) values (SEQ_USERS_ID.NEXTVAL, 'User', 'tXG/yNffpnm6cThrCH7wf6jN1ic3VHvLoY4OrzKtrZ4=', 'c5cIrRMn8XjB84M/D/X7Lg9uUqQFmYNEdxb/4HWH8OLa4pNZ', '测试账号', sysdate, sysdate, 'system', '系统默认创建', 'Demo');
DELETE From Dicts Where Define = 0;
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '菜单', '系统菜单', '0', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '菜单', '外部菜单', '1', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '应用程序', '后台管理', 'BA', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '网站标题', '后台管理系统', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '网站页脚', '2016 © 通用后台管理系统', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '系统通知', '用户注册', '0', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '系统通知', '程序异常', '1', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '系统通知', '数据库连接', '2', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '通知状态', '未处理', '0', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '通知状态', '已处理', '1', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '处理结果', '同意', '0', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '处理结果', '拒绝', '1', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '消息状态', '未读', '0', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '消息状态', '已读', '1', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '消息标签', '一般', '0', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '消息标签', '紧要', '1', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '头像地址', '头像路径', '~/images/uploader/', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '头像地址', '头像文件', 'default.jpg', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站样式', '蓝色样式', 'blue.css', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站样式', '黑色样式', 'black.css', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站样式', 'AdminLTE', 'lte.css', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '使用样式', 'blue.css', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '前台首页', '~/Home/Index', 0);
-- 网站UI设置
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '侧边栏状态', '1', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '卡片标题状态', '1', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '固定表头', '1', 0);
-- 登录配置
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '短信验证码登录', '1', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', 'OAuth 认证登录', '1', 0);
-- 自动锁屏(秒)默认 30 秒
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '自动锁屏时长', '30', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '自动锁屏', '0', 0);
-- 是否启用 Blazor 默认为 0 未启用
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', 'Blazor', '0', 0);
-- 是否启用 健康检查 默认为 0 未启用 1 启用
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '健康检查', '1', 0);
-- 时长单位 月
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '程序异常保留时长', '1', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '操作日志保留时长', '12', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '登录日志保留时长', '12', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '访问日志保留时长', '1', 0);
-- 时长单位 天
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', 'Cookie保留时长', '7', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', 'IP地理位置接口', 'None', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '地理位置服务', '百度地图开放平台', 'BaiDuIPSvr', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '地理位置服务', '聚合地理位置', 'JuheIPSvr', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '地理位置服务', '百度138地理位置', 'BaiDuIP138Svr', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '地理位置', 'BaiDuIPSvr', 'http://api.map.baidu.com/location/ip?ak=6lvVPMDlm2gjLpU0aiqPsHXi2OiwGQRj'||CHR(38)||'ip=', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '地理位置', 'JuheIPSvr', 'http://apis.juhe.cn/ip/ipNew?key=f57102d1b9fadd3f4a1c29072d0c0206'||CHR(38)||'ip=', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '地理位置', 'BaiDuIP138Svr', 'https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?resource_id=6006&query=', 0);
-- 时长单位 分钟
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', 'IP请求缓存时长', '10', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '演示系统', '0', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '网站设置', '授权盐值', 'yjglE2eddCGcS7tTFTDd2DfvqXHgCnMhNhpmx9HJaC9l8GAZ', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '网站设置', '哈希结果', '6jTT50HGuk8V+AIsiE4IfqjcER71PBN1DY7gqOLZE7E=', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '验证码图床', 'http://imgs.sdgxgz.com/images/', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '默认应用程序', '0', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '后台地址', 'http://localhost:50852', 0);
-- 系统登录首页设置
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '系统首页', '高仿码云', 'Login-Gitee', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '系统首页', '蓝色清新', 'Login-Blue', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '系统首页', '系统默认', 'Login', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '系统首页', '科技动感', 'Login-Tec', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '系统首页', 'Admin-LTE', 'Login-LTE', 0);
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '网站设置', '登录界面', 'Login', 0);
DELETE FROM Navigations Where Category = '0';
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL, 0, '后台管理', 10, 'fa fa-gear', '~/Admin/Index', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL, 0, '个人中心', 20, 'fa fa-suitcase', '~/Admin/Profiles', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 1, '保存显示名称', 10, 'fa fa-fa', 'saveDisplayName', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 2, '保存密码', 20, 'fa fa-fa', 'savePassword', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 3, '保存应用', 30, 'fa fa-fa', 'saveApp', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 4, '保存样式', 40, 'fa fa-fa', 'saveTheme', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 5, '保存头像', 50, 'fa fa-fa', 'saveIcon', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 6, '保存网站设置', 60, 'fa fa-fa', 'saveUISettings', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '系统锁屏', 25, 'fa fa-television', '~/Account/Lock', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '返回前台', 30, 'fa fa-hand-o-left', '~/Home/Index', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '网站设置', 40, 'fa fa-fa', '~/Admin/Settings', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 1, '保存系统名称', 10, 'fa fa-fa', 'saveTitle', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 2, '保存页脚设置', 20, 'fa fa-fa', 'saveFooter', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 3, '保存样式', 30, 'fa fa-fa', 'saveTheme', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 4, '清理缓存', 40, 'fa fa-fa', 'clearCache', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 5, '清理全部缓存', 50, 'fa fa-fa', 'clearAllCache', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 6, '登录设置', 60, 'fa fa-fa', 'loginSettings', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 7, '自动锁屏', 70, 'fa fa-fa', 'lockScreen', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 8, '默认应用', 80, 'fa fa-fa', 'defaultApp', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '菜单管理', 50, 'fa fa-dashboard', '~/Admin/Menus', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 1, '新增', 10, 'fa fa-fa', 'add', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 2, '编辑', 20, 'fa fa-fa', 'edit', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 3, '删除', 30, 'fa fa-fa', 'del', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 4, '分配角色', 40, 'fa fa-fa', 'assignRole', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '图标页面', 50, 'fa fa-fa', '~/Admin/IconView', '0', 1);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '侧边栏', 55, 'fa fa-fa', '~/Admin/Sidebar', '0', 1);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '用户管理', 60, 'fa fa-user', '~/Admin/Users', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 1, '新增', 10, 'fa fa-fa', 'add', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 2, '编辑', 20, 'fa fa-fa', 'edit', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 3, '删除', 30, 'fa fa-fa', 'del', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 4, '分配部门', 40, 'fa fa-fa', 'assignGroup', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 5, '分配角色', 50, 'fa fa-fa', 'assignRole', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '角色管理', 70, 'fa fa-sitemap', '~/Admin/Roles', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 1, '新增', 10, 'fa fa-fa', 'add', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 2, '编辑', 20, 'fa fa-fa', 'edit', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 3, '删除', 30, 'fa fa-fa', 'del', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 4, '分配用户', 40, 'fa fa-fa', 'assignUser', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 5, '分配部门', 50, 'fa fa-fa', 'assignGroup', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 6, '分配菜单', 60, 'fa fa-fa', 'assignMenu', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 7, '分配应用', 70, 'fa fa-fa', 'assignApp', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '部门管理', 80, 'fa fa-bank', '~/Admin/Groups', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 1, '新增', 10, 'fa fa-fa', 'add', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 2, '编辑', 20, 'fa fa-fa', 'edit', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 3, '删除', 30, 'fa fa-fa', 'del', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 4, '分配用户', 40, 'fa fa-fa', 'assignUser', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 5, '分配角色', 50, 'fa fa-fa', 'assignRole', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '字典表维护', 90, 'fa fa-book', '~/Admin/Dicts', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 1, '新增', 10, 'fa fa-fa', 'add', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 2, '编辑', 20, 'fa fa-fa', 'edit', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 3, '删除', 30, 'fa fa-fa', 'del', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '站内消息', 100, 'fa fa-envelope', '~/Admin/Messages', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '任务管理', 110, 'fa fa fa-tasks', '~/Admin/Tasks', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 1, '暂停', 10, 'fa fa-fa', 'pause', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 2, '日志', 20, 'fa fa-fa', 'info', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '通知管理', 120, 'fa fa-bell', '~/Admin/Notifications', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '系统日志', 130, 'fa fa-gears', '#', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 1, '操作日志', 10, 'fa fa-edit', '~/Admin/Logs', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 2, '登录日志', 20, 'fa fa-user-circle-o', '~/Admin/Logins', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 3, '访问日志', 30, 'fa fa-bars', '~/Admin/Traces', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 4, 'SQL日志', 40, 'fa fa-database', '~/Admin/SQL', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '在线用户', 140, 'fa fa-users', '~/Admin/Online', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '网站分析', 145, 'fa fa-line-chart', '~/Admin/Analyse', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '程序异常', 150, 'fa fa-cubes', '~/Admin/Exceptions', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, IsResource) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL, '服务器日志', 10, 'fa fa-fa', 'log', '0', 2);
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '健康检查', 155, 'fa fa-heartbeat', '~/Admin/Healths', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL,0, '工具集合', 160, 'fa fa-gavel', '#', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 1, '客户端测试', 10, 'fa fa-wrench', '~/Admin/Mobile', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 2, 'API文档', 20, 'fa fa-wrench', '~/swagger', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 3, '图标集', 30, 'fa fa-dashboard', '~/Admin/FAIcon', '0');
-- 控件集合菜单
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAL, 0, '控件集合', 170, 'fa fa-stethoscope', '#', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 1, '行为式验证码', 10, 'fa fa-wrench', 'https://gitee.com/LongbowEnterprise/SliderCaptcha', '0');
INSERT INTO Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category) Values (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL - 2, '下拉框', 20, 'fa fa-bars', 'http://longbowenterprise.gitee.io/longbow-select/', '0');
DELETE FROM GROUPS WHERE GroupName = 'Admin';
INSERT INTO Groups (Id, GroupCode, GroupName, Description) VALUES (SEQ_GROUPS_ID.NEXTVAL, '001', 'Admin', '系统默认组');
DELETE FROM Roles where RoleName in ('Administrators', 'Default');
INSERT INTO Roles (Id, RoleName, Description) VALUES (SEQ_ROLES_ID.NEXTVAL, 'Administrators', '系统管理员');
INSERT INTO Roles (Id, RoleName, Description) VALUES (SEQ_ROLES_ID.NEXTVAL, 'Default', '默认用户,可访问前台页面');
DELETE FROM RoleGroup;
INSERT INTO RoleGroup (Id, GroupId, RoleId) SELECT SEQ_ROLEGROUP_ID.NEXTVAL, g.Id, r.Id From Groups g left join Roles r on 1=1 where GroupName = 'Admin' and RoleName = 'Administrators';
DELETE FROM UserGroup;
DELETE FROM UserRole;
INSERT INTO UserRole (Id, UserId, RoleId) SELECT SEQ_USERROLE_ID.NEXTVAL, u.Id, r.Id From Users u left join Roles r on 1=1 where UserName = 'Admin' and RoleName = 'Administrators';
INSERT INTO UserRole (Id, UserId, RoleId) SELECT SEQ_USERROLE_ID.NEXTVAL, u.Id, r.Id From Users u left join Roles r on 1=1 where UserName = 'User' and RoleName = 'Default';
DELETE FROM NavigationRole;
INSERT INTO NavigationRole (Id, NavigationID, RoleID) SELECT SEQ_NAVIGATIONROLE_ID.NEXTVAL, n.Id, r.Id FROM Navigations n left join Roles r on 1=1 Where RoleName = 'Administrators';
INSERT INTO NavigationRole (Id, NavigationID, RoleID) SELECT SEQ_NAVIGATIONROLE_ID.NEXTVAL, n.Id, r.Id FROM Navigations n left join Roles r on 1=1 Where RoleName = 'Default' and Name in ('后台管理', '个人中心', '返回前台', '通知管理');
INSERT INTO NavigationRole (Id, NavigationID, RoleID) SELECT SEQ_NAVIGATIONROLE_ID.NEXTVAL, n.Id, r.Id FROM Navigations n left join Roles r on 1=1 Where RoleName = 'Default' and ParentId in (select id from Navigations where Name in ('个人中心'));
-- Client Data
Delete From Dicts Where Category = '应用程序' and Code = 'Demo';
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '应用程序', '测试平台', 'Demo', 0);
Delete From Dicts Where Category = '应用首页' and Name = 'Demo';
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '应用首页', 'Demo', 'http://localhost:49185', 0);
Delete From Dicts Where Category = '测试平台';
Insert into Dicts (Id, Category, Name, Code, Define) values (SEQ_DICTS_ID.NEXTVAL, '测试平台', '网站标题', '前台演示系统', 1);
Insert into Dicts (Id, Category, Name, Code, Define) values (SEQ_DICTS_ID.NEXTVAL, '测试平台', '网站页脚', '前台演示程序后台权限管理框架', 1);
Insert into Dicts (Id, Category, Name, Code, Define) values (SEQ_DICTS_ID.NEXTVAL, '测试平台', '个人中心地址', '/Admin/Profiles', 1);
Insert into Dicts (Id, Category, Name, Code, Define) values (SEQ_DICTS_ID.NEXTVAL, '测试平台', '系统设置地址', '/Admin/Index', 1);
Insert into Dicts (Id, Category, Name, Code, Define) values (SEQ_DICTS_ID.NEXTVAL, '测试平台', '系统通知地址', '/Admin/Notifications', 1);
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '测试平台', 'favicon', '/favicon.ico', 1);
INSERT INTO Dicts (Id, Category, Name, Code, Define) VALUES (SEQ_DICTS_ID.NEXTVAL, '测试平台', '网站图标', '/favicon.png', 1);
Delete from Navigations where Application = 'Demo';
INSERT into Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, Application) VALUES (SEQ_NAVIGATIONS_ID.NEXTVAl, 0, '首页', 10, 'fa fa-fa', '~/Home/Index', '1', 'Demo');
INSERT into Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, Application) VALUES (SEQ_NAVIGATIONS_ID.NEXTVAl, 0, '测试页面', 20, 'fa fa-fa', '#', '1', 'Demo');
INSERT into Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, Application) VALUES (SEQ_NAVIGATIONS_ID.NEXTVAl, SEQ_NAVIGATIONS_ID.CURRVAL, '关于', 10, 'fa fa-fa', '~/Home/About', '1', 'Demo');
INSERT into Navigations (Id, ParentId, Name, "ORDER", Icon, Url, Category, Application) VALUES (SEQ_NAVIGATIONS_ID.NEXTVAl, 0, '返回码云', 20, 'fa fa-fa', 'https://gitee.com/LongbowEnterprise/BootstrapAdmin', '1', 'Demo');
-- 菜单授权
INSERT INTO NavigationRole (Id, NavigationId, RoleId) SELECT SEQ_NAVIGATIONROLE_ID.NEXTVAL, n.ID, r.ID FROM Navigations n left join Roles r on 1=1 Where r.RoleName = 'Default' and Application = 'Demo';
-- 角色对应用授权
DELETE From RoleApp where AppId in ('Demo', 'BA');
INSERT INTO RoleApp (Id, AppId, RoleId) SELECT SEQ_ROLEAPP_ID.NEXTVAL, 'Demo', ID From Roles Where RoleName = 'Default';
INSERT INTO RoleApp (Id, AppId, RoleId) SELECT SEQ_ROLEAPP_ID.NEXTVAL, 'BA', ID From Roles Where RoleName = 'Default';

215
db/Oracle/Install.sql Normal file
View File

@ -0,0 +1,215 @@
CREATE TABLE Users (
ID INTEGER NOT NULL,
UserName NVARCHAR2 (16) NOT NULL,
Password NVARCHAR2 (50) NOT NULL,
PassSalt NVARCHAR2 (50) NOT NULL,
DisplayName NVARCHAR2 (50) NOT NULL,
RegisterTime DATE NOT NULL,
ApprovedTime DATE,
ApprovedBy NVARCHAR2 (50),
Description NVARCHAR2 (500) NOT NULL,
RejectedBy NVARCHAR2 (50) ,
RejectedTime DATE,
RejectedReason NVARCHAR2 (50),
Icon NVARCHAR2 (50),
Css NVARCHAR2 (50),
App NVARCHAR2 (50)
);
CREATE TABLE UserRole (
ID INTEGER NOT NULL,
UserID INTEGER NOT NULL,
RoleID INTEGER NOT NULL
);
CREATE TABLE UserGroup(
ID INTEGER NOT NULL,
UserID INTEGER NOT NULL,
GroupID INTEGER NOT NULL
);
CREATE TABLE Roles(
ID INTEGER NOT NULL,
RoleName NVARCHAR2 (50) NOT NULL,
Description NVARCHAR2 (500) NULL
);
CREATE TABLE RoleGroup(
ID INTEGER NOT NULL,
RoleID INTEGER NOT NULL,
GroupID INTEGER NOT NULL
);
CREATE TABLE RoleApp(
ID INTEGER NOT NULL,
AppID NVARCHAR2 (50) NOT NULL,
RoleID INTEGER NOT NULL
);
CREATE TABLE Notifications(
ID INTEGER NOT NULL,
Category NVARCHAR2 (50) NOT NULL,
Title NVARCHAR2 (50) NOT NULL,
Content NVARCHAR2 (50) NOT NULL,
RegisterTime DATE NOT NULL,
ProcessTime DATE NULL,
ProcessBy NVARCHAR2 (50) NULL,
ProcessResult NVARCHAR2 (50) NULL,
Status NVARCHAR2 (50) DEFAULT 0
);
CREATE TABLE Navigations(
ID INTEGER NOT NULL,
ParentId INTEGER DEFAULT 0,
Name NVARCHAR2 (50) NOT NULL,
"ORDER" INTEGER DEFAULT 0 NOT NULL,
Icon NVARCHAR2 (50) DEFAULT 'fa fa-fa',
Url NVARCHAR2 (2000) NULL,
Category NVARCHAR2 (50) DEFAULT 0,
Target NVARCHAR2 (10) DEFAULT '_self',
IsResource INTEGER DEFAULT 0,
Application NVARCHAR2 (200) DEFAULT 'BA'
);
CREATE TABLE NavigationRole(
ID INTEGER NOT NULL,
NavigationID INTEGER NOT NULL,
RoleID INTEGER NOT NULL
);
CREATE TABLE Logs(
ID INTEGER NOT NULL,
CRUD NVARCHAR2 (50) NOT NULL,
UserName NVARCHAR2 (50) NOT NULL,
LogTime DATE NOT NULL,
Ip NVARCHAR2 (15) NOT NULL,
Browser NVARCHAR2 (50) NULL,
OS NVARCHAR2 (50) NULL,
City NVARCHAR2 (50) NULL,
RequestUrl NVARCHAR2 (500) NOT NULL,
RequestData NVARCHAR2 (2000) NULL,
UserAgent NVARCHAR2 (2000) NULL,
Referer NVARCHAR2 (2000) NULL
);
CREATE TABLE Groups(
ID INTEGER NOT NULL,
GroupCode NVARCHAR2 (50) NOT NULL,
GroupName NVARCHAR2 (50) NOT NULL,
Description NVARCHAR2 (500) NULL
);
CREATE TABLE Exceptions(
ID INTEGER NOT NULL,
AppDomainName NVARCHAR2 (50) NOT NULL,
ErrorPage NVARCHAR2 (50) NOT NULL,
UserID NVARCHAR2 (50) NULL,
UserIp NVARCHAR2 (15) NULL,
ExceptionType NVARCHAR2 (2000) NOT NULL,
Message NVARCHAR2 (2000) NOT NULL,
StackTrace NVARCHAR2 (2000) NULL,
LogTime DATE NOT NULL,
Category NVARCHAR2 (50) NULL
);
CREATE TABLE Dicts(
ID INTEGER NOT NULL,
Category NVARCHAR2 (50) NOT NULL,
Name NVARCHAR2 (50) NOT NULL,
Code NVARCHAR2 (2000) NOT NULL,
Define INTEGER DEFAULT 1 NOT NULL
);
CREATE TABLE Messages(
ID INTEGER NOT NULL,
Title NVARCHAR2 (50) NOT NULL,
Content NVARCHAR2 (500) NOT NULL,
"FROM" NVARCHAR2 (50) NOT NULL,
"TO" NVARCHAR2 (50) NOT NULL,
SendTime DATE NOT NULL,
Status NVARCHAR2 (50) NOT NULL,
Flag INTEGER DEFAULT 0,
IsDelete INTEGER DEFAULT 0,
Label NVARCHAR2 (50)
);
CREATE TABLE Tasks(
ID INTEGER NOT NULL,
TaskName NVARCHAR2 (500) NOT NULL,
AssignName NVARCHAR2 (50) NOT NULL,
UserName NVARCHAR2 (50) NOT NULL,
TaskTime INTEGER NOT NULL,
TaskProgress INTEGER NOT NULL,
AssignTime DATE NOT NULL
);
CREATE TABLE RejectUsers(
ID INTEGER NOT NULL,
UserName NVARCHAR2 (50) NOT NULL,
DisplayName NVARCHAR2 (50) NOT NULL,
RegisterTime DATE NOT NULL,
RejectedBy NVARCHAR2 (50) NOT NULL,
RejectedTime DATE NOT NULL,
RejectedReason NVARCHAR2 (50) NULL
);
CREATE TABLE LoginLogs(
ID INTEGER NOT NULL,
UserName NVARCHAR2 (50) NOT NULL,
LoginTime DATE NOT NULL,
Ip NVARCHAR2 (15) NOT NULL,
OS NVARCHAR2 (50) NULL,
Browser NVARCHAR2 (50) NULL,
City NVARCHAR2 (50) NULL,
Result NVARCHAR2 (50) NOT NULL,
UserAgent NVARCHAR2 (2000) NULL
);
CREATE TABLE ResetUsers(
ID INTEGER NOT NULL,
UserName NVARCHAR2 (50) NOT NULL,
DisplayName NVARCHAR2 (50) NOT NULL,
Reason NVARCHAR2 (500) NOT NULL,
ResetTime DATE NOT NULL
);
CREATE TABLE Traces(
ID INTEGER NOT NULL,
UserName NVARCHAR2 (50) NOT NULL,
LogTime DATE NOT NULL,
IP NVARCHAR2 (15) NOT NULL,
Browser NVARCHAR2 (2000),
OS NVARCHAR2 (2000),
City NVARCHAR2 (50),
RequestUrl NVARCHAR2 (2000) NOT NULL,
UserAgent NVARCHAR2 (2000),
Referer NVARCHAR2 (2000)
);
CREATE TABLE DBLogs (
ID INTEGER NOT NULL,
UserName NVARCHAR2 (50),
SQL NVARCHAR2 (2000) NOT NULL,
LogTime DATE NOT NULL
);
CREATE SEQUENCE SEQ_USERS_ID;
CREATE SEQUENCE SEQ_USERROLE_ID;
CREATE SEQUENCE SEQ_USERGROUP_ID;
CREATE SEQUENCE SEQ_ROLES_ID;
CREATE SEQUENCE SEQ_ROLEGROUP_ID;
CREATE SEQUENCE SEQ_ROLEAPP_ID;
CREATE SEQUENCE SEQ_NOTIFICATIONS_ID;
CREATE SEQUENCE SEQ_NAVIGATIONS_ID;
CREATE SEQUENCE SEQ_NAVIGATIONROLE_ID;
CREATE SEQUENCE SEQ_LOGS_ID;
CREATE SEQUENCE SEQ_GROUPS_ID;
CREATE SEQUENCE SEQ_EXCEPTIONS_ID;
CREATE SEQUENCE SEQ_DICTS_ID;
CREATE SEQUENCE SEQ_MESSAGES_ID;
CREATE SEQUENCE SEQ_TASKS_ID;
CREATE SEQUENCE SEQ_REJECTUSERS_ID;
CREATE SEQUENCE SEQ_LOGINLOGS_ID;
CREATE SEQUENCE SEQ_RESETUSERS_ID;
CREATE SEQUENCE SEQ_TRACES_ID;
CREATE SEQUENCE SEQ_DBLOGS_ID;

View File

@ -26,12 +26,13 @@ INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('头像地址', '头像
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站样式', '蓝色样式', 'blue.css', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站样式', '黑色样式', 'black.css', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站样式', 'AdminLTE', 'lte.css', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('当前样式', '使用样式', 'blue.css', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '使用样式', 'blue.css', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '前台首页', '~/Home/Index', 0);
-- 网站UI设置
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '侧边栏状态', '1', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '卡片标题状态', '1', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '固定表头', '1', 0);
-- 登录配置
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '短信验证码登录', '1', 0);
@ -42,21 +43,23 @@ INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '自动
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '自动锁屏', '0', 0);
-- 时长单位 月
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', '程序异常保留时长', '1', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', '操作日志保留时长', '12', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', '登录日志保留时长', '12', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', '访问日志保留时长', '1', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '程序异常保留时长', '1', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '操作日志保留时长', '12', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '登录日志保留时长', '12', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '访问日志保留时长', '1', 0);
-- 时长单位 天
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', 'Cookie保留时长', '7', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', 'Cookie保留时长', '7', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', 'IP地理位置接口', 'None', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('地理位置', 'BaiDuIPSvr', 'http://api.map.baidu.com/location/ip?ak=6lvVPMDlm2gjLpU0aiqPsHXi2OiwGQRj&ip=', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('地理位置', 'JuheIPSvr', 'http://apis.juhe.cn/ip/ipNew?key=f57102d1b9fadd3f4a1c29072d0c0206&ip=', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '演示系统', '0', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', 'IP地理位置接口', 'None', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', 'BaiDuIPSvr', 'http://api.map.baidu.com/location/ip?ak=6lvVPMDlm2gjLpU0aiqPsHXi2OiwGQRj&ip=', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', 'JuheIPSvr', 'http://apis.juhe.cn/ip/ipNew?key=f57102d1b9fadd3f4a1c29072d0c0206&ip=', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', '演示系统', '0', 0);
-- 时长单位 分钟
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', 'IP请求缓存时长', '10', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统设置', '验证码图床', 'http://imgs.sdgxgz.com/images/', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', 'IP请求缓存时长', '10', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '验证码图床', 'http://imgs.sdgxgz.com/images/', 0);
DELETE FROM Navigations Where Category = '0';
INSERT INTO Navigations (ParentId, Name, "order", Icon, Url, Category) VALUES (0, '后台管理', 10, 'fa fa-gear', '~/Admin/Index', '0');

View File

@ -178,10 +178,10 @@ CREATE TABLE Traces(
UserName VARCHAR (50) NOT NULL,
LogTime DATE NOT NULL,
IP VARCHAR (15) NOT NULL,
Browser VARCHAR (50),
OS VARCHAR (50),
Browser VARCHAR (2000),
OS VARCHAR (2000),
City VARCHAR (50),
RequestUrl VARCHAR (500) NOT NULL,
RequestUrl VARCHAR (2000) NOT NULL,
UserAgent VARCHAR (2000) NULL,
Referer VARCHAR (2000)
);

View File

@ -5,8 +5,6 @@ INSERT INTO Users (UserName, Password, PassSalt, DisplayName, RegisterTime, Appr
INSERT INTO Users (UserName, Password, PassSalt, DisplayName, RegisterTime, ApprovedTime, ApprovedBy, [Description], [App]) values ('User', 'tXG/yNffpnm6cThrCH7wf6jN1ic3VHvLoY4OrzKtrZ4=', 'c5cIrRMn8XjB84M/D/X7Lg9uUqQFmYNEdxb/4HWH8OLa4pNZ', '测试账号', datetime(CURRENT_TIMESTAMP, 'localtime'), datetime(CURRENT_TIMESTAMP, 'localtime'), 'system', '系统默认创建', 'Demo');
DELETE From Dicts Where Define = 0;
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('菜单', '系统菜单', '0', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('菜单', '外部菜单', '1', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('应用程序', '后台管理', 'BA', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '网站标题', '后台管理系统', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '网站页脚', '2016 © 通用后台管理系统', 0);
@ -26,12 +24,13 @@ INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('头像地址
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站样式', '蓝色样式', 'blue.css', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站样式', '黑色样式', 'black.css', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站样式', 'AdminLTE', 'lte.css', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('当前样式', '使用样式', 'blue.css', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '使用样式', 'blue.css', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '前台首页', '~/Home/Index', 0);
-- 网站UI设置
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '侧边栏状态', '1', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '卡片标题状态', '1', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '固定表头', '1', 0);
-- 登录配置
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '短信验证码登录', '1', 0);
@ -41,22 +40,53 @@ INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '自动锁屏时长', '30', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '自动锁屏', '0', 0);
-- 是否启用 Blazor 默认为 0 未启用
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', 'Blazor', '0', 0);
-- 是否启用 健康检查 默认为 0 未启用 1 启用
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '健康检查', '1', 0);
-- 时长单位 月
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统设置', '程序异常保留时长', '1', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统设置', '操作日志保留时长', '12', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统设置', '登录日志保留时长', '12', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统设置', '访问日志保留时长', '1', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '程序异常保留时长', '1', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '操作日志保留时长', '12', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '登录日志保留时长', '12', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '访问日志保留时长', '1', 0);
-- 时长单位 天
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统设置', 'Cookie保留时长', '7', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', 'Cookie保留时长', '7', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', 'IP地理位置接口', 'None', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('地理位置服务', '百度地图开放平台', 'BaiDuIPSvr', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('地理位置服务', '聚合地理位置', 'JuheIPSvr', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('地理位置服务', '百度138地理位置', 'BaiDuIP138Svr', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('地理位置', 'BaiDuIPSvr', 'http://api.map.baidu.com/location/ip?ak=6lvVPMDlm2gjLpU0aiqPsHXi2OiwGQRj&ip=', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('地理位置', 'JuheIPSvr', 'http://apis.juhe.cn/ip/ipNew?key=f57102d1b9fadd3f4a1c29072d0c0206&ip=', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('地理位置', 'BaiDuIP138Svr', 'https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?resource_id=6006&query=', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统设置', 'IP地理位置接口', 'None', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统设置', 'BaiDuIPSvr', 'http://api.map.baidu.com/location/ip?ak=6lvVPMDlm2gjLpU0aiqPsHXi2OiwGQRj&ip=', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统设置', 'JuheIPSvr', 'http://apis.juhe.cn/ip/ipNew?key=f57102d1b9fadd3f4a1c29072d0c0206&ip=', 0);
-- 时长单位 分钟
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统设置', 'IP请求缓存时长', '10', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统设置', '演示系统', '0', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统设置', '验证码图床', 'http://imgs.sdgxgz.com/images/', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', 'IP请求缓存时长', '10', 0);
-- 演示系统
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '演示系统', '0', 0);
-- 授权密码默认为 123789
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '授权盐值', 'yjglE2eddCGcS7tTFTDd2DfvqXHgCnMhNhpmx9HJaC9l8GAZ', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '哈希结果', '6jTT50HGuk8V+AIsiE4IfqjcER71PBN1DY7gqOLZE7E=', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '验证码图床', 'http://imgs.sdgxgz.com/images/', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '默认应用程序', '0', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '后台地址', 'http://localhost:50852', 0);
-- 系统登录首页设置
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统首页', '2-高仿码云', 'Login-Gitee', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统首页', '3-蓝色清新', 'Login-Blue', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('系统首页', '1-系统默认', 'Login', 1);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统首页', '科技动感', '4-Login-Tec', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('系统首页', 'Admin-LTE', '5-Login-LTE', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '登录界面', 'Login', 0);
DELETE FROM Navigations Where Category = '0';
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category]) VALUES (0, '后台管理', 10, 'fa fa-gear', '~/Admin/Index', '0');
@ -77,6 +107,7 @@ INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], IsResource) VALUES (last_insert_rowid() - 4, '清理全部缓存', 50, 'fa fa-fa', 'clearAllCache', '0', 2);
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], IsResource) VALUES (last_insert_rowid() - 5, '登录设置', 60, 'fa fa-fa', 'loginSettings', '0', 2);
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], IsResource) VALUES (last_insert_rowid() - 6, '自动锁屏', 70, 'fa fa-fa', 'lockScreen', '0', 2);
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], IsResource) VALUES (last_insert_rowid() - 7, '默认应用', 80, 'fa fa-fa', 'defaultApp', '0', 2);
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category]) VALUES (0, '菜单管理', 50, 'fa fa-dashboard', '~/Admin/Menus', '0');
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], IsResource) VALUES (last_insert_rowid(), '新增', 10, 'fa fa-fa', 'add', '0', 2);
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], IsResource) VALUES (last_insert_rowid() - 1, '编辑', 20, 'fa fa-fa', 'edit', '0', 2);
@ -158,16 +189,16 @@ INSERT INTO NavigationRole (NavigationID, RoleID) SELECT n.Id, r.Id FROM Navigat
Delete From [Dicts] Where Category = '应用程序' and Code = 'Demo';
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('应用程序', '测试平台', 'Demo', 0);
Delete From [Dicts] Where Category = '应用首页' and Name = 'Demo';
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('应用首页', 'Demo', 'http://localhost:49185/', 0);
INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('应用首页', 'Demo', 'http://localhost:49185', 0);
Delete From [Dicts] Where Category = '测试平台';
Insert into Dicts (Category, [Name], Code, Define) values ('测试平台', '网站标题', '前台演示系统', 1);
Insert into Dicts (Category, [Name], Code, Define) values ('测试平台', '网站页脚', '前台演示程序后台权限管理框架', 1);
Insert into Dicts (Category, [Name], Code, Define) values ('测试平台', '个人中心地址', 'http://localhost:50852/Admin/Profiles', 1);
Insert into Dicts (Category, [Name], Code, Define) values ('测试平台', '系统设置地址', 'http://localhost:50852/Admin/Index', 1);
Insert into Dicts (Category, [Name], Code, Define) values ('测试平台', '系统通知地址', 'http://localhost:50852/Admin/Notifications', 1);
INSERT INTO Dicts (Category, [Name], Code, Define) VALUES ('测试平台', 'favicon', 'http://localhost:49185/favicon.ico', 1);
INSERT INTO Dicts (Category, [Name], Code, Define) VALUES ('测试平台', '网站图标', 'http://localhost:49185/favicon.png', 1);
Insert into Dicts (Category, [Name], Code, Define) values ('测试平台', '个人中心地址', '/Admin/Profiles', 1);
Insert into Dicts (Category, [Name], Code, Define) values ('测试平台', '系统设置地址', '/Admin/Index', 1);
Insert into Dicts (Category, [Name], Code, Define) values ('测试平台', '系统通知地址', '/Admin/Notifications', 1);
INSERT INTO Dicts (Category, [Name], Code, Define) VALUES ('测试平台', 'favicon', '/favicon.ico', 1);
INSERT INTO Dicts (Category, [Name], Code, Define) VALUES ('测试平台', '网站图标', '/favicon.png', 1);
Delete from [Navigations] where Application = 'Demo';
INSERT into [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], [Application]) VALUES (0, '首页', 10, 'fa fa-fa', '~/Home/Index', '1', 'Demo');

View File

@ -178,10 +178,10 @@ CREATE TABLE Traces(
UserName VARCHAR (50) NOT NULL COLLATE NOCASE,
LogTime DATETIME NOT NULL,
IP VARCHAR (15) NOT NULL,
Browser VARCHAR (50),
OS VARCHAR (50),
Browser VARCHAR (2000),
OS VARCHAR (2000),
City VARCHAR (50),
RequestUrl VARCHAR (500) NOT NULL,
RequestUrl VARCHAR (2000) NOT NULL,
UserAgent VARCHAR (2000),
Referer VARCHAR (2000)
);

View File

@ -29,12 +29,13 @@ INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'头像地
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站样式', N'蓝色样式', N'blue.css', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站样式', N'黑色样式', N'black.css', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站样式', N'AdminLTE', N'lte.css', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'当前样式', N'使用样式', N'blue.css', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'使用样式', N'blue.css', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'前台首页', N'~/Home/Index', 0)
-- 网站UI设置
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'侧边栏状态', N'1', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'卡片标题状态', N'1', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'固定表头', N'1', 0)
-- 登录配置
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'短信验证码登录', N'1', 0)
@ -44,22 +45,50 @@ INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'自动锁屏时长', N'30', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'自动锁屏', N'0', 0)
-- 是否启用 Blazor 默认为 0 未启用
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'Blazor', N'0', 0)
-- 是否启用 健康检查 默认为 0 未启用 1 启用
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'健康检查', N'1', 0);
-- 时长单位 月
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'系统设置', N'程序异常保留时长', '1', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'系统设置', N'操作日志保留时长', '12', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'系统设置', N'登录日志保留时长', '12', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'系统设置', N'访问日志保留时长', '1', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'程序异常保留时长', '1', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'操作日志保留时长', '12', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'登录日志保留时长', '12', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'访问日志保留时长', '1', 0)
-- 时长单位 天
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'系统设置', N'Cookie保留时长', '7', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'Cookie保留时长', '7', 0)
-- 地理位置接口
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'IP地理位置接口', 'None', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'地理位置服务', N'百度地图开放平台', 'BaiDuIPSvr', 0);
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'地理位置服务', N'聚合地理位置', 'JuheIPSvr', 0);
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'地理位置服务', N'百度138地理位置', 'BaiDuIP138Svr', 0);
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'地理位置', N'BaiDuIPSvr', 'http://api.map.baidu.com/location/ip?ak=6lvVPMDlm2gjLpU0aiqPsHXi2OiwGQRj&ip=', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'地理位置', N'JuheIPSvr', 'http://apis.juhe.cn/ip/ipNew?key=f57102d1b9fadd3f4a1c29072d0c0206&ip=', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'地理位置', N'BaiDuIP138Svr', 'https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?resource_id=6006&query=', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'系统设置', N'IP地理位置接口', 'None', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'系统设置', N'BaiDuIPSvr', 'http://api.map.baidu.com/location/ip?ak=6lvVPMDlm2gjLpU0aiqPsHXi2OiwGQRj&ip=', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'系统设置', N'JuheIPSvr', 'http://apis.juhe.cn/ip/ipNew?key=f57102d1b9fadd3f4a1c29072d0c0206&ip=', 0)
-- 时长单位 分钟
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'系统设置', N'IP请求缓存时长', '10', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'系统设置', N'演示系统', '0', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'系统设置', N'验证码图床', 'http://imgs.sdgxgz.com/images/', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'IP请求缓存时长', '10', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'演示系统', '0', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'授权盐值', 'yjglE2eddCGcS7tTFTDd2DfvqXHgCnMhNhpmx9HJaC9l8GAZ', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'哈希结果', '6jTT50HGuk8V+AIsiE4IfqjcER71PBN1DY7gqOLZE7E=', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'验证码图床', 'http://imgs.sdgxgz.com/images/', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'默认应用程序', '0', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'后台地址', 'http://localhost:50852', 0)
-- 系统登录首页设置
INSERT INTO Dicts (Category, Name, Code, Define) VALUES (N'系统首页', N'高仿码云', N'Login-Gitee', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES (N'系统首页', N'蓝色清新', N'Login-Blue', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES (N'系统首页', N'系统默认', N'Login', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES (N'系统首页', N'科技动感', N'Login-Tec', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES (N'系统首页', N'Admin-LTE', N'Login-LTE', 0);
INSERT INTO Dicts (Category, Name, Code, Define) VALUES (N'网站设置', N'登录界面', N'Login', 0);
DELETE FROM Navigations Where Category = N'0'
INSERT [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category]) VALUES (0, N'后台管理', 10, N'fa fa-gear', N'~/Admin/Index', N'0')
@ -80,6 +109,7 @@ INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], IsResource) VALUES (@@Identity - 4, N'清理全部缓存', 50, 'fa fa-fa', 'clearAllCache', '0', 2);
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], IsResource) VALUES (@@Identity - 5, N'登录设置', 60, 'fa fa-fa', 'loginSettings', '0', 2);
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], IsResource) VALUES (@@Identity - 6, N'自动锁屏', 70, 'fa fa-fa', 'lockScreen', '0', 2);
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], IsResource) VALUES (@@Identity - 7, N'默认应用', 80, 'fa fa-fa', 'defaultApp', '0', 2);
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category]) VALUES (0, N'菜单管理', 50, N'fa fa-dashboard', N'~/Admin/Menus', N'0')
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], IsResource) VALUES (@@Identity, N'新增', 10, 'fa fa-fa', 'add', '0', 2);
INSERT INTO [Navigations] ([ParentId], [Name], [Order], [Icon], [Url], [Category], IsResource) VALUES (@@Identity - 1, N'编辑', 20, 'fa fa-fa', 'edit', '0', 2);
@ -165,16 +195,16 @@ set @AppName = N'测试平台'
Delete From [dbo].[Dicts] Where Category = N'应用程序' and Code = @AppId
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'应用程序', @AppName, @AppId, 0)
Delete From [Dicts] Where Category = '应用首页' and Name = @AppId
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'应用首页', @AppId, 'http://localhost:49185/', 0)
INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'应用首页', @AppId, 'http://localhost:49185', 0)
Delete From [dbo].[Dicts] Where Category = @AppName
Insert Dicts (Category, Name, Code, Define) values (@AppName, N'网站标题', N'前台演示程序', 1);
Insert Dicts (Category, Name, Code, Define) values (@AppName, N'网站页脚', N'前台演示程序后台权限管理框架', 1);
Insert Dicts (Category, Name, Code, Define) values (@AppName, N'个人中心地址', N'http://localhost:50852/Admin/Profiles', 1);
Insert Dicts (Category, Name, Code, Define) values (@AppName, N'系统设置地址', N'http://localhost:50852/Admin/Index', 1);
Insert Dicts (Category, Name, Code, Define) values (@AppName, N'系统通知地址', N'http://localhost:50852/Admin/Notifications', 1);
INSERT Dicts (Category, Name, Code, Define) VALUES (@AppName, N'favicon', N'http://localhost:49185/favicon.ico', 1);
INSERT Dicts (Category, Name, Code, Define) VALUES (@AppName, N'网站图标', 'http://localhost:49185/favicon.png', 1);
Insert Dicts (Category, Name, Code, Define) values (@AppName, N'个人中心地址', N'/Admin/Profiles', 1);
Insert Dicts (Category, Name, Code, Define) values (@AppName, N'系统设置地址', N'/Admin/Index', 1);
Insert Dicts (Category, Name, Code, Define) values (@AppName, N'系统通知地址', N'/Admin/Notifications', 1);
INSERT Dicts (Category, Name, Code, Define) VALUES (@AppName, N'favicon', N'/favicon.ico', 1);
INSERT Dicts (Category, Name, Code, Define) VALUES (@AppName, N'网站图标', '/favicon.png', 1);
-- 菜单
DELETE FROM Navigations Where [Application] = @AppId

View File

@ -564,10 +564,10 @@ CREATE TABLE [dbo].[Traces](
[UserName] [varchar](50) NOT NULL,
[LogTime] [datetime] NOT NULL,
[Ip] [varchar](15) NOT NULL,
[Browser] [varchar](50) NULL,
[OS] [varchar](50) NULL,
[Browser] [varchar](2000) NULL,
[OS] [varchar](2000) NULL,
[City] [nvarchar](50) NULL,
[RequestUrl] [nvarchar](500) NOT NULL,
[RequestUrl] [nvarchar](2000) NOT NULL,
[UserAgent] [varchar](2000) NULL,
[Referer] [nvarchar](2000) NULL,
CONSTRAINT [PK_Traces] PRIMARY KEY CLUSTERED

View File

@ -0,0 +1,13 @@
# 显示 dotnet version
write-host "dotnet --version" -ForegroundColor Cyan
dotnet --version
# 注意 my.ini 文件行结束符必须为CRLF
$iniPath="C:\Program Files\MySQL\MySQL Server 5.7\my.ini"
write-host "copy $($env:appveyor_build_folder)\db\MySQL\my.ini -> $iniPath" -ForegroundColor Cyan
xcopy "$($env:appveyor_build_folder)\db\MySQL\my.ini" $iniPath /y
$newText = ([System.IO.File]::ReadAllText($iniPath)).Replace("\n", "\r\n")
[System.IO.File]::WriteAllText($iniPath, $newText)
write-host "starting database services ..." -ForegroundColor Cyan

View File

@ -0,0 +1,78 @@
function installDB() {
write-host "init sqlserver database..." -ForegroundColor Cyan
$startPath = "$($env:appveyor_build_folder)\db\SqlServer"
$sqlInstance = "(local)\SQL2017"
$outFile = join-path $startPath "output.log"
$sqlFile = join-path $startPath "Install.sql"
$initFile = join-path $startPath "InitData.sql"
sqlcmd -S "$sqlInstance" -U sa -P Password12! -i "$sqlFile" -i "$initFile" -o "$outFile"
write-host "init mysql database..." -ForegroundColor Cyan
$env:MYSQL_PWD="Password12!"
$mysql = '"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe"'
$cmd = $mysql + ' -e "create database BootstrapAdmin;" -uroot'
cmd.exe /c $cmd
$startPath = "$($env:appveyor_build_folder)\db\MySQL"
$para = ' -hlocalhost -uroot -DBootstrapAdmin < '
$sqlFile = join-path $startPath "Install.sql"
$cmd = $mysql + $para + $sqlFile
cmd.exe /c $cmd
$initFile = join-path $startPath "InitData.sql"
$cmd = $mysql + $para + $initFile
cmd.exe /c $cmd
write-host "init mongodb data..." -ForegroundColor Cyan
$initFolder = "$($env:appveyor_build_folder)\db\MongoDB"
cd $initFolder
cmd.exe /c "C:\mongodb\bin\mongo init.js"
$cmd = 'C:\mongodb\bin\mongo BootstrapAdmin --eval "printjson(db.getCollectionNames())"'
iex "& $cmd"
cd $($env:appveyor_build_folder)
}
function runUnitTest() {
write-host "dotnet test test\UnitTest" -ForegroundColor Cyan
dotnet test "test\UnitTest" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Include="[Bootstrap.Admin*]*%2c[Bootstrap.DataAccess*]*" /p:Exclude="[*]*Program%2c[*]*Startup%2c[Bootstrap.DataAccess*]*AutoDB*%2c[Bootstrap.DataAccess]*WeChatHelper" /p:ExcludeByFile="**/SMSExtensions.cs%2c**/Helper/OAuthHelper.cs%2c**/Extensions/CloudLoggerExtensions.cs%2c**/Extensions/AutoGenerateDatabaseExtensions.cs%2c**/Api/HealthsController.cs%2c**/Pages/**%2c**/DBLogTask.cs%2c**/AutoDbHelper.cs" /p:CoverletOutput=..\..\
}
function installCoveralls() {
write-host "install coveralls.net tools" -ForegroundColor Cyan
dotnet tool install coveralls.net --tool-path ".\tools"
}
function reportCoveralls() {
Set-AppveyorBuildVariable COVERALLS_REPO_TOKEN $($env:COVERALLS_REPO_TOKEN)
write-host "report UnitTest with Coveralls" -ForegroundColor Cyan
.\tools\csmacnz.Coveralls.exe --opencover -i coverage.opencover.xml --useRelativePaths
}
function installCodecov {
write-host "install codecov.tool tools" -ForegroundColor Cyan
dotnet tool install Codecov.Tool --tool-path ".\tools"
}
function reportCodecov() {
Set-AppveyorBuildVariable CODECOV_TOKEN $($env:CODECOV_TOKEN)
Set-AppveyorBuildVariable CI $($env:CI)
Set-AppveyorBuildVariable APPVEYOR $($env:Appveyor)
$coverageFile = Test-Path coverage.opencover.xml
if ($coverageFile) {
write-host "report UnitTest with Codecov" -ForegroundColor Cyan
.\tools\codecov -f coverage.opencover.xml
}
}
installDB
installCoveralls
installCodecov
runUnitTest
reportCoveralls
reportCodecov

View File

@ -0,0 +1,42 @@
fix(#BUGID): 简要描述
#Comment
comment #BUGID
#Issue
close link fix https://gitee.com/LongbowEnterprise/dashboard/issues?id=BUGID
# 样式 : feat(location): 接入登录API
#
# 登录功能与服务器对接
#
<type>(<scope>): <subject>
<body>
<footer>
#其中 type 的值可以有
# feat: 新功能
# fix: 修复bug
# doc: 文档改变
# style: 代码格式改变
# refactor: 某个已有功能重构
# perf: 性能优化
# test: 增加测试
# build: 改变了build工具 如 更新 props 文件
# revert: 撤销上一次的 commit
# db: 数据库文件或者脚本更改
# script: 辅助脚本改变
#
#scope: 用来说明此次修改的影响范围
# all: 表示影响面大 ,如修改了网络框架 会对真个程序产生影响
# location: 表示影响小,某个小小的功能
# module: 表示会影响某个模块 如登录模块、首页模块 、用户管理模块等等
#
#subject: 用来简要描述本次改动,概述就好了
#
#body: 具体的修改信息 应该尽量详细
#
#footer: 放置写备注啥的,如果是 bug 可以把bug id放入
#

32
scripts/git/readme.md Normal file
View File

@ -0,0 +1,32 @@
## 提交模板配置
### Windows Fork
Windows 版本的 Fork 提供了提交模板 commit message template功能配置步骤如下
#### git 配置文件
1. 拷贝仓库 `scripts\git\commit_msg_template.txt` 文件到当前用户根目录下 `C:\Users\[用户名]\.commit_msg_template.txt`
2. 配置 git 全局配置文件 `C:\Users\[用户名]\.gitconfig` (此文件为隐藏文件)
3. 更新 commit 配置项
```log
[commit]
template = /Users/argo/.commit_msg_template.txt
```
注意原始文件不是 . 开头拷贝到跟目录下为 . 开头文件名(点号开头文件默认为隐藏文件)
#### Fork 配置步骤
1. 打开要配置的仓库
2. 点击菜单栏第二个 **仓库** 菜单Repository
3. 下拉菜单中选中最后一个菜单项 **仓库设置** 子菜单Settings for this repository
如下图所示
![输入图片说明](https://images.gitee.com/uploads/images/2020/0327/123310_1b9b4af3_554725.png "Screen Shot 2020-03-27 at 12.30.38.png")
4. 切换到 **提交模板** 面板Commit Template
5. 勾选使用 **全局配置文件** Use global git configuration file
下面的文本框内即出现提交模板内容

3
scripts/git/run.cmd Normal file
View File

@ -0,0 +1,3 @@
@echo off
copy commit_msg_template.txt "%USERPROFILE%\.commit_msg_template.txt" /y

3
scripts/git/run.sh Normal file
View File

@ -0,0 +1,3 @@
#! /bin/bash
cp commit_msg_template.txt "../../.git/commit_msg_template1.txt"

View File

@ -4,10 +4,10 @@ cd ~/BootstrapAdmin
git pull
dotnet publish src/admin/Bootstrap.Admin -c Release
rm -f ~/BootstrapAdmin/src/admin/Bootstrap.Admin/bin/Release/netcoreapp3.0/publish/appsettings*.json
rm -f ~/BootstrapAdmin/src/admin/Bootstrap.Admin/bin/Release/netcoreapp3.0/publish/BootstrapAdmin.db
rm -f ~/BootstrapAdmin/src/admin/Bootstrap.Admin/bin/Release/net5.0/publish/appsettings*.json
rm -f ~/BootstrapAdmin/src/admin/Bootstrap.Admin/bin/Release/net5.0/publish/BootstrapAdmin.db
systemctl stop ba.admin
\cp -fr ~/BootstrapAdmin/src/admin/Bootstrap.Admin/bin/Release/netcoreapp3.0/publish/* /usr/local/ba/admin/
\cp -fr ~/BootstrapAdmin/src/admin/Bootstrap.Admin/bin/Release/net5.0/publish/* /usr/local/ba/admin/
systemctl start ba.admin
systemctl status ba.admin -l

View File

@ -4,8 +4,8 @@ cd ~/BootstrapAdmin
git pull
dotnet publish src/client/Bootstrap.Client -c Release
rm -f ~/BootstrapAdmin/src/client/Bootstrap.Client/bin/Release/netcoreapp3.0/publish/appsettings*.json
rm -f ~/BootstrapAdmin/src/client/Bootstrap.Client/bin/Release/net5.0/publish/appsettings*.json
systemctl stop ba.client
\cp -fr ~/BootstrapAdmin/src/client/Bootstrap.Client/bin/Release/netcoreapp3.0/publish/* /usr/local/ba/client/
\cp -fr ~/BootstrapAdmin/src/client/Bootstrap.Client/bin/Release/net5.0/publish/* /usr/local/ba/client/
systemctl start ba.client
systemctl status ba.client -l

View File

@ -8,7 +8,7 @@ cp ~/BootstrapAdmin/src/admin/Bootstrap.Admin/appsettings.json /usr/local/ba/adm
cp ~/BootstrapAdmin/src/admin/Bootstrap.Admin/BootstrapAdmin.db /usr/local/ba/admin
cp ~/BootstrapAdmin/src/client/Bootstrap.Client/appsettings.json /usr/local/ba/client
cp ~/BootstrapAdmin/services/* /usr/lib/systemd/system
cp ~/BootstrapAdmin/scripts/linux/services/* /usr/lib/systemd/system
systemctl enable ba.admin
systemctl enable ba.client
systemctl enable nginx

View File

@ -3,11 +3,15 @@
<Import Project="..\Directory.Build.props" />
<PropertyGroup>
<PackageProjectUrl>https://gitee.com/LongbowGroup/$(MsBuildProjectName)</PackageProjectUrl>
<RepositoryUrl>https://gitee.com/LongbowGroup/$(MsBuildProjectName).git</RepositoryUrl>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<PackageProjectUrl>https://gitee.com/LongbowEnterprise/BootstrapAdmin</PackageProjectUrl>
<RepositoryUrl>https://gitee.com/LongbowEnterprise/BootstrapAdmin.git</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Nullable>enable</Nullable>
<DocumentationFile>$(MSBuildProjectName).xml</DocumentationFile>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
</PropertyGroup>
</Project>

View File

@ -1,140 +0,0 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Linq;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
namespace Bootstrap.Admin.Controllers.Api
{
/// <summary>
/// Gitee 网站信息接口类
/// </summary>
[Route("api/[controller]/[action]")]
[ApiController]
[AllowAnonymous]
public class GiteeController : ControllerBase
{
/// <summary>
/// 获取 Gitee 网站 Issues 信息
/// </summary>
/// <param name="client"></param>
/// <param name="userName"></param>
/// <param name="repoName"></param>
/// <param name="label"></param>
/// <param name="color"></param>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult> Issues([FromServices]GiteeHttpClient client, [FromQuery]string? userName = "LongbowEnterprise", [FromQuery]string? repoName = "BootstrapAdmin", [FromQuery]string? label = "custom badge", [FromQuery]string? color = "orange")
{
var ret = await GetJsonAsync(() => client.HttpClient.GetStringAsync($"https://gitee.com/{userName}/{repoName}/issues"), content =>
{
var regex = Regex.Matches(content, "<div class='ui mini circular label'>([\\d]+)</div>", RegexOptions.IgnoreCase);
var labels = new string[] { "open", "progressing", "closed", "rejected" };
var result = string.IsNullOrEmpty(content) ? new string[] { "unknown" } : regex.Select((m, i) => $"{labels[i]} {m.Groups[1].Value}");
return string.Join(" ", result);
});
color = ret.StartsWith("open 0 progressing 0", StringComparison.OrdinalIgnoreCase) ? "success" : color;
return new JsonResult(new { schemaVersion = 1, label, message = ret, color });
}
/// <summary>
/// 获取 Gitee 网站 Pulls 信息
/// </summary>
/// <param name="client"></param>
/// <param name="userName"></param>
/// <param name="repoName"></param>
/// <param name="label"></param>
/// <param name="color"></param>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult> Pulls([FromServices]GiteeHttpClient client, [FromQuery]string? userName = "LongbowEnterprise", [FromQuery]string? repoName = "BootstrapAdmin", [FromQuery]string? label = "custom badge", [FromQuery]string? color = "orange")
{
var ret = await GetJsonAsync(() => client.HttpClient.GetStringAsync($"https://gitee.com/{userName}/{repoName}/pulls"), content =>
{
var regex = Regex.Matches(content, "<div class='ui mini circular label'>([\\d]+)</div>", RegexOptions.IgnoreCase);
var labels = new string[] { "open", "merged", "closed" };
var result = string.IsNullOrEmpty(content) ? new string[] { "unknown" } : regex.Select((m, i) => $"{labels[i]} {m.Groups[1].Value}");
return string.Join(" ", result);
});
return new JsonResult(new { schemaVersion = 1, label, message = ret, color });
}
/// <summary>
/// 获取 Gitee 网站 Releases 信息
/// </summary>
/// <param name="client"></param>
/// <param name="userName"></param>
/// <param name="repoName"></param>
/// <param name="label"></param>
/// <param name="color"></param>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult> Releases([FromServices]GiteeHttpClient client, [FromQuery]string? userName = "LongbowEnterprise", [FromQuery]string? repoName = "BootstrapAdmin", [FromQuery]string? label = "custom badge", [FromQuery]string? color = "orange")
{
var ret = await GetJsonAsync(() => client.HttpClient.GetStringAsync($"https://gitee.com/{userName}/{repoName}/releases"), content =>
{
var regex = Regex.Match(content, $"<a href=\"/{userName}/{repoName}/releases/([^\\s]+)\" target=\"_blank\">", RegexOptions.IgnoreCase);
return string.IsNullOrEmpty(content) ? "unknown" : regex.Groups[1].Value;
});
return new JsonResult(new { schemaVersion = 1, label, message = ret, color });
}
/// <summary>
/// 获取 Gitee 网站 Builds 信息
/// </summary>
/// <param name="client"></param>
/// <param name="userName"></param>
/// <param name="projName"></param>
/// <param name="branchName"></param>
/// <param name="label"></param>
/// <param name="color"></param>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult> Builds([FromServices]GiteeHttpClient client, [FromQuery]string? userName = "ArgoZhang", [FromQuery]string? projName = "bootstrapadmin", [FromQuery]string? branchName = "master", [FromQuery]string? label = "custom badge", [FromQuery]string? color = "orange")
{
var ret = await GetJsonAsync(() => client.HttpClient.GetAsJsonAsync<AppveyorBuildResult>($"https://ci.appveyor.com/api/projects/{userName}/{projName}/branch/{branchName}", null, new CancellationTokenSource(10000).Token), content =>
{
return content == null ? "unknown" : content.Build.Version;
});
return new JsonResult(new { schemaVersion = 1, label, message = ret, color });
}
private async static Task<string> GetJsonAsync<T>(Func<Task<T>> requestUrl, Func<T, string> callback)
{
var ret = "unresponsive";
try
{
var resq = await requestUrl();
ret = callback(resq);
}
catch (OperationCanceledException)
{
}
catch (Exception ex)
{
ex.Log();
}
return ret;
}
private class AppveyorBuildResult
{
/// <summary>
/// Appveyor 编译版本实例
/// </summary>
public Build Build { get; set; } = new Build();
}
private class Build
{
/// <summary>
/// Build 版本信息
/// </summary>
public string Version { get; set; } = "";
}
}
}

View File

@ -1,34 +0,0 @@
using Bootstrap.DataAccess;
using Bootstrap.Security;
using Longbow.Cache;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Collections.Generic;
namespace Bootstrap.Admin.Controllers.Api
{
/// <summary>
/// 网站设置控制器
/// </summary>
[Route("api/[controller]")]
[Authorize]
[ApiController]
public class SettingsController : ControllerBase
{
/// <summary>
/// 保存网站设置方法
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
[HttpPost]
[ButtonAuthorize(Url = "~/Admin/Settings", Auth = "saveTitle,saveFooter,saveTheme,saveUISettings")]
public bool Post([FromBody]BootstrapDict value) => DictHelper.SaveSettings(value);
/// <summary>
/// 获取网站缓存站点集合
/// </summary>
[HttpGet]
public IEnumerable<ICacheCorsItem> Get() => CacheManager.CorsSites;
}
}

View File

@ -1,48 +0,0 @@
using Bootstrap.DataAccess;
using Longbow.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
namespace Bootstrap.Admin.Controllers.Api
{
/// <summary>
/// 任务管理控制器
/// </summary>
[Route("api/[controller]")]
[Authorize]
[ApiController]
public class TasksController : ControllerBase
{
/// <summary>
/// 获取所有任务数据
/// </summary>
/// <returns></returns>
[HttpGet]
public IEnumerable<object> Get()
{
return TaskServicesManager.ToList().Select(s => new { s.Name, Status = s.Status.ToString(), s.LastRuntime, s.CreatedTime, s.NextRuntime, LastRunResult = s.Triggers.First().LastResult.ToString(), TriggerExpression = s.Triggers.FirstOrDefault().ToString() }).OrderBy(s => s.Name);
}
/// <summary>
/// 任务相关操作
/// </summary>
/// <param name="scheName">调度名称</param>
/// <param name="operType">操作方式 pause run</param>
[HttpPut("{scheName}")]
public bool Put(string scheName, [FromQuery]string operType)
{
var sche = TaskServicesManager.Get(scheName);
if (sche != null) sche.Status = operType == "pause" ? SchedulerStatus.Disabled : SchedulerStatus.Running;
// SQL 日志任务特殊处理
if (scheName == "SQL日志")
{
if (operType == "pause") LogHelper.Pause();
else LogHelper.Run();
}
return true;
}
}
}

View File

@ -1,19 +0,0 @@
#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat
FROM microsoft/dotnet:3.0-aspnetcore-runtime-nanoserver-1903 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/dotnet:3.0-sdk-nanoserver-1903 AS build
WORKDIR /src
COPY src/admin .
WORKDIR "/src/Bootstrap.Admin"
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Bootstrap.Admin.dll"]

View File

@ -1,36 +0,0 @@
using Bootstrap.DataAccess;
using Bootstrap.Security;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Bootstrap.Admin.Models
{
/// <summary>
/// 侧边栏导航条 Model
/// </summary>
public class NavigatorBarModel : HeaderBarModel
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="controller"></param>
public NavigatorBarModel(ControllerBase controller) : base(controller.User.Identity.Name)
{
Navigations = MenuHelper.RetrieveSystemMenus(UserName, $"~{controller.HttpContext.Request.Path}");
var authApps = AppHelper.RetrievesByUserName(controller.User.Identity.Name);
Applications = DictHelper.RetrieveApps().Where(app => app.Key.IsNullOrEmpty() || authApps.Any(key => key.Equals(app.Key, StringComparison.OrdinalIgnoreCase)));
}
/// <summary>
/// 获得 网站菜单
/// </summary>
public IEnumerable<BootstrapMenu> Navigations { get; private set; }
/// <summary>
/// 获得 网站应用程序
/// </summary>
public IEnumerable<KeyValuePair<string, string>> Applications { get; private set; }
}
}

View File

@ -1,33 +0,0 @@
using Bootstrap.DataAccess;
using Bootstrap.Security;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
namespace Bootstrap.Admin.Models
{
/// <summary>
/// 网站设置 Model 实体类
/// </summary>
public class SettingsModel : NavigatorBarModel
{
/// <summary>
///
/// </summary>
/// <param name="controller"></param>
public SettingsModel(ControllerBase controller) : base(controller)
{
Themes = DictHelper.RetrieveThemes();
AutoLockScreen = EnableAutoLockScreen ? "" : "lockScreen";
}
/// <summary>
/// 获得 系统配置的所有样式表
/// </summary>
public IEnumerable<BootstrapDict> Themes { get; }
/// <summary>
/// 获得 是否开启自动锁屏
/// </summary>
public string AutoLockScreen { get; }
}
}

View File

@ -1,25 +0,0 @@
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
namespace Bootstrap.Admin.Models
{
/// <summary>
///
/// </summary>
public class TaskModel : NavigatorBarModel
{
/// <summary>
///
/// </summary>
/// <param name="controller"></param>
public TaskModel(ControllerBase controller) : base(controller)
{
Tasks = new string[] { "测试任务" };
}
/// <summary>
/// 获得 系统配置的所有任务
/// </summary>
public IEnumerable<string> Tasks { get; }
}
}

View File

@ -1,12 +0,0 @@
using Longbow.Web.SignalR;
namespace Bootstrap.Admin
{
/// <summary>
/// 后台任务消息Hub
/// </summary>
public class TaskLogHub : SignalRHub
{
}
}

View File

@ -1,135 +0,0 @@
@model NavigatorBarModel
@{
ViewBag.Title = "程序异常";
}
@section css {
<environment include="Development">
<link href="~/lib/bootstrap-table/bootstrap-table.css" rel="stylesheet" />
<link href="~/lib/datetimepicker/css/bootstrap-datetimepicker.css" rel="stylesheet" />
</environment>
<environment exclude="Development">
<link href="~/lib/bootstrap-table/bootstrap-table.min.css" rel="stylesheet" />
<link href="~/lib/datetimepicker/css/bootstrap-datetimepicker.min.css" rel="stylesheet" />
</environment>
<link href="~/css/fa.css" rel="stylesheet" asp-append-version="true" />
}
@section javascript {
<environment include="Development">
<script src="~/lib/bootstrap-table/bootstrap-table.js"></script>
<script src="~/lib/bootstrap-table/extensions/export/bootstrap-table-export.js"></script>
<script src="~/lib/bootstrap-table/locale/bootstrap-table-zh-CN.js"></script>
<script src="~/lib/tablexport/tableExport.js"></script>
<script src="~/lib/datetimepicker/js/bootstrap-datetimepicker.js"></script>
</environment>
<environment exclude="Development">
<script src="~/lib/bootstrap-table/bootstrap-table.min.js"></script>
<script src="~/lib/bootstrap-table/extensions/export/bootstrap-table-export.min.js"></script>
<script src="~/lib/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="~/lib/tablexport/tableExport.min.js"></script>
<script src="~/lib/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
</environment>
<script src="~/lib/datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js"></script>
<script src="~/js/exceptions.js" asp-append-version="true"></script>
}
<div class="card">
<div class="card-header">查询条件</div>
<div class="card-body">
<form class="form-inline">
<div class="row">
<div class="form-group col-sm-auto">
<label class="control-label" for="txt_operate_start">起始时间</label>
<div class="input-group date">
<input id="txt_operate_start" class="form-control" size="16" type="text" value="" readonly>
<div class="input-group-append input-group-addon">
<div class="input-group-text"><span class="fa fa-times"></span></div>
</div>
<div class="input-group-append input-group-addon">
<div class="input-group-text"><span class="fa fa-calendar"></span></div>
</div>
</div>
</div>
<div class="form-group col-sm-auto">
<label class="control-label" for="txt_operate_end">终止时间</label>
<div class="input-group date">
<input id="txt_operate_end" class="form-control" size="16" type="text" value="" readonly>
<div class="input-group-append input-group-addon">
<div class="input-group-text"><span class="fa fa-times"></span></div>
</div>
<div class="input-group-append input-group-addon">
<div class="input-group-text"><span class="fa fa-calendar"></span></div>
</div>
</div>
</div>
<div class="form-group col-sm-auto flex-sm-fill justify-content-sm-end align-self-sm-end">
<label class="sr-only"></label>
<button type="button" id="btn_query" class="btn btn-primary btn-fill"><i class="fa fa-search" aria-hidden="true"></i><span>查询</span></button>
</div>
</div>
</form>
</div>
</div>
<div id="toolbar" class="d-none">
<div class="toolbar btn-group">
<button id="btn_view" type="button" class="btn btn-danger" asp-auth="log">
<i class="fa fa-file-text-o" aria-hidden="true"></i><span>服务器日志</span>
</button>
</div>
<div class="gear btn-group dropdown">
<button class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" type="button"><i class="fa fa-gear"></i></button>
<div class="dropdown-menu">
<a id="tb_view" href="#" title="查看明细" asp-auth="log"><i class="fa fa-file-text-o"></i></a>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
查询结果
</div>
<div class="card-body">
<table></table>
</div>
</div>
@section modal {
<div class="modal fade" id="dialogNew" tabindex="-1" role="dialog" data-backdrop="static" aria-labelledby="myModalLabel" aria-hidden="true">
<div id="errorList" class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="myModalLabel">程序异常日志窗口</h5>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
</div>
<div class="modal-body">
<form class="form-inline" id="dataForm" name="dataForm"><div class="form-row"></div></form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">
<i class="fa fa-times"></i>
<span>关闭</span>
</button>
</div>
</div>
</div>
</div>
<div id="errorDetail" class="modal-content icon-content">
<div class="modal-header">
<h5 class="modal-title" id="myDetailModalLabel">程序异常日志窗口</h5>
<button type="button" class="close" aria-hidden="true">&times;</button>
</div>
<div class="modal-body">
<div class="iconview">
<i id="fa-top" class="fa-target"></i>
<div class="affix">
<div><a href="#fa-top" class="fa fa-arrow-circle-up"></a></div>
<div><a href="#fa-bottom" class="fa fa-arrow-circle-down"></a></div>
</div>
<div id="dataFormDetail" class="ex-content"><div class="text-center"><i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i></div></div>
<i id="fa-bottom" class="fa-target"></i>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary">
<i class="fa fa-times"></i>
<span>关闭</span>
</button>
</div>
</div>
}

View File

@ -1,156 +0,0 @@
@model SettingsModel
@{
ViewBag.Title = "网站设置";
}
@section css {
<environment include="Development">
<link href="~/lib/bootstrap-toggle/css/bootstrap-toggle.css" rel="stylesheet" />
</environment>
<environment exclude="Development">
<link href="~/lib/bootstrap-toggle/css/bootstrap-toggle.min.css" rel="stylesheet" />
</environment>
}
@section javascript {
<environment include="Development">
<script src="~/lib/validate/jquery.validate.js"></script>
<script src="~/lib/validate/localization/messages_zh.js"></script>
<script src="~/lib/bootstrap-toggle/js/bootstrap-toggle.js"></script>
</environment>
<environment exclude="Development">
<script src="~/lib/validate/jquery.validate.min.js"></script>
<script src="~/lib/validate/localization/messages_zh.min.js"></script>
<script src="~/lib/bootstrap-toggle/js/bootstrap-toggle.min.js"></script>
</environment>
<script src="~/lib/longbow/longbow.dataentity.js"></script>
<script src="~/lib/longbow/longbow.validate.js"></script>
<script src="~/js/settings.js" asp-append-version="true"></script>
}
<div class="card" asp-auth="saveTitle">
<div class="card-header">系统名称设置</div>
<div class="card-body" data-toggle="LgbValidate" data-valid-button="#sysSave">
<div class="alert alert-danger" role="alert" asp-condition="@Model.IsDemo">
<span>演示系统禁止更改系统名称</span>
</div>
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" id="sysName" placeholder="请输入网站标题50字以内" value="@Model.Title" maxlength="50" data-valid="true" />
<div class="input-group-append" asp-condition="!@Model.IsDemo">
<button class="btn btn-secondary" type="button" data-method="title">保存</button>
</div>
</div>
</div>
</div>
</div>
<div class="card" asp-auth="saveFooter">
<div class="card-header">页脚设置</div>
<div class="card-body" data-toggle="LgbValidate" data-valid-button="#footSave">
<div class="alert alert-danger" role="alert" asp-condition="@Model.IsDemo">
<span>演示系统禁止更改页脚</span>
</div>
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" id="sysFoot" placeholder="请输入网站页脚50字以内" value="@Model.Footer" maxlength="50" data-valid="true" />
<div class="input-group-append" asp-condition="!@Model.IsDemo">
<button class="btn btn-secondary" type="button" data-method="footer">保存</button>
</div>
</div>
</div>
</div>
</div>
<div class="card" asp-auth="saveTheme">
<div class="card-header">网站样式</div>
<div class="card-body">
<div class="alert alert-info" role="alert">
<span>注意:<b><a class="badge-pill" href="./Profiles">个人中心</a></b>中设置的网站样式覆盖本设置</span>
</div>
<div class="form-group text-right">
<div class="btn-group" role="group">
<div class="btn-group" role="group">
<button id="dictCssDefine" class="btn btn-success dropdown-select dropdown-toggle" data-toggle="dropdown" data-default-val="" value="@Model.Theme">默认样式</button>
<div class="dropdown-menu">
<a href="#" data-val="">默认样式</a>
@foreach (var css in Model.Themes)
{
<a href="#" data-val="@css.Code">@css.Name</a>
}
</div>
</div>
<button class="btn btn-secondary" type="button" data-method="css">保存</button>
</div>
</div>
</div>
</div>
<div class="card" asp-auth="saveUISettings">
<div class="card-header">网站调整</div>
<div class="card-body">
<div class="form-inline">
<div class="row">
<div class="form-group col-6">
<label class="control-label" for="sider">侧边栏设置</label>
<input id="sider" hidden type="checkbox" data-default-val="@Model.ShowSideBar" data-toggle="toggle" data-width="120" data-onstyle="success" data-on="展开" data-off="收缩" />
</div>
<div class="form-group col-6">
<label class="control-label" for="cardTitle">标题设置</label>
<input id="cardTitle" hidden type="checkbox" data-default-val="@Model.ShowCardTitle" data-toggle="toggle" data-width="120" data-onstyle="success" data-on="显示" data-off="关闭" />
</div>
</div>
</div>
<div class="modal-footer text-right">
<button data-method="UISettings" class="btn btn-secondary" type="button"><i class="fa fa-save"></i><span>保存</span></button>
</div>
</div>
</div>
<div class="card" asp-auth="loginSettings">
<div class="card-header">登录设置</div>
<div class="card-body">
<div class="alert alert-danger" role="alert" asp-condition="@Model.IsDemo">
<span>演示系统禁止更改登录设置</span>
</div>
<div class="form-inline">
<div class="row">
<div class="form-group col-6">
<label class="control-label" for="mobile">手机登录</label>
<input id="mobile" hidden type="checkbox" data-default-val="@Model.ShowMobile" data-toggle="toggle" data-width="120" data-onstyle="success" data-on="允许" data-off="关闭" />
</div>
<div class="form-group col-6">
<label class="control-label" for="cardTitle">OAuth 认证</label>
<input id="oauth" hidden type="checkbox" data-default-val="@Model.ShowOAuth" data-toggle="toggle" data-width="120" data-onstyle="success" data-on="允许" data-off="关闭" />
</div>
</div>
</div>
<div class="modal-footer text-right" asp-condition="!@Model.IsDemo">
<button data-method="loginSettings" class="btn btn-secondary" type="button"><i class="fa fa-save"></i><span>保存</span></button>
</div>
</div>
</div>
<div class="card" asp-auth="lockScreen">
<div class="card-header">自动锁屏设置</div>
<div class="card-body">
<div class="form-inline">
<div class="row">
<div class="form-group col-6">
<label class="control-label" for="lockScreen">自动锁屏</label>
<input id="lockScreen" hidden type="checkbox" data-default-val="@Model.AutoLockScreen" data-toggle="toggle" data-width="120" data-onstyle="success" data-on="开启" data-off="关闭" />
</div>
<div class="form-group col-6">
<label class="control-label" for="lockPeriod">时长间隔(秒)</label>
<input id="lockPeriod" type="number" class="form-control" min="30" value="@Model.LockScreenPeriod" />
</div>
</div>
</div>
<div class="modal-footer text-right">
<button data-method="saveAutoLock" class="btn btn-secondary" type="button"><i class="fa fa-save"></i><span>保存</span></button>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<div class="d-flex align-items-center">
<span class="flex-fill">网站缓存</span>
<a data-method="clear" href="#" class="fa fa-times-circle-o" title="全部清除" data-toggle="tooltip" data-placement="left" asp-auth="clearAllCache"></a>
<a data-method="refresh" href="#" class="fa fa-refresh ml-3" title="点击刷新" data-toggle="tooltip"></a>
</div>
</div>
<div class="card-body" id="sortable">
</div>
</div>

View File

@ -1,152 +0,0 @@
@model TaskModel
@{
ViewBag.Title = "任务管理";
Layout = "_Admin";
}
@section css {
<environment include="Development">
<link href="~/lib/bootstrap-table/bootstrap-table.css" rel="stylesheet" />
</environment>
<environment exclude="Development">
<link href="~/lib/bootstrap-table/bootstrap-table.min.css" rel="stylesheet" />
</environment>
<link href="~/lib/longbow-select/longbow-select.css" rel="stylesheet" />
<link href="~/css/tasks.css" rel="stylesheet" asp-append-version="true" />
}
@section javascript {
<environment include="Development">
<script src="~/lib/bootstrap-table/bootstrap-table.js"></script>
<script src="~/lib/bootstrap-table/extensions/export/bootstrap-table-export.js"></script>
<script src="~/lib/bootstrap-table/locale/bootstrap-table-zh-CN.js"></script>
<script src="~/lib/tablexport/tableExport.js"></script>
<script src="~/lib/validate/jquery.validate.js"></script>
<script src="~/lib/validate/localization/messages_zh.js"></script>
</environment>
<environment exclude="Development">
<script src="~/lib/bootstrap-table/bootstrap-table.min.js"></script>
<script src="~/lib/bootstrap-table/extensions/export/bootstrap-table-export.min.js"></script>
<script src="~/lib/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="~/lib/tablexport/tableExport.min.js"></script>
<script src="~/lib/validate/jquery.validate.min.js"></script>
<script src="~/lib/validate/localization/messages_zh.min.js"></script>
</environment>
<script src="~/lib/longbow-checkbox/longbow-checkbox.js"></script>
<script src="~/lib/longbow-select/longbow-select.js"></script>
<script src="~/lib/longbow/longbow.dataentity.js" asp-append-version="true"></script>
<script src="~/lib/longbow/longbow.validate.js" asp-append-version="true"></script>
<script src="~/js/tasks.js" asp-append-version="true"></script>
}
@section modal {
<div class="modal fade" id="dialogNew" tabindex="-1" role="dialog" data-backdrop="static" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content" data-toggle="LgbValidate" data-valid-button="#btnSubmit" data-valid-modal="#dialogNew">
<div class="modal-header">
<h5 class="modal-title" id="myModalLabel">任务编辑窗口</h5>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
</div>
<div class="modal-body">
<form class="form-inline">
<div class="row">
<input type="hidden" id="taskID" />
<div class="form-group col-12">
<label class="control-label" for="taskName">任务名称</label>
<input type="text" class="form-control flex-sm-fill" id="taskName" placeholder="不可为空50字以内" maxlength="50" data-valid="true" />
</div>
<div class="form-group col-12">
<label class="control-label" for="taskCron">Cron表达式</label>
<input type="text" class="form-control flex-sm-fill" id="taskCron" placeholder="不可为空2000字以内" maxlength="2000" data-valid="true" />
</div>
<div class="form-group col-12">
<label class="control-label" for="taskContent">内置任务</label>
<select id="taskList" data-toggle="lgbSelect">
@foreach (var name in Model.Tasks)
{
<option value="@name">@name</option>
}
</select>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">
<i class="fa fa-times"></i>
<span>关闭</span>
</button>
<button type="button" class="btn btn-primary" id="btnSubmit">
<i class="fa fa-save"></i>
<span>保存</span>
</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="dialogLog" tabindex="-1" role="dialog" data-backdrop="static" aria-labelledby="taskModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="taskModalLabel">任务日志窗口</h5>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
</div>
<div class="modal-body" style="background-color: #174482; color: #fff;">
<div id="taskMsg" class="form-group" style="height: 500px; overflow: auto;">
<div></div>
</div>
</div>
<div class="modal-footer">
<a class="btn"><i class="fa fa-check-square-o" style="width: 13px;"></i><span>自动滚屏</span></a>
<button type="button" class="btn btn-secondary" data-dismiss="modal">
<i class="fa fa-times"></i>
<span>关闭</span>
</button>
</div>
</div>
</div>
</div>
}
<div class="card">
<div class="card-header">任务介绍</div>
<div class="card-body">
<div class="alert alert-info">
<p class="font-weight-bold">后台任务说明:</p>
<p>1. 默认任务 (立即执行,仅执行一次)</p>
<p>
<code>
TaskServicesManager.GetOrAdd("简单任务", token => Task.Delay(1000));
</code>
</p>
<p>2. 周期性任务 (1 分钟后间隔 5 秒执行 2 次任务)</p>
<p>
<code>
var trigger = TriggerBuilder.Default.WithInterval(TimeSpan.FromSeconds(5)).WithRepeatCount(2).WithStartTime(DateTimeOffset.Now.AddMinutes(1)).Build();
<br />
TaskServicesManager.GetOrAdd("测试任务", token => Task.Delay(1000), trigger);
</code>
</p>
<p>3. Cron 表达式任务 (间隔 5 秒循环执行任务)</p>
<div>
<code>
TaskServicesManager.GetOrAdd("Cron 表达式任务", token => Task.Delay(1000), TriggerBuilder.Build("*/5 * * * * *"));
</code>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
查询结果
</div>
<div class="card-body">
<div class="alert alert-danger" role="alert" asp-condition="@Model.IsDemo">
<span>演示系统禁止修改定时后台任务</span>
</div>
<table></table>
</div>
</div>
<div id="tableButtons" class="d-none">
<div class='btn-group'>
<button class='pause btn btn-sm btn-danger' asp-auth="pause"><i class='fa fa-pause-circle'></i><span>暂停</span></button>
<button class='run btn btn-sm btn-success' asp-auth="pause"><i class='fa fa-play-circle'></i><span>运行</span></button>
<button class='info btn btn-sm btn-info' asp-auth="info"><i class='fa fa-info-circle'></i><span>日志</span></button>
</div>
</div>

View File

@ -1,145 +0,0 @@
$(function () {
var dataBinder = new DataEntity({
Title: "#sysName",
Footer: "#sysFoot"
});
$('button[data-method]').on('click', function (e) {
var $this = $(this);
var data = {};
switch ($this.attr('data-method')) {
case 'footer':
data = dataBinder.get();
$.bc({
url: Settings.url, data: { name: '网站页脚', code: data.Footer, category: '网站设置' }, title: '保存网站页脚', method: "post",
callback: function (result) {
if (result) $('#websiteFooter').text(data.Footer);
}
});
break;
case 'title':
data = dataBinder.get();
$.bc({
url: Settings.url, data: { name: '网站标题', code: data.Title, category: '网站设置' }, title: '保存网站标题', method: "post",
callback: function (result) {
if (result) $('#websiteTitle').text(data.Title);
}
});
break;
case 'css':
var cssDefine = $css.val();
$.bc({
url: Settings.url, data: { name: '使用样式', code: cssDefine, category: '当前样式' }, title: '保存网站样式', method: "post",
callback: function (result) {
if (result) {
window.setTimeout(function () { window.location.reload(true); }, 1000);
}
}
});
break;
case 'UISettings':
var uiSettings = $('#sider').prop('checked') ? "1" : "0";
$.bc({
url: Settings.url, data: { name: '侧边栏状态', code: uiSettings, category: '网站设置' }, method: "post"
});
var cardTitle = $('#cardTitle').prop('checked') ? "1" : "0";
$.bc({
url: Settings.url, data: { name: '卡片标题状态', code: cardTitle, category: '网站设置' }, title: '保存网站设置', method: "post",
callback: function (result) {
if (result) {
window.setTimeout(function () { window.location.reload(true); }, 1000);
}
}
});
break;
case 'loginSettings':
var mobile = $('#mobile').prop('checked') ? "1" : "0";
$.bc({
url: Settings.url, data: { name: '短信验证码登录', code: mobile, category: '网站设置' }, method: "post"
});
var oauth = $('#oauth').prop('checked') ? "1" : "0";
$.bc({
url: Settings.url, data: { name: 'OAuth 认证登录', code: oauth, category: '网站设置' }, title: '登录设置', method: "post"
});
break;
case 'saveAutoLock':
var autoLock = $('#lockScreen').prop('checked') ? "1" : "0";
$.bc({
url: Settings.url, data: { name: '自动锁屏', code: autoLock, category: '网站设置' }, method: "post"
});
$.bc({
url: Settings.url, data: { name: '自动锁屏时长', code: $('#lockPeriod').val(), category: '网站设置' }, title: '保存自动锁屏设置', method: "post",
callback: function (result) {
if (result) {
window.setTimeout(function () { window.location.reload(true); }, 1000);
}
}
});
break;
}
});
var $sortable = $('#sortable');
var $refresh = $('a[data-method="refresh"]');
var listCacheUrl = function (options) {
$refresh.addClass('fa-spin');
options = $.extend({ clear: false }, options);
$sortable.html('');
$.bc({
url: Settings.url,
autoFooter: true,
callback: function (urls) {
if (urls && $.isArray(urls)) {
$.each(urls, function (index, item) {
if (options.clear) options.url = item.Url + "?cacheKey=*";
else options.url = item.Url;
$.bc({
url: options.url,
cors: !item.Self,
autoFooter: true,
callback: function (result) {
if ($.isArray(result)) {
var html = '<div class="cache-item"><i class="fa fa-ellipsis-v"></i><span data-toggle="tooltip" title="{2}">{2}</span><span class="badge badge-pill badge-success">{0}</span><span title="{3}">{3}</span><div><span>{6}</span><button class="btn btn-danger" title="{1}" data-url="{4}?cacheKey={1}" data-toggle="tooltip" data-self="{5}" data-placement="left"><i class="fa fa-trash-o"></i></button></div></div>';
var content = result.sort(function (x, y) {
return x.Key > y.Key ? 1 : -1;
}).map(function (ele) {
return $.format(html, ele.Interval / 1000, ele.Key, ele.Desc, ele.Value, $.format(item.Url, ele.Key), item.Self, ele.ElapsedSeconds);
}).join('');
var cache = $('<div class="card-cache"></div>');
cache.append($.format('<h6>{0}</h6>', item.Desc));
cache.append(content);
$sortable.append(cache);
$sortable.find('[data-toggle="tooltip"]').tooltip();
}
}
});
});
}
$refresh.removeClass('fa-spin');
}
});
};
$('a[data-method]').on('click', function (e) {
e.preventDefault();
e.stopPropagation();
var $this = $(this).tooltip('hide');
var options = {};
switch ($this.attr('data-method')) {
case 'clear':
options.clear = true;
break;
case 'refresh':
break;
}
listCacheUrl(options);
}).last().trigger('click');
$sortable.on('click', '.btn', function () {
var $this = $(this).tooltip('dispose');
$.bc({ url: $this.attr('data-url'), cors: $this.attr('data-self') === 'false' });
listCacheUrl();
});
var $css = $('#dictCssDefine').dropdown('val');
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,16 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Bootstrap.Security" Version="3.0.1" />
<PackageReference Include="MongoDB.Driver" Version="2.9.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Bootstrap.DataAccess\Bootstrap.DataAccess.csproj" />
</ItemGroup>
</Project>

View File

@ -1,26 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Bootstrap.Security.DataAccess" Version="3.0.1" />
<PackageReference Include="Bootstrap.Security.Mvc" Version="3.0.2" />
<PackageReference Include="Longbow" Version="3.0.1" />
<PackageReference Include="Longbow.Cache" Version="3.0.3-beta1" />
<PackageReference Include="Longbow.Data" Version="3.0.1" />
<PackageReference Include="Longbow.GiteeAuth" Version="3.0.1" />
<PackageReference Include="Longbow.GitHubAuth" Version="3.0.1" />
<PackageReference Include="Longbow.OAuth" Version="3.0.2" />
<PackageReference Include="Longbow.PetaPoco" Version="1.0.2" />
<PackageReference Include="Longbow.Security.Cryptography" Version="1.3.0" />
<PackageReference Include="Longbow.Tasks" Version="3.0.2-beta2" />
<PackageReference Include="Longbow.Web" Version="3.0.1" />
<PackageReference Include="Longbow.WeChatAuth" Version="3.0.1" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="3.0.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.7.0" />
<PackageReference Include="PetaPoco.Extensions" Version="3.0.1" />
</ItemGroup>
</Project>

View File

@ -1,266 +0,0 @@
using Bootstrap.Security;
using Bootstrap.Security.DataAccess;
using Longbow.Cache;
using Longbow.Web;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Bootstrap.DataAccess
{
/// <summary>
/// 字典配置数据操作帮助类
/// </summary>
public static class DictHelper
{
/// <summary>
/// 缓存索引BootstrapAdmin后台清理缓存时使用
/// </summary>
public const string RetrieveDictsDataKey = DbHelper.RetrieveDictsDataKey;
/// <summary>
/// 缓存索引,字典分类数据缓存键值 值为 DictHelper-RetrieveDictsCategory
/// </summary>
public const string RetrieveCategoryDataKey = "DictHelper-RetrieveDictsCategory";
/// <summary>
/// 获得所有字典项配置数据集合方法 内部使用了缓存,缓存值 BootstrapMenu-RetrieveMenus
/// </summary>
/// <returns></returns>
public static IEnumerable<BootstrapDict> RetrieveDicts() => CacheManager.GetOrAdd(RetrieveDictsDataKey, key => DbContextManager.Create<Dict>()?.RetrieveDicts()) ?? new BootstrapDict[0];
private static IEnumerable<BootstrapDict> RetrieveProtectedDicts() => RetrieveDicts().Where(d => d.Define == 0 || d.Category == "测试平台");
/// <summary>
/// 获取网站 favicon 图标
/// </summary>
/// <param name="appId"></param>
/// <returns></returns>
public static string RetrieveWebIcon(string appId)
{
// 获取应用程序 logo
var ditcs = RetrieveDicts();
var platName = ditcs.FirstOrDefault(d => d.Category == "应用程序" && d.Code == appId)?.Name;
return ditcs.FirstOrDefault(d => d.Category == platName && d.Name == "favicon")?.Code ?? $"~/favicon.ico";
}
/// <summary>
/// 获取网站 logo 小图标
/// </summary>
/// <param name="appId"></param>
/// <returns></returns>
public static string RetrieveWebLogo(string appId)
{
// 获取应用程序 logo
var ditcs = RetrieveDicts();
var platName = ditcs.FirstOrDefault(d => d.Category == "应用程序" && d.Code == appId)?.Name;
return ditcs.FirstOrDefault(d => d.Category == platName && d.Name == "网站图标")?.Code ?? $"~/favicon.png";
}
/// <summary>
/// 删除字典中的数据
/// </summary>
/// <param name="value">需要删除的IDs</param>
/// <returns></returns>
public static bool Delete(IEnumerable<string> value)
{
if (!value.Any()) return true;
// 禁止删除系统数据与测试平台数据
if (RetrieveSystemModel() && RetrieveProtectedDicts().Any(d => value.Any(v => v == d.Id))) return true;
var ret = DbContextManager.Create<Dict>()?.Delete(value) ?? false;
if (ret) CacheCleanUtility.ClearCache(dictIds: value);
return ret;
}
/// <summary>
/// 保存新建/更新的字典信息
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
public static bool Save(BootstrapDict p)
{
if (RetrieveSystemModel() && !string.IsNullOrEmpty(p.Id) && RetrieveProtectedDicts().Any(m => m.Id == p.Id)) return true;
var ret = DbContextManager.Create<Dict>()?.Save(p) ?? false;
if (ret) CacheCleanUtility.ClearCache(dictIds: new List<string>());
return ret;
}
/// <summary>
/// 配置 IP 地理位置查询配置项 注入方法调用此方法
/// </summary>
/// <param name="op"></param>
public static void ConfigIPLocator(IPLocatorOption op)
{
var name = RetrieveLocaleIPSvr();
if (!string.IsNullOrEmpty(name) && !name.Equals("None", StringComparison.OrdinalIgnoreCase))
{
var url = RetrieveLocaleIPSvrUrl(name);
op.Locator = DefaultIPLocatorProvider.CreateLocator(name);
op.Url = string.IsNullOrEmpty(url) ? string.Empty : $"{url}{op.IP}";
op.Period = RetrieveLocaleIPSvrCachePeriod() * 60 * 1000;
}
}
/// <summary>
/// 保存网站个性化设置
/// </summary>
/// <param name="dict"></param>
/// <returns></returns>
public static bool SaveSettings(BootstrapDict dict)
{
var ret = DbContextManager.Create<Dict>()?.SaveSettings(dict) ?? false;
if (ret) CacheCleanUtility.ClearCache(dictIds: new List<string>());
return ret;
}
/// <summary>
/// 获取字典分类名称
/// </summary>
/// <returns></returns>
public static IEnumerable<string> RetrieveCategories() => CacheManager.GetOrAdd(RetrieveCategoryDataKey, key => DbContextManager.Create<Dict>()?.RetrieveCategories()) ?? new string[0];
/// <summary>
/// 获取站点 Title 配置信息
/// </summary>
/// <param name="appId"></param>
/// <returns></returns>
public static string RetrieveWebTitle(string appId) => DbContextManager.Create<Dict>()?.RetrieveWebTitle(appId) ?? string.Empty;
/// <summary>
/// 获取站点 Footer 配置信息
/// </summary>
/// <param name="appId"></param>
/// <returns></returns>
public static string RetrieveWebFooter(string appId) => DbContextManager.Create<Dict>()?.RetrieveWebFooter(appId) ?? string.Empty;
/// <summary>
/// 获得系统中配置的可以使用的网站样式
/// </summary>
/// <returns></returns>
public static IEnumerable<BootstrapDict> RetrieveThemes() => DbContextManager.Create<Dict>()?.RetrieveThemes() ?? new BootstrapDict[0];
/// <summary>
/// 获得网站设置中的当前样式
/// </summary>
/// <returns></returns>
public static string RetrieveActiveTheme() => DbContextManager.Create<Dict>()?.RetrieveActiveTheme() ?? string.Empty;
/// <summary>
/// 获取头像路径
/// </summary>
/// <returns></returns>
public static string RetrieveIconFolderPath() => DbContextManager.Create<Dict>()?.RetrieveIconFolderPath() ?? "~/images/uploader/";
/// <summary>
/// 获得默认的前台首页地址,默认为 ~/Home/Index
/// </summary>
/// <param name="appId">应用程序编码</param>
/// <returns></returns>
public static string RetrieveHomeUrl(string appId) => DbContextManager.Create<Dict>()?.RetrieveHomeUrl(appId) ?? "~/Home/Index";
/// <summary>
/// 获取所有应用程序数据方法
/// </summary>
/// <returns></returns>
public static IEnumerable<KeyValuePair<string, string>> RetrieveApps() => DbContextManager.Create<Dict>()?.RetrieveApps() ?? new KeyValuePair<string, string>[0];
/// <summary>
/// 程序异常时长 默认 1 个月
/// </summary>
/// <returns></returns>
public static int RetrieveExceptionsLogPeriod() => DbContextManager.Create<Dict>()?.RetrieveExceptionsLogPeriod() ?? 1;
/// <summary>
/// 获得操作日志保留时长 默认 12 个月
/// </summary>
/// <returns></returns>
public static int RetrieveLogsPeriod() => DbContextManager.Create<Dict>()?.RetrieveLogsPeriod() ?? 12;
/// <summary>
/// 获得登录日志保留时长 默认 12 个月
/// </summary>
/// <returns></returns>
public static int RetrieveLoginLogsPeriod() => DbContextManager.Create<Dict>()?.RetrieveLoginLogsPeriod() ?? 12;
/// <summary>
/// 获取登录认证Cookie保留时长 默认 7 天
/// </summary>
/// <returns></returns>
public static int RetrieveCookieExpiresPeriod() => DbContextManager.Create<Dict>()?.RetrieveCookieExpiresPeriod() ?? 7;
/// <summary>
/// 获取 IP 地址位置查询服务名称
/// </summary>
/// <returns></returns>
public static string RetrieveLocaleIPSvr() => DbContextManager.Create<Dict>()?.RetrieveLocaleIPSvr() ?? string.Empty;
/// <summary>
/// 通过 IP 地理位置查询服务名称获得请求地址方法
/// </summary>
/// <param name="ipSvr">ip地址请求服务名称</param>
/// <returns></returns>
public static string RetrieveLocaleIPSvrUrl(string ipSvr) => DbContextManager.Create<Dict>()?.RetrieveLocaleIPSvrUrl(ipSvr) ?? string.Empty;
/// <summary>
/// 获取 IP 地理位置查询服务缓存时长
/// </summary>
/// <returns></returns>
public static int RetrieveLocaleIPSvrCachePeriod() => DbContextManager.Create<Dict>()?.RetrieveLocaleIPSvrCachePeriod() ?? 10;
/// <summary>
/// 访问日志保留时长 默认 1 个月
/// </summary>
/// <returns></returns>
public static int RetrieveAccessLogPeriod() => DbContextManager.Create<Dict>()?.RetrieveAccessLogPeriod() ?? 1;
/// <summary>
/// 获得 是否为演示系统 默认为 false 不是演示系统
/// </summary>
/// <returns></returns>
public static bool RetrieveSystemModel() => DbContextManager.Create<Dict>()?.RetrieveSystemModel() ?? true;
/// <summary>
/// 获得验证码图床地址
/// </summary>
/// <returns></returns>
public static string RetrieveImagesLibUrl() => DbContextManager.Create<Dict>()?.RetrieveImagesLibUrl() ?? string.Empty;
/// <summary>
/// 获得数据区卡片标题是否显示
/// </summary>
/// <returns></returns>
public static bool RetrieveCardTitleStatus() => DbContextManager.Create<Dict>()?.RetrieveCardTitleStatus() ?? true;
/// <summary>
/// 获得侧边栏状态 为真时显示
/// </summary>
/// <returns></returns>
public static bool RetrieveSidebarStatus() => DbContextManager.Create<Dict>()?.RetrieveSidebarStatus() ?? true;
/// <summary>
/// 获得是否允许短信验证码登录
/// </summary>
/// <returns></returns>
public static bool RetrieveMobileLogin() => DbContextManager.Create<Dict>()?.RetrieveMobileLogin() ?? false;
/// <summary>
/// 获得是否允许 OAuth 认证登录
/// </summary>
/// <returns></returns>
public static bool RetrieveOAuthLogin() => DbContextManager.Create<Dict>()?.RetrieveOAuthLogin() ?? false;
/// <summary>
/// 获得自动锁屏时长 默认 30 秒
/// </summary>
/// <returns></returns>
public static int RetrieveAutoLockScreenPeriod() => DbContextManager.Create<Dict>()?.RetrieveAutoLockScreenPeriod() ?? 30;
/// <summary>
/// 获得自动锁屏 默认关闭
/// </summary>
/// <returns></returns>
public static bool RetrieveAutoLockScreen() => DbContextManager.Create<Dict>()?.RetrieveAutoLockScreen() ?? false;
}
}

View File

@ -1,107 +0,0 @@
using Longbow.Tasks;
using Longbow.Web.Mvc;
using PetaPoco;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace Bootstrap.DataAccess
{
/// <summary>
/// 操作日志相关操作类
/// </summary>
public static class LogHelper
{
/// <summary>
/// 查询所有日志信息
/// </summary>
/// <param name="op"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <param name="opType"></param>
/// <returns></returns>
public static Page<Log> RetrievePages(PaginationOption op, DateTime? startTime, DateTime? endTime, string? opType) => DbContextManager.Create<Log>()?.RetrievePages(op, startTime, endTime, opType) ?? new Page<Log>() { Items = new List<Log>() };
/// <summary>
/// 查询所有日志信息
/// </summary>
/// <returns></returns>
public static IEnumerable<Log> RetrieveAll(DateTime? startTime, DateTime? endTime, string? opType) => DbContextManager.Create<Log>()?.RetrieveAll(startTime, endTime, opType) ?? new Log[0];
/// <summary>
/// 保存新增的日志信息
/// </summary>
/// <param name="log"></param>
/// <returns></returns>
public static bool Save(Log log)
{
log.LogTime = DateTime.Now;
return DbContextManager.Create<Log>()?.Save(log) ?? false;
}
#region
private static readonly BlockingCollection<DBLog> _messageQueue = new BlockingCollection<DBLog>(new ConcurrentQueue<DBLog>());
/// <summary>
/// 添加数据库日志实体类到内部集合中
/// </summary>
/// <param name="log"></param>
public static System.Threading.Tasks.Task AddDBLog(DBLog log) => System.Threading.Tasks.Task.Run(() =>
{
if (!_messageQueue.IsAddingCompleted && !_pause)
{
_messageQueue.Add(log);
}
});
private static bool _pause;
/// <summary>
/// 暂停接收脚本执行日志
/// </summary>
public static void Pause() => _pause = true;
/// <summary>
/// 开始接收脚本执行日志
/// </summary>
public static void Run() => _pause = false;
/// <summary>
/// 查询所有SQL日志信息
/// </summary>
/// <param name="op"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <param name="userName"></param>
/// <returns></returns>
public static Page<DBLog> RetrieveDBLogs(PaginationOption op, DateTime? startTime, DateTime? endTime, string? userName) => DbContextManager.Create<DBLog>()?.RetrievePages(op, startTime, endTime, userName) ?? new Page<DBLog>() { Items = new List<DBLog>() };
/// <summary>
/// 数据库脚本执行日志任务实体类
/// </summary>
public class DbLogTask : ITask
{
/// <summary>
/// 任务执行方法
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public System.Threading.Tasks.Task Execute(CancellationToken cancellationToken)
{
var logs = new List<DBLog>();
while (_messageQueue.TryTake(out var log))
{
if (log != null) logs.Add(log);
if (logs.Count >= 100) break;
}
if (logs.Any())
{
using var db = DbManager.Create(enableLog: false);
db.InsertBatch(logs);
}
return System.Threading.Tasks.Task.CompletedTask;
}
}
#endregion
}
}

View File

@ -1,85 +0,0 @@
using Longbow.OAuth;
using Longbow.Security.Cryptography;
using Longbow.WeChatAuth;
using Microsoft.AspNetCore.Authentication.OAuth;
using System;
using System.Linq;
#if NETCOREAPP3_0
using System.Text.Json;
#endif
namespace Bootstrap.DataAccess
{
/// <summary>
/// 微信登陆帮助类
/// </summary>
public static class WeChatHelper
{
/// <summary>
/// 微信登陆配置方法
/// </summary>
/// <typeparam name="TOptions"></typeparam>
/// <param name="option"></param>
public static void Configure<TOptions>(TOptions option) where TOptions : LgbOAuthOptions
{
option.Events.OnCreatingTicket = context =>
{
// 生成用户
var user = ParseUser(context);
user.App = option.App;
OAuthHelper.SaveUser(user, option.Roles);
// 记录登陆日志
context.HttpContext.Log(user.DisplayName, true);
return System.Threading.Tasks.Task.CompletedTask;
};
}
/// <summary>
/// 插入 Gitee 授权用户到数据库中
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
private static User ParseUser(OAuthCreatingTicketContext context)
{
var user = context.User.ToObject<WeChatUser>();
return new User()
{
ApprovedBy = "OAuth",
ApprovedTime = DateTime.Now,
DisplayName = user?.NickName ?? "",
UserName = user?.UnionId ?? "",
Password = LgbCryptography.GenerateSalt(),
Icon = user?.HeadImgUrl ?? "",
Description = $"{context.Scheme.Name}"
};
}
#if NETCOREAPP3_0
private static T? ToObject<T>(this JsonElement element) where T : WeChatUser
{
var user = new WeChatUser();
var target = element.EnumerateObject();
user.OpenId = target.TryGetValue("OpenId");
user.UnionId = target.TryGetValue("UnionId");
user.NickName = target.TryGetValue("NickName");
user.Privilege = target.TryGetValue("Privilege");
user.Sex = target.TryGetValue("Sex");
user.Province = target.TryGetValue("Province");
user.City = target.TryGetValue("City");
user.Country = target.TryGetValue("Country");
user.HeadImgUrl = target.TryGetValue("HeadImgUrl");
user.Privilege = target.TryGetValue("Privilege");
return user as T;
}
private static string TryGetValue(this JsonElement.ObjectEnumerator target, string propertyName)
{
var ret = string.Empty;
var property = target.FirstOrDefault(t => t.Name.Equals(propertyName, StringComparison.OrdinalIgnoreCase));
ret = property.Value.ToString();
return ret;
}
#endif
}
}

View File

@ -1 +0,0 @@
<lgb><token>d9DQpRTdULRQDYkciXU+R2LrcHSPdJY+9eip5weQTVQfgX6m0sETBCqW5ymQ/A7lrEXkKHXmJpO9rs9xy3rpDX5FJ+wF1o66HROA28Arh26APC55IcL23n+ImKyZPEUHupHvPGZ0rrGPy18A6GTn65IrsfqFS2vyr5yrmnjssgA=</token></lgb>

View File

@ -0,0 +1,15 @@
<Project>
<Import Project="..\Directory.Build.props" />
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Using Include="System.Diagnostics.CodeAnalysis" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\BootstrapAdmin.Caching\BootstrapAdmin.Caching.csproj" />
<ProjectReference Include="..\BootstrapAdmin.Web.Core\BootstrapAdmin.Web.Core.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="BootstrapBlazor" Version="6.2.9-beta07" />
<PackageReference Include="FreeSql.Provider.Sqlite" Version="3.0.100" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,67 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootstrapBlazor.Components;
using FreeSql;
using FreeSql.Internal.Model;
namespace BootStarpAdmin.DataAccess.FreeSql.Extensions;
/// <summary>
///
/// </summary>
static class FilterExtensions
{
public static ISelect<TModel> PageIf<TModel>(this ISelect<TModel> source, int pageIndex, int pageItems, bool isPage) => isPage
? source.Page(pageIndex, pageItems)
: source;
/// <summary>
///
/// </summary>
/// <param name="filters"></param>
/// <returns></returns>
public static DynamicFilterInfo ToDynamicFilter(this IEnumerable<IFilterAction> filters)
{
var ret = new DynamicFilterInfo() { Filters = new List<DynamicFilterInfo>() };
// 处理 过滤 高级搜索 自定义搜索
foreach (var filter in filters)
{
var item = new DynamicFilterInfo() { Filters = new List<DynamicFilterInfo>() };
var actions = filter.GetFilterConditions();
foreach (var f in actions)
{
item.Logic = f.FilterLogic.ToDynamicFilterLogic();
item.Filters.Add(new DynamicFilterInfo()
{
Field = f.FieldKey,
Value = f.FieldValue,
Operator = f.FilterAction.ToDynamicFilterOperator()
});
}
ret.Filters.Add(item);
}
return ret;
}
private static DynamicFilterLogic ToDynamicFilterLogic(this FilterLogic logic) => logic switch
{
FilterLogic.And => DynamicFilterLogic.And,
_ => DynamicFilterLogic.Or
};
private static DynamicFilterOperator ToDynamicFilterOperator(this FilterAction action) => action switch
{
FilterAction.Equal => DynamicFilterOperator.Equal,
FilterAction.NotEqual => DynamicFilterOperator.NotEqual,
FilterAction.Contains => DynamicFilterOperator.Contains,
FilterAction.NotContains => DynamicFilterOperator.NotContains,
FilterAction.GreaterThan => DynamicFilterOperator.GreaterThan,
FilterAction.GreaterThanOrEqual => DynamicFilterOperator.GreaterThanOrEqual,
FilterAction.LessThan => DynamicFilterOperator.LessThan,
FilterAction.LessThanOrEqual => DynamicFilterOperator.LessThanOrEqual,
_ => throw new System.NotSupportedException()
};
}

View File

@ -0,0 +1,60 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootStarpAdmin.DataAccess.FreeSql.Models;
using BootstrapAdmin.DataAccess.Models;
namespace BootStarpAdmin.DataAccess.FreeSql.Extensions;
static class FreeSqlExtensions
{
public static void Mapper(this IFreeSql freeSql)
{
freeSql.CodeFirst.ConfigEntity<Navigation>(i =>
{
i.Name("Navigations");
i.Property(n => n.HasChildren).IsIgnore(true);
});
freeSql.CodeFirst.ConfigEntity<User>(i =>
{
i.Name("Users");
i.Property(n => n.NewPassword).IsIgnore(true);
i.Property(n => n.ConfirmPassword).IsIgnore(true);
i.Property(n => n.Period).IsIgnore(true);
i.Property(n => n.IsReset).IsIgnore(true);
});
freeSql.CodeFirst.ConfigEntity<Group>(i =>
{
i.Name("Groups");
});
freeSql.CodeFirst.ConfigEntity<Role>(i =>
{
i.Name("Roles");
});
freeSql.CodeFirst.ConfigEntity<Error>(i =>
{
i.Name("Exceptions");
});
freeSql.CodeFirst.ConfigEntity<UserRole>(i =>
{
i.Name("UserRole");
i.Property(s => s.ID).IsIgnore(true);
});
freeSql.CodeFirst.ConfigEntity<NavigationRole>(i =>
{
i.Name("NavigationRole");
i.Property(s => s.ID).IsIgnore(true);
});
freeSql.CodeFirst.ConfigEntity<UserGroup>(i =>
{
i.Name("UserGroup");
i.Property(s => s.ID).IsIgnore(true);
});
freeSql.CodeFirst.ConfigEntity<RoleGroup>(i =>
{
i.Name("RoleGroup");
i.Property(s => s.ID).IsIgnore(true);
});
}
}

View File

@ -0,0 +1,50 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootStarpAdmin.DataAccess.FreeSql.Extensions;
using BootStarpAdmin.DataAccess.FreeSql.Service;
using BootstrapAdmin.Web.Core;
using BootstrapBlazor.Components;
using FreeSql;
using Microsoft.Extensions.DependencyInjection.Extensions;
namespace Microsoft.Extensions.DependencyInjection;
/// <summary>
/// FreeSql ORM 注入服务扩展类
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// 注入 FreeSql 数据服务类
/// </summary>
/// <param name="services"></param>
/// <param name="freeSqlBuilder"></param>
/// <returns></returns>
public static IServiceCollection AddFreeSql(this IServiceCollection services, Action<IServiceProvider, FreeSqlBuilder> freeSqlBuilder)
{
services.TryAddSingleton<IFreeSql>(provider =>
{
var builder = new FreeSqlBuilder();
freeSqlBuilder(provider, builder);
var instance = builder.Build();
instance.Mapper();
return instance;
});
// 增加数据服务
services.AddSingleton(typeof(IDataService<>), typeof(DefaultDataService<>));
// 增加业务服务
services.AddSingleton<IApp, AppService>();
services.AddSingleton<IDict, DictService>();
services.AddSingleton<IException, ExceptionService>();
services.AddSingleton<IGroup, GroupService>();
services.AddSingleton<ILogin, LoginService>();
services.AddSingleton<INavigation, NavigationService>();
services.AddSingleton<IRole, RoleService>();
services.AddSingleton<IUser, UserService>();
return services;
}
}

View File

@ -0,0 +1,14 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
namespace BootStarpAdmin.DataAccess.FreeSql.Models;
class NavigationRole
{
public string? ID { get; set; }
public string? NavigationID { get; set; }
public string? RoleID { get; set; }
}

View File

@ -0,0 +1,12 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
namespace BootStarpAdmin.DataAccess.FreeSql.Models;
class RoleApp
{
public string? RoleID { get; set; }
public string? AppID { get; set; }
}

View File

@ -0,0 +1,14 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
namespace BootStarpAdmin.DataAccess.FreeSql.Models;
class RoleGroup
{
public string? ID { get; set; }
public string? RoleID { get; set; }
public string? GroupID { get; set; }
}

View File

@ -0,0 +1,14 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
namespace BootStarpAdmin.DataAccess.FreeSql.Models;
class UserGroup
{
public string? ID { get; set; }
public string? UserID { get; set; }
public string? GroupID { get; set; }
}

View File

@ -0,0 +1,14 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
namespace BootStarpAdmin.DataAccess.FreeSql.Models;
class UserRole
{
public string? ID { get; set; }
public string? UserID { get; set; }
public string? RoleID { get; set; }
}

View File

@ -0,0 +1,36 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootStarpAdmin.DataAccess.FreeSql.Models;
using BootstrapAdmin.Web.Core;
namespace BootStarpAdmin.DataAccess.FreeSql.Service;
class AppService : IApp
{
private IFreeSql FreeSql { get; }
public AppService(IFreeSql freeSql) => FreeSql = freeSql;
public List<string> GetAppsByRoleId(string? roleId) => FreeSql.Ado.Query<string>("select AppID from RoleApp where RoleID = @roleId", new { roleId });
public bool SaveAppsByRoleId(string? roleId, IEnumerable<string> appIds)
{
var ret = false;
try
{
FreeSql.Transaction(() =>
{
FreeSql.Ado.ExecuteNonQuery("delete from RoleApp where RoleID = @roleId", new { roleId });
FreeSql.Insert(appIds.Select(g => new RoleApp { AppID = g, RoleID = roleId })).ExecuteAffrows();
ret = true;
});
}
catch (Exception)
{
throw;
}
return ret;
}
}

View File

@ -0,0 +1,68 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootStarpAdmin.DataAccess.FreeSql.Extensions;
using BootstrapBlazor.Components;
namespace BootStarpAdmin.DataAccess.FreeSql.Service;
class DefaultDataService<TModel> : DataServiceBase<TModel> where TModel : class, new()
{
private IFreeSql FreeSql { get; }
public DefaultDataService(IFreeSql freeSql) => FreeSql = freeSql;
/// <summary>
/// 删除方法
/// </summary>
/// <param name="models"></param>
/// <returns></returns>
public override async Task<bool> DeleteAsync(IEnumerable<TModel> models)
{
await FreeSql.Delete<TModel>(models).ExecuteAffrowsAsync();
return true;
}
/// <summary>
/// 保存方法
/// </summary>
/// <param name="model"></param>
/// <param name="changedType"></param>
/// <returns></returns>
public override async Task<bool> SaveAsync(TModel model, ItemChangedType changedType)
{
if (changedType == ItemChangedType.Add)
{
await FreeSql.Insert<TModel>(model).ExecuteAffrowsAsync();
}
else if (changedType == ItemChangedType.Update)
{
await FreeSql.Update<TModel>(model).ExecuteAffrowsAsync();
}
return true;
}
public override Task<QueryData<TModel>> QueryAsync(QueryPageOptions option)
{
var ret = new QueryData<TModel>()
{
IsSorted = true,
IsFiltered = true,
IsSearch = true,
IsAdvanceSearch = option.AdvanceSearchs.Any() || option.CustomerSearchs.Any()
};
ret.Items = FreeSql.Select<TModel>()
.WhereDynamicFilter(option.Searchs.ToDynamicFilter())
.WhereDynamicFilter(option.Filters
.Concat(option.AdvanceSearchs)
.Concat(option.CustomerSearchs)
.ToDynamicFilter())
.OrderByPropertyNameIf(option.SortOrder != SortOrder.Unset, option.SortName, option.SortOrder == SortOrder.Asc)
.Count(out var count)
.PageIf(option.PageIndex, option.PageItems, option.IsPage)
.ToList();
ret.TotalCount = Convert.ToInt32(count);
return Task.FromResult(ret);
}
}

View File

@ -0,0 +1,197 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootstrapAdmin.Caching;
using BootstrapAdmin.DataAccess.Models;
using BootstrapAdmin.Web.Core;
using Longbow.Security.Cryptography;
using Microsoft.Extensions.Configuration;
namespace BootStarpAdmin.DataAccess.FreeSql.Service;
class DictService : IDict
{
private const string DictServiceCacheKey = "DictService-GetAll";
private IFreeSql FreeSql { get; }
private string? AppId { get; set; }
public DictService(IFreeSql freeSql, IConfiguration configuration)
{
FreeSql = freeSql;
AppId = configuration.GetValue("AppId", "BA");
}
public bool AuthenticateDemo(string code)
{
var ret = false;
if (!string.IsNullOrEmpty(code))
{
var dicts = GetAll();
var salt = dicts.FirstOrDefault(d => d.Category == "网站设置" && d.Name == "授权盐值" && d.Define == EnumDictDefine.System)?.Code;
var authCode = dicts.FirstOrDefault(d => d.Category == "网站设置" && d.Name == "哈希结果" && d.Define == EnumDictDefine.System)?.Code;
if (!string.IsNullOrEmpty(salt))
{
ret = LgbCryptography.ComputeHash(code, salt) == authCode;
}
}
return ret;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public List<Dict> GetAll() => CacheManager.GetOrAdd<List<Dict>>(DictServiceCacheKey, entry => FreeSql.Select<Dict>().ToList());
public Dictionary<string, string> GetApps()
{
var dicts = GetAll();
return dicts.Where(d => d.Category == "应用程序").Select(s => new KeyValuePair<string, string>(s.Code, s.Name)).ToDictionary(i => i.Key, i => i.Value);
}
public int GetCookieExpiresPeriod()
{
var dicts = GetAll();
var code = dicts.FirstOrDefault(d => d.Category == "网站设置" && d.Name == "Cookie保留时长" && d.Define == EnumDictDefine.System)?.Code ?? "0";
_ = int.TryParse(code, out var ret);
return ret;
}
public string GetCurrentLogin()
{
var dicts = GetAll();
return dicts.FirstOrDefault(d => d.Category == "网站设置" && d.Name == "登录界面" && d.Define == EnumDictDefine.System)?.Code ?? "Login";
}
public Dictionary<string, string> GetLogins()
{
var dicts = GetAll();
return dicts.Where(d => d.Category == "系统首页").Select(d => new KeyValuePair<string, string>(d.Code, d.Name)).OrderBy(i => i.Value).ToDictionary(i => i.Key, i => i.Value);
}
public string? GetNotificationUrl(string appId) => GetUrlByName(appId, "系统通知地址");
public string? GetProfileUrl(string appId) => GetUrlByName(appId, "个人中心地址");
public string? GetSettingsUrl(string appId) => GetUrlByName(appId, "系统设置地址");
public Dictionary<string, string> GetThemes()
{
var dicts = GetAll();
return dicts.Where(d => d.Category == "网站样式").Select(d => new KeyValuePair<string, string>(d.Code, d.Name)).ToDictionary(i => i.Key, i => i.Value);
}
public string GetWebFooter()
{
var dicts = GetAll();
var title = "网站页脚";
var name = dicts.FirstOrDefault(d => d.Category == "应用程序" && d.Code == AppId)?.Name;
if (!string.IsNullOrEmpty(name))
{
var dict = dicts.FirstOrDefault(d => d.Category == name && d.Name == "网站页脚") ?? dicts.FirstOrDefault(d => d.Category == "网站设置" && d.Name == "网站页脚");
title = dict?.Code ?? "网站标题";
}
return title;
}
public string GetWebTitle()
{
var dicts = GetAll();
var title = "网站标题";
var name = dicts.FirstOrDefault(d => d.Category == "应用程序" && d.Code == AppId)?.Name;
if (!string.IsNullOrEmpty(name))
{
var dict = dicts.FirstOrDefault(d => d.Category == name && d.Name == "网站标题") ?? dicts.FirstOrDefault(d => d.Category == "网站设置" && d.Name == "网站标题");
title = dict?.Code ?? "网站标题";
}
return title;
}
public bool IsDemo()
{
var dicts = GetAll();
var code = dicts.FirstOrDefault(d => d.Category == "网站设置" && d.Name == "演示系统" && d.Define == EnumDictDefine.System)?.Code ?? "0";
return code == "1";
}
public string RetrieveIconFolderPath()
{
var dicts = GetAll();
return dicts.FirstOrDefault(d => d.Name == "头像路径" && d.Category == "头像地址" && d.Define == EnumDictDefine.System)?.Code ?? "images/uploder/";
}
private bool SaveDict(Dict dict)
{
var ret = FreeSql.Update<Dict>().Where(s => s.Category == dict.Category && s.Name == dict.Name).Set(s => s.Code, dict.Code).ExecuteAffrows() > 0;
if (ret)
{
// 更新缓存
CacheManager.Clear(DictServiceCacheKey);
}
return ret;
}
public bool SaveCookieExpiresPeriod(int expiresPeriod) => SaveDict(new Dict { Category = "网站设置", Name = "Cookie保留时长", Code = expiresPeriod.ToString() });
public bool SaveDemo(bool isDemo) => SaveDict(new Dict { Category = "网站设置", Name = "演示系统", Define = EnumDictDefine.System, Code = isDemo ? "1" : "0" });
public bool SaveHealthCheck(bool enable = true) => SaveDict(new Dict { Category = "网站设置", Name = "演示系统", Define = EnumDictDefine.System, Code = enable ? "1" : "0" });
public bool SaveLogin(string login) => SaveDict(new Dict { Category = "网站设置", Name = "登录界面", Code = login });
public bool SaveTheme(string theme) => SaveDict(new Dict { Category = "网站设置", Name = "使用样式", Code = theme });
public bool SaveWebFooter(string footer) => SaveDict(new Dict { Category = "网站设置", Name = "网站页脚", Code = footer });
public bool SaveWebTitle(string title) => SaveDict(new Dict { Category = "网站设置", Name = "网站标题", Code = title });
private string? GetUrlByName(string appId, string dictName)
{
string? url = null;
var dicts = GetAll();
var appName = dicts.FirstOrDefault(d => d.Category == "应用程序" && d.Code == appId && d.Define == EnumDictDefine.System)?.Name;
if (!string.IsNullOrEmpty(appName))
{
url = dicts.FirstOrDefault(d => d.Category == appName && d.Name == dictName && d.Define == EnumDictDefine.Customer)?.Code;
}
return url;
}
/// <summary>
/// 通过指定 appId 获得配置首页地址
/// </summary>
/// <param name="appId"></param>
/// <returns></returns>
public string? GetHomeUrlByAppId(string appId)
{
string? url = null;
var dicts = GetAll();
// appId 为空时读取前台列表取第一个应用作为默认应用
url = dicts.FirstOrDefault(d => d.Category == "应用首页" && d.Name.Equals(appId, StringComparison.OrdinalIgnoreCase) && d.Define == EnumDictDefine.System)?.Code;
return url;
}
public bool SavDefaultApp(bool enabled)
{
throw new NotImplementedException();
}
public bool GetEnableDefaultApp()
{
throw new NotImplementedException();
}
public string GetIconFolderPath()
{
throw new NotImplementedException();
}
public string GetDefaultIcon()
{
throw new NotImplementedException();
}
}

View File

@ -0,0 +1,64 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootstrapAdmin.DataAccess.Models;
using BootstrapAdmin.Web.Core;
namespace BootStarpAdmin.DataAccess.FreeSql.Service;
class ExceptionService : IException
{
private IFreeSql FreeSql { get; }
public ExceptionService(IFreeSql freeSql) => FreeSql = freeSql;
public (IEnumerable<Error> Items, int ItemsCount) GetAll(string? searchText, ExceptionFilter filter, int pageIndex, int pageItems, List<string> sortList)
{
var items = FreeSql.Select<Error>();
if (!string.IsNullOrEmpty(searchText))
{
items.Where($"ErrorPage Like %@searchText% or Message Like %@searchText% or StackTrace Like %@searchText%", new { searchText });
}
if (!string.IsNullOrEmpty(filter.Category))
{
items.Where("Category = @Category", new { filter.Category });
}
if (!string.IsNullOrEmpty(filter.UserId))
{
items.Where("UserId Like %@UserId%", new { filter.UserId });
}
if (!string.IsNullOrEmpty(filter.ErrorPage))
{
items.Where("ErrorPage Like %{ErrorPage}%", new { filter.ErrorPage });
}
items.Where("LogTime >= @Star and LogTime <= @End", new { filter.Star, filter.End });
if (sortList.Any())
{
items.OrderBy(string.Join(", ", sortList));
}
else
{
items.OrderBy("UserId, ErrorPage, Logtime desc");
}
var errors = items.Count(out var count).Page(pageIndex, pageItems).ToList();
return (errors, Convert.ToInt32(count));
}
public bool Log(Error exception)
{
try
{
FreeSql.Insert(exception).ExecuteAffrows();
}
catch { }
return true;
}
}

View File

@ -0,0 +1,60 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootStarpAdmin.DataAccess.FreeSql.Models;
using BootstrapAdmin.DataAccess.Models;
using BootstrapAdmin.Web.Core;
namespace BootStarpAdmin.DataAccess.FreeSql.Service;
class GroupService : IGroup
{
private IFreeSql FreeSql { get; }
public GroupService(IFreeSql freeSql) => FreeSql = freeSql;
public List<Group> GetAll() => FreeSql.Select<Group>().ToList();
public List<string> GetGroupsByRoleId(string? roleId) => FreeSql.Ado.Query<string>("select GroupID from RoleGroup where RoleID = @roleId", new { roleId });
public List<string> GetGroupsByUserId(string? userId) => FreeSql.Ado.Query<string>("select GroupID from UserGroup where UserID = @userId", new { userId });
public bool SaveGroupsByRoleId(string? roleId, IEnumerable<string> groupIds)
{
var ret = false;
try
{
FreeSql.Transaction(() =>
{
FreeSql.Ado.ExecuteNonQuery("delete from RoleGroup where RoleID = @roleId", new { roleId });
FreeSql.Insert(groupIds.Select(g => new RoleGroup { GroupID = g, RoleID = roleId })).ExecuteAffrows();
ret = true;
});
}
catch (Exception)
{
throw;
}
return ret;
}
public bool SaveGroupsByUserId(string? userId, IEnumerable<string> groupIds)
{
var ret = false;
try
{
FreeSql.Transaction(() =>
{
FreeSql.Ado.ExecuteNonQuery("delete from UserGroup where UserID = @userId", new { userId });
FreeSql.Insert(groupIds.Select(g => new UserGroup { GroupID = g, UserID = userId }));
ret = true;
});
}
catch (Exception)
{
throw;
}
return ret;
}
}

View File

@ -0,0 +1,15 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootstrapAdmin.Web.Core;
namespace BootStarpAdmin.DataAccess.FreeSql.Service;
class LoginService : ILogin
{
public Task<bool> Log(string userName, bool result)
{
return Task.FromResult(true);
}
}

View File

@ -0,0 +1,42 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootStarpAdmin.DataAccess.FreeSql.Models;
using BootstrapAdmin.DataAccess.Models;
using BootstrapAdmin.Web.Core;
namespace BootStarpAdmin.DataAccess.FreeSql.Service;
class NavigationService : INavigation
{
private IFreeSql FreeSql { get; }
public NavigationService(IFreeSql freeSql) => FreeSql = freeSql;
public List<Navigation> GetAllMenus(string userName)
{
return FreeSql.Ado.Query<Navigation>($"select n.ID, n.ParentId, n.Name, n.[order], n.Icon, n.Url, n.Category, n.Target, n.IsResource, n.Application, ln.Name as ParentName from Navigations n inner join Dicts d on n.Category = d.Code and d.Category = @Category and d.Define = @Define left join Navigations ln on n.ParentId = ln.ID inner join (select nr.NavigationID from Users u inner join UserRole ur on ur.UserID = u.ID inner join NavigationRole nr on nr.RoleID = ur.RoleID where u.UserName = @UserName union select nr.NavigationID from Users u inner join UserGroup ug on u.ID = ug.UserID inner join RoleGroup rg on rg.GroupID = ug.GroupID inner join NavigationRole nr on nr.RoleID = rg.RoleID where u.UserName = @UserName union select n.ID from Navigations n where EXISTS (select UserName from Users u inner join UserRole ur on u.ID = ur.UserID inner join Roles r on ur.RoleID = r.ID where u.UserName = @UserName and r.RoleName = @RoleName)) nav on n.ID = nav.NavigationID ORDER BY n.Application, n.[order]", new { UserName = userName, Category = "菜单", RoleName = "Administrators", Define = EnumDictDefine.System });
}
public List<string> GetMenusByRoleId(string? roleId) => FreeSql.Ado.Query<string>("select NavigationID from NavigationRole where RoleID = @roleId", new { roleId });
public bool SaveMenusByRoleId(string? roleId, List<string> menuIds)
{
var ret = false;
try
{
FreeSql.Transaction(() =>
{
FreeSql.Ado.ExecuteNonQuery("delete from NavigationRole where RoleID = @roleId", new { roleId });
FreeSql.Insert(menuIds.Select(g => new NavigationRole { NavigationID = g, RoleID = roleId })).ExecuteAffrows();
ret = true;
});
}
catch (Exception)
{
throw;
}
return ret;
}
}

View File

@ -0,0 +1,84 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootStarpAdmin.DataAccess.FreeSql.Models;
using BootstrapAdmin.DataAccess.Models;
using BootstrapAdmin.Web.Core;
namespace BootStarpAdmin.DataAccess.FreeSql.Service;
class RoleService : IRole
{
private IFreeSql FreeSql { get; }
public RoleService(IFreeSql freeSql) => FreeSql = freeSql;
public List<Role> GetAll()
{
return FreeSql.Select<Role>().ToList();
}
public List<string> GetRolesByGroupId(string? groupId) => FreeSql.Ado.Query<string>("select RoleID from RoleGroup where GroupID = @groupId", new { groupId });
public List<string> GetRolesByMenuId(string? menuId) => FreeSql.Ado.Query<string>("select RoleID from NavigationRole where NavigationID = @menuId", new { menuId });
public List<string> GetRolesByUserId(string? userId) => FreeSql.Ado.Query<string>("select RoleID from UserRole where UserID = @userId", new { userId });
public bool SaveRolesByGroupId(string? groupId, IEnumerable<string> roleIds)
{
var ret = false;
try
{
FreeSql.Transaction(() =>
{
FreeSql.Ado.ExecuteNonQuery("delete from RoleGroup where GroupID = @groupId", new { groupId });
FreeSql.Insert(roleIds.Select(g => new RoleGroup { RoleID = g, GroupID = groupId })).ExecuteAffrows();
ret = true;
});
}
catch (Exception)
{
throw;
}
return ret;
}
public bool SaveRolesByMenuId(string? menuId, IEnumerable<string> roleIds)
{
var ret = false;
try
{
FreeSql.Transaction(() =>
{
FreeSql.Ado.ExecuteNonQuery("delete from NavigationRole where NavigationID = @menuId", new { menuId });
FreeSql.Insert(roleIds.Select(g => new NavigationRole { RoleID = g, NavigationID = menuId })).ExecuteAffrows();
ret = true;
});
}
catch (Exception)
{
throw;
}
return ret;
}
public bool SaveRolesByUserId(string? userId, IEnumerable<string> roleIds)
{
var ret = false;
try
{
FreeSql.Transaction(() =>
{
FreeSql.Ado.ExecuteNonQuery("delete from UserRole where UserID = @userId", new { userId });
FreeSql.Insert(roleIds.Select(g => new UserRole { RoleID = g, UserID = userId })).ExecuteAffrows();
});
ret = true;
}
catch (Exception)
{
throw;
}
return ret;
}
}

View File

@ -0,0 +1,230 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootStarpAdmin.DataAccess.FreeSql.Models;
using BootstrapAdmin.DataAccess.Models;
using BootstrapAdmin.Web.Core;
using Longbow.Security.Cryptography;
namespace BootStarpAdmin.DataAccess.FreeSql.Service;
class UserService : IUser
{
private IFreeSql FreeSql { get; }
public UserService(IFreeSql freeSql) => FreeSql = freeSql;
public bool Authenticate(string userName, string password)
{
var user = FreeSql.Select<User>().Where(s => s.ApprovedTime != null && s.UserName == userName).ToOne(s => new User
{
DisplayName = s.DisplayName,
PassSalt = s.PassSalt,
Password = s.Password
});
var isAuth = false;
if (user != null && !string.IsNullOrEmpty(user.PassSalt))
{
isAuth = user.Password == LgbCryptography.ComputeHash(password, user.PassSalt);
}
return isAuth;
}
public List<User> GetAll()
{
return FreeSql.Select<User>().ToList();
}
public List<string> GetApps(string userName)
{
return FreeSql.Ado.Query<string>($"select d.Code from Dicts d inner join RoleApp ra on d.Code = ra.AppId inner join (select r.Id from Roles r inner join UserRole ur on r.ID = ur.RoleID inner join Users u on ur.UserID = u.ID where u.UserName = @UserName union select r.Id from Roles r inner join RoleGroup rg on r.ID = rg.RoleID inner join Groups g on rg.GroupID = g.ID inner join UserGroup ug on ug.GroupID = g.ID inner join Users u on ug.UserID = u.ID where u.UserName = @UserName) r on ra.RoleId = r.ID union select Code from Dicts where Category = @Category and exists(select r.ID from Roles r inner join UserRole ur on r.ID = ur.RoleID inner join Users u on ur.UserID = u.ID where u.UserName = @UserName and r.RoleName = @RoleName union select r.ID from Roles r inner join RoleGroup rg on r.ID = rg.RoleID inner join Groups g on rg.GroupID = g.ID inner join UserGroup ug on ug.GroupID = g.ID inner join Users u on ug.UserID = u.ID where u.UserName = @UserName and r.RoleName = @RoleName)", new { UserName = userName, Category = "应用程序", RoleName = "Administrators" }).ToList();
}
/// <summary>
/// 通过用户名获得指定的前台 AppId
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
public string? GetAppIdByUserName(string userName) => FreeSql.Select<User>().Where(s => s.UserName == userName).ToOne(s => s.App);
public string? GetDisplayName(string? userName)
{
return FreeSql.Select<User>().Where(s => s.UserName == userName).ToOne(s => s.DisplayName);
}
public List<string> GetRoles(string userName)
{
return FreeSql.Ado.Query<string>($"select r.RoleName from Roles r inner join UserRole ur on r.ID=ur.RoleID inner join Users u on ur.UserID = u.ID and u.UserName = @userName union select r.RoleName from Roles r inner join RoleGroup rg on r.ID = rg.RoleID inner join Groups g on rg.GroupID = g.ID inner join UserGroup ug on ug.GroupID = g.ID inner join Users u on ug.UserID = u.ID and u.UserName = @userName", new { userName }).ToList();
}
public User? GetUserByUserName(string? userName) => string.IsNullOrEmpty(userName) ? null : FreeSql.Select<User>().Where(i => i.UserName == userName).ToOne();
public List<string> GetUsersByGroupId(string? groupId)
{
return FreeSql.Ado.Query<string>("select UserID from UserGroup where GroupID = @groupId", new { groupId }).ToList();
}
public List<string> GetUsersByRoleId(string? roleId)
{
return FreeSql.Ado.Query<string>("select UserID from UserRole where RoleID = @roleId", new { roleId }).ToList();
}
public bool SaveUser(string userName, string displayName, string password)
{
var salt = LgbCryptography.GenerateSalt();
var pwd = LgbCryptography.ComputeHash(password, salt);
var user = FreeSql.Select<User>().Where(s => s.UserName == userName).ToOne();
bool ret = default;
if (user == null)
{
// 开始事务
FreeSql.Transaction(() =>
{
user = new User()
{
Id = "0",
ApprovedBy = "System",
ApprovedTime = DateTime.Now,
DisplayName = "手机用户",
UserName = userName,
Icon = "default.jpg",
Description = "系统默认创建",
PassSalt = salt,
Password = pwd
};
FreeSql.Insert(user).ExecuteAffrows();
// 授权 Default 角色
FreeSql.Ado.ExecuteNonQuery("insert into UserRole (UserID, RoleID) select ID, (select ID from Roles where RoleName = 'Default') RoleId from Users where UserName = @userName", new { userName });
ret = true;
});
}
else
{
user.DisplayName = displayName;
user.PassSalt = salt;
user.Password = pwd;
FreeSql.Update<User>(user);
ret = true;
}
return ret;
}
public bool SaveUsersByGroupId(string? groupId, IEnumerable<string> userIds)
{
var ret = false;
try
{
FreeSql.Transaction(() =>
{
FreeSql.Ado.ExecuteNonQuery("delete from UserGroup where GroupId = @groupId", new { groupId });
FreeSql.Insert(userIds.Select(g => new UserGroup { UserID = g, GroupID = groupId })).ExecuteAffrows();
});
ret = true;
}
catch (Exception)
{
throw;
}
return ret;
}
public bool SaveUsersByRoleId(string? roleId, IEnumerable<string> userIds)
{
var ret = false;
try
{
FreeSql.Transaction(() =>
{
FreeSql.Ado.ExecuteNonQuery("delete from UserRole where RoleID = @roleId", new { roleId });
FreeSql.Insert(userIds.Select(g => new UserRole { UserID = g, RoleID = roleId })).ExecuteAffrows();
ret = true;
});
}
catch (Exception)
{
throw;
}
return ret;
}
/// <summary>
///
/// </summary>
/// <param name="phone"></param>
/// <param name="code"></param>
/// <param name="appId"></param>
/// <param name="roles"></param>
/// <returns></returns>
public bool TryCreateUserByPhone(string phone, string code, string appId, ICollection<string> roles)
{
var ret = false;
try
{
var salt = LgbCryptography.GenerateSalt();
var pwd = LgbCryptography.ComputeHash(code, salt);
var user = FreeSql.Select<User>().Where(s => s.UserName == phone).ToOne();
if (user == null)
{
FreeSql.Transaction(() =>
{
user = new User()
{
ApprovedBy = "Mobile",
ApprovedTime = DateTime.Now,
DisplayName = "手机用户",
UserName = phone,
Icon = "default.jpg",
Description = "手机用户",
PassSalt = salt,
Password = LgbCryptography.ComputeHash(code, salt),
App = appId
};
FreeSql.Insert(user).ExecuteAffrows();
// Authorization
var roleIds = FreeSql.Ado.Query<string>("select ID from Roles where RoleName in (@roles)", new { roles });
FreeSql.Insert(roleIds.Select(g => new UserRole { RoleID = g, UserID = user.Id }));
});
}
else
{
user.PassSalt = salt;
user.Password = pwd;
FreeSql.Update<User>(user).ExecuteAffrows();
}
ret = true;
}
catch (Exception)
{
throw;
}
return ret;
}
public bool SaveApp(string userName, string app)
{
throw new NotImplementedException();
}
public bool ChangePassword(string userName, string password, string newPassword)
{
throw new NotImplementedException();
}
public bool SaveDisplayName(string userName, string displayName)
{
throw new NotImplementedException();
}
public bool SaveTheme(string userName, string theme)
{
throw new NotImplementedException();
}
public bool SaveLogo(string userName, string? logo)
{
throw new NotImplementedException();
}
}

View File

@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="BootstrapBlazor" Version="6.2.9-beta07" />
<PackageReference Include="SqlSugarCore" Version="5.0.5.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\BootstrapAdmin.Web.Core\BootstrapAdmin.Web.Core.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,47 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootStarpAdmin.DataAccess.SqlSugar.Service;
using BootstrapBlazor.Components;
using Microsoft.Extensions.DependencyInjection.Extensions;
using SqlSugar;
namespace Microsoft.Extensions.DependencyInjection;
/// <summary>
/// FreeSql ORM 注入服务扩展类
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// 注入 FreeSql 数据服务类
/// </summary>
/// <param name="services"></param>
/// <param name="sqlSugarBuilder"></param>
/// <returns></returns>
public static IServiceCollection AddSqlSugar(this IServiceCollection services, Action<IServiceProvider, ConnectionConfig> sqlSugarBuilder)
{
services.TryAddSingleton<ISqlSugarClient>(provider =>
{
var builder = new ConnectionConfig();
builder.IsAutoCloseConnection = true;
sqlSugarBuilder(provider, builder);
return new SqlSugarClient(builder);
});
// 增加数据服务
services.AddSingleton(typeof(IDataService<>), typeof(DefaultDataService<>));
// 增加业务服务
//services.AddSingleton<IApp, AppService>();
//services.AddSingleton<IDict, DictService>();
//services.AddSingleton<IException, ExceptionService>();
//services.AddSingleton<IGroup, GroupService>();
//services.AddSingleton<ILogin, LoginService>();
//services.AddSingleton<INavigation, NavigationService>();
//services.AddSingleton<IRole, RoleService>();
//services.AddSingleton<IUser, UserService>();
return services;
}
}

View File

@ -0,0 +1,10 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
namespace BootStarpAdmin.DataAccess.SqlSugar.Extensions;
static class SqlSugarExtensions
{
}

View File

@ -0,0 +1,69 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootstrapBlazor.Components;
using SqlSugar;
namespace BootStarpAdmin.DataAccess.SqlSugar.Service;
class DefaultDataService<TModel> : DataServiceBase<TModel> where TModel : class, new()
{
private ISqlSugarClient Client { get; }
public DefaultDataService(ISqlSugarClient client) => Client = client;
/// <summary>
/// 删除方法
/// </summary>
/// <param name="models"></param>
/// <returns></returns>
public override async Task<bool> DeleteAsync(IEnumerable<TModel> models)
{
await Client.Deleteable<TModel>(models).ExecuteCommandAsync();
return true;
}
/// <summary>
/// 保存方法
/// </summary>
/// <param name="model"></param>
/// <param name="changedType"></param>
/// <returns></returns>
public override async Task<bool> SaveAsync(TModel model, ItemChangedType changedType)
{
if (changedType == ItemChangedType.Add)
{
await Client.Insertable<TModel>(model).ExecuteCommandAsync();
}
else if (changedType == ItemChangedType.Update)
{
await Client.Updateable<TModel>(model).ExecuteCommandAsync();
}
return true;
}
public override Task<QueryData<TModel>> QueryAsync(QueryPageOptions option)
{
var ret = new QueryData<TModel>()
{
IsSorted = true,
IsFiltered = true,
IsSearch = true,
IsAdvanceSearch = option.AdvanceSearchs.Any() || option.CustomerSearchs.Any()
};
if (option.IsPage)
{
var count = 0;
ret.Items = Client.Queryable<TModel>()
.ToPageList(option.PageIndex, option.PageItems, ref count);
ret.TotalCount = count;
}
else
{
ret.Items = Client.Queryable<TModel>()
.ToList();
}
return Task.FromResult(ret);
}
}

View File

@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.0" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,38 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootstrapAdmin.Caching.Services;
using Microsoft.Extensions.Caching.Memory;
namespace BootstrapAdmin.Caching;
/// <summary>
/// 缓存管理类
/// </summary>
public static class CacheManager
{
[NotNull]
private static ICacheManager? Cache { get; set; }
/// <summary>
/// 由服务调用
/// </summary>
/// <param name="cache"></param>
internal static void Init(ICacheManager cache) => Cache = cache;
/// <summary>
/// 获得或者新建数据
/// </summary>
/// <typeparam name="TItem"></typeparam>
/// <param name="key"></param>
/// <param name="valueFactory"></param>
/// <returns></returns>
public static TItem GetOrAdd<TItem>(string key, Func<ICacheEntry, TItem> valueFactory) => Cache.GetOrAdd(key, valueFactory);
/// <summary>
/// 清除指定键值缓存项
/// </summary>
/// <param name="key"></param>
public static void Clear(string? key = null) => Cache.Clear(key);
}

View File

@ -0,0 +1,34 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootstrapAdmin.Caching;
using BootstrapAdmin.Caching.Services;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection.Extensions;
namespace Microsoft.Extensions.DependencyInjection;
/// <summary>
///
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// 注入 ICacheManager 服务
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection AddCacheManager(this IServiceCollection services)
{
services.AddMemoryCache();
services.TryAddSingleton<ICacheManager>(provider =>
{
var cache = provider.GetRequiredService<IMemoryCache>();
var cacheManager = new DefaultCacheManager(cache);
CacheManager.Init(cacheManager);
return cacheManager;
});
return services;
}
}

View File

@ -0,0 +1,37 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using Microsoft.Extensions.Caching.Memory;
namespace BootstrapAdmin.Caching;
/// <summary>
/// CacheManager 接口类
/// </summary>
public interface ICacheManager
{
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="factory"></param>
/// <returns></returns>
T GetOrAdd<T>(string key, Func<ICacheEntry, T> factory);
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="factory"></param>
/// <returns></returns>
Task<T> GetOrAddAsync<T>(string key, Func<ICacheEntry, Task<T>> factory);
/// <summary>
///
/// </summary>
/// <param name="key"></param>
void Clear(string? key = null);
}

View File

@ -0,0 +1,79 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Primitives;
namespace BootstrapAdmin.Caching.Services;
class DefaultCacheManager : ICacheManager
{
[NotNull]
private IMemoryCache? Cache { get; set; }
/// <summary>
///
/// </summary>
public DefaultCacheManager(IMemoryCache cache) => Cache = cache;
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="factory"></param>
/// <returns></returns>
public T GetOrAdd<T>(string key, Func<ICacheEntry, T> factory) => Cache.GetOrCreate(key, entry =>
{
HandlerEntry(key, entry);
return factory(entry);
});
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="factory"></param>
/// <returns></returns>
public Task<T> GetOrAddAsync<T>(string key, Func<ICacheEntry, Task<T>> factory) => Cache.GetOrCreate(key, entry =>
{
HandlerEntry(key, entry);
return factory(entry);
});
private static void HandlerEntry(string key, ICacheEntry entry, IChangeToken? token = null)
{
if (token != null)
{
entry.AddExpirationToken(token);
}
// 内置缓存策略 缓存相对时间 10 分钟
if (entry.AbsoluteExpiration == null && entry.SlidingExpiration == null && !entry.ExpirationTokens.Any())
{
#if DEBUG
entry.SlidingExpiration = TimeSpan.FromMilliseconds(100);
#else
entry.SlidingExpiration = TimeSpan.FromMinutes(10);
#endif
}
entry.RegisterPostEvictionCallback((key, value, reason, state) =>
{
});
}
public void Clear(string? key)
{
if (!string.IsNullOrEmpty(key))
{
Cache.Remove(key);
}
else if (Cache is MemoryCache c)
{
c.Compact(100);
}
}
}

View File

@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="BootstrapBlazor" Version="6.2.9-beta07" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\BootstrapAdmin.Caching\BootstrapAdmin.Caching.csproj" />
<ProjectReference Include="..\BootstrapAdmin.Web.Core\BootstrapAdmin.Web.Core.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,95 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootstrapAdmin.DataAccess.EFCore.Models;
using BootstrapAdmin.DataAccess.Models;
using Microsoft.EntityFrameworkCore;
namespace BootstrapAdmin.DataAccess.EFCore
{
/// <summary>
///
/// </summary>
public class BootstrapAdminContext : DbContext
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="options"></param>
public BootstrapAdminContext(DbContextOptions<BootstrapAdminContext> options) : base(options)
{
}
/// <summary>
///
/// </summary>
[NotNull]
public DbSet<Dict>? Dicts { get; set; }
/// <summary>
///
/// </summary>
[NotNull]
public DbSet<User>? Users { get; set; }
/// <summary>
///
/// </summary>
[NotNull]
public DbSet<Role>? Roles { get; set; }
/// <summary>
///
/// </summary>
[NotNull]
public DbSet<UserRole>? UserRole { get; set; }
/// <summary>
///
/// </summary>
[NotNull]
public DbSet<Navigation>? Navigations { get; set; }
/// <summary>
///
/// </summary>
[NotNull]
public DbSet<NavigationRole>? NavigationRole { get; set; }
/// <summary>
///
/// </summary>
[NotNull]
public DbSet<Group>? Groups { get; set; }
/// <summary>
///
/// </summary>
[NotNull]
public DbSet<UserGroup>? UserGroup { get; set; }
/// <summary>
///
/// </summary>
[NotNull]
public DbSet<RoleGroup>? RoleGroup { get; set; }
/// <summary>
///
/// </summary>
[NotNull]
public DbSet<RoleApp>? RoleApp { get; set; }
/// <summary>
///
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
EntityConfiguration.Configure(modelBuilder);
}
}
}

View File

@ -0,0 +1,62 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootstrapAdmin.DataAccess.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Microsoft.EntityFrameworkCore.ValueGeneration;
namespace BootstrapAdmin.DataAccess.EFCore;
/// <summary>
///
/// </summary>
public static class EntityConfiguration
{
/// <summary>
///
/// </summary>
/// <param name="builder"></param>
public static void Configure(this ModelBuilder builder)
{
var converter = new ValueConverter<string?, int>(
v => Convert.ToInt32(v),
v => v.ToString(),
new ConverterMappingHints(valueGeneratorFactory: (p, t) => new GuidStringGenerator()));
builder.Entity<User>().ToTable("Users");
builder.Entity<User>().Ignore(u => u.Period);
builder.Entity<User>().Ignore(u => u.NewPassword);
builder.Entity<User>().Ignore(u => u.ConfirmPassword);
builder.Entity<User>().Ignore(u => u.IsReset);
builder.Entity<User>().Property(s => s.Id).HasConversion(converter).ValueGeneratedOnAdd();
builder.Entity<Role>().ToTable("Roles");
builder.Entity<Role>().Property(s => s.Id).HasConversion(converter).ValueGeneratedOnAdd();
builder.Entity<Navigation>().ToTable("Navigations");
builder.Entity<Navigation>().Property(s => s.Id).HasConversion(converter!).ValueGeneratedOnAdd();
builder.Entity<Navigation>().Ignore(s => s.HasChildren);
builder.Entity<Dict>().ToTable("Dicts");
builder.Entity<Dict>().Property(s => s.Id).HasConversion(converter).ValueGeneratedOnAdd();
builder.Entity<Group>().ToTable("Groups");
builder.Entity<Group>().Property(s => s.Id).HasConversion(converter).ValueGeneratedOnAdd();
builder.Entity<Error>().ToTable("Exceptions");
builder.Entity<LoginLog>().ToTable("LoginLogs");
builder.Entity<Trace>().ToTable("Traces");
}
}
internal class GuidStringGenerator : ValueGenerator
{
public override bool GeneratesTemporaryValues => false;
protected override object? NextValue(EntityEntry entry) => "0";
}

View File

@ -0,0 +1,62 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the LGPL License, Version 3.0. See License.txt in the project root for license information.
// Website: https://admin.blazor.zone
using BootstrapAdmin.DataAccess.EFCore;
using BootstrapAdmin.DataAccess.EFCore.Services;
using BootstrapAdmin.Web.Core;
using BootstrapBlazor.Components;
using Microsoft.EntityFrameworkCore;
namespace Microsoft.Extensions.DependencyInjection;
/// <summary>
///
/// </summary>
public static class ServicesExtensions
{
/// <summary>
///
/// </summary>
/// <param name="services"></param>
/// <param name="optionConfigure"></param>
/// <param name="lifetime"></param>
/// <returns></returns>
public static IServiceCollection AddEFCoreDataAccessServices(this IServiceCollection services, Action<IServiceProvider, DbContextOptionsBuilder> optionConfigure, ServiceLifetime lifetime = ServiceLifetime.Singleton)
{
services.AddDbContextFactory<BootstrapAdminContext>(optionConfigure, lifetime);
services.AddServices();
return services;
}
/// <summary>
///
/// </summary>
/// <param name="services"></param>
/// <param name="optionConfigure"></param>
/// <param name="lifetime"></param>
/// <returns></returns>
public static IServiceCollection AddEFCoreDataAccessServices(this IServiceCollection services, Action<DbContextOptionsBuilder> optionConfigure, ServiceLifetime lifetime = ServiceLifetime.Singleton)
{
services.AddDbContextFactory<BootstrapAdminContext>(optionConfigure, lifetime);
services.AddServices();
return services;
}
private static IServiceCollection AddServices(this IServiceCollection services)
{
// 增加数据服务
services.AddSingleton(typeof(IDataService<>), typeof(DefaultDataService<>));
// 增加缓存服务
services.AddCacheManager();
services.AddSingleton<INavigation, NavigationService>();
services.AddSingleton<IDict, DictService>();
services.AddSingleton<IUser, UserService>();
services.AddSingleton<IRole, RoleService>();
services.AddSingleton<IGroup, GroupService>();
services.AddSingleton<ILogin, LoginService>();
return services;
}
}

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